Name: series-workflowzc2qb Phase: Succeeded StartedAt: 2026-07-18 01:13:35 +0000 UTC FinishedAt: 2026-07-18 05:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[0] Phase: Succeeded StartedAt: 2026-07-18 01:13:35 +0000 UTC FinishedAt: 2026-07-18 01:40:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[0].run-triage Phase: Succeeded StartedAt: 2026-07-18 01:13:35 +0000 UTC FinishedAt: 2026-07-18 01:40:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5093dba1014c1d7f7e247fd118f0fa8f22136046", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_KUNIT_TEST", "DAMON_VADDR_KUNIT_TEST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5093dba1014c1d7f7e247fd118f0fa8f22136046", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_KUNIT_TEST", "DAMON_VADDR_KUNIT_TEST" ], "series_id": "bd2768f7-37c1-4a93-9b42-1bcac321acdd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_new_scheme", "damon_pa_invalid_damos_folio", "damos_va_stat_pmd_entry" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX0tVTklUX1RFU1QmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFJfS1VOSVRfVEVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX25ld19zY2hlbWUmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyYjMzQ7LAogICAgJiMzNDtkYW1vc192YV9zdGF0X3BtZF9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGBsYXN0X2FwcGxpZWRgIGluIGBkYW1vbl9uZXdfc2NoZW1lYCB3aGljaCBjb3VsZCBsZWFkIHRvIHJhbmRvbSBmb2xpb3MgYmVpbmcgaW5jb3JyZWN0bHkgc2tpcHBlZCBhbmQgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBkcm9wcGVkIGluIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCBhbmQgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gLiBJdCBhbHNvIGFkZHMgc2FmZXR5IGNoZWNrcyB0byBEQU1PTiBrdW5pdCB0ZXN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdiYzBiMTA3NDM2ODcwYzQ1ZDMzZTMyZGE5NTkzYmI5N2FiNGMyOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMTozNjoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDYwM2IxMDJmZjgwZjljLi4yMGQyNjdjNjE1ZmFmYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtNzA1LDYgJiM0Mzs3MDUsNyBAQCBzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZW9wc19maWx0ZXJzKTtcbiBcdHNjaGVtZS1cdTAwM2VzdGF0ID0gKHN0cnVjdCBkYW1vc19zdGF0KXt9O1xuIFx0c2NoZW1lLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgPSAwO1xuJiM0MztcdHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWxpc3QpO1xuIFxuIFx0c2NoZW1lLVx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBlYmE2NDM3NjIxMzJmNy4uNGE1MzZkNDFjZGIyZDAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTE1NSw2ICYjNDM7MTU1LDEwIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0ci1cdTAwM2VhZ2UgPSAxMDtcbiBcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgMjUpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAyKTtcbiYjNDM7XHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSAyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuc3RhcnQsIDB1bCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5lbmQsIDI1dWwpO1xuIFxuQEAgLTE2Niw2ICYjNDM7MTcwLDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgcl9uZXctXHUwMDNlYWdlKTtcbiBcbiYjNDM7b3V0OlxuIFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XG4gfVxuIFxuQEAgLTgzNCw2ICYjNDM7ODM5LDcgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsLCAqbmV4dDtcbiBcdGJvb2wgc2tpcCA9IHRydWU7XG4gXHRpbnQgaTtcbiYjNDM7XHRpbnQgbnJfZHN0ID0gMCwgbnJfc3JjID0gMDtcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRzdC5nb2Fscyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzcmMuZ29hbHMpO1xuQEAgLTg1Niw2ICYjNDM7ODYyLDE0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXG4gXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2ZHN0LCBcdTAwMjZzcmMpO1xuIFxuJiM0MztcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2ZHN0KVxuJiM0MztcdFx0bnJfZHN0JiM0MzsmIzQzOztcbiYjNDM7XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNnNyYylcbiYjNDM7XHRcdG5yX3NyYyYjNDM7JiM0Mzs7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdCwgbnJfc3JjKTtcbiYjNDM7XHRpZiAobnJfZHN0ICE9IG5yX3NyYylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdGkgPSAwO1xuIFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCAoXHUwMDI2ZHN0KSkge1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZ29hbC1cdTAwM2VtZXRyaWMsIHNyY19nb2Fsc1tpXS5tZXRyaWMpO1xuQEAgLTEwMDMsNiAmIzQzOzEwMTcsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuIFx0c2tpcCA9IGZhbHNlO1xuIFxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5ucl9kZXN0cywgc3JjX25yX2Rlc3RzKTtcbiYjNDM7XHRpZiAoZHN0Lm5yX2Rlc3RzICE9IHNyY19ucl9kZXN0cylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHN0Lm5yX2Rlc3RzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0Lm5vZGVfaWRfYXJyW2ldLCBzcmNfbm9kZV9pZF9hcnJbaV0pO1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LndlaWdodF9hcnJbaV0sIHNyY193ZWlnaHRfYXJyW2ldKTtcbkBAIC0xMjYxLDE0ICYjNDM7MTI3NywxOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3NyYyB0YXJnZXQgc2V0dXAgZmFpbFwmIzM0Oyk7XG4gXHR9XG4gXHRkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7XG4mIzQzO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKGRzdF90YXJnZXQpLCBucl9leHBlY3RfcmVnaW9ucyk7XG4mIzQzO1x0aWYgKGRhbW9uX25yX3JlZ2lvbnMoZHN0X3RhcmdldCkgIT0gbnJfZXhwZWN0X3JlZ2lvbnMpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRpID0gMDtcbiBcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCBkc3RfdGFyZ2V0KSB7XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCBleHBlY3Rfc3RhcnRfZW5kW2ldWzBdKTtcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCBleHBlY3Rfc3RhcnRfZW5kW2ldWzFdKTtcbiBcdFx0aSYjNDM7JiM0Mzs7XG4gXHR9XG4tXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xuLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGksIG5yX2V4cGVjdF9yZWdpb25zKTtcbiYjNDM7XG4mIzQzO291dDpcbiBcdGRhbW9uX2ZyZWVfdGFyZ2V0KGRzdF90YXJnZXQpO1xuIFx0ZGFtb25fZnJlZV90YXJnZXQoc3JjX3RhcmdldCk7XG4gfVxuQEAgLTEzNjAsNiAmIzQzOzEzODEsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2ZpbHRlcl9vdXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuc3RhcnQsIDEpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCAyKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAyKTtcbiYjNDM7XHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSAyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXHRyMiA9IGRhbW9uX25leHRfcmVnaW9uKHIpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHIyLVx1MDAzZWFyLnN0YXJ0LCAyKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi1cdTAwM2Vhci5lbmQsIDQpO1xuQEAgLTEzNzQsMTEgJiM0MzsxMzk3LDE0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5zdGFydCwgMik7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5lbmQsIDYpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDIpO1xuJiM0MztcdGlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IDIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdHIyID0gZGFtb25fbmV4dF9yZWdpb24ocik7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcjItXHUwMDNlYXIuc3RhcnQsIDYpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHIyLVx1MDAzZWFyLmVuZCwgOCk7XG4gXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyMiwgdCk7XG4gXG4mIzQzO291dDpcbiBcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuIFx0ZGFtb3NfZnJlZV9maWx0ZXIoZik7XG4gfVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oXG5pbmRleCA2MWY4NDQzMzZmZmI1MC4uNmE5NTQ0MWQxOTNhZWIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oXG5AQCAtMTU4LDEyICYjNDM7MTU4LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX3Rlc3RfYXBwbHlfdGhyZWVfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c2Vjb25kIGRhbW9uX3NldF9yZWdpb25zKCkgZmFpbFwmIzM0Oyk7XG4gXHR9XG4gXG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIG5yX2V4cGVjdGVkIC8gMik7XG4mIzQzO1x0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gbnJfZXhwZWN0ZWQgLyAyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZXhwZWN0ZWQgLyAyOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyID0gX19udGhfcmVnaW9uX29mKHQsIGkpO1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5zdGFydCwgZXhwZWN0ZWRbaSAqIDJdKTtcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCBleHBlY3RlZFtpICogMiAmIzQzOyAxXSk7XG4gXHR9XG4gXG4mIzQzO291dDpcbiBcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9LVU5JVF9URVNUJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSX0tVTklUX1RFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8mIzM0OywKICAgICYjMzQ7ZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBgbGFzdF9hcHBsaWVkYCBpbiBgZGFtb25fbmV3X3NjaGVtZWAgd2hpY2ggY291bGQgbGVhZCB0byByYW5kb20gZm9saW9zIGJlaW5nIGluY29ycmVjdGx5IHNraXBwZWQgYW5kIHRoZWlyIHJlZmVyZW5jZSBjb3VudHMgZHJvcHBlZCBpbiBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AgYW5kIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYC4gSXQgYWxzbyBhZGRzIHNhZmV0eSBjaGVja3MgdG8gREFNT04ga3VuaXQgdGVzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdiYzBiMTA3NDM2ODcwYzQ1ZDMzZTMyZGE5NTkzYmI5N2FiNGMyOWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxOCAwMTozNjoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2MDNiMTAyZmY4MGY5Yy4uMjBkMjY3YzYxNWZhZmIgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTcwNSw2ICYjNDM7NzA1LDcgQEAgc3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybiwKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3NjaGVtZS0mZ3Q7b3BzX2ZpbHRlcnMpOwogCXNjaGVtZS0mZ3Q7c3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTsKIAlzY2hlbWUtJmd0O21heF9ucl9zbmFwc2hvdHMgPSAwOwomIzQzOwlzY2hlbWUtJmd0O2xhc3RfYXBwbGllZCA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtzY2hlbWUtJmd0O2xpc3QpOwogCiAJc2NoZW1lLSZndDtxdW90YSA9ICooZGFtb3NfcXVvdGFfaW5pdChxdW90YSkpOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCmluZGV4IGViYTY0Mzc2MjEzMmY3Li40YTUzNmQ0MWNkYjJkMCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtMTU1LDYgJiM0MzsxNTUsMTAgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJci0mZ3Q7YWdlID0gMTA7CiAJZGFtb25fYWRkX3JlZ2lvbihyLCB0KTsKIAlkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgMjUpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMik7CiYjNDM7CWlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IDIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuc3RhcnQsIDB1bCk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLmVuZCwgMjV1bCk7CiAKQEAgLTE2Niw2ICYjNDM7MTcwLDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2xhc3RfbnJfYWNjZXNzZXMsIHJfbmV3LSZndDtsYXN0X25yX2FjY2Vzc2VzKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YWdlLCByX25ldy0mZ3Q7YWdlKTsKIAomIzQzO291dDoKIAlkYW1vbl9mcmVlX3RhcmdldCh0KTsKIH0KIApAQCAtODM0LDYgJiM0Mzs4MzksNyBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsLCAqbmV4dDsKIAlib29sIHNraXAgPSB0cnVlOwogCWludCBpOwomIzQzOwlpbnQgbnJfZHN0ID0gMCwgbnJfc3JjID0gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZHN0LmdvYWxzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3NyYy5nb2Fscyk7CkBAIC04NTYsNiAmIzQzOzg2MiwxNCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCiAJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCZhbXA7ZHN0LCAmYW1wO3NyYyk7CiAKJiM0MzsJZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCAmYW1wO2RzdCkKJiM0MzsJCW5yX2RzdCYjNDM7JiM0Mzs7CiYjNDM7CWRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgJmFtcDtzcmMpCiYjNDM7CQlucl9zcmMmIzQzOyYjNDM7OwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0LCBucl9zcmMpOwomIzQzOwlpZiAobnJfZHN0ICE9IG5yX3NyYykKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWkgPSAwOwogCWRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgKCZhbXA7ZHN0KSkgewogCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZ29hbC0mZ3Q7bWV0cmljLCBzcmNfZ29hbHNbaV0ubWV0cmljKTsKQEAgLTEwMDMsNiAmIzQzOzEwMTcsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCXNraXAgPSBmYWxzZTsKIAogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QubnJfZGVzdHMsIHNyY19ucl9kZXN0cyk7CiYjNDM7CWlmIChkc3QubnJfZGVzdHMgIT0gc3JjX25yX2Rlc3RzKQomIzQzOwkJZ290byBvdXQ7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGRzdC5ucl9kZXN0czsgaSYjNDM7JiM0MzspIHsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5ub2RlX2lkX2FycltpXSwgc3JjX25vZGVfaWRfYXJyW2ldKTsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC53ZWlnaHRfYXJyW2ldLCBzcmNfd2VpZ2h0X2FycltpXSk7CkBAIC0xMjYxLDE0ICYjNDM7MTI3NywxOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7c3JjIHRhcmdldCBzZXR1cCBmYWlsJiMzNDspOwogCX0KIAlkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7CiYjNDM7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKGRzdF90YXJnZXQpLCBucl9leHBlY3RfcmVnaW9ucyk7CiYjNDM7CWlmIChkYW1vbl9ucl9yZWdpb25zKGRzdF90YXJnZXQpICE9IG5yX2V4cGVjdF9yZWdpb25zKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaSA9IDA7CiAJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIGRzdF90YXJnZXQpIHsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLnN0YXJ0LCBleHBlY3Rfc3RhcnRfZW5kW2ldWzBdKTsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLmVuZCwgZXhwZWN0X3N0YXJ0X2VuZFtpXVsxXSk7CiAJCWkmIzQzOyYjNDM7OwogCX0KLQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSwgbnJfZXhwZWN0X3JlZ2lvbnMpOwotCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpLCBucl9leHBlY3RfcmVnaW9ucyk7CiYjNDM7CiYjNDM7b3V0OgogCWRhbW9uX2ZyZWVfdGFyZ2V0KGRzdF90YXJnZXQpOwogCWRhbW9uX2ZyZWVfdGFyZ2V0KHNyY190YXJnZXQpOwogfQpAQCAtMTM2MCw2ICYjNDM7MTM4MSw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLnN0YXJ0LCAxKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuZW5kLCAyKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMik7CiYjNDM7CWlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IDIpCiYjNDM7CQlnb3RvIG91dDsKIAlyMiA9IGRhbW9uX25leHRfcmVnaW9uKHIpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi0mZ3Q7YXIuc3RhcnQsIDIpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi0mZ3Q7YXIuZW5kLCA0KTsKQEAgLTEzNzQsMTEgJiM0MzsxMzk3LDE0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLnN0YXJ0LCAyKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuZW5kLCA2KTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMik7CiYjNDM7CWlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IDIpCiYjNDM7CQlnb3RvIG91dDsKIAlyMiA9IGRhbW9uX25leHRfcmVnaW9uKHIpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi0mZ3Q7YXIuc3RhcnQsIDYpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi0mZ3Q7YXIuZW5kLCA4KTsKIAlkYW1vbl9kZXN0cm95X3JlZ2lvbihyMiwgdCk7CiAKJiM0MztvdXQ6CiAJZGFtb25fZnJlZV90YXJnZXQodCk7CiAJZGFtb3NfZnJlZV9maWx0ZXIoZik7CiB9CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaAppbmRleCA2MWY4NDQzMzZmZmI1MC4uNmE5NTQ0MWQxOTNhZWIgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaApAQCAtMTU4LDEyICYjNDM7MTU4LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX3Rlc3RfYXBwbHlfdGhyZWVfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QsCiAJCWt1bml0X3NraXAodGVzdCwgJiMzNDtzZWNvbmQgZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsJiMzNDspOwogCX0KIAomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgbnJfZXhwZWN0ZWQgLyAyKTsKJiM0MzsJaWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gbnJfZXhwZWN0ZWQgLyAyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2V4cGVjdGVkIC8gMjsgaSYjNDM7JiM0MzspIHsKIAkJciA9IF9fbnRoX3JlZ2lvbl9vZih0LCBpKTsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLnN0YXJ0LCBleHBlY3RlZFtpICogMl0pOwogCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuZW5kLCBleHBlY3RlZFtpICogMiAmIzQzOyAxXSk7CiAJfQogCiYjNDM7b3V0OgogCWRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgREFNT04gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIGl0IHRvdWNoZXMgYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLCBhbmQgYG1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhgLiYjMzQ7IFN0YW5kYXJkIHN0dWZmLCBjb3JlIGNvZGUgYW5kIHNvbWUgS1VuaXQgdGVzdHMuCgpUaGUgYWN0dWFsIGNvcmUgY2hhbmdlIGluIGBtbS9kYW1vbi9jb3JlLmNgIGlzIGp1c3Qgb25lIGxpbmU6IGBzY2hlbWUtJmd0O2xhc3RfYXBwbGllZCA9IE5VTEw7YCDigJMgc2ltcGxlIGluaXRpYWxpemF0aW9uLiBOb3RoaW5nIGZsYXNoeS4gSXQmIzM5O3MgaW5pdGlhbGl6aW5nIGEgcG9pbnRlciwgYGxhc3RfYXBwbGllZGAsIHRvIE5VTEwgd2l0aGluIHRoZSBgZGFtb25fbmV3X3NjaGVtZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaGFzIGFueSBzdWJ0bGUgc2lkZSBlZmZlY3RzIG9yIHBvdGVudGlhbCBmb3IgZnV6emluZy4KCmBkYW1vbl9uZXdfc2NoZW1lYCB1c2VzIGBrbWFsbG9jYCB0byBhbGxvY2F0ZSBhIG5ldyBgc3RydWN0IGRhbW9zYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGlzIGBzY2hlbWUtJmd0O2xhc3RfYXBwbGllZCA9IE5VTEw7YCBsaW5lIHdpdGhpbiB0aGUgYGRhbW9uX25ld19zY2hlbWVgIGZ1bmN0aW9uIGFuZCBtb3JlIGJyb2FkbHksIGl0cyB1c2UgaW4gdGhlIERBTU9OIGZyYW1ld29yay4gRG9lcyB0aGUgYGxhc3RfYXBwbGllZGAgcG9pbnRlciBnZXQgdXBkYXRlZCBsYXRlciwgYW5kIGhvdyBpcyBpdCB1c2VkPyBEb2VzIGl0IHBvdGVudGlhbGx5IGNhdXNlIGFueSBpc3N1ZXMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBvciBjb25jdXJyZW5jeT8gSXMgaXQgaW52b2x2ZWQgaW4gYW55IGNvbnRyb2wgZmxvdyBkZWNpc2lvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsaWZlY3ljbGUgYW5kIHVzYWdlIHRvIGRldGVybWluZSBpZiB0aGlzIHNpbmdsZSBsaW5lIGhhcyBhbnkgZnVuY3Rpb25hbCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA0ND12b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0NS1cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDQ2OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0Ny1cdFx0XHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXG4tLVxubW0vZGFtb24vY29yZS5jPTY2OT1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTY4MS1cbm1tL2RhbW9uL2NvcmUuYzo2ODI6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbm1tL2RhbW9uL2NvcmUuYy02ODMtXHRcdFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNDcxPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0ODktXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MTQ5MDpcdFx0bmV3X3NjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXHUwMDI2c3JjX3NjaGVtZS1cdTAwM2VwYXR0ZXJuLFxubW0vZGFtb24vY29yZS5jLTE0OTEtXHRcdFx0XHRzcmNfc2NoZW1lLVx1MDAzZWFjdGlvbixcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTE4OD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lKFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk1LVxubW0vZGFtb24vbHJ1X3NvcnQuYzoxOTY6XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk3LVx0XHRcdC8qIGZpbmQgdGhlIHBhdHRlcm4sIGFuZCAqL1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMTgwLVxubW0vZGFtb24vcmVjbGFpbS5jOjE4MTpcdHJldHVybiBkYW1vbl9uZXdfc2NoZW1lKFxubW0vZGFtb24vcmVjbGFpbS5jLTE4Mi1cdFx0XHRcdTAwMjZwYXR0ZXJuLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTcwPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzAwNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDA4Olx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcdTAwMjZwYXR0ZXJuLCBzeXNmc19zY2hlbWUtXHUwMDNlYWN0aW9uLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMDktXHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZWFwcGx5X2ludGVydmFsX3VzLCBcdTAwMjZxdW90YSwgXHUwMDI2d21hcmtzLFxuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYz03Mz1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc2FtcGxlX210aWVyX2J1aWxkX2N0eChib29sIHByb21vdGUpXG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEzMi1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYzoxMzM6XHRzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEzNC1cdFx0XHQvKiBhY2Nlc3MgcGF0dGVybiAqL1xuLS1cbnNhbXBsZXMvZGFtb24vcHJjbC5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy04OC1cbnNhbXBsZXMvZGFtb24vcHJjbC5jOjg5Olx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTkwLVx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIGFuZCBzcGVha2luZyBmcm9tIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIFN0cnVjdCBBbGxvY2F0aW9uIGluIGBkYW1vbl9uZXdfc2NoZW1lYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgZGFtb25fbmV3X3NjaGVtZWAgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCYjMzk7cyBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBvZiBpdHMgcHJpbWFyeSBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bSBwcm9iYWJseSBpbnRlcmVzdGVkIGluIGEgZmV3IGtleSB0aGluZ3MgaGVyZS4gRmlyc3QsIGlzIGl0IHVzaW5nIGEgc3RhdGljLCBzdGFjaywgb3IgaGVhcCBhbGxvY2F0aW9uPyBTZWNvbmQsIHdoYXQmIzM5O3MgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3k/IElzIGl0IGEgc2ltcGxlIGBtYWxsb2NgIChvciBpdHMga2VybmVsIGVxdWl2YWxlbnQpIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgbGlrZSBhIGN1c3RvbSBhbGxvY2F0b3IsIG1heWJlIHVzaW5nIGEgYnVkZHkgc3lzdGVtIG9yIHNsYWIgYWxsb2NhdG9yIGZvciBlZmZpY2llbmN5PyBBbmQgdGhpcmQsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCB0aGUgYWxpZ25tZW50PyBBcmUgd2UgZGVhbGluZyB3aXRoIGFueSBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGZhbHNlIHNoYXJpbmcgb3IgcGVyZm9ybWFuY2UgcGVuYWx0aWVzIG9uIG11bHRpLWNvcmUgc3lzdGVtcywgZXNwZWNpYWxseSBpZiB0aGUgc3RydWN0IGlzIGZyZXF1ZW50bHkgYWNjZXNzZWQgb3IgbW9kaWZpZWQ/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoaXMgYWxsb2NhdGlvbiBzdHJhdGVneSBvbiBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSByaXNrcyBvZiBmcmFnbWVudGF0aW9uIG9yIG1lbW9yeSBsZWFrcyBkb3duIHRoZSBsaW5lLiBJIGFtIGxvb2tpbmcgZm9yIGEgc3VjY2luY3QgYW5kIGVmZmljaWVudCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdH1cbiA2ODE6XHRcbiA2ODI6XHRzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxuIDY4MzpcdFx0XHRcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcbiA2ODQ6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzLFxuIDY4NTpcdFx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4gNjg2Olx0XHRcdFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3MgKndtYXJrcyxcbiA2ODc6XHRcdFx0XHRpbnQgdGFyZ2V0X25pZClcbiA2ODg6XHR7XG4gNjg5Olx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbiA2OTA6XHRcbiA2OTE6XHRcdHNjaGVtZSA9IGttYWxsb2Nfb2JqKCpzY2hlbWUpO1xuIDY5MjpcdFx0aWYgKCFzY2hlbWUpXG4gNjkzOlx0XHRcdHJldHVybiBOVUxMO1xuIDY5NDpcdFx0c2NoZW1lLVx1MDAzZXBhdHRlcm4gPSAqcGF0dGVybjtcbiA2OTU6XHRcdHNjaGVtZS1cdTAwM2VhY3Rpb24gPSBhY3Rpb247XG4gNjk2Olx0XHRzY2hlbWUtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgPSBhcHBseV9pbnRlcnZhbF91cztcbiA2OTc6XHRcdC8qXG4gNjk4Olx0XHQgKiBuZXh0X2FwcGx5X3NpcyB3aWxsIGJlIHNldCB3aGVuIGtkYW1vbmQgc3RhcnRzLiAgV2hpbGUga2RhbW9uZCBpc1xuIDY5OTpcdFx0ICogcnVubmluZywgaXQgd2lsbCBhbHNvIHVwZGF0ZWQgd2hlbiBpdCBpcyBhZGRlZCB0byB0aGUgREFNT04gY29udGV4dCxcbiA3MDA6XHRcdCAqIG9yIGRhbW9uX2F0dHJzIGFyZSB1cGRhdGVkLlxuIDcwMTpcdFx0ICovXG4gNzAyOlx0XHRzY2hlbWUtXHUwMDNlbmV4dF9hcHBseV9zaXMgPSAwO1xuIDcwMzpcdFx0c2NoZW1lLVx1MDAzZXdhbGtfY29tcGxldGVkID0gZmFsc2U7XG4gNzA0Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlY29yZV9maWx0ZXJzKTtcbiA3MDU6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjaGVtZS1cdTAwM2VvcHNfZmlsdGVycyk7XG4gNzA2Olx0XHRzY2hlbWUtXHUwMDNlc3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTtcbiA3MDc6XHRcdHNjaGVtZS1cdTAwM2VtYXhfbnJfc25hcHNob3RzID0gMDtcbiA3MDg6XHRcdHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xuIDcwOTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWxpc3QpO1xuIDcxMDpcdFxuIDcxMTpcdFx0c2NoZW1lLVx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XG4gNzEyOlx0XHQvKiBxdW90YS5nb2FscyBzaG91bGQgYmUgc2VwYXJhdGVseSBzZXQgYnkgY2FsbGVyICovXG4gNzEzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlcXVvdGEuZ29hbHMpO1xuIDcxNDpcdFxuIDcxNTpcdFx0c2NoZW1lLVx1MDAzZXdtYXJrcyA9ICp3bWFya3M7XG4gNzE2Olx0XHRzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZCA9IHRydWU7XG4gNzE3Olx0XG4gNzE4Olx0XHRzY2hlbWUtXHUwMDNlbWlncmF0ZV9kZXN0cyA9IChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyl7fTtcbiA3MTk6XHRcdHNjaGVtZS1cdTAwM2V0YXJnZXRfbmlkID0gdGFyZ2V0X25pZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjc1CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRlY29uc3RydWN0aW5nIGBrbWFsbG9jX29iamAgYW5kIFVucmF2ZWxpbmcgYSBQb3RlbnRpYWwgQnVnKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoaXMgYGttYWxsb2Nfb2JqKCpzY2hlbWUpYC4uLiB0aGF0IGxvb2tzIHN1c3BpY2lvdXNseSBsaWtlIGEgbWFjcm8gb3Igd3JhcHBlciBhcm91bmQgYGttYWxsb2NgLiBJdCYjMzk7cyBsaWtlbHkgdHJ5aW5nIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGBzY2hlbWVgIHN0cnVjdHVyZS4gIEkmIzM5O20gYmV0dGluZyBpdCYjMzk7cyBzb21ldGhpbmcgbGlrZSBga21hbGxvYyhzaXplb2YoKnNjaGVtZSksIEdGUF9LRVJORUwpYCwgcHJldHR5IHN0YW5kYXJkIHN0dWZmLiBXYWl0IGEgbWludXRlLi4uICBga21hbGxvY19vYmpgIGlzbiYjMzk7dCByaW5naW5nIGFueSBiZWxscy4gVGhhdCYjMzk7cyBub3Qgc3RhbmRhcmQga2VybmVsIGNvZGUuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBpdCBhY3R1YWxseSAqaXMqLiBMZXQmIzM5O3MgZ28gbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBga21hbGxvY19vYmpgLgoKLi4uUmlnaHQsIG5vdyB0aGF0IEkga25vdyB3aGF0IGBrbWFsbG9jX29iamAgaXMgZGVmaW5lZCBhcywgdGhlIGNvZGUgbWFrZXMgbW9yZSBzZW5zZS4gVGhlIGtpY2tlciBpcywgYGttYWxsb2NgIGRvZXNuJiMzOTt0IHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkgYnkgZGVmYXVsdC4gVGhhdCBtZWFucyB0aGUgYHNjaGVtZS0mZ3Q7bGFzdF9hcHBsaWVkYCBtZW1iZXIgKmNvdWxkKiBoYXZlIGJlZW4gdW5pbml0aWFsaXplZCBiZWZvcmUgdGhpcyBwYXRjaCEgVGhhdCBjb3VsZCBsZWFkIHRvIHNvbWUgbmFzdHksIG5vbi1kZXRlcm1pbmlzdGljIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyIHRvIHNlZSBpZiB0aGF0JiMzOTtzIGEgcmVhbCBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTU1MjcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMDM9bm9uLVxcIGBgTlVMTGBgLCBsb2NrbGVzc2x5IGFjY2Vzc2luZyB0aGUgYGAtXHUwMDNlYWBgIGFuZCBgYC1cdTAwM2ViYGAgZmllbGRzLlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMDgtICAgICAgIDIge1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjIwOTogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjEwLSAgICAgICA0ICAgaWYgKCFwKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMjU9dGhlaXIgcmlnaHRzIHRvIHJlb3JkZXIgdGhpcyBjb2RlIGFzIGZvbGxvd3M6XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIzMC0gICAgICAgMiB7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjMxOiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzItICAgICAgIDQgICBpZiAoIXApXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTI2MT1zaG93cyBhbiBleGFtcGxlIG9mIGluc2VydGlvbjpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjY2LSAgICAgICAyIHtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyNjc6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2OC0gICAgICAgNCAgIGlmICghcClcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdD0yNjc9VGhlIFJDVSB2ZXJzaW9uIG9mIGF1ZGl0X3VwZF9ydWxlKCkgaXMgYXMgZm9sbG93czo6XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3QtMjc4LVx0XHRcdGlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsIFx1MDAyNmUtXHUwMDNlcnVsZSkpIHtcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0OjI3OTpcdFx0XHRcdG5lID0ga21hbGxvY19vYmooKmVudHJ5LCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI4MC1cdFx0XHRcdGlmIChuZSA9PSBOVUxMKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NDQxPXVzZXMgb2YgUkNVIG1heSBiZSBmb3VuZCBpbiBsaXN0UkNVLnJzdCBhbmQgTk1JLVJDVS5yc3QuXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC00NzAtXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjQ3MTpcdFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3Mi1cdFx0c3Bpbl9sb2NrKFx1MDAyNmZvb19tdXRleCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdD01NTM9VGhlIGZvb191cGRhdGVfYSgpIGZ1bmN0aW9uIG1pZ2h0IHRoZW4gYmUgd3JpdHRlbiBhcyBmb2xsb3dzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTU3Mi1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q6NTczOlx0XHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNTc0LVx0XHRzcGluX2xvY2soXHUwMDI2Zm9vX211dGV4KTtcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTM5PWtyZWZfaW5pdCBhcyBzbzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00Mi1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6NDM6ICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00NC0gICAgIGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTgxPXRocmVhZCB0byBwcm9jZXNzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwMi1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6MTAzOlx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtMTA0LVx0aWYgKCFkYXRhKVxuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9MzgzPXRvIHByb3RlY3QgdGhlIGNhY2hlIGFuZCBhbGwgdGhlIG9iamVjdHMgd2l0aGluIGl0LiBIZXJlJiMzOTtzIHRoZSBjb2RlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0NC1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDQ1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDk5PXdoaWNoIGFyZSB0YWtlbiBhd2F5LCBhbmQgdGhlIGBgJiM0MztgYCBhcmUgbGluZXMgd2hpY2ggYXJlIGFkZGVkLlxuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTE5LVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo1MjA6ICAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUyMS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00OTg9d29ya3MgcGVyZmVjdGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDAtICByYXdfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMi1cbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD01MDc9cHJlZW1wdGlvbiBvbiBQUkVFTVBUX1JUIGtlcm5lbHM6OlxuLS1cbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwOS0gIHNwaW5fbG9jayhcdTAwMjZsb2NrKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0OjUxMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MTEtXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQ0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgcGFzc2luZyBhIHNpemUgb2YgYSBzdHJ1Y3QgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NDg6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDktXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU4PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhbiBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2MS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2MjpcdHAgPSBrbWFsbG9jX29ianMoKnAsIG4sIC4uLik7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjMtXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM4Nj1tYXkgaGVscCB3aXRoIGFsaWdubWVudCwgd3JhcC1hcm91bmQsIG9yIGFkZGl0aW9uYWwgaGFyZGVuaW5nLiBUaGVcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDozODc6a21hbGxvY19vYmooKS1mYW1pbHkgb2YgbWFjcm9zIHByb3ZpZGUgdGhpcyBpbnRyb3NwZWN0aW9uLCB3aGljaCBjYW4gYmVcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zODgtdXNlZCBmb3IgdGhlIGNvbW1vbiBjb2RlIHBhdHRlcm5zIGZvciBzaW5nbGUsIGFycmF5LCBhbmQgZmxleGlibGUgb2JqZWN0XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzk5LVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMDpcdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMS1cdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMjpcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAzLVx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDU6XHRfX2F1dG9fdHlwZSBwdHIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZm9vIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDYtXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTE3MzQ9Y2FsbGJhY2s6OlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzM5LSAgICAgICAgICAuLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MTc0MDogICAgICAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzQxLSAgICAgICAgICBzdWJzdHJlYW0tXHUwMDNlcnVudGltZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zMzAyPWRlc3RydWN0b3IgZnVuY3Rpb24gaXMgc2V0IGluIHRoZSBgYHByaXZhdGVfZnJlZWBgIGZpZWxkOjpcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzAzLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjMzMDQ6ICBzdHJ1Y3QgbXlkYXRhICpwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTMzMDUtICBody1cdTAwM2Vwcml2YXRlX2RhdGEgPSBwO1xuLS1cbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdD0yNDI9QW5kIFNPQy1zcGVjaWZpYyB1dGlsaXR5IGNvZGUgbWlnaHQgbG9vayBzb21ldGhpbmcgbGlrZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1MS1cbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdDoyNTI6XHRcdHBkYXRhMiA9IGttYWxsb2Nfb2JqKCpwZGF0YTIpO1xuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1My1cdFx0KnBkYXRhMiA9IHBkYXRhO1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQwMz1lIHR1dHRpIGdsaSBvZ2dldHRpIGNoZSBjb250aWVuZS4gRWNjbyBpbCBjb2RpY2U6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2NC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ2NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY2LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NTE5PXNvbm8gcXVlbGxlIHJpbW9zc2UsIG1lbnRyZSBxdWVsbGUgYGAmIzQzO2BgIHNvbm8gcXVlbGxlIGFnZ2l1bnRlLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUzOS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjU0MDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTU0MS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDg4PW1lbW9yaWEuIFN1IHVuIGtlcm5lbCBub24tUFJFRU1QVF9SVCBpbCBzZWd1ZW50ZSBjb2RpY2UgZnVuemlvbmEgcGVyZmV0dGFtZW50ZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5MC0gIHJhd19zcGluX2xvY2soXHUwMDI2bG9jayk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NDkxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTItXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5Nz1QUkVFTVBUX1JUOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDk5LSAgc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0OjUwMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAxLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDI9SWwgbW9kbyBwcmVmZXJpdG8gcGVyIHBhc3NhcmUgbGEgZGltZW5zaW9uZSBkaSB1bmEgc3RydXR0dXJhIMOoIGlsIHNlZ3VlbnRlOlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTQ2Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU0PUxhIGZvcm1hIHByZWZlcmlkYSBwYXJhIHBhc2FyIGVsIHRhbWHDsW8gZGUgdW5hIGVzdHJ1Y3R1cmEgZXMgbGEgc2lndWllbnRlOlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTctXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTU4Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk1OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD00Nj1rcmVm5Y+v5Lul5Ye6546w5Zyo5pWw5o2u57uT5p6E5L2T5Lit55qE5Lu75L2V5Zyw5pa544CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTQtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDo1NTogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01Ni0gICAgIGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD02Mj1LcmVm6KeE5YiZXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtMTA4LVx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q6MTA5Olx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTExMC1cdGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODEwPURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODE1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgxNjpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTctXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTgyND1Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Qg44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgyOS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo4MzA6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODMxLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9ODU3PW1hcnZlbF9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2My1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM6ODY0Olx0YXBlciA9IGttYWxsb2Nfb2JqKCphcGVyKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODY1LVx0aWYgKGFwZXIgPT0gTlVMTCkgcmV0dXJuIC1FTk9NRU07XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz0xMDE5PW1hcnZlbF9hZ3BfaW5mbyh2b2lkKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2MS1cdCAqL1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzoxMDYyOlx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTEwNjMtXHRpZiAoIWFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM9NTkwPXRpdGFuX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTYtXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NTk3Olx0YXBlciA9IGttYWxsb2Nfb2JqKHN0cnVjdCB0aXRhbl9hZ3BfYXBlcnR1cmUpO1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5OC1cdGlmIChhcGVyID09IE5VTEwpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTczMT10aXRhbl9hZ3BfaW5mbyh2b2lkKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjItXHQgKi9cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYzo3NjM6XHRhZ3AgPSBrbWFsbG9jX29iaigqYWdwKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjQtXHRpZiAoIWFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz0yOT1wcm9jZXNzX3JlbG9jX2Zvcl9nb3QoRWxmNjRfUmVsYSAqcmVsYSxcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy00OC1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjQ5Olx0ZyA9IGttYWxsb2Nfb2JqKCpnKTtcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTUwLVx0Zy1cdTAwM2VuZXh0ID0gY2hhaW5zW3Jfc3ltXS5uZXh0O1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jPTIxMT1zdGF0aWMgdm9pZCBwZGV2X3NhdmVfc3JtX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jLTIyMy1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjIyNDpcdHRtcCA9IGttYWxsb2Nfb2JqKCp0bXApO1xuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjI1LVx0aWYgKCF0bXApIHtcbi0tXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM9MzU5PXZvaWQgKnVud2luZF9hZGRfdGFibGUoc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCB2b2lkICp0YWJsZV9zdGFydCxcbi0tXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzY4LVxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jOjM2OTpcdHRhYmxlID0ga21hbGxvY19vYmooKnRhYmxlKTtcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYy0zNzAtXHRpZiAoIXRhYmxlKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yNzQ9c3RhdGljIGludCBsb2NvbW9fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjc5LVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjI4MDpcdHNhdmUgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX3NhdmVfZGF0YSk7XG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjgxLVx0aWYgKCFzYXZlKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz05NjQ9c3RhdGljIGludCBzYTExMTFfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3MS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo5NzI6XHRzYXZlID0ga21hbGxvY19vYmooc3RydWN0IHNhMTExMV9zYXZlX2RhdGEpO1xuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3My1cdGlmICghc2F2ZSlcbi0tXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmM9NTcyPXN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF90YWJsZV9hZGQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYy01NzYtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jOjU3NzpcdHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYiA9IGttYWxsb2Nfb2JqKCp0YWIpO1xuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jLTU3OC1cbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYz01Mz1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpfZ2V0X3B3cmRtKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDEtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYzoxMDI6XHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDMtXHRpZiAoZW50cnkpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYzo0MTM6XHRwd3JzdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwb3dlcl9zdGF0ZSwgR0ZQX0FUT01JQyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jLTQxNC1cdGlmICghcHdyc3QpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYz0xMTM9c3RhdGljIGludCBfX2luaXQgcHdyZG1zX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVudXNlZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jLTEzNC1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmM6MTM1Olx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzYtXHRpZiAoIXB3cnN0KVxuLS1cbmFyY2gvYXJtL21tL3BnZC5jLTE5LSNpZmRlZiBDT05GSUdfQVJNX0xQQUVcbmFyY2gvYXJtL21tL3BnZC5jOjIwOiNkZWZpbmUgX3BnZF9hbGxvYyhtbSlcdFx0a21hbGxvY19vYmpzKHBnZF90LCBQVFJTX1BFUl9QR0QsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKVxuYXJjaC9hcm0vbW0vcGdkLmMtMjEtI2RlZmluZSBfcGdkX2ZyZWUobW0sIHBnZClcdGtmcmVlKHBnZClcbi0tXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYz03NjQ9c3RhdGljIGludCBjb3ZlcmFnZV9zdGFydChjb25zdCB1bmlvbiBkZWNvZGVfaXRlbSAqdGFibGUpXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjUte1xuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM6NzY2Olx0Y292ZXJhZ2UuYmFzZSA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgY292ZXJhZ2VfZW50cnksXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjctXHRcdFx0XHQgICAgIE1BWF9DT1ZFUkFHRV9FTlRSSUVTKTtcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTc3ND12b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODYtXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjc4NzpcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNzg4LVx0aWYgKCFlbnRyeSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0xMDI9c3RhdGljIHZvaWQgKnZnaWNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0xMDYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzoxMDc6XHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA4LVx0aWYgKCFpdGVyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTM2ND1zdGF0aWMgdm9pZCAqdmdpY19pdHNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzctXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzozNzg6XHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc5LVx0aWYgKCFpdGVyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NzQzPXZvaWQgX19pbml0IHZnaWNfc2V0X2t2bV9pbmZvKGNvbnN0IHN0cnVjdCBnaWNfa3ZtX2luZm8gKmluZm8pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy03NDUtXHRCVUdfT04oZ2ljX2t2bV9pbmZvICE9IE5VTEwpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzo3NDY6XHRnaWNfa3ZtX2luZm8gPSBrbWFsbG9jX29iaigqZ2ljX2t2bV9pbmZvKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ3LVx0aWYgKGdpY19rdm1faW5mbylcbi0tXG5hcmNoL202OGsvZW11L25mYmxvY2suYz05Nz1zdGF0aWMgaW50IF9faW5pdCBuZmhkX2luaXRfb25lKGludCBpZCwgdTMyIGJsb2NrcywgdTMyIGJzaXplKVxuLS1cbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNC1cbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jOjExNTpcdGRldiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZmhkX2RldmljZSk7XG5hcmNoL202OGsvZW11L25mYmxvY2suYy0xMTYtXHRpZiAoIWRldilcbi0tXG5hcmNoL202OGsvbW0va21hcC5jPTEwOD1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqZ2V0X2lvX2FyZWEodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTEyLVxuYXJjaC9tNjhrL21tL2ttYXAuYzoxMTM6XHRhcmVhID0ga21hbGxvY19vYmooKmFyZWEpO1xuYXJjaC9tNjhrL21tL2ttYXAuYy0xMTQtXHRpZiAoIWFyZWEpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MjUzPXUzMiBhdTF4eHhfZGJkbWFfY2hhbl9hbGxvYyh1MzIgc3JjaWQsIHUzMiBkZXN0aWQsXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzEyLVx0XHRcdCAqL1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6MzEzOlx0XHRcdGN0cCA9IGttYWxsb2Nfb2JqKGNoYW5fdGFiX3QsIEdGUF9BVE9NSUMpO1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzE0LVx0XHRcdGNoYW5fdGFiX3B0cltpXSA9IGN0cDtcbi0tXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0zOTE9dTMyIGF1MXh4eF9kYmRtYV9yaW5nX2FsbG9jKHUzMiBjaGFuaWQsIGludCBlbnRyaWVzKVxuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNC1cdCAqL1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6NDE1Olx0ZGVzY19iYXNlID0gKHUzMikga21hbGxvY19vYmpzKGF1MXhfZGRtYV9kZXNjX3QsIGVudHJpZXMsXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTYtXHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuLS1cbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM9NTk9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdTMyICpsb2NhdGlvbiwgRWxmX0FkZHIgdixcbi0tXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc0LVx0ICovXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jOjc1Olx0biA9IGttYWxsb2Nfb2JqKCpuKTtcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMtNzYtXHRpZiAoIW4pXG4tLVxuYXJjaC9taXBzL2tlcm5lbC92cGUuYz0zMTE9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdWludDMyX3QgKmxvY2F0aW9uLFxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIwLVx0ICovXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jOjMyMTpcdG4gPSBrbWFsbG9jX29iaigqbik7XG5hcmNoL21pcHMva2VybmVsL3ZwZS5jLTMyMi1cdGlmICghbilcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9MTg4PXBhdF9xdWVyeV9tb2R1bGUodWxvbmcgcGNlbGxfbG9jLCB1bG9uZyBtb2RfaW5kZXgpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5NS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzoxOTY6XHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk3LVx0aWYgKCFwYV9wZGNfY2VsbClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9NTMyPWFkZF9zeXN0ZW1fbWFwX2FkZHJlc3NlcyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2LCBpbnQgbnVtX2FkZHJzLCBcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTM4LVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjUzOTpcdGRldi1cdTAwM2VhZGRyID0ga21hbGxvY19vYmpzKCpkZXYtXHUwMDNlYWRkciwgbnVtX2FkZHJzKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01NDAtXHRpZighZGV2LVx1MDAzZWFkZHIpIHtcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmM9ODE9c3RhdGljIGludCBfX2luaXQgcHJvY2Vzc29yX3Byb2JlKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExMi1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYzoxMTM6XHRcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTQtXHRcdGlmICghcGFfcGRjX2NlbGwpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTE0OT11bndpbmRfdGFibGVfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyLCBcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTU5LVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjE2MDpcdHRhYmxlID0ga21hbGxvY19vYmooc3RydWN0IHVud2luZF90YWJsZSwgR0ZQX1VTRVIpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTE2MS1cdGlmICh0YWJsZSA9PSBOVUxMKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz00MDY9dm9pZCB1bndpbmRfZnJhbWVfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzayhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtNDEwLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjQxMTpcdHIyID0ga21hbGxvY19vYmooc3RydWN0IHB0X3JlZ3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMi1cdGlmICghcjIpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jPTk4ND1pbnQgX19pbml0IG52cmFtX3NjYW5fcGFydGl0aW9ucyh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDMyLVx0XHR9XG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM6MTAzMzpcdFx0dG1wX3BhcnQgPSBrbWFsbG9jX29iaigqdG1wX3BhcnQpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzQtXHRcdGVyciA9IC1FTk9NRU07XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cdFx0ICAgIGNmZy1cdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVx0aWYgKCFwYWdlcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1Olx0dmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXHRcdFx0XHRcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgJiM0MzsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVx0aWYgKGJsb2NrID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTI1Mz1yaF9pbmZvX3QgKnJoX2NyZWF0ZSh1bnNpZ25lZCBpbnQgYWxpZ25tZW50KVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjAtXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6MjYxOlx0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvLCBHRlBfQVRPTUlDKTtcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjItXHRpZiAoaW5mbyA9PSBOVUxMKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jPTk1PXN0YXRpYyBpbnQgaGFzaF9faW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy05OC1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjk5Olx0bW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaGFzaF9tbV9jb250ZXh0KTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEwMC1cdGlmICghbW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI1LVx0XHRpZiAoY3VycmVudC1cdTAwM2VtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cdTAwM2VzcHQpIHtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjEyNjpcdFx0XHRtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cdTAwM2VzcHQgPSBrbWFsbG9jX29iaihzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlKTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNy1cdFx0XHRpZiAoIW1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVx1MDAzZXNwdCkge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz02MjM9c3RhdGljIGludCBldmVudF91bmlxX2FkZChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sLFxuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6NjUxOlx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTItXHRpZiAoIWRhdGEpXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXHRpZiAoIWV2ZW50cykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1Olx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVx0aWYgKCFldmVudF9kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0Olx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz00ND1zdGF0aWMgaW50IHNwdWZzX2F0dHJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTQ5LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzo1MDpcdGF0dHIgPSBrbWFsbG9jX29iaigqYXR0cik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTUxLVx0aWYgKCFhdHRyKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jPTYyOD12b2lkIHF1ZXVlX2hvdHBsdWdfZXZlbnQoc3RydWN0IHBzZXJpZXNfaHBfZXJyb3Jsb2cgKmhwX2VycmxvZylcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzYtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYzo2Mzc6XHR3b3JrID0ga21hbGxvY19vYmooc3RydWN0IHBzZXJpZXNfaHBfd29yaywgR0ZQX0FUT01JQyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzgtXHRpZiAod29yaykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYz0xMTk9aW50IGh2Y3NfZ2V0X3BhcnRuZXJfaW5mbyh1aW50MzJfdCB1bml0X2FkZHJlc3MsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2Mi1cdFx0ICogaHZjc19mcmVlX3BhcnRuZXJfaW5mbygpLiAqL1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jOjE2MzpcdFx0bmV4dF9wYXJ0bmVyX2luZm8gPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHZjc19wYXJ0bmVyX2luZm8sXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMtMTY0LVx0XHRcdFx0XHRcdEdGUF9BVE9NSUMpO1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM9MTQ0PXN0YXRpYyB2b2lkIHNob3dfZ3BjaV9kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSlcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE0OS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM6MTUwOlx0YnVmID0ga21hbGxvY19vYmooKmJ1Zik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE1MS1cdGlmIChidWYgPT0gTlVMTClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM9NDM1PXN0YXRpYyBpbnQgcHNlcmllc19tc2lfb3BzX3ByZXBhcmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYy00NDMtXHRzdHJ1Y3QgcHNlcmllc19tc2lfZGV2aWNlICpwc2VyaWVzX2RldiBfX2ZyZWUoa2ZyZWUpXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM6NDQ0Olx0XHQ9IGttYWxsb2Nfb2JqKCpwc2VyaWVzX2Rldik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQ1LVx0aWYgKCFwc2VyaWVzX2Rldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM9MTIwPXN0YXRpYyBpbnQgcHNlcmllc19wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3Zmcylcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQzLVx0cGRuID0gcGNpX2dldF9wZG4ocGRldik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM6MTQ0Olx0cGRuLVx1MDAzZXBlX251bV9tYXAgPSBrbWFsbG9jX29ianMoKnBkbi1cdTAwM2VwZV9udW1fbWFwLCBudW1fdmZzKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDUtXHRpZiAoIXBkbi1cdTAwM2VwZV9udW1fbWFwKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYz0xMDc2PXN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfdmFzX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmMtMTA4OS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYzoxMDkwOlx0aHZfY2FwcyA9IGttYWxsb2Nfb2JqKCpodl9jYXBzKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDkxLVx0aWYgKCFodl9jYXBzKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYz03MDU9c3RhdGljIGludCB2aW9fY21vX2J1c19wcm9iZShzdHJ1Y3QgdmlvX2RldiAqdmlvZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDctXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmM6NzQ4Olx0XHRkZXZfZW50ID0ga21hbGxvY19vYmooc3RydWN0IHZpb19jbW9fZGV2X2VudHJ5KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDktXHRcdGlmICghZGV2X2VudClcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYz0zNTI9c3RhdGljIGludCBmc2xfbGJjX3N5c2NvcmVfc3VzcGVuZCh2b2lkICpkYXRhKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jLTM2NC1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jOjM2NTpcdGN0cmwtXHUwMDNlc2F2ZWRfcmVncyA9IGttYWxsb2Nfb2JqKHN0cnVjdCBmc2xfbGJjX3JlZ3MpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY2LVx0aWYgKCFjdHJsLVx1MDAzZXNhdmVkX3JlZ3MpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM9MTU0OT12b2lkIF9faW5pdCBtcGljX2luaXQoc3RydWN0IG1waWMgKm1waWMpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0MS1cdC8qIGFsbG9jYXRlIG1lbW9yeSB0byBzYXZlIG1waWMgc3RhdGUgKi9cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jOjE2NDI6XHRtcGljLVx1MDAzZXNhdmVfZGF0YSA9IGttYWxsb2Nfb2JqcygqbXBpYy1cdTAwM2VzYXZlX2RhdGEsIG1waWMtXHUwMDNlbnVtX3NvdXJjZXMpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0My1cdEJVR19PTihtcGljLVx1MDAzZXNhdmVfZGF0YSA9PSBOVUxMKTtcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jPTIzPXZvaWQgX19pbml0IG9mX2luc3RhbnRpYXRlX3J0Yyh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmMtMzUtXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jOjM2Olx0XHRcdHJlcyA9IGttYWxsb2Nfb2JqKCpyZXMpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNy1cdFx0XHRpZiAoIXJlcykge1xuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jPTY1ND1zdGF0aWMgaW50IGFkZF9yZWxvY2F0aW9uX3RvX2FjY3VtdWxhdGUoc3RydWN0IG1vZHVsZSAqbWUsIGludCB0eXBlLFxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2NS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjY2NjpcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2Ny1cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02OTktXHRpZiAoIWZvdW5kKSB7XG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3MDA6XHRcdHJlbF9oZWFkID0ga21hbGxvY19vYmooKnJlbF9oZWFkKTtcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTcwMS1cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03MTEtXHRcdFx0YnVja2V0ID1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcxMjpcdFx0XHRcdGttYWxsb2Nfb2JqKHN0cnVjdCB1c2VkX2J1Y2tldCk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAxMQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBsYXN0X2FwcGxpZWRgIGluIHRoZSBEQU1PTiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrbWFsbG9jX29iamAgbWFjcm8gYW5kIHRyYWNpbmcgaXRzIHVzYWdlIGluIHRoZSBEQU1PTiBjb2RlLiBJdCBzZWVtcyBsaWtlIGl0IHdhcyBpbnRyb2R1Y2VkIGluIGEgcGF0Y2gsIHBvdGVudGlhbGx5IHdpdGggYSBjYWxsIGxpa2UgYGttYWxsb2Nfb2JqKCpzY2hlbWUsIEdGUF9LRVJORUwpYC4gSSYjMzk7bSBzZWVpbmcgaXQgc3BlY2lmaWNhbGx5IHVzZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AgYXMgYHNjaGVtZSA9IGttYWxsb2Nfb2JqKCpzY2hlbWUpO2AuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBhYnNlbmNlIG9mIGV4cGxpY2l0IGBHRlBgIGZsYWdzIGluIHRoaXMgaW5zdGFudGlhdGlvbi4gSXMgaXQgYSBtYWNybyB0aGF0IGRlZmF1bHRzIHRvIGBHRlBfS0VSTkVMYCBpbnRlcm5hbGx5LCBvciBwZXJoYXBzIGp1c3QgYSBzaG9ydGhhbmQgZm9yIGBrbWFsbG9jKHNpemVvZigqc2NoZW1lKSwgR0ZQX0tFUk5FTClgPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuCgpSZWdhcmRsZXNzIG9mIHRoYXQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlsLCB3aGF0JiMzOTtzIGNydWNpYWwgaGVyZSBpcyB0aGF0IHRoZSBgc2NoZW1lLSZndDtsYXN0X2FwcGxpZWRgIG1lbWJlciB3YXMgdW5pbml0aWFsaXplZCAqcHJpb3IqIHRvIHRoaXMgcGF0Y2guIFRoaXMgaXMgYSBwb3RlbnRpYWwgc291cmNlIG9mIHN1YnRsZSBidWdzLiBOb3csIGJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgbGFzdF9hcHBsaWVkYCBpcyB1c2VkIHdpdGhpbiB0aGUgY29kZS4gTGV0JiMzOTtzIHRyYWNlIGFsbCByZWZlcmVuY2VzIHRvIHRoYXQgbWVtYmVyIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgaXQgcG90ZW50aWFsbHkgYmVpbmcgdW5pbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGFzdF9hcHBsaWVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD01NTU9c3RydWN0IGRhbW9zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNTk3LVx0ICogb2JqZWN0cyBjb3VsZCBiZSBzdWNoIGV4YW1wbGVzLiAgVGhlIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNhblxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjU5ODpcdCAqIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljIHVuc2V0c1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjU5OTpcdCAqIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYwMC1cdCAqIGZpbmlzaGVkLlxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYwMS1cdCAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYwMjpcdHZvaWQgKmxhc3RfYXBwbGllZDtcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MDMtXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz02ODI9c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzA3LVx0c2NoZW1lLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgPSAwO1xubW0vZGFtb24vY29yZS5jOjcwODpcdHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTcwOS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjaGVtZS1cdTAwM2VsaXN0KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzIxNz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI1MS1cdFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xubW0vZGFtb24vY29yZS5jOjMyNTI6XHRcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcbm1tL2RhbW9uL2NvcmUuYy0zMjUzLVx0XHRkYW1vc190cmFjZV9zdGF0KGMsIHMpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MjA5PXN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjEyLVx0XHRyZXR1cm4gdHJ1ZTtcbm1tL2RhbW9uL3BhZGRyLmM6MjEzOlx0aWYgKGZvbGlvID09IHMtXHUwMDNlbGFzdF9hcHBsaWVkKSB7XG5tbS9kYW1vbi9wYWRkci5jLTIxNC1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNzMtXHRjb25kX3Jlc2NoZWQoKTtcbm1tL2RhbW9uL3BhZGRyLmM6Mjc0Olx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbm1tL2RhbW9uL3BhZGRyLmMtMjc1LVx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Mjc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTMwNy1cdH1cbm1tL2RhbW9uL3BhZGRyLmM6MzA4Olx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbm1tL2RhbW9uL3BhZGRyLmMtMzA5LVx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MzI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM1NS1cdGNvbmRfcmVzY2hlZCgpO1xubW0vZGFtb24vcGFkZHIuYzozNTY6XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vcGFkZHIuYy0zNTctXHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zNjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzgyLVx0fVxubW0vZGFtb24vcGFkZHIuYzozODM6XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vcGFkZHIuYy0zODQtXHRyZXR1cm4gMDtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTc4OD1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzkwLXtcbm1tL2RhbW9uL3ZhZGRyLmM6NzkxOlx0cmV0dXJuICFmb2xpbyB8fCBmb2xpbyA9PSBzLVx1MDAzZWxhc3RfYXBwbGllZDtcbm1tL2RhbW9uL3ZhZGRyLmMtNzkyLX1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTc5ND1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgyMC1cdFx0XHQqc3pfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG5tbS9kYW1vbi92YWRkci5jOjgyMTpcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbm1tL2RhbW9uL3ZhZGRyLmMtODIyLVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtODQ2LVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbm1tL2RhbW9uL3ZhZGRyLmM6ODQ3Olx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vdmFkZHIuYy04NDgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Njc5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgREFNT04mIzM5O3MgYGxhc3RfYXBwbGllZGAgSXNzdWUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZSwgYW5kIEkgc2VlIGBsYXN0X2FwcGxpZWRgIHNob3dpbmcgdXAgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoYXQmIzM5O3MgYSBrZXkgdmFyaWFibGUsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBzdGF0ZSBvZiBtZW1vcnkgbW9kaWZpY2F0aW9ucy4gVGhlbiBpdCBoaXRzIG1lLi4uIHdhaXQgYSBzZWNvbmQuIEkgcmVtZW1iZXIgbm93IOKAkyBgc2NoZW1lLSZndDtsYXN0X2FwcGxpZWRgIHdhc24mIzM5O3QgYmVpbmcgaW5pdGlhbGl6ZWQgcHJvcGVybHkgd2hlbiBhIG5ldyBzY2hlbWUgaXMgY3JlYXRlZCB2aWEgYGRhbW9uX25ld19zY2hlbWVgLiBJIHNob3VsZCBoYXZlIGtub3duIGJldHRlciwgYGttYWxsb2NgIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgemVybyBvdXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkhIEl0JiMzOTtzIGEgY29tbW9uIG92ZXJzaWdodCwgYW5kIGRlZmluaXRlbHkgY291bGQgbGVhZCB0byBzb21lIHdlaXJkLCBkaWZmaWN1bHQtdG8tdHJhY2sgYnVncyBpZiB5b3UgZG9uJiMzOTt0IGFjY291bnQgZm9yIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrbWFsbG9jX29iamAuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBjb250ZXh0IGhlcmUgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQmIzM5O3MgdGltZSB0byByZXNvbHZlIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBrbWFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDUxPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTAxLSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEwMjojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTAzLVx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgMSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTEzLSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTExNDojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMTUtXHRfX2FsbG9jX29ianMoa21hbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoVkFSX09SX1RZUEUpLCBDT1VOVClcbi0tXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTYzLSN1bmRlZiB2ZnJlZVxubGliL2RlY29tcHJlc3NfdW54ei5jOjE2NDojZGVmaW5lIGttYWxsb2Nfb2JqKHR5cGUpIG1hbGxvYyhzaXplb2YodHlwZSkpXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTY1LSNkZWZpbmUga2ZyZWUocHRyKSBmcmVlKHB0cilcbi0tXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg9NjM9c3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jX2FycmF5KHVuc2lnbmVkIG4sIHNpemVfdCBzLCBnZnBfdCBnZnApXG4tLVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY3LVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oOjY4OiNkZWZpbmUga21hbGxvY19vYmooVkFSX09SX1RZUEUsIC4uLikgXFxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC02OS1cdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpLCAwKSlcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03MC1cbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaDo3MTojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03Mi1cdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpICogKENPVU5UKSwgMCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTUwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBEQU1PTiBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogYGttYWxsb2Nfb2JqYCB1c2VzIGBrbWFsbG9jYCwgd2hpY2ggZG9lc24mIzM5O3QgemVybyBvdXQgdGhlIG1lbW9yeS4gVGhhdCBtZWFucyBgc2NoZW1lLSZndDtsYXN0X2FwcGxpZWRgIGlzIGxpa2VseSB1bmluaXRpYWxpemVkIHdoZW4gYGRhbW9uX25ld19zY2hlbWVgIGlzIGNhbGxlZC4gQmluZ28g4oCTIHRoaXMgcGF0Y2ggaW5pdGlhbGl6ZXMgaXQgdG8gYE5VTExgLgoKSXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBBYnNvbHV0ZWx5ISBJdCYjMzk7cyBmaXhpbmcgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHJpc2sgaGVyZSBpcyB0aGF0IHJhbmRvbSBnYXJiYWdlIGNvdWxkIGJlIGludGVycHJldGVkIGFzIGEgdmFsaWQgYGZvbGlvYCBwb2ludGVyLiBUaGlzIGNvdWxkIGNhdXNlIGlzc3VlcyBpbiBhbnkgb2YgdGhlIGZ1bmN0aW9ucyB3aGljaCB1c2UgYGxhc3RfYXBwbGllZGAgdG8gbWFrZSBkZWNpc2lvbnMuCgpUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGt1bml0IHRlc3RzLCBidXQgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBjb3JlIGxvZ2ljIGZpcnN0LiBJcyBgZGFtb25fbmV3X3NjaGVtZWAgcmVhY2hhYmxlPyBZZXMsIGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciBjcmVhdGluZyBEQU1PTiBzY2hlbWVzLCBhbmQgdGhvc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcywgZGVidWdmcywgb3Iga2VybmVsIEFQSXMuIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50IGZvciBzZXR0aW5nIHVwIGEgbmV3IERBTU9OIHNjaGVtZS4gSSBjYW4gc2VlIHRoYXQgYGRhbW9uX25ld19zY2hlbWVgIGlzIGEgY29yZSBmdW5jdGlvbi4KCk5vdywgaWYgYGxhc3RfYXBwbGllZGAgaXMgdW5pbml0aWFsaXplZCwgaXQgY291bGQgbGVhZCB0byB0aGUgc2l0dWF0aW9uIHdoZXJlIGl0IGFjY2lkZW50YWxseSBtYXRjaGVzIGEgdmFsaWQgYGZvbGlvYC4gVGhpcyB3b3VsZCBjYXVzZSBhIGZvbGlvIHRvIGJlIHNraXBwZWQsIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSBgZm9saW9fcHV0YCBjYWxsIG9uIGEgZm9saW8gdGhhdCBzaG91bGRuJiMzOTt0IGJlIHJlbGVhc2VkLgoKSSYjMzk7bSBjaGVja2luZyBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AsIGp1c3QgdG8gY29uZmlybSBteSB0aGlua2luZy4KCmBgYGMKc3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpCnsKCWlmICghZm9saW8pCgkJcmV0dXJuIHRydWU7CglpZiAoZm9saW8gPT0gcy0mZ3Q7bGFzdF9hcHBsaWVkKSB7CgkJZm9saW9fcHV0KGZvbGlvKTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCXJldHVybiBmYWxzZTsKfQpgYGAKCk9rYXksIHRoZSBsb2dpYyBsb29rcyBsaWtlIGl0IGNoZWNrcyBpZiB0aGUgZm9saW8gaXMgdGhlIHNhbWUgYXMgdGhlIGxhc3QgYXBwbGllZCBvbmUuIGlmIHRoZXkgbWF0Y2gsIHRoZSBmb2xpbyByZWZlcmVuY2UgaXMgZHJvcHBlZCBhcyBpdCBpcyBjb25zaWRlcmVkIGFwcGxpZWQuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2l0aCBhbiB1bmluaXRpYWxpemVkIGBsYXN0X2FwcGxpZWRgLCB3ZSBjb3VsZCBpbmNvcnJlY3RseSBpZGVudGlmeSBhIGZvbGlvIGFzIGFscmVhZHkgJiMzNDthcHBsaWVkLCYjMzQ7IGFuZCBlbmQgdXAgZHJvcHBpbmcgaXRzIHJlZmVyZW5jZSBwcmVtYXR1cmVseSwgdGhlcmVieSBza2lwcGluZyB0aGUgZm9saW8uIFRoaXMgY291bGQgbWFuaWZlc3QgYXMgaW5jb3JyZWN0IGJlaGF2aW91ciwgbGlrZSBza2lwcGluZyBtZW1vcnkgYWNjZXNzIHdoaWNoIHdvdWxkIG5vdCBiZSBhIGRvdWJsZSBmcmVlLCBidXQgaW5jb3JyZWN0IGJlaGF2aW9yLgoKVGhlIHBhdGNoIGFsc28gYWZmZWN0cyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCBhbmQgYG1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhgIHdoaWNoIGFyZSB0ZXN0cy4KCklzIHRoaXMgc2luZ2xlLWxpbmUgaW5pdGlhbGl6YXRpb24gd29ydGggZnV6emluZz8gTm9ybWFsbHksIGEgb25lLWxpbmUgaW5pdGlhbGl6YXRpb24gd291bGRuJiMzOTt0IHdhcnJhbnQgaW50ZW5zZSBmdXp6aW5nLCBidXQgdGhpcyBpc24mIzM5O3QganVzdCBhIHRyaXZpYWwgdmFyaWFibGU7IGl0IGFmZmVjdHMgREFNT04mIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gdGhlIHByb21wdCwgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiBtb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLiBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBhbmQgdGhhdCB0aGlzIGlzIGEgZml4IHRvIHRoZSBjb3JlIGxvZ2ljLCB3aGljaCBwcmV2ZW50cyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzZSwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIGBsYXN0X2FwcGxpZWRgLCB3aGljaCBpbmNsdWRlIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCwgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gLCBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YC4gU28sIEkmIzM5O2xsIHJlY29tbWVuZCBmb2N1c2luZyBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGlzIGZpeCB3b3JrcyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDE6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9wYWRkci5jPTE5NT1zdGF0aWMgYm9vbCBkYW1vc19wYV9maWx0ZXJfb3V0KHN0cnVjdCBkYW1vcyAqc2NoZW1lLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjA4LVxubW0vZGFtb24vcGFkZHIuYzoyMDk6c3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9wYWRkci5jLTIxMC17XG4tLVxubW0vZGFtb24vcGFkZHIuYz0yMjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjQ3LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjI0ODpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI0OS1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0yNzg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjg4LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjI4OTpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI5MC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zMjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzM2LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjMzNzpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTMzOC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zNjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzcyLVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjM3MzpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTM3NC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTQzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFdvcnRoRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBpdCBoaXRzIHRob3NlIEtVbml0IHRlc3QgbW9kaWZpY2F0aW9ucyBpbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCBhbmQgYG1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB0ZXN0cywgYnV0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBzcGVjaWZpYy4gVGhleSB3YW50IHRvIGtub3cgaWYgdGhlIHBhdGNoIGlzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgd2hpY2ggaXMgYSBiaW5hcnk6IHRydWUvZmFsc2UuIFdlIG5lZWQgdG8gcmV0dXJuIGZhbHNlIGlmIHRoZSBwYXRjaCAqb25seSogaW5jbHVkZXMgY2VydGFpbiB0aGluZ3MuIFNwZWNpZmljYWxseSwgdGhvc2UgdGhpbmdzIGFyZSBkb2N1bWVudGF0aW9uIHR3ZWFrcywgS2NvbmZpZyBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nIGxpa2UgYHByX2VycmAgb3IgYHByaW50a2AsIGNvc21ldGljIGFsdGVyYXRpb25zIG9mIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24mIzM5O3QgY2hhbmdlIGhvdyB0aGluZ3MgKndvcmsqLCBhbmQgaW5hY2Nlc3NpYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKSG1tLCBidXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIGNoYW5nZSB0byBgbW0vZGFtb24vY29yZS5jYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uOyBpdCBpbml0aWFsaXplcyBhIHN0cnVjdCBmaWVsZC4gVGhhdCYjMzk7cyAqbm90KiBvbiB0aGUgJiMzNDtyZXR1cm4gZmFsc2UmIzM0OyBsaXN0LiBTbywgdGhhdCBjaGFuZ2UgaXRzZWxmIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpBbHJpZ2h0LCBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBEQU1PTiBuZXh0LiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBtb3JlIGNvbnRleHQgZm9yIHdoYXTigJlzIGhhcHBlbmluZyBpbiBgY29yZS5jYC4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlIGNoYW5nZSBoYXMgYW55IGZ1bmN0aW9uYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjEzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIERBTU9OIEZlYXR1cmVzIGFuZCBGb2N1c2luZyB0aGUgRnV6eioqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyByZWdhcmRpbmcgdGhpcyBEQU1PTiBwYXRjaC4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgZW5hYmxlIGEgc3VpdGUgb2YgREFNT04gZmVhdHVyZXM6IGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9SRUNMQUlNYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdlIHdhbnQgdG8gdGFyZ2V0LgoKVGhlIHBhdGNoIGluY2x1ZGVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGt1bml0IHRlc3RzLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBXZSBjYW4gZW5hYmxlIGBEQU1PTl9LVU5JVF9URVNUYCBhbmQgYERBTU9OX1ZBRERSX0tVTklUX1RFU1RgIGFzIHdlbGwuIE5vdywgdGhlIHR5cGljYWwgU3l6a2FsbGVyIGFwcHJvYWNoIHdvdWxkbiYjMzk7dCBkaXJlY3RseSBmdXp6IEtVbml0IHRlc3RzLiBIb3dldmVyLCBlbmFibGluZyB0aGVtIG1pZ2h0IGJlIGJlbmVmaWNpYWwgYXMgdGhleSBhcmUgZXhlY3V0ZWQgZHVyaW5nIGJvb3Qgb3IgbW9kdWxlIGxvYWQuIFRoaXMgbWlnaHQgdHJpZ2dlciBzb21lIGNvZGUgcGF0aHMgdGhhdCB3ZSB3b3VsZG4mIzM5O3Qgb3RoZXJ3aXNlIHRvdWNoLCB3aGljaCB3b3VsZCBiZSBhIHVzZWZ1bCBzaWRlIGVmZmVjdC4gR29vZC4KCk5leHQsIHdlIG5lZWQgdG8gY2hvb3NlIHRoZSByaWdodCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBJJiMzOTttIHRoaW5raW5nIGBkYW1vbl9uZXdfc2NoZW1lYCwgYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gLCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AsIGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBgZGFtb25fcGFfc3RhdGAsIGFuZCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgLiBUaGVzZSBzZWVtIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIGZ1enppbmcuCgpCZWZvcmUgd2UgcHJvY2VlZCwgYSBxdWljayBzYW5pdHkgY2hlY2suIEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhhdCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AgaXMgYWN0dWFsbHkgZGVmaW5lZC4gTWFrZSBzdXJlIHRoYXQgc3ltYm9sIGlzIGF2YWlsYWJsZSBiZWZvcmUgd2UgZm9jdXMgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3ZhX2ludmFsaWRfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYz03ODM9c3RydWN0IGRhbW9zX3ZhX3N0YXRfcHJpdmF0ZSB7XG4tLVxubW0vZGFtb24vdmFkZHIuYy03ODctXG5tbS9kYW1vbi92YWRkci5jOjc4ODpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vZGFtb24vdmFkZHIuYy03ODktXHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi92YWRkci5jPTc5ND1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgxNS1cbm1tL2RhbW9uL3ZhZGRyLmM6ODE2Olx0XHRpZiAoZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhmb2xpbywgcykpXG5tbS9kYW1vbi92YWRkci5jLTgxNy1cdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtODQwLVxubW0vZGFtb24vdmFkZHIuYzo4NDE6XHRcdGlmIChkYW1vc192YV9pbnZhbGlkX2ZvbGlvKGZvbGlvLCBzKSlcbm1tL2RhbW9uL3ZhZGRyLmMtODQyLVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA5MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbiBmb3IgREFNT04gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCBzeW1ib2xzIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIEkgc2VlIGFyZSBgZGFtb25fbmV3X3NjaGVtZWAsIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCwgYW5kIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYC4gSG93ZXZlciwgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gIGlzIGBzdGF0aWMgaW5saW5lYCwgc28gaXQmIzM5O3MgcHJvYmFibHkgaW5saW5lZCBhbmQgd29uJiMzOTt0IGJlIGEgdXNlZnVsIHN5bWJvbCBmb3IgZnV6emluZyBkaXJlY3RseS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IGxldCYjMzk7cyBjaGVjayB0aGUgb3RoZXIgc3ltYm9scy4gYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgbm90IGxpa2VseSBhY2Nlc3NpYmxlLiBBbmQgYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGlzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGxldCYjMzk7cyBjaGVjayBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYW5kIGBkYW1vbl9wYV9zdGF0YC4KClVsdGltYXRlbHksIEkgdGhpbmsgYGRhbW9uX25ld19zY2hlbWVgIGFuZCBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AgYXJlIHRoZSBtb3N0IHByb21pc2luZy4gQnV0LCB3YWl0LCBpcyBgZGFtb25fbmV3X3NjaGVtZWAgYSBob3QgcGF0aD8gTm8sIGl0JiMzOTtzIGNhbGxlZCB3aGVuIGEgc2NoZW1lIGlzIGNyZWF0ZWQsIHNvIGl0JiMzOTtzIG5vdCBmcmVxdWVudGx5IGludm9rZWQuIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCwgdGhvdWdoLCAqaXMqIGNhbGxlZCBmb3IgZXZlcnkgZm9saW8gcHJvY2Vzc2VkIGJ5IERBTU9OLCB3aGljaCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGFtb3VudCBpZiBEQU1PTiBpcyBhY3RpdmUsIGV2ZW4gaWYgaXQmIzM5O3MgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZCB0aHJlYWQuIEdpdmVuIHRoYXQgYGRhbW9uX25ld19zY2hlbWVgIGlzIHRoZSBtYWluIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYXRjaCwgSSYjMzk7bGwgZ28gd2l0aCB0aGF0IGFzIHRoZSBwcmltYXJ5IHRhcmdldCBmb3Igbm93LgoKTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEFoLCBpdCBsb29rcyBsaWtlIGEgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZpeCBpbiBgZGFtb25fbmV3X3NjaGVtZWAgYW5kIHNvbWUgS1VuaXQgdGVzdCBpbXByb3ZlbWVudHMgd2l0aCBib3VuZHMgY2hlY2tzLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaWYgdGhlIHRlc3RzIGZhaWwuIFRoZSBwYXRjaCBmaXhlcyBhIHJlYWwgYnVnICphbmQqIGltcHJvdmVzIHRoZSB0ZXN0cywgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgZ29vZCBpZGVhIGhlcmUuCgpUaGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgYXJlIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9LVU5JVF9URVNUYCwgYW5kIGBEQU1PTl9WQUREUl9LVU5JVF9URVNUYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgS1VuaXQgb3B0aW9ucywgYnV0IHRob3NlIHNlZW0gdG8gYmUgdGhlIGNvcnJlY3QgdGFyZ2V0cyBmb3IgZ2VuZXJhdGluZyB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fS1VOSVRfVEVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTE1PWNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQxMwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGJlYXQuIFllcy4gVGhhdCYjMzk7cyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDE6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz00Nz1jb25maWcgREFNT05fUEFERFJcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjMxCgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246CgoqKkRBTU9OIFBhdGNoIEFuYWx5c2lzIGFuZCBOZXh0IFN0ZXBzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgcmVsYXRlZCB0byBEQU1PTi4gVGhlIGtleSBjb25maWd1cmF0aW9ucyBJJiMzOTttIHNlZWluZyBhcmUgcmVsYXRlZCB0byBpdHMgdmlydHVhbCBhZGRyZXNzIChWQUREUikgYW5kIHBoeXNpY2FsIGFkZHJlc3MgKFBBRERSKSBtb25pdG9yaW5nIGNhcGFiaWxpdGllcywgc3lzZnMgaW50ZWdyYXRpb24sIGFuZCB0aGUgS1VuaXQgdGVzdGluZyBmcmFtZXdvcmsuIFRoZSBwcmVzZW5jZSBvZiBib3RoIFZBRERSIGFuZCBQQUREUiB2YXJpYW50cyBpbiB0aGUgS1VuaXQgdGVzdHMgaXMgaW50ZXJlc3RpbmcuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSwgYGxhc3RfYXBwbGllZGAsIHdpdGhpbiBgZGFtb25fbmV3X3NjaGVtZWAuIFRoZSBwb3RlbnRpYWwgaXNzdWUgaXMgdGhhdCB0aGlzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaXMgbGVhZGluZyB0byBpbmNvcnJlY3QgZm9saW8gc2tpcHBpbmcgYW5kIHJlZmNvdW50IGNvcnJ1cHRpb24gd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCBhbmQgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gLiBFc3NlbnRpYWxseSwgd2UmIzM5O3JlIGF0IHJpc2sgb2YgbGVha2luZyBmb2xpb3Mgb3IgaW5jb3JyZWN0bHkgbWFuYWdpbmcgdGhlaXIgbGlmZXRpbWVzLCB3aGljaCBjb3VsZCBoYXZlIHNlcmlvdXMgbWVtb3J5IG1hbmFnZW1lbnQgY29uc2VxdWVuY2VzLgoKR2l2ZW4gdGhhdCB0aGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBJJiMzOTttIHRoaW5raW5nIHRoaXMgZGVmaW5pdGVseSBuZWVkcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGltcHJvdmVtZW50IHRoYXQgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIGx1cmtpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYnVncy4gVGltZSB0byBjYWxsIGl0IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fS1VOSVRfVEVTVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUl9LVU5JVF9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvJiMzNDssCiAgICAmIzM0O2RhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYGxhc3RfYXBwbGllZGAgaW4gYGRhbW9uX25ld19zY2hlbWVgIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFuZG9tIGZvbGlvcyBiZWluZyBpbmNvcnJlY3RseSBza2lwcGVkIGFuZCB0aGVpciByZWZlcmVuY2UgY291bnRzIGRyb3BwZWQgaW4gYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGFuZCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AuIEl0IGFsc28gYWRkcyBzYWZldHkgY2hlY2tzIHRvIERBTU9OIGt1bml0IHRlc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9LVU5JVF9URVNUJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSX0tVTklUX1RFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8mIzM0OywKICAgICYjMzQ7ZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBgbGFzdF9hcHBsaWVkYCBpbiBgZGFtb25fbmV3X3NjaGVtZWAgd2hpY2ggY291bGQgbGVhZCB0byByYW5kb20gZm9saW9zIGJlaW5nIGluY29ycmVjdGx5IHNraXBwZWQgYW5kIHRoZWlyIHJlZmVyZW5jZSBjb3VudHMgZHJvcHBlZCBpbiBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AgYW5kIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYC4gSXQgYWxzbyBhZGRzIHNhZmV0eSBjaGVja3MgdG8gREFNT04ga3VuaXQgdGVzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozNjoxMS42NjU3NzAxMzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ4NzMyNTAxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX0tVTklUX1RFU1RcIixcbiAgICBcIkRBTU9OX1ZBRERSX0tVTklUX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9uZXdfc2NoZW1lXCIsXG4gICAgXCJkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvXCIsXG4gICAgXCJkYW1vc192YV9zdGF0X3BtZF9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYGxhc3RfYXBwbGllZGAgaW4gYGRhbW9uX25ld19zY2hlbWVgIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFuZG9tIGZvbGlvcyBiZWluZyBpbmNvcnJlY3RseSBza2lwcGVkIGFuZCB0aGVpciByZWZlcmVuY2UgY291bnRzIGRyb3BwZWQgaW4gYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGFuZCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AuIEl0IGFsc28gYWRkcyBzYWZldHkgY2hlY2tzIHRvIERBTU9OIGt1bml0IHRlc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozNjoxMS42NjU3NzYzMjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTMyMTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdiYzBiMTA3NDM2ODcwYzQ1ZDMzZTMyZGE5NTkzYmI5N2FiNGMyOWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTggMDE6MzY6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggNjAzYjEwMmZmODBmOWMuLjIwZDI2N2M2MTVmYWZiIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC03MDUsNiArNzA1LDcgQEAgc3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbiBcXHRzY2hlbWUtXFx1MDAzZXN0YXQgPSAoc3RydWN0IGRhbW9zX3N0YXQpe307XFxuIFxcdHNjaGVtZS1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyA9IDA7XFxuK1xcdHNjaGVtZS1cXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlbGlzdCk7XFxuIFxcbiBcXHRzY2hlbWUtXFx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbmluZGV4IGViYTY0Mzc2MjEzMmY3Li40YTUzNmQ0MWNkYjJkMCAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5AQCAtMTU1LDYgKzE1NSwxMCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2F0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0ci1cXHUwMDNlYWdlID0gMTA7XFxuIFxcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XFxuIFxcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCAyNSk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAyKTtcXG4rXFx0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gMilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYXIuc3RhcnQsIDB1bCk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vhci5lbmQsIDI1dWwpO1xcbiBcXG5AQCAtMTY2LDYgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgcl9uZXctXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYWdlLCByX25ldy1cXHUwMDNlYWdlKTtcXG4gXFxuK291dDpcXG4gXFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XFxuIH1cXG4gXFxuQEAgLTgzNCw2ICs4MzksNyBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiBcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCwgKm5leHQ7XFxuIFxcdGJvb2wgc2tpcCA9IHRydWU7XFxuIFxcdGludCBpO1xcbitcXHRpbnQgbnJfZHN0ID0gMCwgbnJfc3JjID0gMDtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkc3QuZ29hbHMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c3JjLmdvYWxzKTtcXG5AQCAtODU2LDYgKzg2MiwxNCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiBcXG4gXFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZkc3QsIFxcdTAwMjZzcmMpO1xcbiBcXG4rXFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBcXHUwMDI2ZHN0KVxcbitcXHRcXHRucl9kc3QrKztcXG4rXFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBcXHUwMDI2c3JjKVxcbitcXHRcXHRucl9zcmMrKztcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdCwgbnJfc3JjKTtcXG4rXFx0aWYgKG5yX2RzdCAhPSBucl9zcmMpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0aSA9IDA7XFxuIFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgKFxcdTAwMjZkc3QpKSB7XFxuIFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBnb2FsLVxcdTAwM2VtZXRyaWMsIHNyY19nb2Fsc1tpXS5tZXRyaWMpO1xcbkBAIC0xMDAzLDYgKzEwMTcsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiBcXHRza2lwID0gZmFsc2U7XFxuIFxcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0Lm5yX2Rlc3RzLCBzcmNfbnJfZGVzdHMpO1xcbitcXHRpZiAoZHN0Lm5yX2Rlc3RzICE9IHNyY19ucl9kZXN0cylcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkc3QubnJfZGVzdHM7IGkrKykge1xcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0Lm5vZGVfaWRfYXJyW2ldLCBzcmNfbm9kZV9pZF9hcnJbaV0pO1xcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LndlaWdodF9hcnJbaV0sIHNyY193ZWlnaHRfYXJyW2ldKTtcXG5AQCAtMTI2MSwxNCArMTI3NywxOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiBcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJzcmMgdGFyZ2V0IHNldHVwIGZhaWxcXFwiKTtcXG4gXFx0fVxcbiBcXHRkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7XFxuK1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xcbitcXHRpZiAoZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSAhPSBucl9leHBlY3RfcmVnaW9ucylcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRpID0gMDtcXG4gXFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIGRzdF90YXJnZXQpIHtcXG4gXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLnN0YXJ0LCBleHBlY3Rfc3RhcnRfZW5kW2ldWzBdKTtcXG4gXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLmVuZCwgZXhwZWN0X3N0YXJ0X2VuZFtpXVsxXSk7XFxuIFxcdFxcdGkrKztcXG4gXFx0fVxcbi1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xcbi1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgaSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xcbitcXG4rb3V0OlxcbiBcXHRkYW1vbl9mcmVlX3RhcmdldChkc3RfdGFyZ2V0KTtcXG4gXFx0ZGFtb25fZnJlZV90YXJnZXQoc3JjX3RhcmdldCk7XFxuIH1cXG5AQCAtMTM2MCw2ICsxMzgxLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLnN0YXJ0LCAxKTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLmVuZCwgMik7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAyKTtcXG4rXFx0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gMilcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcdHIyID0gZGFtb25fbmV4dF9yZWdpb24ocik7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi1cXHUwMDNlYXIuc3RhcnQsIDIpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcjItXFx1MDAzZWFyLmVuZCwgNCk7XFxuQEAgLTEzNzQsMTEgKzEzOTcsMTQgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLnN0YXJ0LCAyKTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLmVuZCwgNik7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAyKTtcXG4rXFx0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gMilcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcdHIyID0gZGFtb25fbmV4dF9yZWdpb24ocik7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi1cXHUwMDNlYXIuc3RhcnQsIDYpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcjItXFx1MDAzZWFyLmVuZCwgOCk7XFxuIFxcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIyLCB0KTtcXG4gXFxuK291dDpcXG4gXFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XFxuIFxcdGRhbW9zX2ZyZWVfZmlsdGVyKGYpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oXFxuaW5kZXggNjFmODQ0MzM2ZmZiNTAuLjZhOTU0NDFkMTkzYWViIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oXFxuQEAgLTE1OCwxMiArMTU4LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX3Rlc3RfYXBwbHlfdGhyZWVfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuIFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInNlY29uZCBkYW1vbl9zZXRfcmVnaW9ucygpIGZhaWxcXFwiKTtcXG4gXFx0fVxcbiBcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIG5yX2V4cGVjdGVkIC8gMik7XFxuK1xcdGlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IG5yX2V4cGVjdGVkIC8gMilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZXhwZWN0ZWQgLyAyOyBpKyspIHtcXG4gXFx0XFx0ciA9IF9fbnRoX3JlZ2lvbl9vZih0LCBpKTtcXG4gXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLnN0YXJ0LCBleHBlY3RlZFtpICogMl0pO1xcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYXIuZW5kLCBleHBlY3RlZFtpICogMiArIDFdKTtcXG4gXFx0fVxcbiBcXG4rb3V0OlxcbiBcXHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBOVUxMKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MzY6MTIuMjc2MDQzNDEyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzQyNjI5Njc5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX0tVTklUX1RFU1RcIixcbiAgICBcIkRBTU9OX1ZBRERSX0tVTklUX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9uZXdfc2NoZW1lXCIsXG4gICAgXCJkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvXCIsXG4gICAgXCJkYW1vc192YV9zdGF0X3BtZF9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYGxhc3RfYXBwbGllZGAgaW4gYGRhbW9uX25ld19zY2hlbWVgIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFuZG9tIGZvbGlvcyBiZWluZyBpbmNvcnJlY3RseSBza2lwcGVkIGFuZCB0aGVpciByZWZlcmVuY2UgY291bnRzIGRyb3BwZWQgaW4gYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGFuZCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AuIEl0IGFsc28gYWRkcyBzYWZldHkgY2hlY2tzIHRvIERBTU9OIGt1bml0IHRlc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiYzBiMTA3NDM2ODcwYzQ1ZDMzZTMyZGE5NTkzYmI5N2FiNGMyOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMTozNjoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjAzYjEwMmZmODBmOWMuLjIwZDI2N2M2MTVmYWZiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC03MDUsNiArNzA1LDcgQEAgc3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjaGVtZS1cdTAwM2VvcHNfZmlsdGVycyk7XG4gXHRzY2hlbWUtXHUwMDNlc3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTtcbiBcdHNjaGVtZS1cdTAwM2VtYXhfbnJfc25hcHNob3RzID0gMDtcbitcdHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWxpc3QpO1xuIFxuIFx0c2NoZW1lLVx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBlYmE2NDM3NjIxMzJmNy4uNGE1MzZkNDFjZGIyZDAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTE1NSw2ICsxNTUsMTAgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRyLVx1MDAzZWFnZSA9IDEwO1xuIFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcbiBcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCAyNSk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMik7XG4rXHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSAyKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCAwdWwpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCAyNXVsKTtcbiBcbkBAIC0xNjYsNiArMTcwLDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgcl9uZXctXHUwMDNlYWdlKTtcbiBcbitvdXQ6XG4gXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbiB9XG4gXG5AQCAtODM0LDYgKzgzOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCwgKm5leHQ7XG4gXHRib29sIHNraXAgPSB0cnVlO1xuIFx0aW50IGk7XG4rXHRpbnQgbnJfZHN0ID0gMCwgbnJfc3JjID0gMDtcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRzdC5nb2Fscyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzcmMuZ29hbHMpO1xuQEAgLTg1Niw2ICs4NjIsMTQgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcdTAwMjZkc3QsIFx1MDAyNnNyYyk7XG4gXG4rXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNmRzdClcbitcdFx0bnJfZHN0Kys7XG4rXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNnNyYylcbitcdFx0bnJfc3JjKys7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0LCBucl9zcmMpO1xuK1x0aWYgKG5yX2RzdCAhPSBucl9zcmMpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aSA9IDA7XG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIChcdTAwMjZkc3QpKSB7XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBnb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWxzW2ldLm1ldHJpYyk7XG5AQCAtMTAwMyw2ICsxMDE3LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfZGVzdHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcdHNraXAgPSBmYWxzZTtcbiBcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QubnJfZGVzdHMsIHNyY19ucl9kZXN0cyk7XG4rXHRpZiAoZHN0Lm5yX2Rlc3RzICE9IHNyY19ucl9kZXN0cylcbitcdFx0Z290byBvdXQ7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkc3QubnJfZGVzdHM7IGkrKykge1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0Lm5vZGVfaWRfYXJyW2ldLCBzcmNfbm9kZV9pZF9hcnJbaV0pO1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LndlaWdodF9hcnJbaV0sIHNyY193ZWlnaHRfYXJyW2ldKTtcbkBAIC0xMjYxLDE0ICsxMjc3LDE5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdGt1bml0X3NraXAodGVzdCwgXCJzcmMgdGFyZ2V0IHNldHVwIGZhaWxcIik7XG4gXHR9XG4gXHRkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7XG4rXG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xuK1x0aWYgKGRhbW9uX25yX3JlZ2lvbnMoZHN0X3RhcmdldCkgIT0gbnJfZXhwZWN0X3JlZ2lvbnMpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aSA9IDA7XG4gXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgZHN0X3RhcmdldCkge1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5zdGFydCwgZXhwZWN0X3N0YXJ0X2VuZFtpXVswXSk7XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLmVuZCwgZXhwZWN0X3N0YXJ0X2VuZFtpXVsxXSk7XG4gXHRcdGkrKztcbiBcdH1cbi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKGRzdF90YXJnZXQpLCBucl9leHBlY3RfcmVnaW9ucyk7XG4tXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgaSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xuK1xuK291dDpcbiBcdGRhbW9uX2ZyZWVfdGFyZ2V0KGRzdF90YXJnZXQpO1xuIFx0ZGFtb25fZnJlZV90YXJnZXQoc3JjX3RhcmdldCk7XG4gfVxuQEAgLTEzNjAsNiArMTM4MSw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5zdGFydCwgMSk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5lbmQsIDIpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDIpO1xuK1x0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gMilcbitcdFx0Z290byBvdXQ7XG4gXHRyMiA9IGRhbW9uX25leHRfcmVnaW9uKHIpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHIyLVx1MDAzZWFyLnN0YXJ0LCAyKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi1cdTAwM2Vhci5lbmQsIDQpO1xuQEAgLTEzNzQsMTEgKzEzOTcsMTQgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCAyKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLmVuZCwgNik7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMik7XG4rXHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSAyKVxuK1x0XHRnb3RvIG91dDtcbiBcdHIyID0gZGFtb25fbmV4dF9yZWdpb24ocik7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcjItXHUwMDNlYXIuc3RhcnQsIDYpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHIyLVx1MDAzZWFyLmVuZCwgOCk7XG4gXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyMiwgdCk7XG4gXG4rb3V0OlxuIFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XG4gXHRkYW1vc19mcmVlX2ZpbHRlcihmKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhcbmluZGV4IDYxZjg0NDMzNmZmYjUwLi42YTk1NDQxZDE5M2FlYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhcbisrKyBiL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhcbkBAIC0xNTgsMTIgKzE1OCwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb190ZXN0X2FwcGx5X3RocmVlX3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0LFxuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwic2Vjb25kIGRhbW9uX3NldF9yZWdpb25zKCkgZmFpbFwiKTtcbiBcdH1cbiBcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCBucl9leHBlY3RlZCAvIDIpO1xuK1x0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gbnJfZXhwZWN0ZWQgLyAyKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2V4cGVjdGVkIC8gMjsgaSsrKSB7XG4gXHRcdHIgPSBfX250aF9yZWdpb25fb2YodCwgaSk7XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCBleHBlY3RlZFtpICogMl0pO1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5lbmQsIGV4cGVjdGVkW2kgKiAyICsgMV0pO1xuIFx0fVxuIFxuK291dDpcbiBcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM2OjEyLjI3NjA0NTM0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjM2NTExNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBpdCB0b3VjaGVzIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCwgYW5kIGBtbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oYC5cIiBTdGFuZGFyZCBzdHVmZiwgY29yZSBjb2RlIGFuZCBzb21lIEtVbml0IHRlc3RzLlxuXG5UaGUgYWN0dWFsIGNvcmUgY2hhbmdlIGluIGBtbS9kYW1vbi9jb3JlLmNgIGlzIGp1c3Qgb25lIGxpbmU6IGBzY2hlbWUtXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtgIOKAkyBzaW1wbGUgaW5pdGlhbGl6YXRpb24uIE5vdGhpbmcgZmxhc2h5LiBJdCdzIGluaXRpYWxpemluZyBhIHBvaW50ZXIsIGBsYXN0X2FwcGxpZWRgLCB0byBOVUxMIHdpdGhpbiB0aGUgYGRhbW9uX25ld19zY2hlbWVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGhhcyBhbnkgc3VidGxlIHNpZGUgZWZmZWN0cyBvciBwb3RlbnRpYWwgZm9yIGZ1enppbmcuXG5cbmBkYW1vbl9uZXdfc2NoZW1lYCB1c2VzIGBrbWFsbG9jYCB0byBhbGxvY2F0ZSBhIG5ldyBgc3RydWN0IGRhbW9zYC4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoaXMgYHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO2AgbGluZSB3aXRoaW4gdGhlIGBkYW1vbl9uZXdfc2NoZW1lYCBmdW5jdGlvbiBhbmQgbW9yZSBicm9hZGx5LCBpdHMgdXNlIGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuIERvZXMgdGhlIGBsYXN0X2FwcGxpZWRgIHBvaW50ZXIgZ2V0IHVwZGF0ZWQgbGF0ZXIsIGFuZCBob3cgaXMgaXQgdXNlZD8gRG9lcyBpdCBwb3RlbnRpYWxseSBjYXVzZSBhbnkgaXNzdWVzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgb3IgY29uY3VycmVuY3k/IElzIGl0IGludm9sdmVkIGluIGFueSBjb250cm9sIGZsb3cgZGVjaXNpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlIGFuZCB1c2FnZSB0byBkZXRlcm1pbmUgaWYgdGhpcyBzaW5nbGUgbGluZSBoYXMgYW55IGZ1bmN0aW9uYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MzY6MTguMzk5Njk5MTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODc4NzQzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X3NjaGVtZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA0ND12b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDUtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDY6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0Ny1cXHRcXHRcXHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NjY5PXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02ODEtXFxubW0vZGFtb24vY29yZS5jOjY4MjpzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYy02ODMtXFx0XFx0XFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE0NzE9c3RhdGljIGludCBkYW1vbl9jb21taXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDg5LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDkwOlxcdFxcdG5ld19zY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxcdTAwMjZzcmNfc2NoZW1lLVxcdTAwM2VwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYy0xNDkxLVxcdFxcdFxcdFxcdHNyY19zY2hlbWUtXFx1MDAzZWFjdGlvbixcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTg4PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5NS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjE5NjpcXHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5Ny1cXHRcXHRcXHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xODAtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE4MTpcXHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTgyLVxcdFxcdFxcdFxcdTAwMjZwYXR0ZXJuLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5NzA9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMDctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwMDg6XFx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVxcdTAwM2VhY3Rpb24sXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMDktXFx0XFx0XFx0c3lzZnNfc2NoZW1lLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cywgXFx1MDAyNnF1b3RhLCBcXHUwMDI2d21hcmtzLFxcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMzItXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jOjEzMzpcXHRzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMzQtXFx0XFx0XFx0LyogYWNjZXNzIHBhdHRlcm4gKi9cXG4tLVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZClcXG4tLVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTg4LVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jOjg5OlxcdHNjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtOTAtXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MzY6MjEuMjg3NjA0MDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3MzA3NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHNwZWFraW5nIGZyb20gdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBTdHJ1Y3QgQWxsb2NhdGlvbiBpbiBgZGFtb25fbmV3X3NjaGVtZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgYGRhbW9uX25ld19zY2hlbWVgIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgaXQncyBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBvZiBpdHMgcHJpbWFyeSBkYXRhIHN0cnVjdHVyZS4gSSdtIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gYSBmZXcga2V5IHRoaW5ncyBoZXJlLiBGaXJzdCwgaXMgaXQgdXNpbmcgYSBzdGF0aWMsIHN0YWNrLCBvciBoZWFwIGFsbG9jYXRpb24/IFNlY29uZCwgd2hhdCdzIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5PyBJcyBpdCBhIHNpbXBsZSBgbWFsbG9jYCAob3IgaXRzIGtlcm5lbCBlcXVpdmFsZW50KSBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGxpa2UgYSBjdXN0b20gYWxsb2NhdG9yLCBtYXliZSB1c2luZyBhIGJ1ZGR5IHN5c3RlbSBvciBzbGFiIGFsbG9jYXRvciBmb3IgZWZmaWNpZW5jeT8gQW5kIHRoaXJkLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIHdpdGggdGhlIGFsaWdubWVudD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhbnkgaXNzdWVzIHRoYXQgY291bGQgbGVhZCB0byBmYWxzZSBzaGFyaW5nIG9yIHBlcmZvcm1hbmNlIHBlbmFsdGllcyBvbiBtdWx0aS1jb3JlIHN5c3RlbXMsIGVzcGVjaWFsbHkgaWYgdGhlIHN0cnVjdCBpcyBmcmVxdWVudGx5IGFjY2Vzc2VkIG9yIG1vZGlmaWVkPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGlzIGFsbG9jYXRpb24gc3RyYXRlZ3kgb24gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmlza3Mgb2YgZnJhZ21lbnRhdGlvbiBvciBtZW1vcnkgbGVha3MgZG93biB0aGUgbGluZS4gSSBhbSBsb29raW5nIGZvciBhIHN1Y2NpbmN0IGFuZCBlZmZpY2llbnQgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MzY6MjQuNTQ0OTEzNDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODA6XFx0fVxcbiA2ODE6XFx0XFxuIDY4MjpcXHRzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbiA2ODM6XFx0XFx0XFx0XFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxcbiA2ODQ6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cyxcXG4gNjg1OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuIDY4NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxcbiA2ODc6XFx0XFx0XFx0XFx0aW50IHRhcmdldF9uaWQpXFxuIDY4ODpcXHR7XFxuIDY4OTpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG4gNjkwOlxcdFxcbiA2OTE6XFx0XFx0c2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7XFxuIDY5MjpcXHRcXHRpZiAoIXNjaGVtZSlcXG4gNjkzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2OTQ6XFx0XFx0c2NoZW1lLVxcdTAwM2VwYXR0ZXJuID0gKnBhdHRlcm47XFxuIDY5NTpcXHRcXHRzY2hlbWUtXFx1MDAzZWFjdGlvbiA9IGFjdGlvbjtcXG4gNjk2OlxcdFxcdHNjaGVtZS1cXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgPSBhcHBseV9pbnRlcnZhbF91cztcXG4gNjk3OlxcdFxcdC8qXFxuIDY5ODpcXHRcXHQgKiBuZXh0X2FwcGx5X3NpcyB3aWxsIGJlIHNldCB3aGVuIGtkYW1vbmQgc3RhcnRzLiAgV2hpbGUga2RhbW9uZCBpc1xcbiA2OTk6XFx0XFx0ICogcnVubmluZywgaXQgd2lsbCBhbHNvIHVwZGF0ZWQgd2hlbiBpdCBpcyBhZGRlZCB0byB0aGUgREFNT04gY29udGV4dCxcXG4gNzAwOlxcdFxcdCAqIG9yIGRhbW9uX2F0dHJzIGFyZSB1cGRhdGVkLlxcbiA3MDE6XFx0XFx0ICovXFxuIDcwMjpcXHRcXHRzY2hlbWUtXFx1MDAzZW5leHRfYXBwbHlfc2lzID0gMDtcXG4gNzAzOlxcdFxcdHNjaGVtZS1cXHUwMDNld2Fsa19jb21wbGV0ZWQgPSBmYWxzZTtcXG4gNzA0OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZWNvcmVfZmlsdGVycyk7XFxuIDcwNTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2NoZW1lLVxcdTAwM2VvcHNfZmlsdGVycyk7XFxuIDcwNjpcXHRcXHRzY2hlbWUtXFx1MDAzZXN0YXQgPSAoc3RydWN0IGRhbW9zX3N0YXQpe307XFxuIDcwNzpcXHRcXHRzY2hlbWUtXFx1MDAzZW1heF9ucl9zbmFwc2hvdHMgPSAwO1xcbiA3MDg6XFx0XFx0c2NoZW1lLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbiA3MDk6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlbGlzdCk7XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdHNjaGVtZS1cXHUwMDNlcXVvdGEgPSAqKGRhbW9zX3F1b3RhX2luaXQocXVvdGEpKTtcXG4gNzEyOlxcdFxcdC8qIHF1b3RhLmdvYWxzIHNob3VsZCBiZSBzZXBhcmF0ZWx5IHNldCBieSBjYWxsZXIgKi9cXG4gNzEzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLmdvYWxzKTtcXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFx0c2NoZW1lLVxcdTAwM2V3bWFya3MgPSAqd21hcmtzO1xcbiA3MTY6XFx0XFx0c2NoZW1lLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkID0gdHJ1ZTtcXG4gNzE3OlxcdFxcbiA3MTg6XFx0XFx0c2NoZW1lLVxcdTAwM2VtaWdyYXRlX2Rlc3RzID0gKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzKXt9O1xcbiA3MTk6XFx0XFx0c2NoZW1lLVxcdTAwM2V0YXJnZXRfbmlkID0gdGFyZ2V0X25pZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MzY6MjQuNTQ1MDg1MjYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQwNjA0NDE2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGttYWxsb2Nfb2JqYCBhbmQgVW5yYXZlbGluZyBhIFBvdGVudGlhbCBCdWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIFRoaXMgYGttYWxsb2Nfb2JqKCpzY2hlbWUpYC4uLiB0aGF0IGxvb2tzIHN1c3BpY2lvdXNseSBsaWtlIGEgbWFjcm8gb3Igd3JhcHBlciBhcm91bmQgYGttYWxsb2NgLiBJdCdzIGxpa2VseSB0cnlpbmcgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYHNjaGVtZWAgc3RydWN0dXJlLiAgSSdtIGJldHRpbmcgaXQncyBzb21ldGhpbmcgbGlrZSBga21hbGxvYyhzaXplb2YoKnNjaGVtZSksIEdGUF9LRVJORUwpYCwgcHJldHR5IHN0YW5kYXJkIHN0dWZmLiBXYWl0IGEgbWludXRlLi4uICBga21hbGxvY19vYmpgIGlzbid0IHJpbmdpbmcgYW55IGJlbGxzLiBUaGF0J3Mgbm90IHN0YW5kYXJkIGtlcm5lbCBjb2RlLiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgaXQgYWN0dWFsbHkgKmlzKi4gTGV0J3MgZ28gbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBga21hbGxvY19vYmpgLlxuXG4uLi5SaWdodCwgbm93IHRoYXQgSSBrbm93IHdoYXQgYGttYWxsb2Nfb2JqYCBpcyBkZWZpbmVkIGFzLCB0aGUgY29kZSBtYWtlcyBtb3JlIHNlbnNlLiBUaGUga2lja2VyIGlzLCBga21hbGxvY2AgZG9lc24ndCB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGJ5IGRlZmF1bHQuIFRoYXQgbWVhbnMgdGhlIGBzY2hlbWUtXHUwMDNlbGFzdF9hcHBsaWVkYCBtZW1iZXIgKmNvdWxkKiBoYXZlIGJlZW4gdW5pbml0aWFsaXplZCBiZWZvcmUgdGhpcyBwYXRjaCEgVGhhdCBjb3VsZCBsZWFkIHRvIHNvbWUgbmFzdHksIG5vbi1kZXRlcm1pbmlzdGljIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyIHRvIHNlZSBpZiB0aGF0J3MgYSByZWFsIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjc1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6Mzc6MjguNjA1NTMwNTY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzkzMDg4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21hbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNTUyNyBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTIwMz1ub24tXFxcXCBgYE5VTExgYCwgbG9ja2xlc3NseSBhY2Nlc3NpbmcgdGhlIGBgLVxcdTAwM2VhYGAgYW5kIGBgLVxcdTAwM2ViYGAgZmllbGRzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIwOC0gICAgICAgMiB7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjIwOTogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIxMC0gICAgICAgNCAgIGlmICghcClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMjU9dGhlaXIgcmlnaHRzIHRvIHJlb3JkZXIgdGhpcyBjb2RlIGFzIGZvbGxvd3M6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjMwLSAgICAgICAyIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjMxOiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjMyLSAgICAgICA0ICAgaWYgKCFwKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTI2MT1zaG93cyBhbiBleGFtcGxlIG9mIGluc2VydGlvbjpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yNjYtICAgICAgIDIge1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyNjc6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yNjgtICAgICAgIDQgICBpZiAoIXApXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdD0yNjc9VGhlIFJDVSB2ZXJzaW9uIG9mIGF1ZGl0X3VwZF9ydWxlKCkgaXMgYXMgZm9sbG93czo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdC0yNzgtXFx0XFx0XFx0aWYgKCFhdWRpdF9jb21wYXJlX3J1bGUocnVsZSwgXFx1MDAyNmUtXFx1MDAzZXJ1bGUpKSB7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3Q6Mjc5OlxcdFxcdFxcdFxcdG5lID0ga21hbGxvY19vYmooKmVudHJ5LCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdC0yODAtXFx0XFx0XFx0XFx0aWYgKG5lID09IE5VTEwpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0PTQ0MT11c2VzIG9mIFJDVSBtYXkgYmUgZm91bmQgaW4gbGlzdFJDVS5yc3QgYW5kIE5NSS1SQ1UucnN0Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC00NzAtXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdDo0NzE6XFx0XFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC00NzItXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZmb29fbXV0ZXgpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdD01NTM9VGhlIGZvb191cGRhdGVfYSgpIGZ1bmN0aW9uIG1pZ2h0IHRoZW4gYmUgd3JpdHRlbiBhcyBmb2xsb3dzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNTcyLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q6NTczOlxcdFxcdG5ld19mcCA9IGttYWxsb2Nfb2JqKCpuZXdfZnApO1xcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNTc0LVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Zm9vX211dGV4KTtcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q9Mzk9a3JlZl9pbml0IGFzIHNvOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtNDItXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdDo0MzogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00NC0gICAgIGlmICghZGF0YSlcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q9ODE9dGhyZWFkIHRvIHByb2Nlc3M6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC0xMDItXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6MTAzOlxcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC0xMDQtXFx0aWYgKCFkYXRhKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD0zODM9dG8gcHJvdGVjdCB0aGUgY2FjaGUgYW5kIGFsbCB0aGUgb2JqZWN0cyB3aXRoaW4gaXQuIEhlcmUncyB0aGUgY29kZTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0NC1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ0NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDQ2LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQ5OT13aGljaCBhcmUgdGFrZW4gYXdheSwgYW5kIHRoZSBgYCtgYCBhcmUgbGluZXMgd2hpY2ggYXJlIGFkZGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MTktXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo1MjA6ICAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MjEtICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00OTg9d29ya3MgcGVyZmVjdGx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMC0gIHJhd19zcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0OjUwMTogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NTA3PXByZWVtcHRpb24gb24gUFJFRU1QVF9SVCBrZXJuZWxzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwOS0gIHNwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTEwOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MTEtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05Mzg9VGhlIGtlcm5lbCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgcHVycG9zZSBtZW1vcnkgYWxsb2NhdG9yczpcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQ0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgcGFzc2luZyBhIHNpemUgb2YgYSBzdHJ1Y3QgaXMgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NDg6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1OD1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYW4gYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2MS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NjI6XFx0cCA9IGttYWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzg2PW1heSBoZWxwIHdpdGggYWxpZ25tZW50LCB3cmFwLWFyb3VuZCwgb3IgYWRkaXRpb25hbCBoYXJkZW5pbmcuIFRoZVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDozODc6a21hbGxvY19vYmooKS1mYW1pbHkgb2YgbWFjcm9zIHByb3ZpZGUgdGhpcyBpbnRyb3NwZWN0aW9uLCB3aGljaCBjYW4gYmVcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzg4LXVzZWQgZm9yIHRoZSBjb21tb24gY29kZSBwYXR0ZXJucyBmb3Igc2luZ2xlLCBhcnJheSwgYW5kIGZsZXhpYmxlIG9iamVjdFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTM5OS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAwOlxcdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDEtXFx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMjpcXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDMtXFx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVxcdHB0ciA9IGttYWxsb2NfZmxleCgqcHRyLCBmbGV4X21lbWJlciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDU6XFx0X19hdXRvX3R5cGUgcHRyID0ga21hbGxvY19vYmooc3RydWN0IGZvbyBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNi1cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0xNzM0PWNhbGxiYWNrOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzM5LSAgICAgICAgICAuLi4uXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjE3NDA6ICAgICAgICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTE3NDEtICAgICAgICAgIHN1YnN0cmVhbS1cXHUwMDNlcnVudGltZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gZGF0YTtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zMzAyPWRlc3RydWN0b3IgZnVuY3Rpb24gaXMgc2V0IGluIHRoZSBgYHByaXZhdGVfZnJlZWBgIGZpZWxkOjpcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzMwMy1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MzMwNDogIHN0cnVjdCBteWRhdGEgKnAgPSBrbWFsbG9jX29iaigqcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTMzMDUtICBody1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gcDtcXG4tLVxcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdD0yNDI9QW5kIFNPQy1zcGVjaWZpYyB1dGlsaXR5IGNvZGUgbWlnaHQgbG9vayBzb21ldGhpbmcgbGlrZTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3QtMjUxLVxcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdDoyNTI6XFx0XFx0cGRhdGEyID0ga21hbGxvY19vYmooKnBkYXRhMik7XFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1My1cXHRcXHQqcGRhdGEyID0gcGRhdGE7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD00MDM9ZSB0dXR0aSBnbGkgb2dnZXR0aSBjaGUgY29udGllbmUuIEVjY28gaWwgY29kaWNlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2NC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo0NjU6ICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NjYtICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTUxOT1zb25vIHF1ZWxsZSByaW1vc3NlLCBtZW50cmUgcXVlbGxlIGBgK2BgIHNvbm8gcXVlbGxlIGFnZ2l1bnRlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTM5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjU0MDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01NDEtICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDg4PW1lbW9yaWEuIFN1IHVuIGtlcm5lbCBub24tUFJFRU1QVF9SVCBpbCBzZWd1ZW50ZSBjb2RpY2UgZnVuemlvbmEgcGVyZmV0dGFtZW50ZTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDkwLSAgcmF3X3NwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0OjQ5MTogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00OTc9UFJFRU1QVF9SVDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDk5LSAgc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAwOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAxLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk0Mj1JbCBtb2RvIHByZWZlcml0byBwZXIgcGFzc2FyZSBsYSBkaW1lbnNpb25lIGRpIHVuYSBzdHJ1dHR1cmEgw6ggaWwgc2VndWVudGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NDY6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU0PUxhIGZvcm1hIHByZWZlcmlkYSBwYXJhIHBhc2FyIGVsIHRhbWHDsW8gZGUgdW5hIGVzdHJ1Y3R1cmEgZXMgbGEgc2lndWllbnRlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk1Ny1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTU4OlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTU5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q9NDY9a3JlZuWPr+S7peWHuueOsOWcqOaVsOaNrue7k+aehOS9k+S4reeahOS7u+S9leWcsOaWueOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTQtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q6NTU6ICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTU2LSAgICAgaWYgKCFkYXRhKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q9NjI9S3JlZuinhOWImVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtMTA4LVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDoxMDk6XFx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC0xMTAtXFx0aWYgKCFkYXRhKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTgxMD1Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Qg44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODE1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo4MTY6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODI0PURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MjktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgzMDpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgzMS1cXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9ODU3PW1hcnZlbF9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODYzLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM6ODY0OlxcdGFwZXIgPSBrbWFsbG9jX29iaigqYXBlcik7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04NjUtXFx0aWYgKGFwZXIgPT0gTlVMTCkgcmV0dXJuIC1FTk9NRU07XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jPTEwMTk9bWFydmVsX2FncF9pbmZvKHZvaWQpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTEwNjEtXFx0ICovXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzoxMDYyOlxcdGFncCA9IGttYWxsb2Nfb2JqKCphZ3ApO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2My1cXHRpZiAoIWFncClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYz01OTA9dGl0YW5fYWdwX3NldHVwKGFscGhhX2FncF9pbmZvICphZ3ApXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNTk2LVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYzo1OTc6XFx0YXBlciA9IGttYWxsb2Nfb2JqKHN0cnVjdCB0aXRhbl9hZ3BfYXBlcnR1cmUpO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTgtXFx0aWYgKGFwZXIgPT0gTlVMTClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYz03MzE9dGl0YW5fYWdwX2luZm8odm9pZClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjItXFx0ICovXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jOjc2MzpcXHRhZ3AgPSBrbWFsbG9jX29iaigqYWdwKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNzY0LVxcdGlmICghYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM9Mjk9cHJvY2Vzc19yZWxvY19mb3JfZ290KEVsZjY0X1JlbGEgKnJlbGEsXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy00OC1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYzo0OTpcXHRnID0ga21hbGxvY19vYmooKmcpO1xcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTUwLVxcdGctXFx1MDAzZW5leHQgPSBjaGFpbnNbcl9zeW1dLm5leHQ7XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYz0yMTE9c3RhdGljIHZvaWQgcGRldl9zYXZlX3NybV9jb25maWcoc3RydWN0IHBjaV9kZXYgKmRldilcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jLTIyMy1cXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYzoyMjQ6XFx0dG1wID0ga21hbGxvY19vYmooKnRtcCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjI1LVxcdGlmICghdG1wKSB7XFxuLS1cXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM9MzU5PXZvaWQgKnVud2luZF9hZGRfdGFibGUoc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCB2b2lkICp0YWJsZV9zdGFydCxcXG4tLVxcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYy0zNjgtXFxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jOjM2OTpcXHR0YWJsZSA9IGttYWxsb2Nfb2JqKCp0YWJsZSk7XFxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jLTM3MC1cXHRpZiAoIXRhYmxlKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTI3ND1zdGF0aWMgaW50IGxvY29tb19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTI3OS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjgwOlxcdHNhdmUgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX3NhdmVfZGF0YSk7XFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTI4MS1cXHRpZiAoIXNhdmUpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM9OTY0PXN0YXRpYyBpbnQgc2ExMTExX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3MS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM6OTcyOlxcdHNhdmUgPSBrbWFsbG9jX29iaihzdHJ1Y3Qgc2ExMTExX3NhdmVfZGF0YSk7XFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3My1cXHRpZiAoIXNhdmUpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmM9NTcyPXN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF90YWJsZV9hZGQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jLTU3Ni1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYzo1Nzc6XFx0c3RydWN0IHVud2luZF90YWJsZSAqdGFiID0ga21hbGxvY19vYmooKnRhYik7XFxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jLTU3OC1cXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jPTUzPXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gKl9nZXRfcHdyZG0oc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmMtMTAxLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jOjEwMjpcXHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmMtMTAzLVxcdGlmIChlbnRyeSkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYz00MDY9c3RhdGljIGludCBfX2luaXQgcHdyZG1zX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVudXNlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDEyLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmM6NDEzOlxcdHB3cnN0ID0ga21hbGxvY19vYmooc3RydWN0IHBvd2VyX3N0YXRlLCBHRlBfQVRPTUlDKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jLTQxNC1cXHRpZiAoIXB3cnN0KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYz0xMTM9c3RhdGljIGludCBfX2luaXQgcHdyZG1zX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVudXNlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMtMTM0LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmM6MTM1OlxcdHB3cnN0ID0ga21hbGxvY19vYmooc3RydWN0IHBvd2VyX3N0YXRlLCBHRlBfQVRPTUlDKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jLTEzNi1cXHRpZiAoIXB3cnN0KVxcbi0tXFxuYXJjaC9hcm0vbW0vcGdkLmMtMTktI2lmZGVmIENPTkZJR19BUk1fTFBBRVxcbmFyY2gvYXJtL21tL3BnZC5jOjIwOiNkZWZpbmUgX3BnZF9hbGxvYyhtbSlcXHRcXHRrbWFsbG9jX29ianMocGdkX3QsIFBUUlNfUEVSX1BHRCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pXFxuYXJjaC9hcm0vbW0vcGdkLmMtMjEtI2RlZmluZSBfcGdkX2ZyZWUobW0sIHBnZClcXHRrZnJlZShwZ2QpXFxuLS1cXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYz03NjQ9c3RhdGljIGludCBjb3ZlcmFnZV9zdGFydChjb25zdCB1bmlvbiBkZWNvZGVfaXRlbSAqdGFibGUpXFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmMtNzY1LXtcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYzo3NjY6XFx0Y292ZXJhZ2UuYmFzZSA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgY292ZXJhZ2VfZW50cnksXFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmMtNzY3LVxcdFxcdFxcdFxcdCAgICAgTUFYX0NPVkVSQUdFX0VOVFJJRVMpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz03NzQ9dm9pZCBrdm1faG9zdF9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqcG11KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODYtXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzo3ODc6XFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNzg4LVxcdGlmICghZW50cnkpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0xMDI9c3RhdGljIHZvaWQgKnZnaWNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTEwNi1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzoxMDc6XFx0aXRlciA9IGttYWxsb2Nfb2JqKCppdGVyKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0xMDgtXFx0aWYgKCFpdGVyKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM9MzY0PXN0YXRpYyB2b2lkICp2Z2ljX2l0c19kZWJ1Z19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc3LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jOjM3ODpcXHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTM3OS1cXHRpZiAoIWl0ZXIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTc0Mz12b2lkIF9faW5pdCB2Z2ljX3NldF9rdm1faW5mbyhjb25zdCBzdHJ1Y3QgZ2ljX2t2bV9pbmZvICppbmZvKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy03NDUtXFx0QlVHX09OKGdpY19rdm1faW5mbyAhPSBOVUxMKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjc0NjpcXHRnaWNfa3ZtX2luZm8gPSBrbWFsbG9jX29iaigqZ2ljX2t2bV9pbmZvKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTc0Ny1cXHRpZiAoZ2ljX2t2bV9pbmZvKVxcbi0tXFxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmM9OTc9c3RhdGljIGludCBfX2luaXQgbmZoZF9pbml0X29uZShpbnQgaWQsIHUzMiBibG9ja3MsIHUzMiBic2l6ZSlcXG4tLVxcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNC1cXG5hcmNoL202OGsvZW11L25mYmxvY2suYzoxMTU6XFx0ZGV2ID0ga21hbGxvY19vYmooc3RydWN0IG5maGRfZGV2aWNlKTtcXG5hcmNoL202OGsvZW11L25mYmxvY2suYy0xMTYtXFx0aWYgKCFkZXYpXFxuLS1cXG5hcmNoL202OGsvbW0va21hcC5jPTEwOD1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqZ2V0X2lvX2FyZWEodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9tNjhrL21tL2ttYXAuYy0xMTItXFxuYXJjaC9tNjhrL21tL2ttYXAuYzoxMTM6XFx0YXJlYSA9IGttYWxsb2Nfb2JqKCphcmVhKTtcXG5hcmNoL202OGsvbW0va21hcC5jLTExNC1cXHRpZiAoIWFyZWEpXFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0yNTM9dTMyIGF1MXh4eF9kYmRtYV9jaGFuX2FsbG9jKHUzMiBzcmNpZCwgdTMyIGRlc3RpZCxcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTMxMi1cXHRcXHRcXHQgKi9cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzozMTM6XFx0XFx0XFx0Y3RwID0ga21hbGxvY19vYmooY2hhbl90YWJfdCwgR0ZQX0FUT01JQyk7XFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzE0LVxcdFxcdFxcdGNoYW5fdGFiX3B0cltpXSA9IGN0cDtcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTM5MT11MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpXFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTQtXFx0ICovXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6NDE1OlxcdGRlc2NfYmFzZSA9ICh1MzIpIGttYWxsb2Nfb2JqcyhhdTF4X2RkbWFfZGVzY190LCBlbnRyaWVzLFxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNi1cXHRcXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYz01OT1zdGF0aWMgaW50IGFwcGx5X3JfbWlwc19oaTE2KHN0cnVjdCBtb2R1bGUgKm1lLCB1MzIgKmxvY2F0aW9uLCBFbGZfQWRkciB2LFxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYy03NC1cXHQgKi9cXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jOjc1OlxcdG4gPSBrbWFsbG9jX29iaigqbik7XFxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYy03Ni1cXHRpZiAoIW4pXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jPTMxMT1zdGF0aWMgaW50IGFwcGx5X3JfbWlwc19oaTE2KHN0cnVjdCBtb2R1bGUgKm1lLCB1aW50MzJfdCAqbG9jYXRpb24sXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jLTMyMC1cXHQgKi9cXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jOjMyMTpcXHRuID0ga21hbGxvY19vYmooKm4pO1xcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIyLVxcdGlmICghbilcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYz0xODg9cGF0X3F1ZXJ5X21vZHVsZSh1bG9uZyBwY2VsbF9sb2MsIHVsb25nIG1vZF9pbmRleClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy0xOTUtXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjE5NjpcXHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5Ny1cXHRpZiAoIXBhX3BkY19jZWxsKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTUzMj1hZGRfc3lzdGVtX21hcF9hZGRyZXNzZXMoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldiwgaW50IG51bV9hZGRycywgXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTM4LVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzo1Mzk6XFx0ZGV2LVxcdTAwM2VhZGRyID0ga21hbGxvY19vYmpzKCpkZXYtXFx1MDAzZWFkZHIsIG51bV9hZGRycyk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTU0MC1cXHRpZighZGV2LVxcdTAwM2VhZGRyKSB7XFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmM9ODE9c3RhdGljIGludCBfX2luaXQgcHJvY2Vzc29yX3Byb2JlKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMtMTEyLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYzoxMTM6XFx0XFx0cGFfcGRjX2NlbGwgPSBrbWFsbG9jX29iaigqcGFfcGRjX2NlbGwpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTQtXFx0XFx0aWYgKCFwYV9wZGNfY2VsbClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz0xNDk9dW53aW5kX3RhYmxlX2FkZChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGJhc2VfYWRkciwgXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTU5LVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYzoxNjA6XFx0dGFibGUgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdW53aW5kX3RhYmxlLCBHRlBfVVNFUik7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTE2MS1cXHRpZiAodGFibGUgPT0gTlVMTClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz00MDY9dm9pZCB1bndpbmRfZnJhbWVfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzayhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy00MTAtXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjQxMTpcXHRyMiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwdF9yZWdzLCBHRlBfQVRPTUlDKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtNDEyLVxcdGlmICghcjIpXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM9OTg0PWludCBfX2luaXQgbnZyYW1fc2Nhbl9wYXJ0aXRpb25zKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMtMTAzMi1cXHRcXHR9XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jOjEwMzM6XFx0XFx0dG1wX3BhcnQgPSBrbWFsbG9jX29iaigqdG1wX3BhcnQpO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDM0LVxcdFxcdGVyciA9IC1FTk9NRU07XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9NzMxPWludCBrdm1fdmNwdV9pb2N0bF9jb25maWdfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzQtXFx0XFx0ICAgIGNmZy1cXHUwMDNlYXJyYXkgLyBQQUdFX1NJWkU7XFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjc3NTpcXHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3Ni1cXHRpZiAoIXBhZ2VzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTg5OD1pbnQga3ZtcHBjX2U1MDBfdGxiX2luaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjkxNTpcXHR2Y3B1X2U1MDAtXFx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVxcdTAwM2VndGxiX2FyY2gsXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNi1cXHRcXHRcXHRcXHRcXHQgICAgS1ZNX0U1MDBfVExCMF9TSVpFICsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYz00NT1zdGF0aWMgaW50IGdyb3cocmhfaW5mb190ICogaW5mbywgaW50IG1heF9ibG9ja3MpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTYtXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jOjU3OlxcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01OC1cXHRpZiAoYmxvY2sgPT0gTlVMTClcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYz0yNTM9cmhfaW5mb190ICpyaF9jcmVhdGUodW5zaWduZWQgaW50IGFsaWdubWVudClcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjAtXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jOjI2MTpcXHRpbmZvID0ga21hbGxvY19vYmooKmluZm8sIEdGUF9BVE9NSUMpO1xcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjItXFx0aWYgKGluZm8gPT0gTlVMTClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jPTk1PXN0YXRpYyBpbnQgaGFzaF9faW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTk4LVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjk5OlxcdG1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBoYXNoX21tX2NvbnRleHQpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEwMC1cXHRpZiAoIW1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNS1cXHRcXHRpZiAoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVxcdTAwM2VzcHQpIHtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYzoxMjY6XFx0XFx0XFx0bW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVxcdTAwM2VzcHQgPSBrbWFsbG9jX29iaihzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlKTtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMjctXFx0XFx0XFx0aWYgKCFtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXFx1MDAzZXNwdCkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTYyMz1zdGF0aWMgaW50IGV2ZW50X3VuaXFfYWRkKHN0cnVjdCByYl9yb290ICpyb290LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmwsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtNjUwLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo2NTE6XFx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtNjUyLVxcdGlmICghZGF0YSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz03NTU9c3RhdGljIGludCBjcmVhdGVfZXZlbnRzX2Zyb21fY2F0YWxvZyhzdHJ1Y3QgYXR0cmlidXRlICoqKmV2ZW50c18sXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MDk6XFx0ZXZlbnRzID0ga21hbGxvY19vYmpzKCpldmVudHMsIGF0dHJfbWF4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxMC1cXHRpZiAoIWV2ZW50cykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1OlxcdGV2ZW50X2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9kZXNjcywgZXZlbnRfaWR4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNi1cXHRpZiAoIWV2ZW50X2Rlc2NzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIwLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MjE6XFx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cXHRpZiAoIWV2ZW50X2xvbmdfZGVzY3MpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTUzLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0OlxcdHBwYzR4eF9oc3RhX21zaS5pcnFfbWFwID0ga21hbGxvY19vYmpzKGludCwgaXJxX2NvdW50KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1NS1cXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jPTQ0PXN0YXRpYyBpbnQgc3B1ZnNfYXR0cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy00OS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jOjUwOlxcdGF0dHIgPSBrbWFsbG9jX29iaigqYXR0cik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy01MS1cXHRpZiAoIWF0dHIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYz02Mjg9dm9pZCBxdWV1ZV9ob3RwbHVnX2V2ZW50KHN0cnVjdCBwc2VyaWVzX2hwX2Vycm9ybG9nICpocF9lcnJsb2cpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzYtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmM6NjM3OlxcdHdvcmsgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcHNlcmllc19ocF93b3JrLCBHRlBfQVRPTUlDKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzgtXFx0aWYgKHdvcmspIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYz0xMTk9aW50IGh2Y3NfZ2V0X3BhcnRuZXJfaW5mbyh1aW50MzJfdCB1bml0X2FkZHJlc3MsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMtMTYyLVxcdFxcdCAqIGh2Y3NfZnJlZV9wYXJ0bmVyX2luZm8oKS4gKi9cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmM6MTYzOlxcdFxcdG5leHRfcGFydG5lcl9pbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh2Y3NfcGFydG5lcl9pbmZvLFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYy0xNjQtXFx0XFx0XFx0XFx0XFx0XFx0R0ZQX0FUT01JQyk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jPTE0ND1zdGF0aWMgdm9pZCBzaG93X2dwY2lfZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE0OS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jOjE1MDpcXHRidWYgPSBrbWFsbG9jX29iaigqYnVmKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE1MS1cXHRpZiAoYnVmID09IE5VTEwpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM9NDM1PXN0YXRpYyBpbnQgcHNlcmllc19tc2lfb3BzX3ByZXBhcmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jLTQ0My1cXHRzdHJ1Y3QgcHNlcmllc19tc2lfZGV2aWNlICpwc2VyaWVzX2RldiBfX2ZyZWUoa2ZyZWUpXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jOjQ0NDpcXHRcXHQ9IGttYWxsb2Nfb2JqKCpwc2VyaWVzX2Rldik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jLTQ0NS1cXHRpZiAoIXBzZXJpZXNfZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jPTEyMD1zdGF0aWMgaW50IHBzZXJpZXNfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQzLVxcdHBkbiA9IHBjaV9nZXRfcGRuKHBkZXYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYzoxNDQ6XFx0cGRuLVxcdTAwM2VwZV9udW1fbWFwID0ga21hbGxvY19vYmpzKCpwZG4tXFx1MDAzZXBlX251bV9tYXAsIG51bV92ZnMpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDUtXFx0aWYgKCFwZG4tXFx1MDAzZXBlX251bV9tYXApXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmM9MTA3Nj1zdGF0aWMgaW50IF9faW5pdCBwc2VyaWVzX3Zhc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmMtMTA4OS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmM6MTA5MDpcXHRodl9jYXBzID0ga21hbGxvY19vYmooKmh2X2NhcHMpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDkxLVxcdGlmICghaHZfY2FwcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYz03MDU9c3RhdGljIGludCB2aW9fY21vX2J1c19wcm9iZShzdHJ1Y3QgdmlvX2RldiAqdmlvZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jLTc0Ny1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmM6NzQ4OlxcdFxcdGRldl9lbnQgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdmlvX2Ntb19kZXZfZW50cnkpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDktXFx0XFx0aWYgKCFkZXZfZW50KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmM9MzUyPXN0YXRpYyBpbnQgZnNsX2xiY19zeXNjb3JlX3N1c3BlbmQodm9pZCAqZGF0YSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jLTM2NC1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYzozNjU6XFx0Y3RybC1cXHUwMDNlc2F2ZWRfcmVncyA9IGttYWxsb2Nfb2JqKHN0cnVjdCBmc2xfbGJjX3JlZ3MpO1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jLTM2Ni1cXHRpZiAoIWN0cmwtXFx1MDAzZXNhdmVkX3JlZ3MpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYz0xNTQ5PXZvaWQgX19pbml0IG1waWNfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYylcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDEtXFx0LyogYWxsb2NhdGUgbWVtb3J5IHRvIHNhdmUgbXBpYyBzdGF0ZSAqL1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jOjE2NDI6XFx0bXBpYy1cXHUwMDNlc2F2ZV9kYXRhID0ga21hbGxvY19vYmpzKCptcGljLVxcdTAwM2VzYXZlX2RhdGEsIG1waWMtXFx1MDAzZW51bV9zb3VyY2VzKTtcXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQzLVxcdEJVR19PTihtcGljLVxcdTAwM2VzYXZlX2RhdGEgPT0gTlVMTCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jPTIzPXZvaWQgX19pbml0IG9mX2luc3RhbnRpYXRlX3J0Yyh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jOjM2OlxcdFxcdFxcdHJlcyA9IGttYWxsb2Nfb2JqKCpyZXMpO1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmMtMzctXFx0XFx0XFx0aWYgKCFyZXMpIHtcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jPTY1ND1zdGF0aWMgaW50IGFkZF9yZWxvY2F0aW9uX3RvX2FjY3VtdWxhdGUoc3RydWN0IG1vZHVsZSAqbWUsIGludCB0eXBlLFxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjY1LVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjY2NjpcXHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjY3LVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjk5LVxcdGlmICghZm91bmQpIHtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3MDA6XFx0XFx0cmVsX2hlYWQgPSBrbWFsbG9jX29iaigqcmVsX2hlYWQpO1xcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTcwMS1cXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTcxMS1cXHRcXHRcXHRidWNrZXQgPVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcxMjpcXHRcXHRcXHRcXHRrbWFsbG9jX29iaihzdHJ1Y3QgdXNlZF9idWNrZXQpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozNzozMS40ODQ4NDYzNDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc3NTIyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW5pdGlhbGl6YXRpb24gb2YgYGxhc3RfYXBwbGllZGAgaW4gdGhlIERBTU9OIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBrbWFsbG9jX29iamAgbWFjcm8gYW5kIHRyYWNpbmcgaXRzIHVzYWdlIGluIHRoZSBEQU1PTiBjb2RlLiBJdCBzZWVtcyBsaWtlIGl0IHdhcyBpbnRyb2R1Y2VkIGluIGEgcGF0Y2gsIHBvdGVudGlhbGx5IHdpdGggYSBjYWxsIGxpa2UgYGttYWxsb2Nfb2JqKCpzY2hlbWUsIEdGUF9LRVJORUwpYC4gSSdtIHNlZWluZyBpdCBzcGVjaWZpY2FsbHkgdXNlZCBpbiBgbW0vZGFtb24vY29yZS5jYCBhcyBgc2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7YC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGFic2VuY2Ugb2YgZXhwbGljaXQgYEdGUGAgZmxhZ3MgaW4gdGhpcyBpbnN0YW50aWF0aW9uLiBJcyBpdCBhIG1hY3JvIHRoYXQgZGVmYXVsdHMgdG8gYEdGUF9LRVJORUxgIGludGVybmFsbHksIG9yIHBlcmhhcHMganVzdCBhIHNob3J0aGFuZCBmb3IgYGttYWxsb2Moc2l6ZW9mKCpzY2hlbWUpLCBHRlBfS0VSTkVMKWA/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC5cblxuUmVnYXJkbGVzcyBvZiB0aGF0IHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbCwgd2hhdCdzIGNydWNpYWwgaGVyZSBpcyB0aGF0IHRoZSBgc2NoZW1lLVx1MDAzZWxhc3RfYXBwbGllZGAgbWVtYmVyIHdhcyB1bmluaXRpYWxpemVkICpwcmlvciogdG8gdGhpcyBwYXRjaC4gVGhpcyBpcyBhIHBvdGVudGlhbCBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MuIE5vdywgYmVmb3JlIEkgZ28gZnVydGhlciwgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIGBsYXN0X2FwcGxpZWRgIGlzIHVzZWQgd2l0aGluIHRoZSBjb2RlLiBMZXQncyB0cmFjZSBhbGwgcmVmZXJlbmNlcyB0byB0aGF0IG1lbWJlciBub3cgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGl0IHBvdGVudGlhbGx5IGJlaW5nIHVuaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDExLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM3OjM1Ljc2MjM3Mjc5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MDc1MzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYXN0X2FwcGxpZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTU1NT1zdHJ1Y3QgZGFtb3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU5Ny1cXHQgKiBvYmplY3RzIGNvdWxkIGJlIHN1Y2ggZXhhbXBsZXMuICBUaGUgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNhblxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo1OTg6XFx0ICogdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMgdW5zZXRzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjU5OTpcXHQgKiBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjAwLVxcdCAqIGZpbmlzaGVkLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MDEtXFx0ICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYwMjpcXHR2b2lkICpsYXN0X2FwcGxpZWQ7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYwMy1cXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTY4Mj1zdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcwNy1cXHRzY2hlbWUtXFx1MDAzZW1heF9ucl9zbmFwc2hvdHMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3MDg6XFx0c2NoZW1lLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy03MDktXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlbGlzdCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIxNz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjUxLVxcdFxcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzLCBjKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzI1MjpcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjUzLVxcdFxcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTIwOT1zdGF0aWMgYm9vbCBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjEyLVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL2RhbW9uL3BhZGRyLmM6MjEzOlxcdGlmIChmb2xpbyA9PSBzLVxcdTAwM2VsYXN0X2FwcGxpZWQpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTIxNC1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yMjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNzMtXFx0Y29uZF9yZXNjaGVkKCk7XFxubW0vZGFtb24vcGFkZHIuYzoyNzQ6XFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxubW0vZGFtb24vcGFkZHIuYy0yNzUtXFx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yNzg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMDctXFx0fVxcbm1tL2RhbW9uL3BhZGRyLmM6MzA4OlxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbm1tL2RhbW9uL3BhZGRyLmMtMzA5LVxcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzU1LVxcdGNvbmRfcmVzY2hlZCgpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzU2OlxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbm1tL2RhbW9uL3BhZGRyLmMtMzU3LVxcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzYwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzgyLVxcdH1cXG5tbS9kYW1vbi9wYWRkci5jOjM4MzpcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG5tbS9kYW1vbi9wYWRkci5jLTM4NC1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Nzg4PXN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vc192YV9pbnZhbGlkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTc5MC17XFxubW0vZGFtb24vdmFkZHIuYzo3OTE6XFx0cmV0dXJuICFmb2xpbyB8fCBmb2xpbyA9PSBzLVxcdTAwM2VsYXN0X2FwcGxpZWQ7XFxubW0vZGFtb24vdmFkZHIuYy03OTItfVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz03OTQ9c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTgyMC1cXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcXG5tbS9kYW1vbi92YWRkci5jOjgyMTpcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG5tbS9kYW1vbi92YWRkci5jLTgyMi1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtODQ2LVxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbm1tL2RhbW9uL3ZhZGRyLmM6ODQ3OlxcdFxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbm1tL2RhbW9uL3ZhZGRyLmMtODQ4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6Mzc6MzguMjIzMTMwODM0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDUyMTYwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgREFNT04ncyBgbGFzdF9hcHBsaWVkYCBJc3N1ZSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZSwgYW5kIEkgc2VlIGBsYXN0X2FwcGxpZWRgIHNob3dpbmcgdXAgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoYXQncyBhIGtleSB2YXJpYWJsZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHN0YXRlIG9mIG1lbW9yeSBtb2RpZmljYXRpb25zLiBUaGVuIGl0IGhpdHMgbWUuLi4gd2FpdCBhIHNlY29uZC4gSSByZW1lbWJlciBub3cg4oCTIGBzY2hlbWUtXHUwMDNlbGFzdF9hcHBsaWVkYCB3YXNuJ3QgYmVpbmcgaW5pdGlhbGl6ZWQgcHJvcGVybHkgd2hlbiBhIG5ldyBzY2hlbWUgaXMgY3JlYXRlZCB2aWEgYGRhbW9uX25ld19zY2hlbWVgLiBJIHNob3VsZCBoYXZlIGtub3duIGJldHRlciwgYGttYWxsb2NgIGRvZXNuJ3QgYXV0b21hdGljYWxseSB6ZXJvIG91dCB0aGUgYWxsb2NhdGVkIG1lbW9yeSEgSXQncyBhIGNvbW1vbiBvdmVyc2lnaHQsIGFuZCBkZWZpbml0ZWx5IGNvdWxkIGxlYWQgdG8gc29tZSB3ZWlyZCwgZGlmZmljdWx0LXRvLXRyYWNrIGJ1Z3MgaWYgeW91IGRvbid0IGFjY291bnQgZm9yIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrbWFsbG9jX29iamAuIEknbGwgd2FudCB0byBzZWUgaWYgdGhlcmUncyBhbnkgY29udGV4dCBoZXJlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEl0J3MgdGltZSB0byByZXNvbHZlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njc5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6Mzc6NDIuMDI4MzQ5NzIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE3MzY1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBrbWFsbG9jX29ialwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDUxPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMDEtICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEwMjojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTAzLVxcdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIDEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTEzLSAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMTQ6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTE1LVxcdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIENPVU5UKVxcbi0tXFxubGliL2RlY29tcHJlc3NfdW54ei5jLTE2My0jdW5kZWYgdmZyZWVcXG5saWIvZGVjb21wcmVzc191bnh6LmM6MTY0OiNkZWZpbmUga21hbGxvY19vYmoodHlwZSkgbWFsbG9jKHNpemVvZih0eXBlKSlcXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTY1LSNkZWZpbmUga2ZyZWUocHRyKSBmcmVlKHB0cilcXG4tLVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaD02Mz1zdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2NfYXJyYXkodW5zaWduZWQgbiwgc2l6ZV90IHMsIGdmcF90IGdmcClcXG4tLVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC02Ny1cXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6Njg6I2RlZmluZSBrbWFsbG9jX29iaihWQVJfT1JfVFlQRSwgLi4uKSBcXFxcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY5LVxcdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpLCAwKSlcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzAtXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oOjcxOiNkZWZpbmUga21hbGxvY19vYmpzKFZBUl9PUl9UWVBFLCBDT1VOVCwgLi4uKSBcXFxcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTcyLVxcdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpICogKENPVU5UKSwgMCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM3OjQ0Ljg0NTcyMDAwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI1MTI1MDg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgREFNT04gUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBga21hbGxvY19vYmpgIHVzZXMgYGttYWxsb2NgLCB3aGljaCBkb2Vzbid0IHplcm8gb3V0IHRoZSBtZW1vcnkuIFRoYXQgbWVhbnMgYHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWRgIGlzIGxpa2VseSB1bmluaXRpYWxpemVkIHdoZW4gYGRhbW9uX25ld19zY2hlbWVgIGlzIGNhbGxlZC4gQmluZ28g4oCTIHRoaXMgcGF0Y2ggaW5pdGlhbGl6ZXMgaXQgdG8gYE5VTExgLlxuXG5JcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEFic29sdXRlbHkhIEl0J3MgZml4aW5nIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSBidWcuIFRoZSByaXNrIGhlcmUgaXMgdGhhdCByYW5kb20gZ2FyYmFnZSBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIHZhbGlkIGBmb2xpb2AgcG9pbnRlci4gVGhpcyBjb3VsZCBjYXVzZSBpc3N1ZXMgaW4gYW55IG9mIHRoZSBmdW5jdGlvbnMgd2hpY2ggdXNlIGBsYXN0X2FwcGxpZWRgIHRvIG1ha2UgZGVjaXNpb25zLlxuXG5UaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGt1bml0IHRlc3RzLCBidXQgbGV0J3MgZm9jdXMgb24gdGhlIGNvcmUgbG9naWMgZmlyc3QuIElzIGBkYW1vbl9uZXdfc2NoZW1lYCByZWFjaGFibGU/IFllcywgaXQncyB0aGUgZ2F0ZXdheSBmb3IgY3JlYXRpbmcgREFNT04gc2NoZW1lcywgYW5kIHRob3NlIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMsIGRlYnVnZnMsIG9yIGtlcm5lbCBBUElzLiBJdCdzIHRoZSBjZW50cmFsIHBvaW50IGZvciBzZXR0aW5nIHVwIGEgbmV3IERBTU9OIHNjaGVtZS4gSSBjYW4gc2VlIHRoYXQgYGRhbW9uX25ld19zY2hlbWVgIGlzIGEgY29yZSBmdW5jdGlvbi5cblxuTm93LCBpZiBgbGFzdF9hcHBsaWVkYCBpcyB1bmluaXRpYWxpemVkLCBpdCBjb3VsZCBsZWFkIHRvIHRoZSBzaXR1YXRpb24gd2hlcmUgaXQgYWNjaWRlbnRhbGx5IG1hdGNoZXMgYSB2YWxpZCBgZm9saW9gLiBUaGlzIHdvdWxkIGNhdXNlIGEgZm9saW8gdG8gYmUgc2tpcHBlZCwgcG9zc2libHkgdHJpZ2dlcmluZyBhIGBmb2xpb19wdXRgIGNhbGwgb24gYSBmb2xpbyB0aGF0IHNob3VsZG4ndCBiZSByZWxlYXNlZC5cblxuSSdtIGNoZWNraW5nIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCwganVzdCB0byBjb25maXJtIG15IHRoaW5raW5nLlxuXG5gYGBjXG5zdGF0aWMgYm9vbCBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vcyAqcylcbntcblx0aWYgKCFmb2xpbylcblx0XHRyZXR1cm4gdHJ1ZTtcblx0aWYgKGZvbGlvID09IHMtXHUwMDNlbGFzdF9hcHBsaWVkKSB7XG5cdFx0Zm9saW9fcHV0KGZvbGlvKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5gYGBcblxuT2theSwgdGhlIGxvZ2ljIGxvb2tzIGxpa2UgaXQgY2hlY2tzIGlmIHRoZSBmb2xpbyBpcyB0aGUgc2FtZSBhcyB0aGUgbGFzdCBhcHBsaWVkIG9uZS4gaWYgdGhleSBtYXRjaCwgdGhlIGZvbGlvIHJlZmVyZW5jZSBpcyBkcm9wcGVkIGFzIGl0IGlzIGNvbnNpZGVyZWQgYXBwbGllZC4gVGhlIHByb2JsZW0gaXMgdGhhdCB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgYGxhc3RfYXBwbGllZGAsIHdlIGNvdWxkIGluY29ycmVjdGx5IGlkZW50aWZ5IGEgZm9saW8gYXMgYWxyZWFkeSBcImFwcGxpZWQsXCIgYW5kIGVuZCB1cCBkcm9wcGluZyBpdHMgcmVmZXJlbmNlIHByZW1hdHVyZWx5LCB0aGVyZWJ5IHNraXBwaW5nIHRoZSBmb2xpby4gVGhpcyBjb3VsZCBtYW5pZmVzdCBhcyBpbmNvcnJlY3QgYmVoYXZpb3VyLCBsaWtlIHNraXBwaW5nIG1lbW9yeSBhY2Nlc3Mgd2hpY2ggd291bGQgbm90IGJlIGEgZG91YmxlIGZyZWUsIGJ1dCBpbmNvcnJlY3QgYmVoYXZpb3IuXG5cblRoZSBwYXRjaCBhbHNvIGFmZmVjdHMgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgYW5kIGBtbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oYCB3aGljaCBhcmUgdGVzdHMuXG5cbklzIHRoaXMgc2luZ2xlLWxpbmUgaW5pdGlhbGl6YXRpb24gd29ydGggZnV6emluZz8gTm9ybWFsbHksIGEgb25lLWxpbmUgaW5pdGlhbGl6YXRpb24gd291bGRuJ3Qgd2FycmFudCBpbnRlbnNlIGZ1enppbmcsIGJ1dCB0aGlzIGlzbid0IGp1c3QgYSB0cml2aWFsIHZhcmlhYmxlOyBpdCBhZmZlY3RzIERBTU9OJ3MgY29yZSBmdW5jdGlvbmFsaXR5LlxuXG5HaXZlbiB0aGUgcHJvbXB0LCBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLiBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlwiIGFuZCB0aGF0IHRoaXMgaXMgYSBmaXggdG8gdGhlIGNvcmUgbG9naWMsIHdoaWNoIHByZXZlbnRzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlLCBJJ20gbGVhbmluZyB0b3dhcmRzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIGBsYXN0X2FwcGxpZWRgLCB3aGljaCBpbmNsdWRlIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCwgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gLCBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YC4gU28sIEknbGwgcmVjb21tZW5kIGZvY3VzaW5nIGZ1enppbmcgZWZmb3J0cyBvbiB0aG9zZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoaXMgZml4IHdvcmtzIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU1MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozODoyNS4wOTY5NzQyNTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTI2OTc3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9wYWRkci5jPTE5NT1zdGF0aWMgYm9vbCBkYW1vc19wYV9maWx0ZXJfb3V0KHN0cnVjdCBkYW1vcyAqc2NoZW1lLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yMDgtXFxubW0vZGFtb24vcGFkZHIuYzoyMDk6c3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vcGFkZHIuYy0yMTAte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yMjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNDctXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MjQ4OlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMjQ5LVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yNzg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yODgtXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6Mjg5OlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMjkwLVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0zMjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMzYtXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzM3OlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzM4LVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0zNjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zNzItXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzczOlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzc0LVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozODoyNy4zODk2Nzc1MzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYwNzc1NTU0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBpdCBoaXRzIHRob3NlIEtVbml0IHRlc3QgbW9kaWZpY2F0aW9ucyBpbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCBhbmQgYG1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB0ZXN0cywgYnV0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBzcGVjaWZpYy4gVGhleSB3YW50IHRvIGtub3cgaWYgdGhlIHBhdGNoIGlzIFwiV29ydGhGdXp6aW5nXCIgd2hpY2ggaXMgYSBiaW5hcnk6IHRydWUvZmFsc2UuIFdlIG5lZWQgdG8gcmV0dXJuIGZhbHNlIGlmIHRoZSBwYXRjaCAqb25seSogaW5jbHVkZXMgY2VydGFpbiB0aGluZ3MuIFNwZWNpZmljYWxseSwgdGhvc2UgdGhpbmdzIGFyZSBkb2N1bWVudGF0aW9uIHR3ZWFrcywgS2NvbmZpZyBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nIGxpa2UgYHByX2VycmAgb3IgYHByaW50a2AsIGNvc21ldGljIGFsdGVyYXRpb25zIG9mIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24ndCBjaGFuZ2UgaG93IHRoaW5ncyAqd29yayosIGFuZCBpbmFjY2Vzc2libGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkhtbSwgYnV0IGhlcmUncyB0aGUga2lja2VyOiB0aGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIGNoYW5nZSB0byBgbW0vZGFtb24vY29yZS5jYC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0IGluaXRpYWxpemVzIGEgc3RydWN0IGZpZWxkLiBUaGF0J3MgKm5vdCogb24gdGhlIFwicmV0dXJuIGZhbHNlXCIgbGlzdC4gU28sIHRoYXQgY2hhbmdlIGl0c2VsZiBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBEQU1PTiBuZXh0LiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBtb3JlIGNvbnRleHQgZm9yIHdoYXTigJlzIGhhcHBlbmluZyBpbiBgY29yZS5jYC4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlIGNoYW5nZSBoYXMgYW55IGZ1bmN0aW9uYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk0MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozOTozMy40NjcyMzY5ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzk2MzU4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6Mzk6MzUuNzQ2ODc4MjUzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTg5ODQ0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW5hYmxpbmcgREFNT04gRmVhdHVyZXMgYW5kIEZvY3VzaW5nIHRoZSBGdXp6KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIHJlZ2FyZGluZyB0aGlzIERBTU9OIHBhdGNoLiBXZSBzaG91bGQgZGVmaW5pdGVseSBlbmFibGUgYSBzdWl0ZSBvZiBEQU1PTiBmZWF0dXJlczogYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2Ugd2FudCB0byB0YXJnZXQuXG5cblRoZSBwYXRjaCBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIHRoZSBrdW5pdCB0ZXN0cy4gVGhhdCdzIGludGVyZXN0aW5nLiBXZSBjYW4gZW5hYmxlIGBEQU1PTl9LVU5JVF9URVNUYCBhbmQgYERBTU9OX1ZBRERSX0tVTklUX1RFU1RgIGFzIHdlbGwuIE5vdywgdGhlIHR5cGljYWwgU3l6a2FsbGVyIGFwcHJvYWNoIHdvdWxkbid0IGRpcmVjdGx5IGZ1enogS1VuaXQgdGVzdHMuIEhvd2V2ZXIsIGVuYWJsaW5nIHRoZW0gbWlnaHQgYmUgYmVuZWZpY2lhbCBhcyB0aGV5IGFyZSBleGVjdXRlZCBkdXJpbmcgYm9vdCBvciBtb2R1bGUgbG9hZC4gVGhpcyBtaWdodCB0cmlnZ2VyIHNvbWUgY29kZSBwYXRocyB0aGF0IHdlIHdvdWxkbid0IG90aGVyd2lzZSB0b3VjaCwgd2hpY2ggd291bGQgYmUgYSB1c2VmdWwgc2lkZSBlZmZlY3QuIEdvb2QuXG5cbk5leHQsIHdlIG5lZWQgdG8gY2hvb3NlIHRoZSByaWdodCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBJJ20gdGhpbmtpbmcgYGRhbW9uX25ld19zY2hlbWVgLCBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AsIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYCwgYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAuIFRoZXNlIHNlZW0gbGlrZSBnb29kIHN0YXJ0aW5nIHBvaW50cyBmb3IgZnV6emluZy5cblxuQmVmb3JlIHdlIHByb2NlZWQsIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJJ2QgYmV0dGVyIGNvbmZpcm0gdGhhdCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AgaXMgYWN0dWFsbHkgZGVmaW5lZC4gTWFrZSBzdXJlIHRoYXQgc3ltYm9sIGlzIGF2YWlsYWJsZSBiZWZvcmUgd2UgZm9jdXMgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjEzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM5OjQwLjg0NTg2NTI5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3ODY2NzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc192YV9pbnZhbGlkX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3ZhZGRyLmM9NzgzPXN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUge1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03ODctXFxubW0vZGFtb24vdmFkZHIuYzo3ODg6c3RhdGljIGlubGluZSBib29sIGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9kYW1vbi92YWRkci5jLTc4OS1cXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTc5ND1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtODE1LVxcbm1tL2RhbW9uL3ZhZGRyLmM6ODE2OlxcdFxcdGlmIChkYW1vc192YV9pbnZhbGlkX2ZvbGlvKGZvbGlvLCBzKSlcXG5tbS9kYW1vbi92YWRkci5jLTgxNy1cXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy04NDAtXFxubW0vZGFtb24vdmFkZHIuYzo4NDE6XFx0XFx0aWYgKGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oZm9saW8sIHMpKVxcbm1tL2RhbW9uL3ZhZGRyLmMtODQyLVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozOTo0My4yMjQ1Mzk3NzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM1Mzg0NjY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbiBmb3IgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3Qgc3ltYm9scyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyBJIHNlZSBhcmUgYGRhbW9uX25ld19zY2hlbWVgLCBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AsIGFuZCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AuIEhvd2V2ZXIsIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYCBpcyBgc3RhdGljIGlubGluZWAsIHNvIGl0J3MgcHJvYmFibHkgaW5saW5lZCBhbmQgd29uJ3QgYmUgYSB1c2VmdWwgc3ltYm9sIGZvciBmdXp6aW5nIGRpcmVjdGx5LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQsIGJ1dCBsZXQncyBjaGVjayB0aGUgb3RoZXIgc3ltYm9scy4gYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgbm90IGxpa2VseSBhY2Nlc3NpYmxlLiBBbmQgYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGlzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGxldCdzIGNoZWNrIGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBhbmQgYGRhbW9uX3BhX3N0YXRgLlxuXG5VbHRpbWF0ZWx5LCBJIHRoaW5rIGBkYW1vbl9uZXdfc2NoZW1lYCBhbmQgYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGFyZSB0aGUgbW9zdCBwcm9taXNpbmcuIEJ1dCwgd2FpdCwgaXMgYGRhbW9uX25ld19zY2hlbWVgIGEgaG90IHBhdGg/IE5vLCBpdCdzIGNhbGxlZCB3aGVuIGEgc2NoZW1lIGlzIGNyZWF0ZWQsIHNvIGl0J3Mgbm90IGZyZXF1ZW50bHkgaW52b2tlZC4gYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gLCB0aG91Z2gsICppcyogY2FsbGVkIGZvciBldmVyeSBmb2xpbyBwcm9jZXNzZWQgYnkgREFNT04sIHdoaWNoIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgYW1vdW50IGlmIERBTU9OIGlzIGFjdGl2ZSwgZXZlbiBpZiBpdCdzIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQgdGhyZWFkLiBHaXZlbiB0aGF0IGBkYW1vbl9uZXdfc2NoZW1lYCBpcyB0aGUgbWFpbiBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGF0Y2gsIEknbGwgZ28gd2l0aCB0aGF0IGFzIHRoZSBwcmltYXJ5IHRhcmdldCBmb3Igbm93LlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gQWgsIGl0IGxvb2tzIGxpa2UgYSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gZml4IGluIGBkYW1vbl9uZXdfc2NoZW1lYCBhbmQgc29tZSBLVW5pdCB0ZXN0IGltcHJvdmVtZW50cyB3aXRoIGJvdW5kcyBjaGVja3MsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpZiB0aGUgdGVzdHMgZmFpbC4gVGhlIHBhdGNoIGZpeGVzIGEgcmVhbCBidWcgKmFuZCogaW1wcm92ZXMgdGhlIHRlc3RzLCBzbyBmdXp6aW5nIGlzIGRlZmluaXRlbHkgYSBnb29kIGlkZWEgaGVyZS5cblxuVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzIGFyZSBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fS1VOSVRfVEVTVGAsIGFuZCBgREFNT05fVkFERFJfS1VOSVRfVEVTVGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIEtVbml0IG9wdGlvbnMsIGJ1dCB0aG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JyZWN0IHRhcmdldHMgZm9yIGdlbmVyYXRpbmcgdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwOTAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6Mzk6NTIuNTc4Mzg4NTQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzczMTk2NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9MTU9Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozOTo1NC45NTE1OTE1MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU0MzczNjc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBiZWF0LiBZZXMuIFRoYXQncyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0MTMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM5OjU3LjQ5NTMzMTMxMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NTY0MjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTQ3PWNvbmZpZyBEQU1PTl9QQUREUlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM5OjU5Ljg0MDk3ODUxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTc1NTQ4NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkRBTU9OIFBhdGNoIEFuYWx5c2lzIGFuZCBOZXh0IFN0ZXBzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHJlbGF0ZWQgdG8gREFNT04uIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSdtIHNlZWluZyBhcmUgcmVsYXRlZCB0byBpdHMgdmlydHVhbCBhZGRyZXNzIChWQUREUikgYW5kIHBoeXNpY2FsIGFkZHJlc3MgKFBBRERSKSBtb25pdG9yaW5nIGNhcGFiaWxpdGllcywgc3lzZnMgaW50ZWdyYXRpb24sIGFuZCB0aGUgS1VuaXQgdGVzdGluZyBmcmFtZXdvcmsuIFRoZSBwcmVzZW5jZSBvZiBib3RoIFZBRERSIGFuZCBQQUREUiB2YXJpYW50cyBpbiB0aGUgS1VuaXQgdGVzdHMgaXMgaW50ZXJlc3RpbmcuXG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLCBgbGFzdF9hcHBsaWVkYCwgd2l0aGluIGBkYW1vbl9uZXdfc2NoZW1lYC4gVGhlIHBvdGVudGlhbCBpc3N1ZSBpcyB0aGF0IHRoaXMgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpcyBsZWFkaW5nIHRvIGluY29ycmVjdCBmb2xpbyBza2lwcGluZyBhbmQgcmVmY291bnQgY29ycnVwdGlvbiB3aXRoaW4gZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGFuZCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AuIEVzc2VudGlhbGx5LCB3ZSdyZSBhdCByaXNrIG9mIGxlYWtpbmcgZm9saW9zIG9yIGluY29ycmVjdGx5IG1hbmFnaW5nIHRoZWlyIGxpZmV0aW1lcywgd2hpY2ggY291bGQgaGF2ZSBzZXJpb3VzIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnNlcXVlbmNlcy5cblxuR2l2ZW4gdGhhdCB0aGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBJJ20gdGhpbmtpbmcgdGhpcyBkZWZpbml0ZWx5IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQgdGhhdCBoYXMgdGhlIHBvdGVudGlhbCBmb3IgbHVya2luZyBtZW1vcnkgbWFuYWdlbWVudCBidWdzLiBUaW1lIHRvIGNhbGwgaXQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjMxLCJPdXRwdXRUb2tlbnMiOjIwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTo0MDowNi40MTY1MzA0MjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI0Nzc3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9LVU5JVF9URVNUXCIsXG4gICAgXCJEQU1PTl9WQUREUl9LVU5JVF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbmV3X3NjaGVtZVwiLFxuICAgIFwiZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb1wiLFxuICAgIFwiZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGBsYXN0X2FwcGxpZWRgIGluIGBkYW1vbl9uZXdfc2NoZW1lYCB3aGljaCBjb3VsZCBsZWFkIHRvIHJhbmRvbSBmb2xpb3MgYmVpbmcgaW5jb3JyZWN0bHkgc2tpcHBlZCBhbmQgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBkcm9wcGVkIGluIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCBhbmQgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gLiBJdCBhbHNvIGFkZHMgc2FmZXR5IGNoZWNrcyB0byBEQU1PTiBrdW5pdCB0ZXN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fS1VOSVRfVEVTVFwiLFxuICAgIFwiREFNT05fVkFERFJfS1VOSVRfVEVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIixcbiAgICBcImRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9cIixcbiAgICBcImRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBgbGFzdF9hcHBsaWVkYCBpbiBgZGFtb25fbmV3X3NjaGVtZWAgd2hpY2ggY291bGQgbGVhZCB0byByYW5kb20gZm9saW9zIGJlaW5nIGluY29ycmVjdGx5IHNraXBwZWQgYW5kIHRoZWlyIHJlZmVyZW5jZSBjb3VudHMgZHJvcHBlZCBpbiBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AgYW5kIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYC4gSXQgYWxzbyBhZGRzIHNhZmV0eSBjaGVja3MgdG8gREFNT04ga3VuaXQgdGVzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowzc2qb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-18 01:13:35 +0000 UTC FinishedAt: 2026-07-18 01:40:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5093dba1014c1d7f7e247fd118f0fa8f22136046", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_KUNIT_TEST", "DAMON_VADDR_KUNIT_TEST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "5093dba1014c1d7f7e247fd118f0fa8f22136046", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS", "DAMON_KUNIT_TEST", "DAMON_VADDR_KUNIT_TEST" ], "series_id": "bd2768f7-37c1-4a93-9b42-1bcac321acdd" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_new_scheme", "damon_pa_invalid_damos_folio", "damos_va_stat_pmd_entry" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX0tVTklUX1RFU1QmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFJfS1VOSVRfVEVTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX25ld19zY2hlbWUmIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyYjMzQ7LAogICAgJiMzNDtkYW1vc192YV9zdGF0X3BtZF9lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGBsYXN0X2FwcGxpZWRgIGluIGBkYW1vbl9uZXdfc2NoZW1lYCB3aGljaCBjb3VsZCBsZWFkIHRvIHJhbmRvbSBmb2xpb3MgYmVpbmcgaW5jb3JyZWN0bHkgc2tpcHBlZCBhbmQgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBkcm9wcGVkIGluIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCBhbmQgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gLiBJdCBhbHNvIGFkZHMgc2FmZXR5IGNoZWNrcyB0byBEQU1PTiBrdW5pdCB0ZXN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdiYzBiMTA3NDM2ODcwYzQ1ZDMzZTMyZGE5NTkzYmI5N2FiNGMyOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMTozNjoxMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDYwM2IxMDJmZjgwZjljLi4yMGQyNjdjNjE1ZmFmYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtNzA1LDYgJiM0Mzs3MDUsNyBAQCBzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZW9wc19maWx0ZXJzKTtcbiBcdHNjaGVtZS1cdTAwM2VzdGF0ID0gKHN0cnVjdCBkYW1vc19zdGF0KXt9O1xuIFx0c2NoZW1lLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgPSAwO1xuJiM0MztcdHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWxpc3QpO1xuIFxuIFx0c2NoZW1lLVx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBlYmE2NDM3NjIxMzJmNy4uNGE1MzZkNDFjZGIyZDAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTE1NSw2ICYjNDM7MTU1LDEwIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0ci1cdTAwM2VhZ2UgPSAxMDtcbiBcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHRkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgMjUpO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAyKTtcbiYjNDM7XHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSAyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuc3RhcnQsIDB1bCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5lbmQsIDI1dWwpO1xuIFxuQEAgLTE2Niw2ICYjNDM7MTcwLDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgcl9uZXctXHUwMDNlYWdlKTtcbiBcbiYjNDM7b3V0OlxuIFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XG4gfVxuIFxuQEAgLTgzNCw2ICYjNDM7ODM5LDcgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcdHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsLCAqbmV4dDtcbiBcdGJvb2wgc2tpcCA9IHRydWU7XG4gXHRpbnQgaTtcbiYjNDM7XHRpbnQgbnJfZHN0ID0gMCwgbnJfc3JjID0gMDtcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRzdC5nb2Fscyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzcmMuZ29hbHMpO1xuQEAgLTg1Niw2ICYjNDM7ODYyLDE0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXG4gXHRkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoXHUwMDI2ZHN0LCBcdTAwMjZzcmMpO1xuIFxuJiM0MztcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgXHUwMDI2ZHN0KVxuJiM0MztcdFx0bnJfZHN0JiM0MzsmIzQzOztcbiYjNDM7XHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNnNyYylcbiYjNDM7XHRcdG5yX3NyYyYjNDM7JiM0Mzs7XG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdCwgbnJfc3JjKTtcbiYjNDM7XHRpZiAobnJfZHN0ICE9IG5yX3NyYylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiBcdGkgPSAwO1xuIFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCAoXHUwMDI2ZHN0KSkge1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZ29hbC1cdTAwM2VtZXRyaWMsIHNyY19nb2Fsc1tpXS5tZXRyaWMpO1xuQEAgLTEwMDMsNiAmIzQzOzEwMTcsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuIFx0c2tpcCA9IGZhbHNlO1xuIFxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5ucl9kZXN0cywgc3JjX25yX2Rlc3RzKTtcbiYjNDM7XHRpZiAoZHN0Lm5yX2Rlc3RzICE9IHNyY19ucl9kZXN0cylcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHN0Lm5yX2Rlc3RzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0Lm5vZGVfaWRfYXJyW2ldLCBzcmNfbm9kZV9pZF9hcnJbaV0pO1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LndlaWdodF9hcnJbaV0sIHNyY193ZWlnaHRfYXJyW2ldKTtcbkBAIC0xMjYxLDE0ICYjNDM7MTI3NywxOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3NyYyB0YXJnZXQgc2V0dXAgZmFpbFwmIzM0Oyk7XG4gXHR9XG4gXHRkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7XG4mIzQzO1xuJiM0MztcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKGRzdF90YXJnZXQpLCBucl9leHBlY3RfcmVnaW9ucyk7XG4mIzQzO1x0aWYgKGRhbW9uX25yX3JlZ2lvbnMoZHN0X3RhcmdldCkgIT0gbnJfZXhwZWN0X3JlZ2lvbnMpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRpID0gMDtcbiBcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCBkc3RfdGFyZ2V0KSB7XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCBleHBlY3Rfc3RhcnRfZW5kW2ldWzBdKTtcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCBleHBlY3Rfc3RhcnRfZW5kW2ldWzFdKTtcbiBcdFx0aSYjNDM7JiM0Mzs7XG4gXHR9XG4tXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xuLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGksIG5yX2V4cGVjdF9yZWdpb25zKTtcbiYjNDM7XG4mIzQzO291dDpcbiBcdGRhbW9uX2ZyZWVfdGFyZ2V0KGRzdF90YXJnZXQpO1xuIFx0ZGFtb25fZnJlZV90YXJnZXQoc3JjX3RhcmdldCk7XG4gfVxuQEAgLTEzNjAsNiAmIzQzOzEzODEsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2ZpbHRlcl9vdXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuc3RhcnQsIDEpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCAyKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAyKTtcbiYjNDM7XHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSAyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4gXHRyMiA9IGRhbW9uX25leHRfcmVnaW9uKHIpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHIyLVx1MDAzZWFyLnN0YXJ0LCAyKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi1cdTAwM2Vhci5lbmQsIDQpO1xuQEAgLTEzNzQsMTEgJiM0MzsxMzk3LDE0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5zdGFydCwgMik7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5lbmQsIDYpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDIpO1xuJiM0MztcdGlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IDIpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdHIyID0gZGFtb25fbmV4dF9yZWdpb24ocik7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcjItXHUwMDNlYXIuc3RhcnQsIDYpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHIyLVx1MDAzZWFyLmVuZCwgOCk7XG4gXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyMiwgdCk7XG4gXG4mIzQzO291dDpcbiBcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuIFx0ZGFtb3NfZnJlZV9maWx0ZXIoZik7XG4gfVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oXG5pbmRleCA2MWY4NDQzMzZmZmI1MC4uNmE5NTQ0MWQxOTNhZWIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oXG5AQCAtMTU4LDEyICYjNDM7MTU4LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX3Rlc3RfYXBwbHlfdGhyZWVfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c2Vjb25kIGRhbW9uX3NldF9yZWdpb25zKCkgZmFpbFwmIzM0Oyk7XG4gXHR9XG4gXG4mIzQzO1x0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIG5yX2V4cGVjdGVkIC8gMik7XG4mIzQzO1x0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gbnJfZXhwZWN0ZWQgLyAyKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZXhwZWN0ZWQgLyAyOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyID0gX19udGhfcmVnaW9uX29mKHQsIGkpO1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5zdGFydCwgZXhwZWN0ZWRbaSAqIDJdKTtcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCBleHBlY3RlZFtpICogMiAmIzQzOyAxXSk7XG4gXHR9XG4gXG4mIzQzO291dDpcbiBcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpO1xuIH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9LVU5JVF9URVNUJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSX0tVTklUX1RFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8mIzM0OywKICAgICYjMzQ7ZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBgbGFzdF9hcHBsaWVkYCBpbiBgZGFtb25fbmV3X3NjaGVtZWAgd2hpY2ggY291bGQgbGVhZCB0byByYW5kb20gZm9saW9zIGJlaW5nIGluY29ycmVjdGx5IHNraXBwZWQgYW5kIHRoZWlyIHJlZmVyZW5jZSBjb3VudHMgZHJvcHBlZCBpbiBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AgYW5kIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYC4gSXQgYWxzbyBhZGRzIHNhZmV0eSBjaGVja3MgdG8gREFNT04ga3VuaXQgdGVzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDdiYzBiMTA3NDM2ODcwYzQ1ZDMzZTMyZGE5NTkzYmI5N2FiNGMyOWYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxOCAwMTozNjoxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCA2MDNiMTAyZmY4MGY5Yy4uMjBkMjY3YzYxNWZhZmIgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTcwNSw2ICYjNDM7NzA1LDcgQEAgc3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybiwKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3NjaGVtZS0mZ3Q7b3BzX2ZpbHRlcnMpOwogCXNjaGVtZS0mZ3Q7c3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTsKIAlzY2hlbWUtJmd0O21heF9ucl9zbmFwc2hvdHMgPSAwOwomIzQzOwlzY2hlbWUtJmd0O2xhc3RfYXBwbGllZCA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtzY2hlbWUtJmd0O2xpc3QpOwogCiAJc2NoZW1lLSZndDtxdW90YSA9ICooZGFtb3NfcXVvdGFfaW5pdChxdW90YSkpOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCmluZGV4IGViYTY0Mzc2MjEzMmY3Li40YTUzNmQ0MWNkYjJkMCAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtMTU1LDYgJiM0MzsxNTUsMTAgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJci0mZ3Q7YWdlID0gMTA7CiAJZGFtb25fYWRkX3JlZ2lvbihyLCB0KTsKIAlkYW1vbl9zcGxpdF9yZWdpb25fYXQodCwgciwgMjUpOwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMik7CiYjNDM7CWlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IDIpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuc3RhcnQsIDB1bCk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLmVuZCwgMjV1bCk7CiAKQEAgLTE2Niw2ICYjNDM7MTcwLDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2xhc3RfbnJfYWNjZXNzZXMsIHJfbmV3LSZndDtsYXN0X25yX2FjY2Vzc2VzKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YWdlLCByX25ldy0mZ3Q7YWdlKTsKIAomIzQzO291dDoKIAlkYW1vbl9mcmVlX3RhcmdldCh0KTsKIH0KIApAQCAtODM0LDYgJiM0Mzs4MzksNyBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCXN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnb2FsLCAqbmV4dDsKIAlib29sIHNraXAgPSB0cnVlOwogCWludCBpOwomIzQzOwlpbnQgbnJfZHN0ID0gMCwgbnJfc3JjID0gMDsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZHN0LmdvYWxzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3NyYy5nb2Fscyk7CkBAIC04NTYsNiAmIzQzOzg2MiwxNCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCiAJZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKCZhbXA7ZHN0LCAmYW1wO3NyYyk7CiAKJiM0MzsJZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCAmYW1wO2RzdCkKJiM0MzsJCW5yX2RzdCYjNDM7JiM0Mzs7CiYjNDM7CWRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgJmFtcDtzcmMpCiYjNDM7CQlucl9zcmMmIzQzOyYjNDM7OwomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0LCBucl9zcmMpOwomIzQzOwlpZiAobnJfZHN0ICE9IG5yX3NyYykKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWkgPSAwOwogCWRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgKCZhbXA7ZHN0KSkgewogCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZ29hbC0mZ3Q7bWV0cmljLCBzcmNfZ29hbHNbaV0ubWV0cmljKTsKQEAgLTEwMDMsNiAmIzQzOzEwMTcsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCXNraXAgPSBmYWxzZTsKIAogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QubnJfZGVzdHMsIHNyY19ucl9kZXN0cyk7CiYjNDM7CWlmIChkc3QubnJfZGVzdHMgIT0gc3JjX25yX2Rlc3RzKQomIzQzOwkJZ290byBvdXQ7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGRzdC5ucl9kZXN0czsgaSYjNDM7JiM0MzspIHsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC5ub2RlX2lkX2FycltpXSwgc3JjX25vZGVfaWRfYXJyW2ldKTsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRzdC53ZWlnaHRfYXJyW2ldLCBzcmNfd2VpZ2h0X2FycltpXSk7CkBAIC0xMjYxLDE0ICYjNDM7MTI3NywxOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LAogCQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7c3JjIHRhcmdldCBzZXR1cCBmYWlsJiMzNDspOwogCX0KIAlkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7CiYjNDM7CiYjNDM7CUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKGRzdF90YXJnZXQpLCBucl9leHBlY3RfcmVnaW9ucyk7CiYjNDM7CWlmIChkYW1vbl9ucl9yZWdpb25zKGRzdF90YXJnZXQpICE9IG5yX2V4cGVjdF9yZWdpb25zKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaSA9IDA7CiAJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIGRzdF90YXJnZXQpIHsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLnN0YXJ0LCBleHBlY3Rfc3RhcnRfZW5kW2ldWzBdKTsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLmVuZCwgZXhwZWN0X3N0YXJ0X2VuZFtpXVsxXSk7CiAJCWkmIzQzOyYjNDM7OwogCX0KLQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSwgbnJfZXhwZWN0X3JlZ2lvbnMpOwotCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBpLCBucl9leHBlY3RfcmVnaW9ucyk7CiYjNDM7CiYjNDM7b3V0OgogCWRhbW9uX2ZyZWVfdGFyZ2V0KGRzdF90YXJnZXQpOwogCWRhbW9uX2ZyZWVfdGFyZ2V0KHNyY190YXJnZXQpOwogfQpAQCAtMTM2MCw2ICYjNDM7MTM4MSw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLnN0YXJ0LCAxKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuZW5kLCAyKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMik7CiYjNDM7CWlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IDIpCiYjNDM7CQlnb3RvIG91dDsKIAlyMiA9IGRhbW9uX25leHRfcmVnaW9uKHIpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi0mZ3Q7YXIuc3RhcnQsIDIpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi0mZ3Q7YXIuZW5kLCA0KTsKQEAgLTEzNzQsMTEgJiM0MzsxMzk3LDE0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLnN0YXJ0LCAyKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuZW5kLCA2KTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMik7CiYjNDM7CWlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IDIpCiYjNDM7CQlnb3RvIG91dDsKIAlyMiA9IGRhbW9uX25leHRfcmVnaW9uKHIpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi0mZ3Q7YXIuc3RhcnQsIDYpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi0mZ3Q7YXIuZW5kLCA4KTsKIAlkYW1vbl9kZXN0cm95X3JlZ2lvbihyMiwgdCk7CiAKJiM0MztvdXQ6CiAJZGFtb25fZnJlZV90YXJnZXQodCk7CiAJZGFtb3NfZnJlZV9maWx0ZXIoZik7CiB9CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaAppbmRleCA2MWY4NDQzMzZmZmI1MC4uNmE5NTQ0MWQxOTNhZWIgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaApAQCAtMTU4LDEyICYjNDM7MTU4LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX3Rlc3RfYXBwbHlfdGhyZWVfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QsCiAJCWt1bml0X3NraXAodGVzdCwgJiMzNDtzZWNvbmQgZGFtb25fc2V0X3JlZ2lvbnMoKSBmYWlsJiMzNDspOwogCX0KIAomIzQzOwlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgbnJfZXhwZWN0ZWQgLyAyKTsKJiM0MzsJaWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gbnJfZXhwZWN0ZWQgLyAyKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX2V4cGVjdGVkIC8gMjsgaSYjNDM7JiM0MzspIHsKIAkJciA9IF9fbnRoX3JlZ2lvbl9vZih0LCBpKTsKIAkJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLnN0YXJ0LCBleHBlY3RlZFtpICogMl0pOwogCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuZW5kLCBleHBlY3RlZFtpICogMiAmIzQzOyAxXSk7CiAJfQogCiYjNDM7b3V0OgogCWRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3OTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAzODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgREFNT04gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgREFNT04gcGF0Y2gsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7QWgsIGl0IHRvdWNoZXMgYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLCBhbmQgYG1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhgLiYjMzQ7IFN0YW5kYXJkIHN0dWZmLCBjb3JlIGNvZGUgYW5kIHNvbWUgS1VuaXQgdGVzdHMuCgpUaGUgYWN0dWFsIGNvcmUgY2hhbmdlIGluIGBtbS9kYW1vbi9jb3JlLmNgIGlzIGp1c3Qgb25lIGxpbmU6IGBzY2hlbWUtJmd0O2xhc3RfYXBwbGllZCA9IE5VTEw7YCDigJMgc2ltcGxlIGluaXRpYWxpemF0aW9uLiBOb3RoaW5nIGZsYXNoeS4gSXQmIzM5O3MgaW5pdGlhbGl6aW5nIGEgcG9pbnRlciwgYGxhc3RfYXBwbGllZGAsIHRvIE5VTEwgd2l0aGluIHRoZSBgZGFtb25fbmV3X3NjaGVtZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgaGFzIGFueSBzdWJ0bGUgc2lkZSBlZmZlY3RzIG9yIHBvdGVudGlhbCBmb3IgZnV6emluZy4KCmBkYW1vbl9uZXdfc2NoZW1lYCB1c2VzIGBrbWFsbG9jYCB0byBhbGxvY2F0ZSBhIG5ldyBgc3RydWN0IGRhbW9zYC4gVGhhdCYjMzk7cyB0aGUga2V5LiBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZXhhbWluZSB0aGUgY29udGV4dCBvZiB0aGlzIGBzY2hlbWUtJmd0O2xhc3RfYXBwbGllZCA9IE5VTEw7YCBsaW5lIHdpdGhpbiB0aGUgYGRhbW9uX25ld19zY2hlbWVgIGZ1bmN0aW9uIGFuZCBtb3JlIGJyb2FkbHksIGl0cyB1c2UgaW4gdGhlIERBTU9OIGZyYW1ld29yay4gRG9lcyB0aGUgYGxhc3RfYXBwbGllZGAgcG9pbnRlciBnZXQgdXBkYXRlZCBsYXRlciwgYW5kIGhvdyBpcyBpdCB1c2VkPyBEb2VzIGl0IHBvdGVudGlhbGx5IGNhdXNlIGFueSBpc3N1ZXMgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBvciBjb25jdXJyZW5jeT8gSXMgaXQgaW52b2x2ZWQgaW4gYW55IGNvbnRyb2wgZmxvdyBkZWNpc2lvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBsaWZlY3ljbGUgYW5kIHVzYWdlIHRvIGRldGVybWluZSBpZiB0aGlzIHNpbmdsZSBsaW5lIGhhcyBhbnkgZnVuY3Rpb25hbCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA0ND12b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0NS1cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDQ2OnN0cnVjdCBkYW1vcyAqZGFtb25fbmV3X3NjaGVtZShzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4gKnBhdHRlcm4sXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0Ny1cdFx0XHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXG4tLVxubW0vZGFtb24vY29yZS5jPTY2OT1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTY4MS1cbm1tL2RhbW9uL2NvcmUuYzo2ODI6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbm1tL2RhbW9uL2NvcmUuYy02ODMtXHRcdFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNDcxPXN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTE0ODktXHRcdFx0Y29udGludWU7XG5tbS9kYW1vbi9jb3JlLmM6MTQ5MDpcdFx0bmV3X3NjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXHUwMDI2c3JjX3NjaGVtZS1cdTAwM2VwYXR0ZXJuLFxubW0vZGFtb24vY29yZS5jLTE0OTEtXHRcdFx0XHRzcmNfc2NoZW1lLVx1MDAzZWFjdGlvbixcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTE4OD1zdGF0aWMgc3RydWN0IGRhbW9zICpkYW1vbl9scnVfc29ydF9uZXdfc2NoZW1lKFxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk1LVxubW0vZGFtb24vbHJ1X3NvcnQuYzoxOTY6XHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcbm1tL2RhbW9uL2xydV9zb3J0LmMtMTk3LVx0XHRcdC8qIGZpbmQgdGhlIHBhdHRlcm4sIGFuZCAqL1xuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMTgwLVxubW0vZGFtb24vcmVjbGFpbS5jOjE4MTpcdHJldHVybiBkYW1vbl9uZXdfc2NoZW1lKFxubW0vZGFtb24vcmVjbGFpbS5jLTE4Mi1cdFx0XHRcdTAwMjZwYXR0ZXJuLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yOTcwPXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX3N5c2ZzX21rX3NjaGVtZShcbi0tXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMzAwNy1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYzozMDA4Olx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcdTAwMjZwYXR0ZXJuLCBzeXNmc19zY2hlbWUtXHUwMDNlYWN0aW9uLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMDktXHRcdFx0c3lzZnNfc2NoZW1lLVx1MDAzZWFwcGx5X2ludGVydmFsX3VzLCBcdTAwMjZxdW90YSwgXHUwMDI2d21hcmtzLFxuLS1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYz03Mz1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fc2FtcGxlX210aWVyX2J1aWxkX2N0eChib29sIHByb21vdGUpXG4tLVxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEzMi1cbnNhbXBsZXMvZGFtb24vbXRpZXIuYzoxMzM6XHRzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxuc2FtcGxlcy9kYW1vbi9tdGllci5jLTEzNC1cdFx0XHQvKiBhY2Nlc3MgcGF0dGVybiAqL1xuLS1cbnNhbXBsZXMvZGFtb24vcHJjbC5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZClcbi0tXG5zYW1wbGVzL2RhbW9uL3ByY2wuYy04OC1cbnNhbXBsZXMvZGFtb24vcHJjbC5jOjg5Olx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTkwLVx0XHRcdFx1MDAyNihzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIGFuZCBzcGVha2luZyBmcm9tIHRoZSBmaXJzdC1wZXJzb24gcGVyc3BlY3RpdmU6CgoqKkRpdmluZyBpbnRvIFN0cnVjdCBBbGxvY2F0aW9uIGluIGBkYW1vbl9uZXdfc2NoZW1lYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgZGFtb25fbmV3X3NjaGVtZWAgYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBpdCYjMzk7cyBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBvZiBpdHMgcHJpbWFyeSBkYXRhIHN0cnVjdHVyZS4gSSYjMzk7bSBwcm9iYWJseSBpbnRlcmVzdGVkIGluIGEgZmV3IGtleSB0aGluZ3MgaGVyZS4gRmlyc3QsIGlzIGl0IHVzaW5nIGEgc3RhdGljLCBzdGFjaywgb3IgaGVhcCBhbGxvY2F0aW9uPyBTZWNvbmQsIHdoYXQmIzM5O3MgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3k/IElzIGl0IGEgc2ltcGxlIGBtYWxsb2NgIChvciBpdHMga2VybmVsIGVxdWl2YWxlbnQpIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgbGlrZSBhIGN1c3RvbSBhbGxvY2F0b3IsIG1heWJlIHVzaW5nIGEgYnVkZHkgc3lzdGVtIG9yIHNsYWIgYWxsb2NhdG9yIGZvciBlZmZpY2llbmN5PyBBbmQgdGhpcmQsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGdvdGNoYXMgd2l0aCB0aGUgYWxpZ25tZW50PyBBcmUgd2UgZGVhbGluZyB3aXRoIGFueSBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIGZhbHNlIHNoYXJpbmcgb3IgcGVyZm9ybWFuY2UgcGVuYWx0aWVzIG9uIG11bHRpLWNvcmUgc3lzdGVtcywgZXNwZWNpYWxseSBpZiB0aGUgc3RydWN0IGlzIGZyZXF1ZW50bHkgYWNjZXNzZWQgb3IgbW9kaWZpZWQ/IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgaW1wYWN0IG9mIHRoaXMgYWxsb2NhdGlvbiBzdHJhdGVneSBvbiBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdlLCBhbmQgaWYgdGhlcmUgYXJlIGFueSByaXNrcyBvZiBmcmFnbWVudGF0aW9uIG9yIG1lbW9yeSBsZWFrcyBkb3duIHRoZSBsaW5lLiBJIGFtIGxvb2tpbmcgZm9yIGEgc3VjY2luY3QgYW5kIGVmZmljaWVudCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDE6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDY4MDpcdH1cbiA2ODE6XHRcbiA2ODI6XHRzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxuIDY4MzpcdFx0XHRcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcbiA2ODQ6XHRcdFx0XHR1bnNpZ25lZCBsb25nIGFwcGx5X2ludGVydmFsX3VzLFxuIDY4NTpcdFx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4gNjg2Olx0XHRcdFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3MgKndtYXJrcyxcbiA2ODc6XHRcdFx0XHRpbnQgdGFyZ2V0X25pZClcbiA2ODg6XHR7XG4gNjg5Olx0XHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcbiA2OTA6XHRcbiA2OTE6XHRcdHNjaGVtZSA9IGttYWxsb2Nfb2JqKCpzY2hlbWUpO1xuIDY5MjpcdFx0aWYgKCFzY2hlbWUpXG4gNjkzOlx0XHRcdHJldHVybiBOVUxMO1xuIDY5NDpcdFx0c2NoZW1lLVx1MDAzZXBhdHRlcm4gPSAqcGF0dGVybjtcbiA2OTU6XHRcdHNjaGVtZS1cdTAwM2VhY3Rpb24gPSBhY3Rpb247XG4gNjk2Olx0XHRzY2hlbWUtXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgPSBhcHBseV9pbnRlcnZhbF91cztcbiA2OTc6XHRcdC8qXG4gNjk4Olx0XHQgKiBuZXh0X2FwcGx5X3NpcyB3aWxsIGJlIHNldCB3aGVuIGtkYW1vbmQgc3RhcnRzLiAgV2hpbGUga2RhbW9uZCBpc1xuIDY5OTpcdFx0ICogcnVubmluZywgaXQgd2lsbCBhbHNvIHVwZGF0ZWQgd2hlbiBpdCBpcyBhZGRlZCB0byB0aGUgREFNT04gY29udGV4dCxcbiA3MDA6XHRcdCAqIG9yIGRhbW9uX2F0dHJzIGFyZSB1cGRhdGVkLlxuIDcwMTpcdFx0ICovXG4gNzAyOlx0XHRzY2hlbWUtXHUwMDNlbmV4dF9hcHBseV9zaXMgPSAwO1xuIDcwMzpcdFx0c2NoZW1lLVx1MDAzZXdhbGtfY29tcGxldGVkID0gZmFsc2U7XG4gNzA0Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlY29yZV9maWx0ZXJzKTtcbiA3MDU6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjaGVtZS1cdTAwM2VvcHNfZmlsdGVycyk7XG4gNzA2Olx0XHRzY2hlbWUtXHUwMDNlc3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTtcbiA3MDc6XHRcdHNjaGVtZS1cdTAwM2VtYXhfbnJfc25hcHNob3RzID0gMDtcbiA3MDg6XHRcdHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xuIDcwOTpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWxpc3QpO1xuIDcxMDpcdFxuIDcxMTpcdFx0c2NoZW1lLVx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XG4gNzEyOlx0XHQvKiBxdW90YS5nb2FscyBzaG91bGQgYmUgc2VwYXJhdGVseSBzZXQgYnkgY2FsbGVyICovXG4gNzEzOlx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzY2hlbWUtXHUwMDNlcXVvdGEuZ29hbHMpO1xuIDcxNDpcdFxuIDcxNTpcdFx0c2NoZW1lLVx1MDAzZXdtYXJrcyA9ICp3bWFya3M7XG4gNzE2Olx0XHRzY2hlbWUtXHUwMDNld21hcmtzLmFjdGl2YXRlZCA9IHRydWU7XG4gNzE3Olx0XG4gNzE4Olx0XHRzY2hlbWUtXHUwMDNlbWlncmF0ZV9kZXN0cyA9IChzdHJ1Y3QgZGFtb3NfbWlncmF0ZV9kZXN0cyl7fTtcbiA3MTk6XHRcdHNjaGVtZS1cdTAwM2V0YXJnZXRfbmlkID0gdGFyZ2V0X25pZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjc1CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6CgoqKkRlY29uc3RydWN0aW5nIGBrbWFsbG9jX29iamAgYW5kIFVucmF2ZWxpbmcgYSBQb3RlbnRpYWwgQnVnKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuIFRoaXMgYGttYWxsb2Nfb2JqKCpzY2hlbWUpYC4uLiB0aGF0IGxvb2tzIHN1c3BpY2lvdXNseSBsaWtlIGEgbWFjcm8gb3Igd3JhcHBlciBhcm91bmQgYGttYWxsb2NgLiBJdCYjMzk7cyBsaWtlbHkgdHJ5aW5nIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGBzY2hlbWVgIHN0cnVjdHVyZS4gIEkmIzM5O20gYmV0dGluZyBpdCYjMzk7cyBzb21ldGhpbmcgbGlrZSBga21hbGxvYyhzaXplb2YoKnNjaGVtZSksIEdGUF9LRVJORUwpYCwgcHJldHR5IHN0YW5kYXJkIHN0dWZmLiBXYWl0IGEgbWludXRlLi4uICBga21hbGxvY19vYmpgIGlzbiYjMzk7dCByaW5naW5nIGFueSBiZWxscy4gVGhhdCYjMzk7cyBub3Qgc3RhbmRhcmQga2VybmVsIGNvZGUuIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCBpdCBhY3R1YWxseSAqaXMqLiBMZXQmIzM5O3MgZ28gbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBga21hbGxvY19vYmpgLgoKLi4uUmlnaHQsIG5vdyB0aGF0IEkga25vdyB3aGF0IGBrbWFsbG9jX29iamAgaXMgZGVmaW5lZCBhcywgdGhlIGNvZGUgbWFrZXMgbW9yZSBzZW5zZS4gVGhlIGtpY2tlciBpcywgYGttYWxsb2NgIGRvZXNuJiMzOTt0IHplcm8gdGhlIGFsbG9jYXRlZCBtZW1vcnkgYnkgZGVmYXVsdC4gVGhhdCBtZWFucyB0aGUgYHNjaGVtZS0mZ3Q7bGFzdF9hcHBsaWVkYCBtZW1iZXIgKmNvdWxkKiBoYXZlIGJlZW4gdW5pbml0aWFsaXplZCBiZWZvcmUgdGhpcyBwYXRjaCEgVGhhdCBjb3VsZCBsZWFkIHRvIHNvbWUgbmFzdHksIG5vbi1kZXRlcm1pbmlzdGljIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyIHRvIHNlZSBpZiB0aGF0JiMzOTtzIGEgcmVhbCBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrbWFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTU1MjcgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMDM9bm9uLVxcIGBgTlVMTGBgLCBsb2NrbGVzc2x5IGFjY2Vzc2luZyB0aGUgYGAtXHUwMDNlYWBgIGFuZCBgYC1cdTAwM2ViYGAgZmllbGRzLlxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMDgtICAgICAgIDIge1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjIwOTogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjEwLSAgICAgICA0ICAgaWYgKCFwKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMjU9dGhlaXIgcmlnaHRzIHRvIHJlb3JkZXIgdGhpcyBjb2RlIGFzIGZvbGxvd3M6XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIzMC0gICAgICAgMiB7XG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjMxOiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yMzItICAgICAgIDQgICBpZiAoIXApXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTI2MT1zaG93cyBhbiBleGFtcGxlIG9mIGluc2VydGlvbjpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjY2LSAgICAgICAyIHtcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyNjc6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTI2OC0gICAgICAgNCAgIGlmICghcClcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdD0yNjc9VGhlIFJDVSB2ZXJzaW9uIG9mIGF1ZGl0X3VwZF9ydWxlKCkgaXMgYXMgZm9sbG93czo6XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3QtMjc4LVx0XHRcdGlmICghYXVkaXRfY29tcGFyZV9ydWxlKHJ1bGUsIFx1MDAyNmUtXHUwMDNlcnVsZSkpIHtcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0OjI3OTpcdFx0XHRcdG5lID0ga21hbGxvY19vYmooKmVudHJ5LCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vUkNVL2xpc3RSQ1UucnN0LTI4MC1cdFx0XHRcdGlmIChuZSA9PSBOVUxMKVxuLS1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q9NDQxPXVzZXMgb2YgUkNVIG1heSBiZSBmb3VuZCBpbiBsaXN0UkNVLnJzdCBhbmQgTk1JLVJDVS5yc3QuXG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC00NzAtXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0OjQ3MTpcdFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTQ3Mi1cdFx0c3Bpbl9sb2NrKFx1MDAyNmZvb19tdXRleCk7XG4tLVxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdD01NTM9VGhlIGZvb191cGRhdGVfYSgpIGZ1bmN0aW9uIG1pZ2h0IHRoZW4gYmUgd3JpdHRlbiBhcyBmb2xsb3dzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0LTU3Mi1cbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q6NTczOlx0XHRuZXdfZnAgPSBrbWFsbG9jX29iaigqbmV3X2ZwKTtcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNTc0LVx0XHRzcGluX2xvY2soXHUwMDI2Zm9vX211dGV4KTtcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTM5PWtyZWZfaW5pdCBhcyBzbzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00Mi1cbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6NDM6ICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00NC0gICAgIGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0PTgxPXRocmVhZCB0byBwcm9jZXNzOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2tyZWYucnN0LTEwMi1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6MTAzOlx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtMTA0LVx0aWYgKCFkYXRhKVxuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9MzgzPXRvIHByb3RlY3QgdGhlIGNhY2hlIGFuZCBhbGwgdGhlIG9iamVjdHMgd2l0aGluIGl0LiBIZXJlJiMzOTtzIHRoZSBjb2RlOjpcbi0tXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0NC1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q6NDQ1OiAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0Ni0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNO1xuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NDk5PXdoaWNoIGFyZSB0YWtlbiBhd2F5LCBhbmQgdGhlIGBgJiM0MztgYCBhcmUgbGluZXMgd2hpY2ggYXJlIGFkZGVkLlxuLS1cbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTE5LVxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo1MjA6ICAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUyMS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00OTg9d29ya3MgcGVyZmVjdGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MDAtICByYXdfc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMi1cbi0tXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD01MDc9cHJlZW1wdGlvbiBvbiBQUkVFTVBUX1JUIGtlcm5lbHM6OlxuLS1cbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwOS0gIHNwaW5fbG9jayhcdTAwMjZsb2NrKTtcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0OjUxMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MTEtXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTM4PVRoZSBrZXJuZWwgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBnZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRvcnM6XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQ0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgcGFzc2luZyBhIHNpemUgb2YgYSBzdHJ1Y3QgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NDg6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDktXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU4PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgYWxsb2NhdGluZyBhbiBhcnJheSBpcyB0aGUgZm9sbG93aW5nOlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2MS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0Ojk2MjpcdHAgPSBrbWFsbG9jX29ianMoKnAsIG4sIC4uLik7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjMtXG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM4Nj1tYXkgaGVscCB3aXRoIGFsaWdubWVudCwgd3JhcC1hcm91bmQsIG9yIGFkZGl0aW9uYWwgaGFyZGVuaW5nLiBUaGVcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDozODc6a21hbGxvY19vYmooKS1mYW1pbHkgb2YgbWFjcm9zIHByb3ZpZGUgdGhpcyBpbnRyb3NwZWN0aW9uLCB3aGljaCBjYW4gYmVcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC0zODgtdXNlZCBmb3IgdGhlIGNvbW1vbiBjb2RlIHBhdHRlcm5zIGZvciBzaW5nbGUsIGFycmF5LCBhbmQgZmxleGlibGUgb2JqZWN0XG4tLVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzk5LVxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMDpcdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMS1cdHB0ciA9IGt6YWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMjpcdHB0ciA9IGttYWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAzLVx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDQtXHRwdHIgPSBrbWFsbG9jX2ZsZXgoKnB0ciwgZmxleF9tZW1iZXIsIGNvdW50IFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDU6XHRfX2F1dG9fdHlwZSBwdHIgPSBrbWFsbG9jX29iaihzdHJ1Y3QgZm9vIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDYtXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTE3MzQ9Y2FsbGJhY2s6OlxuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzM5LSAgICAgICAgICAuLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MTc0MDogICAgICAgICAgZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzQxLSAgICAgICAgICBzdWJzdHJlYW0tXHUwMDNlcnVudGltZS1cdTAwM2Vwcml2YXRlX2RhdGEgPSBkYXRhO1xuLS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zMzAyPWRlc3RydWN0b3IgZnVuY3Rpb24gaXMgc2V0IGluIHRoZSBgYHByaXZhdGVfZnJlZWBgIGZpZWxkOjpcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zMzAzLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjMzMDQ6ICBzdHJ1Y3QgbXlkYXRhICpwID0ga21hbGxvY19vYmooKnApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTMzMDUtICBody1cdTAwM2Vwcml2YXRlX2RhdGEgPSBwO1xuLS1cbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdD0yNDI9QW5kIFNPQy1zcGVjaWZpYyB1dGlsaXR5IGNvZGUgbWlnaHQgbG9vayBzb21ldGhpbmcgbGlrZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1MS1cbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdDoyNTI6XHRcdHBkYXRhMiA9IGttYWxsb2Nfb2JqKCpwZGF0YTIpO1xuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1My1cdFx0KnBkYXRhMiA9IHBkYXRhO1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQwMz1lIHR1dHRpIGdsaSBvZ2dldHRpIGNoZSBjb250aWVuZS4gRWNjbyBpbCBjb2RpY2U6OlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2NC1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ2NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDY2LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3Q9NTE5PXNvbm8gcXVlbGxlIHJpbW9zc2UsIG1lbnRyZSBxdWVsbGUgYGAmIzQzO2BgIHNvbm8gcXVlbGxlIGFnZ2l1bnRlLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTUzOS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjU0MDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTU0MS0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDg4PW1lbW9yaWEuIFN1IHVuIGtlcm5lbCBub24tUFJFRU1QVF9SVCBpbCBzZWd1ZW50ZSBjb2RpY2UgZnVuemlvbmEgcGVyZmV0dGFtZW50ZTo6XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5MC0gIHJhd19zcGluX2xvY2soXHUwMDI2bG9jayk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NDkxOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC00OTItXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0PTQ5Nz1QUkVFTVBUX1JUOjpcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDk5LSAgc3Bpbl9sb2NrKFx1MDAyNmxvY2spO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0OjUwMDogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAxLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NDI9SWwgbW9kbyBwcmVmZXJpdG8gcGVyIHBhc3NhcmUgbGEgZGltZW5zaW9uZSBkaSB1bmEgc3RydXR0dXJhIMOoIGlsIHNlZ3VlbnRlOlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDUtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTQ2Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU0PUxhIGZvcm1hIHByZWZlcmlkYSBwYXJhIHBhc2FyIGVsIHRhbWHDsW8gZGUgdW5hIGVzdHJ1Y3R1cmEgZXMgbGEgc2lndWllbnRlOlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3NwX1NQL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NTctXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTU4Olx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk1OS1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD00Nj1rcmVm5Y+v5Lul5Ye6546w5Zyo5pWw5o2u57uT5p6E5L2T5Lit55qE5Lu75L2V5Zyw5pa544CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTQtXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDo1NTogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC01Ni0gICAgIGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdD02Mj1LcmVm6KeE5YiZXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtMTA4LVx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q6MTA5Olx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTExMC1cdGlmICghZGF0YSlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODEwPURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODE1LVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgxNjpcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTctXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTgyND1Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Qg44CCXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgyOS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo4MzA6XHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODMxLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9ODU3PW1hcnZlbF9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTg2My1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM6ODY0Olx0YXBlciA9IGttYWxsb2Nfb2JqKCphcGVyKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODY1LVx0aWYgKGFwZXIgPT0gTlVMTCkgcmV0dXJuIC1FTk9NRU07XG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYz0xMDE5PW1hcnZlbF9hZ3BfaW5mbyh2b2lkKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2MS1cdCAqL1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzoxMDYyOlx0YWdwID0ga21hbGxvY19vYmooKmFncCk7XG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTEwNjMtXHRpZiAoIWFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM9NTkwPXRpdGFuX2FncF9zZXR1cChhbHBoYV9hZ3BfaW5mbyAqYWdwKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTYtXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmM6NTk3Olx0YXBlciA9IGttYWxsb2Nfb2JqKHN0cnVjdCB0aXRhbl9hZ3BfYXBlcnR1cmUpO1xuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jLTU5OC1cdGlmIChhcGVyID09IE5VTEwpXG4tLVxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jPTczMT10aXRhbl9hZ3BfaW5mbyh2b2lkKVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjItXHQgKi9cbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYzo3NjM6XHRhZ3AgPSBrbWFsbG9jX29iaigqYWdwKTtcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjQtXHRpZiAoIWFncClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz0yOT1wcm9jZXNzX3JlbG9jX2Zvcl9nb3QoRWxmNjRfUmVsYSAqcmVsYSxcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy00OC1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jOjQ5Olx0ZyA9IGttYWxsb2Nfb2JqKCpnKTtcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTUwLVx0Zy1cdTAwM2VuZXh0ID0gY2hhaW5zW3Jfc3ltXS5uZXh0O1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jPTIxMT1zdGF0aWMgdm9pZCBwZGV2X3NhdmVfc3JtX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jLTIyMy1cbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jOjIyNDpcdHRtcCA9IGttYWxsb2Nfb2JqKCp0bXApO1xuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjI1LVx0aWYgKCF0bXApIHtcbi0tXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM9MzU5PXZvaWQgKnVud2luZF9hZGRfdGFibGUoc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCB2b2lkICp0YWJsZV9zdGFydCxcbi0tXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmMtMzY4LVxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jOjM2OTpcdHRhYmxlID0ga21hbGxvY19vYmooKnRhYmxlKTtcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYy0zNzAtXHRpZiAoIXRhYmxlKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yNzQ9c3RhdGljIGludCBsb2NvbW9fc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSlcbi0tXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjc5LVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjI4MDpcdHNhdmUgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX3NhdmVfZGF0YSk7XG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMjgxLVx0aWYgKCFzYXZlKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYz05NjQ9c3RhdGljIGludCBzYTExMTFfc3VzcGVuZF9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3MS1cbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYzo5NzI6XHRzYXZlID0ga21hbGxvY19vYmooc3RydWN0IHNhMTExMV9zYXZlX2RhdGEpO1xuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3My1cdGlmICghc2F2ZSlcbi0tXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmM9NTcyPXN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF90YWJsZV9hZGQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxuLS1cbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYy01NzYtXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jOjU3NzpcdHN0cnVjdCB1bndpbmRfdGFibGUgKnRhYiA9IGttYWxsb2Nfb2JqKCp0YWIpO1xuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jLTU3OC1cbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYz01Mz1zdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpfZ2V0X3B3cmRtKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDEtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYzoxMDI6XHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXAtaW9tbXUuYy0xMDMtXHRpZiAoZW50cnkpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jPTQwNj1zdGF0aWMgaW50IF9faW5pdCBwd3JkbXNfc2V0dXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdW51c2VkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYzo0MTM6XHRwd3JzdCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwb3dlcl9zdGF0ZSwgR0ZQX0FUT01JQyk7XG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jLTQxNC1cdGlmICghcHdyc3QpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYz0xMTM9c3RhdGljIGludCBfX2luaXQgcHdyZG1zX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVudXNlZClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jLTEzNC1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmM6MTM1Olx0cHdyc3QgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcG93ZXJfc3RhdGUsIEdGUF9BVE9NSUMpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYy0xMzYtXHRpZiAoIXB3cnN0KVxuLS1cbmFyY2gvYXJtL21tL3BnZC5jLTE5LSNpZmRlZiBDT05GSUdfQVJNX0xQQUVcbmFyY2gvYXJtL21tL3BnZC5jOjIwOiNkZWZpbmUgX3BnZF9hbGxvYyhtbSlcdFx0a21hbGxvY19vYmpzKHBnZF90LCBQVFJTX1BFUl9QR0QsIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKVxuYXJjaC9hcm0vbW0vcGdkLmMtMjEtI2RlZmluZSBfcGdkX2ZyZWUobW0sIHBnZClcdGtmcmVlKHBnZClcbi0tXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYz03NjQ9c3RhdGljIGludCBjb3ZlcmFnZV9zdGFydChjb25zdCB1bmlvbiBkZWNvZGVfaXRlbSAqdGFibGUpXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjUte1xuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmM6NzY2Olx0Y292ZXJhZ2UuYmFzZSA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgY292ZXJhZ2VfZW50cnksXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYy03NjctXHRcdFx0XHQgICAgIE1BWF9DT1ZFUkFHRV9FTlRSSUVTKTtcbi0tXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jPTc3ND12b2lkIGt2bV9ob3N0X3BtdV9pbml0KHN0cnVjdCBhcm1fcG11ICpwbXUpXG4tLVxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODYtXG5hcmNoL2FybTY0L2t2bS9wbXUtZW11bC5jOjc4NzpcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNzg4LVx0aWYgKCFlbnRyeSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0xMDI9c3RhdGljIHZvaWQgKnZnaWNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0xMDYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzoxMDc6XHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMTA4LVx0aWYgKCFpdGVyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jPTM2ND1zdGF0aWMgdm9pZCAqdmdpY19pdHNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0zNzctXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzozNzg6XHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc5LVx0aWYgKCFpdGVyKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9NzQzPXZvaWQgX19pbml0IHZnaWNfc2V0X2t2bV9pbmZvKGNvbnN0IHN0cnVjdCBnaWNfa3ZtX2luZm8gKmluZm8pXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy03NDUtXHRCVUdfT04oZ2ljX2t2bV9pbmZvICE9IE5VTEwpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzo3NDY6XHRnaWNfa3ZtX2luZm8gPSBrbWFsbG9jX29iaigqZ2ljX2t2bV9pbmZvKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtNzQ3LVx0aWYgKGdpY19rdm1faW5mbylcbi0tXG5hcmNoL202OGsvZW11L25mYmxvY2suYz05Nz1zdGF0aWMgaW50IF9faW5pdCBuZmhkX2luaXRfb25lKGludCBpZCwgdTMyIGJsb2NrcywgdTMyIGJzaXplKVxuLS1cbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNC1cbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jOjExNTpcdGRldiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBuZmhkX2RldmljZSk7XG5hcmNoL202OGsvZW11L25mYmxvY2suYy0xMTYtXHRpZiAoIWRldilcbi0tXG5hcmNoL202OGsvbW0va21hcC5jPTEwOD1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqZ2V0X2lvX2FyZWEodW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbmFyY2gvbTY4ay9tbS9rbWFwLmMtMTEyLVxuYXJjaC9tNjhrL21tL2ttYXAuYzoxMTM6XHRhcmVhID0ga21hbGxvY19vYmooKmFyZWEpO1xuYXJjaC9tNjhrL21tL2ttYXAuYy0xMTQtXHRpZiAoIWFyZWEpXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM9MjUzPXUzMiBhdTF4eHhfZGJkbWFfY2hhbl9hbGxvYyh1MzIgc3JjaWQsIHUzMiBkZXN0aWQsXG4tLVxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzEyLVx0XHRcdCAqL1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6MzEzOlx0XHRcdGN0cCA9IGttYWxsb2Nfb2JqKGNoYW5fdGFiX3QsIEdGUF9BVE9NSUMpO1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzE0LVx0XHRcdGNoYW5fdGFiX3B0cltpXSA9IGN0cDtcbi0tXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0zOTE9dTMyIGF1MXh4eF9kYmRtYV9yaW5nX2FsbG9jKHUzMiBjaGFuaWQsIGludCBlbnRyaWVzKVxuLS1cbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNC1cdCAqL1xuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6NDE1Olx0ZGVzY19iYXNlID0gKHUzMikga21hbGxvY19vYmpzKGF1MXhfZGRtYV9kZXNjX3QsIGVudHJpZXMsXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTYtXHRcdFx0XHQgICAgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xuLS1cbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmM9NTk9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdTMyICpsb2NhdGlvbiwgRWxmX0FkZHIgdixcbi0tXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jLTc0LVx0ICovXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jOjc1Olx0biA9IGttYWxsb2Nfb2JqKCpuKTtcbmFyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMtNzYtXHRpZiAoIW4pXG4tLVxuYXJjaC9taXBzL2tlcm5lbC92cGUuYz0zMTE9c3RhdGljIGludCBhcHBseV9yX21pcHNfaGkxNihzdHJ1Y3QgbW9kdWxlICptZSwgdWludDMyX3QgKmxvY2F0aW9uLFxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIwLVx0ICovXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jOjMyMTpcdG4gPSBrbWFsbG9jX29iaigqbik7XG5hcmNoL21pcHMva2VybmVsL3ZwZS5jLTMyMi1cdGlmICghbilcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9MTg4PXBhdF9xdWVyeV9tb2R1bGUodWxvbmcgcGNlbGxfbG9jLCB1bG9uZyBtb2RfaW5kZXgpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5NS1cbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzoxOTY6XHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtMTk3LVx0aWYgKCFwYV9wZGNfY2VsbClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmM9NTMyPWFkZF9zeXN0ZW1fbWFwX2FkZHJlc3NlcyhzdHJ1Y3QgcGFyaXNjX2RldmljZSAqZGV2LCBpbnQgbnVtX2FkZHJzLCBcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTM4LVxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjUzOTpcdGRldi1cdTAwM2VhZGRyID0ga21hbGxvY19vYmpzKCpkZXYtXHUwMDNlYWRkciwgbnVtX2FkZHJzKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy01NDAtXHRpZighZGV2LVx1MDAzZWFkZHIpIHtcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmM9ODE9c3RhdGljIGludCBfX2luaXQgcHJvY2Vzc29yX3Byb2JlKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Byb2Nlc3Nvci5jLTExMi1cbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYzoxMTM6XHRcdHBhX3BkY19jZWxsID0ga21hbGxvY19vYmooKnBhX3BkY19jZWxsKTtcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTQtXHRcdGlmICghcGFfcGRjX2NlbGwpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jPTE0OT11bndpbmRfdGFibGVfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyLCBcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTU5LVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjE2MDpcdHRhYmxlID0ga21hbGxvY19vYmooc3RydWN0IHVud2luZF90YWJsZSwgR0ZQX1VTRVIpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTE2MS1cdGlmICh0YWJsZSA9PSBOVUxMKVxuLS1cbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz00MDY9dm9pZCB1bndpbmRfZnJhbWVfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzayhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtNDEwLVxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjQxMTpcdHIyID0ga21hbGxvY19vYmooc3RydWN0IHB0X3JlZ3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTQxMi1cdGlmICghcjIpXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jPTk4ND1pbnQgX19pbml0IG52cmFtX3NjYW5fcGFydGl0aW9ucyh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDMyLVx0XHR9XG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM6MTAzMzpcdFx0dG1wX3BhcnQgPSBrbWFsbG9jX29iaigqdG1wX3BhcnQpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jLTEwMzQtXHRcdGVyciA9IC1FTk9NRU07XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTczMT1pbnQga3ZtX3ZjcHVfaW9jdGxfY29uZmlnX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3NC1cdFx0ICAgIGNmZy1cdTAwM2VhcnJheSAvIFBBR0VfU0laRTtcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYzo3NzU6XHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmMtNzc2LVx0aWYgKCFwYWdlcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9ODk4PWludCBrdm1wcGNfZTUwMF90bGJfaW5pdChzdHJ1Y3Qga3ZtcHBjX3ZjcHVfZTUwMCAqdmNwdV9lNTAwKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM6OTE1Olx0dmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVx1MDAzZWd0bGJfYXJjaCxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTYtXHRcdFx0XHRcdCAgICBLVk1fRTUwMF9UTEIwX1NJWkUgJiM0MzsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcbi0tXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM9NDU9c3RhdGljIGludCBncm93KHJoX2luZm9fdCAqIGluZm8sIGludCBtYXhfYmxvY2tzKVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01Ni1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYzo1NzpcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jLTU4LVx0aWYgKGJsb2NrID09IE5VTEwpXG4tLVxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jPTI1Mz1yaF9pbmZvX3QgKnJoX2NyZWF0ZSh1bnNpZ25lZCBpbnQgYWxpZ25tZW50KVxuLS1cbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjAtXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmM6MjYxOlx0aW5mbyA9IGttYWxsb2Nfb2JqKCppbmZvLCBHRlBfQVRPTUlDKTtcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjItXHRpZiAoaW5mbyA9PSBOVUxMKVxuLS1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jPTk1PXN0YXRpYyBpbnQgaGFzaF9faW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy05OC1cbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjk5Olx0bW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQgPSBrbWFsbG9jX29iaihzdHJ1Y3QgaGFzaF9tbV9jb250ZXh0KTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEwMC1cdGlmICghbW0tXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQpXG4tLVxuYXJjaC9wb3dlcnBjL21tL2Jvb2szczY0L21tdV9jb250ZXh0LmMtMTI1LVx0XHRpZiAoY3VycmVudC1cdTAwM2VtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cdTAwM2VzcHQpIHtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjEyNjpcdFx0XHRtbS1cdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dC1cdTAwM2VzcHQgPSBrbWFsbG9jX29iaihzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlKTtcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNy1cdFx0XHRpZiAoIW1tLVx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVx1MDAzZXNwdCkge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz02MjM9c3RhdGljIGludCBldmVudF91bmlxX2FkZChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5sLFxuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6NjUxOlx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy02NTItXHRpZiAoIWRhdGEpXG4tLVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTc1NT1zdGF0aWMgaW50IGNyZWF0ZV9ldmVudHNfZnJvbV9jYXRhbG9nKHN0cnVjdCBhdHRyaWJ1dGUgKioqZXZlbnRzXyxcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jOjkwOTpcdGV2ZW50cyA9IGttYWxsb2Nfb2JqcygqZXZlbnRzLCBhdHRyX21heCAmIzQzOyAxKTtcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTAtXHRpZiAoIWV2ZW50cykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MTQtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1Olx0ZXZlbnRfZGVzY3MgPSBrbWFsbG9jX29ianMoKmV2ZW50X2Rlc2NzLCBldmVudF9pZHggJiM0MzsgMSk7XG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTE2LVx0aWYgKCFldmVudF9kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYy05MjAtXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTIxOlx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICYjNDM7IDEpO1xuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cdGlmICghZXZlbnRfbG9uZ19kZXNjcykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1My1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0Olx0cHBjNHh4X2hzdGFfbXNpLmlycV9tYXAgPSBrbWFsbG9jX29ianMoaW50LCBpcnFfY291bnQpO1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvaHN0YV9tc2kuYy0xNTUtXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYz00ND1zdGF0aWMgaW50IHNwdWZzX2F0dHJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTQ5LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYzo1MDpcdGF0dHIgPSBrbWFsbG9jX29iaigqYXR0cik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jLTUxLVx0aWYgKCFhdHRyKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kbHBhci5jPTYyOD12b2lkIHF1ZXVlX2hvdHBsdWdfZXZlbnQoc3RydWN0IHBzZXJpZXNfaHBfZXJyb3Jsb2cgKmhwX2VycmxvZylcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzYtXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYzo2Mzc6XHR3b3JrID0ga21hbGxvY19vYmooc3RydWN0IHBzZXJpZXNfaHBfd29yaywgR0ZQX0FUT01JQyk7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzgtXHRpZiAod29yaykge1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYz0xMTk9aW50IGh2Y3NfZ2V0X3BhcnRuZXJfaW5mbyh1aW50MzJfdCB1bml0X2FkZHJlc3MsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXG4tLVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jLTE2Mi1cdFx0ICogaHZjc19mcmVlX3BhcnRuZXJfaW5mbygpLiAqL1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y3NlcnZlci5jOjE2MzpcdFx0bmV4dF9wYXJ0bmVyX2luZm8gPSBrbWFsbG9jX29iaihzdHJ1Y3QgaHZjc19wYXJ0bmVyX2luZm8sXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMtMTY0LVx0XHRcdFx0XHRcdEdGUF9BVE9NSUMpO1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM9MTQ0PXN0YXRpYyB2b2lkIHNob3dfZ3BjaV9kYXRhKHN0cnVjdCBzZXFfZmlsZSAqbSlcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE0OS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyY2ZnLmM6MTUwOlx0YnVmID0ga21hbGxvY19vYmooKmJ1Zik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE1MS1cdGlmIChidWYgPT0gTlVMTClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM9NDM1PXN0YXRpYyBpbnQgcHNlcmllc19tc2lfb3BzX3ByZXBhcmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYy00NDMtXHRzdHJ1Y3QgcHNlcmllc19tc2lfZGV2aWNlICpwc2VyaWVzX2RldiBfX2ZyZWUoa2ZyZWUpXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM6NDQ0Olx0XHQ9IGttYWxsb2Nfb2JqKCpwc2VyaWVzX2Rldik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMtNDQ1LVx0aWYgKCFwc2VyaWVzX2Rldilcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM9MTIwPXN0YXRpYyBpbnQgcHNlcmllc19wY2lfc3Jpb3ZfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MTYgbnVtX3Zmcylcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQzLVx0cGRuID0gcGNpX2dldF9wZG4ocGRldik7XG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmM6MTQ0Olx0cGRuLVx1MDAzZXBlX251bV9tYXAgPSBrbWFsbG9jX29ianMoKnBkbi1cdTAwM2VwZV9udW1fbWFwLCBudW1fdmZzKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDUtXHRpZiAoIXBkbi1cdTAwM2VwZV9udW1fbWFwKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYz0xMDc2PXN0YXRpYyBpbnQgX19pbml0IHBzZXJpZXNfdmFzX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmMtMTA4OS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYzoxMDkwOlx0aHZfY2FwcyA9IGttYWxsb2Nfb2JqKCpodl9jYXBzKTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDkxLVx0aWYgKCFodl9jYXBzKVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYz03MDU9c3RhdGljIGludCB2aW9fY21vX2J1c19wcm9iZShzdHJ1Y3QgdmlvX2RldiAqdmlvZGV2KVxuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDctXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmM6NzQ4Olx0XHRkZXZfZW50ID0ga21hbGxvY19vYmooc3RydWN0IHZpb19jbW9fZGV2X2VudHJ5KTtcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDktXHRcdGlmICghZGV2X2VudClcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYz0zNTI9c3RhdGljIGludCBmc2xfbGJjX3N5c2NvcmVfc3VzcGVuZCh2b2lkICpkYXRhKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jLTM2NC1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jOjM2NTpcdGN0cmwtXHUwMDNlc2F2ZWRfcmVncyA9IGttYWxsb2Nfb2JqKHN0cnVjdCBmc2xfbGJjX3JlZ3MpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmMtMzY2LVx0aWYgKCFjdHJsLVx1MDAzZXNhdmVkX3JlZ3MpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmM9MTU0OT12b2lkIF9faW5pdCBtcGljX2luaXQoc3RydWN0IG1waWMgKm1waWMpXG4tLVxuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0MS1cdC8qIGFsbG9jYXRlIG1lbW9yeSB0byBzYXZlIG1waWMgc3RhdGUgKi9cbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jOjE2NDI6XHRtcGljLVx1MDAzZXNhdmVfZGF0YSA9IGttYWxsb2Nfb2JqcygqbXBpYy1cdTAwM2VzYXZlX2RhdGEsIG1waWMtXHUwMDNlbnVtX3NvdXJjZXMpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMtMTY0My1cdEJVR19PTihtcGljLVx1MDAzZXNhdmVfZGF0YSA9PSBOVUxMKTtcbi0tXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jPTIzPXZvaWQgX19pbml0IG9mX2luc3RhbnRpYXRlX3J0Yyh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmMtMzUtXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jOjM2Olx0XHRcdHJlcyA9IGttYWxsb2Nfb2JqKCpyZXMpO1xuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNy1cdFx0XHRpZiAoIXJlcykge1xuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jPTY1ND1zdGF0aWMgaW50IGFkZF9yZWxvY2F0aW9uX3RvX2FjY3VtdWxhdGUoc3RydWN0IG1vZHVsZSAqbWUsIGludCB0eXBlLFxuLS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2NS1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjY2NjpcdGVudHJ5ID0ga21hbGxvY19vYmooKmVudHJ5KTtcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTY2Ny1cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy02OTktXHRpZiAoIWZvdW5kKSB7XG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3MDA6XHRcdHJlbF9oZWFkID0ga21hbGxvY19vYmooKnJlbF9oZWFkKTtcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTcwMS1cbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYy03MTEtXHRcdFx0YnVja2V0ID1cbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcxMjpcdFx0XHRcdGttYWxsb2Nfb2JqKHN0cnVjdCB1c2VkX2J1Y2tldCk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAxMQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDE0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluaXRpYWxpemF0aW9uIG9mIGBsYXN0X2FwcGxpZWRgIGluIHRoZSBEQU1PTiBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrbWFsbG9jX29iamAgbWFjcm8gYW5kIHRyYWNpbmcgaXRzIHVzYWdlIGluIHRoZSBEQU1PTiBjb2RlLiBJdCBzZWVtcyBsaWtlIGl0IHdhcyBpbnRyb2R1Y2VkIGluIGEgcGF0Y2gsIHBvdGVudGlhbGx5IHdpdGggYSBjYWxsIGxpa2UgYGttYWxsb2Nfb2JqKCpzY2hlbWUsIEdGUF9LRVJORUwpYC4gSSYjMzk7bSBzZWVpbmcgaXQgc3BlY2lmaWNhbGx5IHVzZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AgYXMgYHNjaGVtZSA9IGttYWxsb2Nfb2JqKCpzY2hlbWUpO2AuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBhYnNlbmNlIG9mIGV4cGxpY2l0IGBHRlBgIGZsYWdzIGluIHRoaXMgaW5zdGFudGlhdGlvbi4gSXMgaXQgYSBtYWNybyB0aGF0IGRlZmF1bHRzIHRvIGBHRlBfS0VSTkVMYCBpbnRlcm5hbGx5LCBvciBwZXJoYXBzIGp1c3QgYSBzaG9ydGhhbmQgZm9yIGBrbWFsbG9jKHNpemVvZigqc2NoZW1lKSwgR0ZQX0tFUk5FTClgPyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuCgpSZWdhcmRsZXNzIG9mIHRoYXQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlsLCB3aGF0JiMzOTtzIGNydWNpYWwgaGVyZSBpcyB0aGF0IHRoZSBgc2NoZW1lLSZndDtsYXN0X2FwcGxpZWRgIG1lbWJlciB3YXMgdW5pbml0aWFsaXplZCAqcHJpb3IqIHRvIHRoaXMgcGF0Y2guIFRoaXMgaXMgYSBwb3RlbnRpYWwgc291cmNlIG9mIHN1YnRsZSBidWdzLiBOb3csIGJlZm9yZSBJIGdvIGZ1cnRoZXIsIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSBgbGFzdF9hcHBsaWVkYCBpcyB1c2VkIHdpdGhpbiB0aGUgY29kZS4gTGV0JiMzOTtzIHRyYWNlIGFsbCByZWZlcmVuY2VzIHRvIHRoYXQgbWVtYmVyIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgaXQgcG90ZW50aWFsbHkgYmVpbmcgdW5pbml0aWFsaXplZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDE6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bGFzdF9hcHBsaWVkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaD01NTU9c3RydWN0IGRhbW9zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNTk3LVx0ICogb2JqZWN0cyBjb3VsZCBiZSBzdWNoIGV4YW1wbGVzLiAgVGhlIFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNhblxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjU5ODpcdCAqIHVzZSBAbGFzdF9hcHBsaWVkIHRvIGF2b2lkIHRoYXQuICBEQU1PUyBjb3JlIGxvZ2ljIHVuc2V0c1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjU5OTpcdCAqIEBsYXN0X2FwcGxpZWQgd2hlbiBlYWNoIHJlZ2lvbnMgd2Fsa2luZyBmb3IgYXBwbHlpbmcgdGhlIHNjaGVtZSBpc1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYwMC1cdCAqIGZpbmlzaGVkLlxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYwMS1cdCAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYwMjpcdHZvaWQgKmxhc3RfYXBwbGllZDtcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MDMtXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz02ODI9c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNzA3LVx0c2NoZW1lLVx1MDAzZW1heF9ucl9zbmFwc2hvdHMgPSAwO1xubW0vZGFtb24vY29yZS5jOjcwODpcdHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xubW0vZGFtb24vY29yZS5jLTcwOS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjaGVtZS1cdTAwM2VsaXN0KTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzIxNz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzI1MS1cdFx0ZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHMsIGMpO1xubW0vZGFtb24vY29yZS5jOjMyNTI6XHRcdHMtXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcbm1tL2RhbW9uL2NvcmUuYy0zMjUzLVx0XHRkYW1vc190cmFjZV9zdGF0KGMsIHMpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MjA5PXN0YXRpYyBib29sIGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjEyLVx0XHRyZXR1cm4gdHJ1ZTtcbm1tL2RhbW9uL3BhZGRyLmM6MjEzOlx0aWYgKGZvbGlvID09IHMtXHUwMDNlbGFzdF9hcHBsaWVkKSB7XG5tbS9kYW1vbi9wYWRkci5jLTIxNC1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTIyMD1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9wYWdlb3V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0yNzMtXHRjb25kX3Jlc2NoZWQoKTtcbm1tL2RhbW9uL3BhZGRyLmM6Mjc0Olx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbm1tL2RhbW9uL3BhZGRyLmMtMjc1LVx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9Mjc4PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkYW1vbl9wYV9kZV9hY3RpdmF0ZShcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTMwNy1cdH1cbm1tL2RhbW9uL3BhZGRyLmM6MzA4Olx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbm1tL2RhbW9uL3BhZGRyLmMtMzA5LVx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xuLS1cbm1tL2RhbW9uL3BhZGRyLmM9MzI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTM1NS1cdGNvbmRfcmVzY2hlZCgpO1xubW0vZGFtb24vcGFkZHIuYzozNTY6XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vcGFkZHIuYy0zNTctXHRyZXR1cm4gZGFtb25fcGFfY29yZV9hZGRyKGFwcGxpZWQgKiBQQUdFX1NJWkUsIGFkZHJfdW5pdCk7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zNjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzgyLVx0fVxubW0vZGFtb24vcGFkZHIuYzozODM6XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vcGFkZHIuYy0zODQtXHRyZXR1cm4gMDtcbi0tXG5tbS9kYW1vbi92YWRkci5jPTc4OD1zdGF0aWMgaW5saW5lIGJvb2wgZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtNzkwLXtcbm1tL2RhbW9uL3ZhZGRyLmM6NzkxOlx0cmV0dXJuICFmb2xpbyB8fCBmb2xpbyA9PSBzLVx1MDAzZWxhc3RfYXBwbGllZDtcbm1tL2RhbW9uL3ZhZGRyLmMtNzkyLX1cbi0tXG5tbS9kYW1vbi92YWRkci5jPTc5ND1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgyMC1cdFx0XHQqc3pfZmlsdGVyX3Bhc3NlZCAmIzQzOz0gZm9saW9fc2l6ZShmb2xpbyk7XG5tbS9kYW1vbi92YWRkci5jOjgyMTpcdFx0cy1cdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcbm1tL2RhbW9uL3ZhZGRyLmMtODIyLVxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtODQ2LVx0XHRuciA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbm1tL2RhbW9uL3ZhZGRyLmM6ODQ3Olx0XHRzLVx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xubW0vZGFtb24vdmFkZHIuYy04NDgtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4Njc5CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgREFNT04mIzM5O3MgYGxhc3RfYXBwbGllZGAgSXNzdWUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZSwgYW5kIEkgc2VlIGBsYXN0X2FwcGxpZWRgIHNob3dpbmcgdXAgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoYXQmIzM5O3MgYSBrZXkgdmFyaWFibGUsIGxpa2VseSByZWxhdGVkIHRvIHRoZSBzdGF0ZSBvZiBtZW1vcnkgbW9kaWZpY2F0aW9ucy4gVGhlbiBpdCBoaXRzIG1lLi4uIHdhaXQgYSBzZWNvbmQuIEkgcmVtZW1iZXIgbm93IOKAkyBgc2NoZW1lLSZndDtsYXN0X2FwcGxpZWRgIHdhc24mIzM5O3QgYmVpbmcgaW5pdGlhbGl6ZWQgcHJvcGVybHkgd2hlbiBhIG5ldyBzY2hlbWUgaXMgY3JlYXRlZCB2aWEgYGRhbW9uX25ld19zY2hlbWVgLiBJIHNob3VsZCBoYXZlIGtub3duIGJldHRlciwgYGttYWxsb2NgIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgemVybyBvdXQgdGhlIGFsbG9jYXRlZCBtZW1vcnkhIEl0JiMzOTtzIGEgY29tbW9uIG92ZXJzaWdodCwgYW5kIGRlZmluaXRlbHkgY291bGQgbGVhZCB0byBzb21lIHdlaXJkLCBkaWZmaWN1bHQtdG8tdHJhY2sgYnVncyBpZiB5b3UgZG9uJiMzOTt0IGFjY291bnQgZm9yIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrbWFsbG9jX29iamAuIEkmIzM5O2xsIHdhbnQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBjb250ZXh0IGhlcmUgdGhhdCBtaWdodCBiZSByZWxldmFudC4gSXQmIzM5O3MgdGltZSB0byByZXNvbHZlIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlZmluZSBrbWFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDUxPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTAxLSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEwMjojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTAzLVx0X19hbGxvY19vYmpzKGttYWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFZBUl9PUl9UWVBFKSwgMSlcbi0tXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTEzLSAqL1xuaW5jbHVkZS9saW51eC9zbGFiLmg6MTExNDojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMTUtXHRfX2FsbG9jX29ianMoa21hbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoVkFSX09SX1RZUEUpLCBDT1VOVClcbi0tXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTYzLSN1bmRlZiB2ZnJlZVxubGliL2RlY29tcHJlc3NfdW54ei5jOjE2NDojZGVmaW5lIGttYWxsb2Nfb2JqKHR5cGUpIG1hbGxvYyhzaXplb2YodHlwZSkpXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTY1LSNkZWZpbmUga2ZyZWUocHRyKSBmcmVlKHB0cilcbi0tXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg9NjM9c3RhdGljIGlubGluZSB2b2lkICprbWFsbG9jX2FycmF5KHVuc2lnbmVkIG4sIHNpemVfdCBzLCBnZnBfdCBnZnApXG4tLVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY3LVxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oOjY4OiNkZWZpbmUga21hbGxvY19vYmooVkFSX09SX1RZUEUsIC4uLikgXFxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC02OS1cdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpLCAwKSlcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03MC1cbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaDo3MTojZGVmaW5lIGttYWxsb2Nfb2JqcyhWQVJfT1JfVFlQRSwgQ09VTlQsIC4uLikgXFxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC03Mi1cdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpICogKENPVU5UKSwgMCkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTUwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogOTExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBEQU1PTiBQYXRjaCBmb3IgVW5pbml0aWFsaXplZCBNZW1vcnkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpczogYGttYWxsb2Nfb2JqYCB1c2VzIGBrbWFsbG9jYCwgd2hpY2ggZG9lc24mIzM5O3QgemVybyBvdXQgdGhlIG1lbW9yeS4gVGhhdCBtZWFucyBgc2NoZW1lLSZndDtsYXN0X2FwcGxpZWRgIGlzIGxpa2VseSB1bmluaXRpYWxpemVkIHdoZW4gYGRhbW9uX25ld19zY2hlbWVgIGlzIGNhbGxlZC4gQmluZ28g4oCTIHRoaXMgcGF0Y2ggaW5pdGlhbGl6ZXMgaXQgdG8gYE5VTExgLgoKSXMgdGhpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlPyBBYnNvbHV0ZWx5ISBJdCYjMzk7cyBmaXhpbmcgYSBjbGFzc2ljIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1Zy4gVGhlIHJpc2sgaGVyZSBpcyB0aGF0IHJhbmRvbSBnYXJiYWdlIGNvdWxkIGJlIGludGVycHJldGVkIGFzIGEgdmFsaWQgYGZvbGlvYCBwb2ludGVyLiBUaGlzIGNvdWxkIGNhdXNlIGlzc3VlcyBpbiBhbnkgb2YgdGhlIGZ1bmN0aW9ucyB3aGljaCB1c2UgYGxhc3RfYXBwbGllZGAgdG8gbWFrZSBkZWNpc2lvbnMuCgpUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGt1bml0IHRlc3RzLCBidXQgbGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBjb3JlIGxvZ2ljIGZpcnN0LiBJcyBgZGFtb25fbmV3X3NjaGVtZWAgcmVhY2hhYmxlPyBZZXMsIGl0JiMzOTtzIHRoZSBnYXRld2F5IGZvciBjcmVhdGluZyBEQU1PTiBzY2hlbWVzLCBhbmQgdGhvc2UgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBzeXNmcywgZGVidWdmcywgb3Iga2VybmVsIEFQSXMuIEl0JiMzOTtzIHRoZSBjZW50cmFsIHBvaW50IGZvciBzZXR0aW5nIHVwIGEgbmV3IERBTU9OIHNjaGVtZS4gSSBjYW4gc2VlIHRoYXQgYGRhbW9uX25ld19zY2hlbWVgIGlzIGEgY29yZSBmdW5jdGlvbi4KCk5vdywgaWYgYGxhc3RfYXBwbGllZGAgaXMgdW5pbml0aWFsaXplZCwgaXQgY291bGQgbGVhZCB0byB0aGUgc2l0dWF0aW9uIHdoZXJlIGl0IGFjY2lkZW50YWxseSBtYXRjaGVzIGEgdmFsaWQgYGZvbGlvYC4gVGhpcyB3b3VsZCBjYXVzZSBhIGZvbGlvIHRvIGJlIHNraXBwZWQsIHBvc3NpYmx5IHRyaWdnZXJpbmcgYSBgZm9saW9fcHV0YCBjYWxsIG9uIGEgZm9saW8gdGhhdCBzaG91bGRuJiMzOTt0IGJlIHJlbGVhc2VkLgoKSSYjMzk7bSBjaGVja2luZyBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AsIGp1c3QgdG8gY29uZmlybSBteSB0aGlua2luZy4KCmBgYGMKc3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpCnsKCWlmICghZm9saW8pCgkJcmV0dXJuIHRydWU7CglpZiAoZm9saW8gPT0gcy0mZ3Q7bGFzdF9hcHBsaWVkKSB7CgkJZm9saW9fcHV0KGZvbGlvKTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCXJldHVybiBmYWxzZTsKfQpgYGAKCk9rYXksIHRoZSBsb2dpYyBsb29rcyBsaWtlIGl0IGNoZWNrcyBpZiB0aGUgZm9saW8gaXMgdGhlIHNhbWUgYXMgdGhlIGxhc3QgYXBwbGllZCBvbmUuIGlmIHRoZXkgbWF0Y2gsIHRoZSBmb2xpbyByZWZlcmVuY2UgaXMgZHJvcHBlZCBhcyBpdCBpcyBjb25zaWRlcmVkIGFwcGxpZWQuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2l0aCBhbiB1bmluaXRpYWxpemVkIGBsYXN0X2FwcGxpZWRgLCB3ZSBjb3VsZCBpbmNvcnJlY3RseSBpZGVudGlmeSBhIGZvbGlvIGFzIGFscmVhZHkgJiMzNDthcHBsaWVkLCYjMzQ7IGFuZCBlbmQgdXAgZHJvcHBpbmcgaXRzIHJlZmVyZW5jZSBwcmVtYXR1cmVseSwgdGhlcmVieSBza2lwcGluZyB0aGUgZm9saW8uIFRoaXMgY291bGQgbWFuaWZlc3QgYXMgaW5jb3JyZWN0IGJlaGF2aW91ciwgbGlrZSBza2lwcGluZyBtZW1vcnkgYWNjZXNzIHdoaWNoIHdvdWxkIG5vdCBiZSBhIGRvdWJsZSBmcmVlLCBidXQgaW5jb3JyZWN0IGJlaGF2aW9yLgoKVGhlIHBhdGNoIGFsc28gYWZmZWN0cyBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCBhbmQgYG1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhgIHdoaWNoIGFyZSB0ZXN0cy4KCklzIHRoaXMgc2luZ2xlLWxpbmUgaW5pdGlhbGl6YXRpb24gd29ydGggZnV6emluZz8gTm9ybWFsbHksIGEgb25lLWxpbmUgaW5pdGlhbGl6YXRpb24gd291bGRuJiMzOTt0IHdhcnJhbnQgaW50ZW5zZSBmdXp6aW5nLCBidXQgdGhpcyBpc24mIzM5O3QganVzdCBhIHRyaXZpYWwgdmFyaWFibGU7IGl0IGFmZmVjdHMgREFNT04mIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gdGhlIHByb21wdCwgJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiBtb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLiBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LiBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4mIzM0OyBhbmQgdGhhdCB0aGlzIGlzIGEgZml4IHRvIHRoZSBjb3JlIGxvZ2ljLCB3aGljaCBwcmV2ZW50cyB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzZSwgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZHMgYFdvcnRoRnV6emluZz10cnVlYC4KClRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIGBsYXN0X2FwcGxpZWRgLCB3aGljaCBpbmNsdWRlIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCwgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gLCBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YC4gU28sIEkmIzM5O2xsIHJlY29tbWVuZCBmb2N1c2luZyBmdXp6aW5nIGVmZm9ydHMgb24gdGhvc2UgZnVuY3Rpb25zIHRvIGVuc3VyZSB0aGlzIGZpeCB3b3JrcyBhcyBleHBlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDE6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9wYWRkci5jPTE5NT1zdGF0aWMgYm9vbCBkYW1vc19wYV9maWx0ZXJfb3V0KHN0cnVjdCBkYW1vcyAqc2NoZW1lLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjA4LVxubW0vZGFtb24vcGFkZHIuYzoyMDk6c3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9wYWRkci5jLTIxMC17XG4tLVxubW0vZGFtb24vcGFkZHIuYz0yMjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjQ3LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjI0ODpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI0OS1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0yNzg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMjg4LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjI4OTpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTI5MC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zMjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzM2LVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjMzNzpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTMzOC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4tLVxubW0vZGFtb24vcGFkZHIuYz0zNjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtMzcyLVx0XHRmb2xpbyA9IGRhbW9uX2dldF9mb2xpbyhQSFlTX1BGTihhZGRyKSk7XG5tbS9kYW1vbi9wYWRkci5jOjM3MzpcdFx0aWYgKGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8oZm9saW8sIHMpKSB7XG5tbS9kYW1vbi9wYWRkci5jLTM3NC1cdFx0XHRhZGRyICYjNDM7PSBQQUdFX1NJWkU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxOTQzCgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMjE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIFdvcnRoRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBpdCBoaXRzIHRob3NlIEtVbml0IHRlc3QgbW9kaWZpY2F0aW9ucyBpbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCBhbmQgYG1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB0ZXN0cywgYnV0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBzcGVjaWZpYy4gVGhleSB3YW50IHRvIGtub3cgaWYgdGhlIHBhdGNoIGlzICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgd2hpY2ggaXMgYSBiaW5hcnk6IHRydWUvZmFsc2UuIFdlIG5lZWQgdG8gcmV0dXJuIGZhbHNlIGlmIHRoZSBwYXRjaCAqb25seSogaW5jbHVkZXMgY2VydGFpbiB0aGluZ3MuIFNwZWNpZmljYWxseSwgdGhvc2UgdGhpbmdzIGFyZSBkb2N1bWVudGF0aW9uIHR3ZWFrcywgS2NvbmZpZyBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nIGxpa2UgYHByX2VycmAgb3IgYHByaW50a2AsIGNvc21ldGljIGFsdGVyYXRpb25zIG9mIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24mIzM5O3QgY2hhbmdlIGhvdyB0aGluZ3MgKndvcmsqLCBhbmQgaW5hY2Nlc3NpYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLgoKSG1tLCBidXQgaGVyZSYjMzk7cyB0aGUga2lja2VyOiB0aGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIGNoYW5nZSB0byBgbW0vZGFtb24vY29yZS5jYC4gVGhhdCYjMzk7cyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uOyBpdCBpbml0aWFsaXplcyBhIHN0cnVjdCBmaWVsZC4gVGhhdCYjMzk7cyAqbm90KiBvbiB0aGUgJiMzNDtyZXR1cm4gZmFsc2UmIzM0OyBsaXN0LiBTbywgdGhhdCBjaGFuZ2UgaXRzZWxmIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpBbHJpZ2h0LCBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBEQU1PTiBuZXh0LiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBtb3JlIGNvbnRleHQgZm9yIHdoYXTigJlzIGhhcHBlbmluZyBpbiBgY29yZS5jYC4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlIGNoYW5nZSBoYXMgYW55IGZ1bmN0aW9uYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xubW0vZGFtb24vS2NvbmZpZy00LVxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxubW0vZGFtb24vS2NvbmZpZy02LVx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXG5tbS9kYW1vbi9LY29uZmlnLTE2LVx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMjUtXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTI3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy0zNy1cbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXG5tbS9kYW1vbi9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcbm1tL2RhbW9uL0tjb25maWctNDgtXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy02Ny1cbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXG5tbS9kYW1vbi9LY29uZmlnLTY5LVx0Ym9vbCBcJiMzNDtEQU1PTiBzeXNmcyBpbnRlcmZhY2VcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy03Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxubW0vZGFtb24vS2NvbmZpZy04OS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cdGJvb2wgXCYjMzQ7QnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTA3LVxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcbm1tL2RhbW9uL0tjb25maWctMTA5LVx0Ym9vbCBcJiMzNDtCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMTUtXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcbm1tL2RhbW9uL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMjEzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVuYWJsaW5nIERBTU9OIEZlYXR1cmVzIGFuZCBGb2N1c2luZyB0aGUgRnV6eioqCgpPa2F5LCBoZXJlJiMzOTtzIHdoYXQgSSYjMzk7bSB0aGlua2luZyByZWdhcmRpbmcgdGhpcyBEQU1PTiBwYXRjaC4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgZW5hYmxlIGEgc3VpdGUgb2YgREFNT04gZmVhdHVyZXM6IGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9SRUNMQUlNYCwgYW5kIGBEQU1PTl9MUlVfU09SVGAuIFRob3NlIHNlZW0gbGlrZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdlIHdhbnQgdG8gdGFyZ2V0LgoKVGhlIHBhdGNoIGluY2x1ZGVzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGt1bml0IHRlc3RzLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBXZSBjYW4gZW5hYmxlIGBEQU1PTl9LVU5JVF9URVNUYCBhbmQgYERBTU9OX1ZBRERSX0tVTklUX1RFU1RgIGFzIHdlbGwuIE5vdywgdGhlIHR5cGljYWwgU3l6a2FsbGVyIGFwcHJvYWNoIHdvdWxkbiYjMzk7dCBkaXJlY3RseSBmdXp6IEtVbml0IHRlc3RzLiBIb3dldmVyLCBlbmFibGluZyB0aGVtIG1pZ2h0IGJlIGJlbmVmaWNpYWwgYXMgdGhleSBhcmUgZXhlY3V0ZWQgZHVyaW5nIGJvb3Qgb3IgbW9kdWxlIGxvYWQuIFRoaXMgbWlnaHQgdHJpZ2dlciBzb21lIGNvZGUgcGF0aHMgdGhhdCB3ZSB3b3VsZG4mIzM5O3Qgb3RoZXJ3aXNlIHRvdWNoLCB3aGljaCB3b3VsZCBiZSBhIHVzZWZ1bCBzaWRlIGVmZmVjdC4gR29vZC4KCk5leHQsIHdlIG5lZWQgdG8gY2hvb3NlIHRoZSByaWdodCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBJJiMzOTttIHRoaW5raW5nIGBkYW1vbl9uZXdfc2NoZW1lYCwgYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gLCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AsIGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBgZGFtb25fcGFfc3RhdGAsIGFuZCBgZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlgLiBUaGVzZSBzZWVtIGxpa2UgZ29vZCBzdGFydGluZyBwb2ludHMgZm9yIGZ1enppbmcuCgpCZWZvcmUgd2UgcHJvY2VlZCwgYSBxdWljayBzYW5pdHkgY2hlY2suIEkmIzM5O2QgYmV0dGVyIGNvbmZpcm0gdGhhdCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AgaXMgYWN0dWFsbHkgZGVmaW5lZC4gTWFrZSBzdXJlIHRoYXQgc3ltYm9sIGlzIGF2YWlsYWJsZSBiZWZvcmUgd2UgZm9jdXMgb24gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3ZhX2ludmFsaWRfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vdmFkZHIuYz03ODM9c3RydWN0IGRhbW9zX3ZhX3N0YXRfcHJpdmF0ZSB7XG4tLVxubW0vZGFtb24vdmFkZHIuYy03ODctXG5tbS9kYW1vbi92YWRkci5jOjc4ODpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vZGFtb24vdmFkZHIuYy03ODktXHRcdHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi92YWRkci5jPTc5ND1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9kYW1vbi92YWRkci5jLTgxNS1cbm1tL2RhbW9uL3ZhZGRyLmM6ODE2Olx0XHRpZiAoZGFtb3NfdmFfaW52YWxpZF9mb2xpbyhmb2xpbywgcykpXG5tbS9kYW1vbi92YWRkci5jLTgxNy1cdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtODQwLVxubW0vZGFtb24vdmFkZHIuYzo4NDE6XHRcdGlmIChkYW1vc192YV9pbnZhbGlkX2ZvbGlvKGZvbGlvLCBzKSlcbm1tL2RhbW9uL3ZhZGRyLmMtODQyLVx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA5MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDY4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbiBmb3IgREFNT04gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCBzeW1ib2xzIHRvIHRhcmdldCBmb3IgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIEkgc2VlIGFyZSBgZGFtb25fbmV3X3NjaGVtZWAsIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCwgYW5kIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYC4gSG93ZXZlciwgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gIGlzIGBzdGF0aWMgaW5saW5lYCwgc28gaXQmIzM5O3MgcHJvYmFibHkgaW5saW5lZCBhbmQgd29uJiMzOTt0IGJlIGEgdXNlZnVsIHN5bWJvbCBmb3IgZnV6emluZyBkaXJlY3RseS4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IGxldCYjMzk7cyBjaGVjayB0aGUgb3RoZXIgc3ltYm9scy4gYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgbm90IGxpa2VseSBhY2Nlc3NpYmxlLiBBbmQgYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGlzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGxldCYjMzk7cyBjaGVjayBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYW5kIGBkYW1vbl9wYV9zdGF0YC4KClVsdGltYXRlbHksIEkgdGhpbmsgYGRhbW9uX25ld19zY2hlbWVgIGFuZCBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AgYXJlIHRoZSBtb3N0IHByb21pc2luZy4gQnV0LCB3YWl0LCBpcyBgZGFtb25fbmV3X3NjaGVtZWAgYSBob3QgcGF0aD8gTm8sIGl0JiMzOTtzIGNhbGxlZCB3aGVuIGEgc2NoZW1lIGlzIGNyZWF0ZWQsIHNvIGl0JiMzOTtzIG5vdCBmcmVxdWVudGx5IGludm9rZWQuIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCwgdGhvdWdoLCAqaXMqIGNhbGxlZCBmb3IgZXZlcnkgZm9saW8gcHJvY2Vzc2VkIGJ5IERBTU9OLCB3aGljaCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGFtb3VudCBpZiBEQU1PTiBpcyBhY3RpdmUsIGV2ZW4gaWYgaXQmIzM5O3MgcnVubmluZyBpbiB0aGUgYmFja2dyb3VuZCB0aHJlYWQuIEdpdmVuIHRoYXQgYGRhbW9uX25ld19zY2hlbWVgIGlzIHRoZSBtYWluIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBwYXRjaCwgSSYjMzk7bGwgZ28gd2l0aCB0aGF0IGFzIHRoZSBwcmltYXJ5IHRhcmdldCBmb3Igbm93LgoKTGV0IG1lIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYuIEFoLCBpdCBsb29rcyBsaWtlIGEgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZpeCBpbiBgZGFtb25fbmV3X3NjaGVtZWAgYW5kIHNvbWUgS1VuaXQgdGVzdCBpbXByb3ZlbWVudHMgd2l0aCBib3VuZHMgY2hlY2tzLCBwcmV2ZW50aW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMgaWYgdGhlIHRlc3RzIGZhaWwuIFRoZSBwYXRjaCBmaXhlcyBhIHJlYWwgYnVnICphbmQqIGltcHJvdmVzIHRoZSB0ZXN0cywgc28gZnV6emluZyBpcyBkZWZpbml0ZWx5IGEgZ29vZCBpZGVhIGhlcmUuCgpUaGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgYXJlIGBEQU1PTmAsIGBEQU1PTl9WQUREUmAsIGBEQU1PTl9QQUREUmAsIGBEQU1PTl9TWVNGU2AsIGBEQU1PTl9LVU5JVF9URVNUYCwgYW5kIGBEQU1PTl9WQUREUl9LVU5JVF9URVNUYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb3JyZWN0bmVzcyBvZiB0aGUgS1VuaXQgb3B0aW9ucywgYnV0IHRob3NlIHNlZW0gdG8gYmUgdGhlIGNvcnJlY3QgdGFyZ2V0cyBmb3IgZ2VuZXJhdGluZyB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT05fS1VOSVRfVEVTVCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTE1PWNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQxMwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGJlYXQuIFllcy4gVGhhdCYjMzk7cyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMDE6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZz00Nz1jb25maWcgREFNT05fUEFERFJcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1wmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDAxOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjMxCgkJCQkJCQlvdXRwdXQ6IDIwOAoJCQkJCQkJdGhvdWdodHM6IDIwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZSBzaXR1YXRpb246CgoqKkRBTU9OIFBhdGNoIEFuYWx5c2lzIGFuZCBOZXh0IFN0ZXBzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgcmVsYXRlZCB0byBEQU1PTi4gVGhlIGtleSBjb25maWd1cmF0aW9ucyBJJiMzOTttIHNlZWluZyBhcmUgcmVsYXRlZCB0byBpdHMgdmlydHVhbCBhZGRyZXNzIChWQUREUikgYW5kIHBoeXNpY2FsIGFkZHJlc3MgKFBBRERSKSBtb25pdG9yaW5nIGNhcGFiaWxpdGllcywgc3lzZnMgaW50ZWdyYXRpb24sIGFuZCB0aGUgS1VuaXQgdGVzdGluZyBmcmFtZXdvcmsuIFRoZSBwcmVzZW5jZSBvZiBib3RoIFZBRERSIGFuZCBQQUREUiB2YXJpYW50cyBpbiB0aGUgS1VuaXQgdGVzdHMgaXMgaW50ZXJlc3RpbmcuCgpGcm9tIHdoYXQgSSBjYW4gdGVsbCwgdGhlIGNvcmUgb2YgdGhlIGZpeCByZXZvbHZlcyBhcm91bmQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSwgYGxhc3RfYXBwbGllZGAsIHdpdGhpbiBgZGFtb25fbmV3X3NjaGVtZWAuIFRoZSBwb3RlbnRpYWwgaXNzdWUgaXMgdGhhdCB0aGlzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgaXMgbGVhZGluZyB0byBpbmNvcnJlY3QgZm9saW8gc2tpcHBpbmcgYW5kIHJlZmNvdW50IGNvcnJ1cHRpb24gd2l0aGluIGZ1bmN0aW9ucyBsaWtlIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCBhbmQgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gLiBFc3NlbnRpYWxseSwgd2UmIzM5O3JlIGF0IHJpc2sgb2YgbGVha2luZyBmb2xpb3Mgb3IgaW5jb3JyZWN0bHkgbWFuYWdpbmcgdGhlaXIgbGlmZXRpbWVzLCB3aGljaCBjb3VsZCBoYXZlIHNlcmlvdXMgbWVtb3J5IG1hbmFnZW1lbnQgY29uc2VxdWVuY2VzLgoKR2l2ZW4gdGhhdCB0aGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBJJiMzOTttIHRoaW5raW5nIHRoaXMgZGVmaW5pdGVseSBuZWVkcyBhIHRob3JvdWdoIGZ1enppbmcgY2FtcGFpZ24uIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGltcHJvdmVtZW50IHRoYXQgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIGx1cmtpbmcgbWVtb3J5IG1hbmFnZW1lbnQgYnVncy4gVGltZSB0byBjYWxsIGl0IGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAwMTo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fS1VOSVRfVEVTVCYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUl9LVU5JVF9URVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvJiMzNDssCiAgICAmIzM0O2RhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYGxhc3RfYXBwbGllZGAgaW4gYGRhbW9uX25ld19zY2hlbWVgIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFuZG9tIGZvbGlvcyBiZWluZyBpbmNvcnJlY3RseSBza2lwcGVkIGFuZCB0aGVpciByZWZlcmVuY2UgY291bnRzIGRyb3BwZWQgaW4gYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGFuZCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AuIEl0IGFsc28gYWRkcyBzYWZldHkgY2hlY2tzIHRvIERBTU9OIGt1bml0IHRlc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9LVU5JVF9URVNUJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSX0tVTklUX1RFU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW8mIzM0OywKICAgICYjMzQ7ZGFtb3NfdmFfc3RhdF9wbWRfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBgbGFzdF9hcHBsaWVkYCBpbiBgZGFtb25fbmV3X3NjaGVtZWAgd2hpY2ggY291bGQgbGVhZCB0byByYW5kb20gZm9saW9zIGJlaW5nIGluY29ycmVjdGx5IHNraXBwZWQgYW5kIHRoZWlyIHJlZmVyZW5jZSBjb3VudHMgZHJvcHBlZCBpbiBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AgYW5kIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYC4gSXQgYWxzbyBhZGRzIHNhZmV0eSBjaGVja3MgdG8gREFNT04ga3VuaXQgdGVzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozNjoxMS42NjU3NzAxMzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ4NzMyNTAxMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX0tVTklUX1RFU1RcIixcbiAgICBcIkRBTU9OX1ZBRERSX0tVTklUX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9uZXdfc2NoZW1lXCIsXG4gICAgXCJkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvXCIsXG4gICAgXCJkYW1vc192YV9zdGF0X3BtZF9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYGxhc3RfYXBwbGllZGAgaW4gYGRhbW9uX25ld19zY2hlbWVgIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFuZG9tIGZvbGlvcyBiZWluZyBpbmNvcnJlY3RseSBza2lwcGVkIGFuZCB0aGVpciByZWZlcmVuY2UgY291bnRzIGRyb3BwZWQgaW4gYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGFuZCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AuIEl0IGFsc28gYWRkcyBzYWZldHkgY2hlY2tzIHRvIERBTU9OIGt1bml0IHRlc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozNjoxMS42NjU3NzYzMjVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTMyMTk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDdiYzBiMTA3NDM2ODcwYzQ1ZDMzZTMyZGE5NTkzYmI5N2FiNGMyOWZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTggMDE6MzY6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggNjAzYjEwMmZmODBmOWMuLjIwZDI2N2M2MTVmYWZiIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC03MDUsNiArNzA1LDcgQEAgc3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbiBcXHRzY2hlbWUtXFx1MDAzZXN0YXQgPSAoc3RydWN0IGRhbW9zX3N0YXQpe307XFxuIFxcdHNjaGVtZS1cXHUwMDNlbWF4X25yX3NuYXBzaG90cyA9IDA7XFxuK1xcdHNjaGVtZS1cXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlbGlzdCk7XFxuIFxcbiBcXHRzY2hlbWUtXFx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbmluZGV4IGViYTY0Mzc2MjEzMmY3Li40YTUzNmQ0MWNkYjJkMCAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5AQCAtMTU1LDYgKzE1NSwxMCBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2F0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0ci1cXHUwMDNlYWdlID0gMTA7XFxuIFxcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XFxuIFxcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCAyNSk7XFxuK1xcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAyKTtcXG4rXFx0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gMilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYXIuc3RhcnQsIDB1bCk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vhci5lbmQsIDI1dWwpO1xcbiBcXG5AQCAtMTY2LDYgKzE3MCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgcl9uZXctXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYWdlLCByX25ldy1cXHUwMDNlYWdlKTtcXG4gXFxuK291dDpcXG4gXFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XFxuIH1cXG4gXFxuQEAgLTgzNCw2ICs4MzksNyBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiBcXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCwgKm5leHQ7XFxuIFxcdGJvb2wgc2tpcCA9IHRydWU7XFxuIFxcdGludCBpO1xcbitcXHRpbnQgbnJfZHN0ID0gMCwgbnJfc3JjID0gMDtcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkc3QuZ29hbHMpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c3JjLmdvYWxzKTtcXG5AQCAtODU2LDYgKzg2MiwxNCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2Fsc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiBcXG4gXFx0ZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKFxcdTAwMjZkc3QsIFxcdTAwMjZzcmMpO1xcbiBcXG4rXFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBcXHUwMDI2ZHN0KVxcbitcXHRcXHRucl9kc3QrKztcXG4rXFx0ZGFtb3NfZm9yX2VhY2hfcXVvdGFfZ29hbChnb2FsLCBcXHUwMDI2c3JjKVxcbitcXHRcXHRucl9zcmMrKztcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG5yX2RzdCwgbnJfc3JjKTtcXG4rXFx0aWYgKG5yX2RzdCAhPSBucl9zcmMpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0aSA9IDA7XFxuIFxcdGRhbW9zX2Zvcl9lYWNoX3F1b3RhX2dvYWwoZ29hbCwgKFxcdTAwMjZkc3QpKSB7XFxuIFxcdFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBnb2FsLVxcdTAwM2VtZXRyaWMsIHNyY19nb2Fsc1tpXS5tZXRyaWMpO1xcbkBAIC0xMDAzLDYgKzEwMTcsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc190ZXN0X2NvbW1pdF9kZXN0c19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiBcXHRza2lwID0gZmFsc2U7XFxuIFxcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0Lm5yX2Rlc3RzLCBzcmNfbnJfZGVzdHMpO1xcbitcXHRpZiAoZHN0Lm5yX2Rlc3RzICE9IHNyY19ucl9kZXN0cylcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBkc3QubnJfZGVzdHM7IGkrKykge1xcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0Lm5vZGVfaWRfYXJyW2ldLCBzcmNfbm9kZV9pZF9hcnJbaV0pO1xcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LndlaWdodF9hcnJbaV0sIHNyY193ZWlnaHRfYXJyW2ldKTtcXG5AQCAtMTI2MSwxNCArMTI3NywxOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2NvbW1pdF90YXJnZXRfcmVnaW9uc19mb3Ioc3RydWN0IGt1bml0ICp0ZXN0LFxcbiBcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJzcmMgdGFyZ2V0IHNldHVwIGZhaWxcXFwiKTtcXG4gXFx0fVxcbiBcXHRkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7XFxuK1xcbitcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xcbitcXHRpZiAoZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSAhPSBucl9leHBlY3RfcmVnaW9ucylcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRpID0gMDtcXG4gXFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIGRzdF90YXJnZXQpIHtcXG4gXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLnN0YXJ0LCBleHBlY3Rfc3RhcnRfZW5kW2ldWzBdKTtcXG4gXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLmVuZCwgZXhwZWN0X3N0YXJ0X2VuZFtpXVsxXSk7XFxuIFxcdFxcdGkrKztcXG4gXFx0fVxcbi1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xcbi1cXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgaSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xcbitcXG4rb3V0OlxcbiBcXHRkYW1vbl9mcmVlX3RhcmdldChkc3RfdGFyZ2V0KTtcXG4gXFx0ZGFtb25fZnJlZV90YXJnZXQoc3JjX3RhcmdldCk7XFxuIH1cXG5AQCAtMTM2MCw2ICsxMzgxLDggQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLnN0YXJ0LCAxKTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLmVuZCwgMik7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAyKTtcXG4rXFx0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gMilcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcdHIyID0gZGFtb25fbmV4dF9yZWdpb24ocik7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi1cXHUwMDNlYXIuc3RhcnQsIDIpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcjItXFx1MDAzZWFyLmVuZCwgNCk7XFxuQEAgLTEzNzQsMTEgKzEzOTcsMTQgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLnN0YXJ0LCAyKTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLmVuZCwgNik7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCAyKTtcXG4rXFx0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gMilcXG4rXFx0XFx0Z290byBvdXQ7XFxuIFxcdHIyID0gZGFtb25fbmV4dF9yZWdpb24ocik7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi1cXHUwMDNlYXIuc3RhcnQsIDYpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcjItXFx1MDAzZWFyLmVuZCwgOCk7XFxuIFxcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIyLCB0KTtcXG4gXFxuK291dDpcXG4gXFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XFxuIFxcdGRhbW9zX2ZyZWVfZmlsdGVyKGYpO1xcbiB9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oXFxuaW5kZXggNjFmODQ0MzM2ZmZiNTAuLjZhOTU0NDFkMTkzYWViIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oXFxuQEAgLTE1OCwxMiArMTU4LDE3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX2RvX3Rlc3RfYXBwbHlfdGhyZWVfcmVnaW9ucyhzdHJ1Y3Qga3VuaXQgKnRlc3QsXFxuIFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInNlY29uZCBkYW1vbl9zZXRfcmVnaW9ucygpIGZhaWxcXFwiKTtcXG4gXFx0fVxcbiBcXG4rXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIG5yX2V4cGVjdGVkIC8gMik7XFxuK1xcdGlmIChkYW1vbl9ucl9yZWdpb25zKHQpICE9IG5yX2V4cGVjdGVkIC8gMilcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfZXhwZWN0ZWQgLyAyOyBpKyspIHtcXG4gXFx0XFx0ciA9IF9fbnRoX3JlZ2lvbl9vZih0LCBpKTtcXG4gXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLnN0YXJ0LCBleHBlY3RlZFtpICogMl0pO1xcbiBcXHRcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYXIuZW5kLCBleHBlY3RlZFtpICogMiArIDFdKTtcXG4gXFx0fVxcbiBcXG4rb3V0OlxcbiBcXHRkYW1vbl9kZXN0cm95X3RhcmdldCh0LCBOVUxMKTtcXG4gfVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MzY6MTIuMjc2MDQzNDEyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzQyNjI5Njc5MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX0tVTklUX1RFU1RcIixcbiAgICBcIkRBTU9OX1ZBRERSX0tVTklUX1RFU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9uZXdfc2NoZW1lXCIsXG4gICAgXCJkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvXCIsXG4gICAgXCJkYW1vc192YV9zdGF0X3BtZF9lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYGxhc3RfYXBwbGllZGAgaW4gYGRhbW9uX25ld19zY2hlbWVgIHdoaWNoIGNvdWxkIGxlYWQgdG8gcmFuZG9tIGZvbGlvcyBiZWluZyBpbmNvcnJlY3RseSBza2lwcGVkIGFuZCB0aGVpciByZWZlcmVuY2UgY291bnRzIGRyb3BwZWQgaW4gYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGFuZCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AuIEl0IGFsc28gYWRkcyBzYWZldHkgY2hlY2tzIHRvIERBTU9OIGt1bml0IHRlc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdiYzBiMTA3NDM2ODcwYzQ1ZDMzZTMyZGE5NTkzYmI5N2FiNGMyOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxOCAwMTozNjoxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggNjAzYjEwMmZmODBmOWMuLjIwZDI2N2M2MTVmYWZiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC03MDUsNiArNzA1LDcgQEAgc3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnNjaGVtZS1cdTAwM2VvcHNfZmlsdGVycyk7XG4gXHRzY2hlbWUtXHUwMDNlc3RhdCA9IChzdHJ1Y3QgZGFtb3Nfc3RhdCl7fTtcbiBcdHNjaGVtZS1cdTAwM2VtYXhfbnJfc25hcHNob3RzID0gMDtcbitcdHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c2NoZW1lLVx1MDAzZWxpc3QpO1xuIFxuIFx0c2NoZW1lLVx1MDAzZXF1b3RhID0gKihkYW1vc19xdW90YV9pbml0KHF1b3RhKSk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5pbmRleCBlYmE2NDM3NjIxMzJmNy4uNGE1MzZkNDFjZGIyZDAgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbisrKyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuQEAgLTE1NSw2ICsxNTUsMTAgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRyLVx1MDAzZWFnZSA9IDEwO1xuIFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcbiBcdGRhbW9uX3NwbGl0X3JlZ2lvbl9hdCh0LCByLCAyNSk7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMik7XG4rXHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSAyKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCAwdWwpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCAyNXVsKTtcbiBcbkBAIC0xNjYsNiArMTcwLDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgcl9uZXctXHUwMDNlYWdlKTtcbiBcbitvdXQ6XG4gXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbiB9XG4gXG5AQCAtODM0LDYgKzgzOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCwgKm5leHQ7XG4gXHRib29sIHNraXAgPSB0cnVlO1xuIFx0aW50IGk7XG4rXHRpbnQgbnJfZHN0ID0gMCwgbnJfc3JjID0gMDtcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRzdC5nb2Fscyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzcmMuZ29hbHMpO1xuQEAgLTg1Niw2ICs4NjIsMTQgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcbiBcdGRhbW9zX2NvbW1pdF9xdW90YV9nb2FscyhcdTAwMjZkc3QsIFx1MDAyNnNyYyk7XG4gXG4rXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNmRzdClcbitcdFx0bnJfZHN0Kys7XG4rXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIFx1MDAyNnNyYylcbitcdFx0bnJfc3JjKys7XG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbnJfZHN0LCBucl9zcmMpO1xuK1x0aWYgKG5yX2RzdCAhPSBucl9zcmMpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aSA9IDA7XG4gXHRkYW1vc19mb3JfZWFjaF9xdW90YV9nb2FsKGdvYWwsIChcdTAwMjZkc3QpKSB7XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBnb2FsLVx1MDAzZW1ldHJpYywgc3JjX2dvYWxzW2ldLm1ldHJpYyk7XG5AQCAtMTAwMyw2ICsxMDE3LDggQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9jb21taXRfZGVzdHNfZm9yKHN0cnVjdCBrdW5pdCAqdGVzdCxcbiBcdHNraXAgPSBmYWxzZTtcbiBcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkc3QubnJfZGVzdHMsIHNyY19ucl9kZXN0cyk7XG4rXHRpZiAoZHN0Lm5yX2Rlc3RzICE9IHNyY19ucl9kZXN0cylcbitcdFx0Z290byBvdXQ7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBkc3QubnJfZGVzdHM7IGkrKykge1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0Lm5vZGVfaWRfYXJyW2ldLCBzcmNfbm9kZV9pZF9hcnJbaV0pO1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZHN0LndlaWdodF9hcnJbaV0sIHNyY193ZWlnaHRfYXJyW2ldKTtcbkBAIC0xMjYxLDE0ICsxMjc3LDE5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfY29tbWl0X3RhcmdldF9yZWdpb25zX2ZvcihzdHJ1Y3Qga3VuaXQgKnRlc3QsXG4gXHRcdGt1bml0X3NraXAodGVzdCwgXCJzcmMgdGFyZ2V0IHNldHVwIGZhaWxcIik7XG4gXHR9XG4gXHRkYW1vbl9jb21taXRfdGFyZ2V0X3JlZ2lvbnMoZHN0X3RhcmdldCwgc3JjX3RhcmdldCwgMSk7XG4rXG4rXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyhkc3RfdGFyZ2V0KSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xuK1x0aWYgKGRhbW9uX25yX3JlZ2lvbnMoZHN0X3RhcmdldCkgIT0gbnJfZXhwZWN0X3JlZ2lvbnMpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aSA9IDA7XG4gXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgZHN0X3RhcmdldCkge1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5zdGFydCwgZXhwZWN0X3N0YXJ0X2VuZFtpXVswXSk7XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLmVuZCwgZXhwZWN0X3N0YXJ0X2VuZFtpXVsxXSk7XG4gXHRcdGkrKztcbiBcdH1cbi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKGRzdF90YXJnZXQpLCBucl9leHBlY3RfcmVnaW9ucyk7XG4tXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgaSwgbnJfZXhwZWN0X3JlZ2lvbnMpO1xuK1xuK291dDpcbiBcdGRhbW9uX2ZyZWVfdGFyZ2V0KGRzdF90YXJnZXQpO1xuIFx0ZGFtb25fZnJlZV90YXJnZXQoc3JjX3RhcmdldCk7XG4gfVxuQEAgLTEzNjAsNiArMTM4MSw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3Rlc3RfZmlsdGVyX291dChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5zdGFydCwgMSk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5lbmQsIDIpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDIpO1xuK1x0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gMilcbitcdFx0Z290byBvdXQ7XG4gXHRyMiA9IGRhbW9uX25leHRfcmVnaW9uKHIpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHIyLVx1MDAzZWFyLnN0YXJ0LCAyKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByMi1cdTAwM2Vhci5lbmQsIDQpO1xuQEAgLTEzNzQsMTEgKzEzOTcsMTQgQEAgc3RhdGljIHZvaWQgZGFtb3NfdGVzdF9maWx0ZXJfb3V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCAyKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLmVuZCwgNik7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgMik7XG4rXHRpZiAoZGFtb25fbnJfcmVnaW9ucyh0KSAhPSAyKVxuK1x0XHRnb3RvIG91dDtcbiBcdHIyID0gZGFtb25fbmV4dF9yZWdpb24ocik7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcjItXHUwMDNlYXIuc3RhcnQsIDYpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHIyLVx1MDAzZWFyLmVuZCwgOCk7XG4gXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyMiwgdCk7XG4gXG4rb3V0OlxuIFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XG4gXHRkYW1vc19mcmVlX2ZpbHRlcihmKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvdmFkZHIta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhcbmluZGV4IDYxZjg0NDMzNmZmYjUwLi42YTk1NDQxZDE5M2FlYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhcbisrKyBiL21tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhcbkBAIC0xNTgsMTIgKzE1OCwxNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl9kb190ZXN0X2FwcGx5X3RocmVlX3JlZ2lvbnMoc3RydWN0IGt1bml0ICp0ZXN0LFxuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwic2Vjb25kIGRhbW9uX3NldF9yZWdpb25zKCkgZmFpbFwiKTtcbiBcdH1cbiBcbitcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCBucl9leHBlY3RlZCAvIDIpO1xuK1x0aWYgKGRhbW9uX25yX3JlZ2lvbnModCkgIT0gbnJfZXhwZWN0ZWQgLyAyKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2V4cGVjdGVkIC8gMjsgaSsrKSB7XG4gXHRcdHIgPSBfX250aF9yZWdpb25fb2YodCwgaSk7XG4gXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCBleHBlY3RlZFtpICogMl0pO1xuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5lbmQsIGV4cGVjdGVkW2kgKiAyICsgMV0pO1xuIFx0fVxuIFxuK291dDpcbiBcdGRhbW9uX2Rlc3Ryb3lfdGFyZ2V0KHQsIE5VTEwpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM2OjEyLjI3NjA0NTM0MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxMjM2NTExNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIERBTU9OIHBhdGNoLCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkFoLCBpdCB0b3VjaGVzIGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCwgYW5kIGBtbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oYC5cIiBTdGFuZGFyZCBzdHVmZiwgY29yZSBjb2RlIGFuZCBzb21lIEtVbml0IHRlc3RzLlxuXG5UaGUgYWN0dWFsIGNvcmUgY2hhbmdlIGluIGBtbS9kYW1vbi9jb3JlLmNgIGlzIGp1c3Qgb25lIGxpbmU6IGBzY2hlbWUtXHUwMDNlbGFzdF9hcHBsaWVkID0gTlVMTDtgIOKAkyBzaW1wbGUgaW5pdGlhbGl6YXRpb24uIE5vdGhpbmcgZmxhc2h5LiBJdCdzIGluaXRpYWxpemluZyBhIHBvaW50ZXIsIGBsYXN0X2FwcGxpZWRgLCB0byBOVUxMIHdpdGhpbiB0aGUgYGRhbW9uX25ld19zY2hlbWVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIGhhcyBhbnkgc3VidGxlIHNpZGUgZWZmZWN0cyBvciBwb3RlbnRpYWwgZm9yIGZ1enppbmcuXG5cbmBkYW1vbl9uZXdfc2NoZW1lYCB1c2VzIGBrbWFsbG9jYCB0byBhbGxvY2F0ZSBhIG5ldyBgc3RydWN0IGRhbW9zYC4gVGhhdCdzIHRoZSBrZXkuIEkgbmVlZCB0byBnbyBiYWNrIGFuZCBleGFtaW5lIHRoZSBjb250ZXh0IG9mIHRoaXMgYHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO2AgbGluZSB3aXRoaW4gdGhlIGBkYW1vbl9uZXdfc2NoZW1lYCBmdW5jdGlvbiBhbmQgbW9yZSBicm9hZGx5LCBpdHMgdXNlIGluIHRoZSBEQU1PTiBmcmFtZXdvcmsuIERvZXMgdGhlIGBsYXN0X2FwcGxpZWRgIHBvaW50ZXIgZ2V0IHVwZGF0ZWQgbGF0ZXIsIGFuZCBob3cgaXMgaXQgdXNlZD8gRG9lcyBpdCBwb3RlbnRpYWxseSBjYXVzZSBhbnkgaXNzdWVzIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgb3IgY29uY3VycmVuY3k/IElzIGl0IGludm9sdmVkIGluIGFueSBjb250cm9sIGZsb3cgZGVjaXNpb25zPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbGlmZWN5Y2xlIGFuZCB1c2FnZSB0byBkZXRlcm1pbmUgaWYgdGhpcyBzaW5nbGUgbGluZSBoYXMgYW55IGZ1bmN0aW9uYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MzY6MTguMzk5Njk5MTcyWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4ODc4NzQzMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fbmV3X3NjaGVtZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA0ND12b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDUtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDY6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0Ny1cXHRcXHRcXHRlbnVtIGRhbW9zX2FjdGlvbiBhY3Rpb24sXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NjY5PXN0YXRpYyBzdHJ1Y3QgZGFtb3NfcXVvdGEgKmRhbW9zX3F1b3RhX2luaXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy02ODEtXFxubW0vZGFtb24vY29yZS5jOjY4MjpzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYy02ODMtXFx0XFx0XFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxcbi0tXFxubW0vZGFtb24vY29yZS5jPTE0NzE9c3RhdGljIGludCBkYW1vbl9jb21taXRfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDg5LVxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2RhbW9uL2NvcmUuYzoxNDkwOlxcdFxcdG5ld19zY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxcdTAwMjZzcmNfc2NoZW1lLVxcdTAwM2VwYXR0ZXJuLFxcbm1tL2RhbW9uL2NvcmUuYy0xNDkxLVxcdFxcdFxcdFxcdHNyY19zY2hlbWUtXFx1MDAzZWFjdGlvbixcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM9MTg4PXN0YXRpYyBzdHJ1Y3QgZGFtb3MgKmRhbW9uX2xydV9zb3J0X25ld19zY2hlbWUoXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5NS1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjE5NjpcXHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcXG5tbS9kYW1vbi9scnVfc29ydC5jLTE5Ny1cXHRcXHRcXHQvKiBmaW5kIHRoZSBwYXR0ZXJuLCBhbmQgKi9cXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYz0xNjc9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fcmVjbGFpbV9uZXdfc2NoZW1lKHVuc2lnbmVkIGxvbmcgYWdncl9pbnRlcnZhbClcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy0xODAtXFxubW0vZGFtb24vcmVjbGFpbS5jOjE4MTpcXHRyZXR1cm4gZGFtb25fbmV3X3NjaGVtZShcXG5tbS9kYW1vbi9yZWNsYWltLmMtMTgyLVxcdFxcdFxcdFxcdTAwMjZwYXR0ZXJuLFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTI5NzA9c3RhdGljIHN0cnVjdCBkYW1vcyAqZGFtb25fc3lzZnNfbWtfc2NoZW1lKFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMDctXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjMwMDg6XFx0c2NoZW1lID0gZGFtb25fbmV3X3NjaGVtZShcXHUwMDI2cGF0dGVybiwgc3lzZnNfc2NoZW1lLVxcdTAwM2VhY3Rpb24sXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTMwMDktXFx0XFx0XFx0c3lzZnNfc2NoZW1lLVxcdTAwM2VhcHBseV9pbnRlcnZhbF91cywgXFx1MDAyNnF1b3RhLCBcXHUwMDI2d21hcmtzLFxcbi0tXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jPTczPXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9zYW1wbGVfbXRpZXJfYnVpbGRfY3R4KGJvb2wgcHJvbW90ZSlcXG4tLVxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMzItXFxuc2FtcGxlcy9kYW1vbi9tdGllci5jOjEzMzpcXHRzY2hlbWUgPSBkYW1vbl9uZXdfc2NoZW1lKFxcbnNhbXBsZXMvZGFtb24vbXRpZXIuYy0xMzQtXFx0XFx0XFx0LyogYWNjZXNzIHBhdHRlcm4gKi9cXG4tLVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jPTYwPXN0YXRpYyBpbnQgZGFtb25fc2FtcGxlX3ByY2xfc3RhcnQodm9pZClcXG4tLVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jLTg4LVxcbnNhbXBsZXMvZGFtb24vcHJjbC5jOjg5OlxcdHNjaGVtZSA9IGRhbW9uX25ld19zY2hlbWUoXFxuc2FtcGxlcy9kYW1vbi9wcmNsLmMtOTAtXFx0XFx0XFx0XFx1MDAyNihzdHJ1Y3QgZGFtb3NfYWNjZXNzX3BhdHRlcm4pIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MzY6MjEuMjg3NjA0MDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU3MzA3NjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCwgYW5kIHNwZWFraW5nIGZyb20gdGhlIGZpcnN0LXBlcnNvbiBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBTdHJ1Y3QgQWxsb2NhdGlvbiBpbiBgZGFtb25fbmV3X3NjaGVtZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSdtIHRha2luZyBhIGxvb2sgYXQgYGRhbW9uX25ld19zY2hlbWVgIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgaXQncyBoYW5kbGluZyB0aGUgYWxsb2NhdGlvbiBvZiBpdHMgcHJpbWFyeSBkYXRhIHN0cnVjdHVyZS4gSSdtIHByb2JhYmx5IGludGVyZXN0ZWQgaW4gYSBmZXcga2V5IHRoaW5ncyBoZXJlLiBGaXJzdCwgaXMgaXQgdXNpbmcgYSBzdGF0aWMsIHN0YWNrLCBvciBoZWFwIGFsbG9jYXRpb24/IFNlY29uZCwgd2hhdCdzIHRoZSBhbGxvY2F0aW9uIHN0cmF0ZWd5PyBJcyBpdCBhIHNpbXBsZSBgbWFsbG9jYCAob3IgaXRzIGtlcm5lbCBlcXVpdmFsZW50KSBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGxpa2UgYSBjdXN0b20gYWxsb2NhdG9yLCBtYXliZSB1c2luZyBhIGJ1ZGR5IHN5c3RlbSBvciBzbGFiIGFsbG9jYXRvciBmb3IgZWZmaWNpZW5jeT8gQW5kIHRoaXJkLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBnb3RjaGFzIHdpdGggdGhlIGFsaWdubWVudD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhbnkgaXNzdWVzIHRoYXQgY291bGQgbGVhZCB0byBmYWxzZSBzaGFyaW5nIG9yIHBlcmZvcm1hbmNlIHBlbmFsdGllcyBvbiBtdWx0aS1jb3JlIHN5c3RlbXMsIGVzcGVjaWFsbHkgaWYgdGhlIHN0cnVjdCBpcyBmcmVxdWVudGx5IGFjY2Vzc2VkIG9yIG1vZGlmaWVkPyBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGltcGFjdCBvZiB0aGlzIGFsbG9jYXRpb24gc3RyYXRlZ3kgb24gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSwgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmlza3Mgb2YgZnJhZ21lbnRhdGlvbiBvciBtZW1vcnkgbGVha3MgZG93biB0aGUgbGluZS4gSSBhbSBsb29raW5nIGZvciBhIHN1Y2NpbmN0IGFuZCBlZmZpY2llbnQgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzYzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MzY6MjQuNTQ0OTEzNDcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwMjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2ODAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2ODA6XFx0fVxcbiA2ODE6XFx0XFxuIDY4MjpcXHRzdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbiA2ODM6XFx0XFx0XFx0XFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxcbiA2ODQ6XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cyxcXG4gNjg1OlxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuIDY4NjpcXHRcXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxcbiA2ODc6XFx0XFx0XFx0XFx0aW50IHRhcmdldF9uaWQpXFxuIDY4ODpcXHR7XFxuIDY4OTpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNjaGVtZTtcXG4gNjkwOlxcdFxcbiA2OTE6XFx0XFx0c2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7XFxuIDY5MjpcXHRcXHRpZiAoIXNjaGVtZSlcXG4gNjkzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiA2OTQ6XFx0XFx0c2NoZW1lLVxcdTAwM2VwYXR0ZXJuID0gKnBhdHRlcm47XFxuIDY5NTpcXHRcXHRzY2hlbWUtXFx1MDAzZWFjdGlvbiA9IGFjdGlvbjtcXG4gNjk2OlxcdFxcdHNjaGVtZS1cXHUwMDNlYXBwbHlfaW50ZXJ2YWxfdXMgPSBhcHBseV9pbnRlcnZhbF91cztcXG4gNjk3OlxcdFxcdC8qXFxuIDY5ODpcXHRcXHQgKiBuZXh0X2FwcGx5X3NpcyB3aWxsIGJlIHNldCB3aGVuIGtkYW1vbmQgc3RhcnRzLiAgV2hpbGUga2RhbW9uZCBpc1xcbiA2OTk6XFx0XFx0ICogcnVubmluZywgaXQgd2lsbCBhbHNvIHVwZGF0ZWQgd2hlbiBpdCBpcyBhZGRlZCB0byB0aGUgREFNT04gY29udGV4dCxcXG4gNzAwOlxcdFxcdCAqIG9yIGRhbW9uX2F0dHJzIGFyZSB1cGRhdGVkLlxcbiA3MDE6XFx0XFx0ICovXFxuIDcwMjpcXHRcXHRzY2hlbWUtXFx1MDAzZW5leHRfYXBwbHlfc2lzID0gMDtcXG4gNzAzOlxcdFxcdHNjaGVtZS1cXHUwMDNld2Fsa19jb21wbGV0ZWQgPSBmYWxzZTtcXG4gNzA0OlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZWNvcmVfZmlsdGVycyk7XFxuIDcwNTpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c2NoZW1lLVxcdTAwM2VvcHNfZmlsdGVycyk7XFxuIDcwNjpcXHRcXHRzY2hlbWUtXFx1MDAzZXN0YXQgPSAoc3RydWN0IGRhbW9zX3N0YXQpe307XFxuIDcwNzpcXHRcXHRzY2hlbWUtXFx1MDAzZW1heF9ucl9zbmFwc2hvdHMgPSAwO1xcbiA3MDg6XFx0XFx0c2NoZW1lLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbiA3MDk6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlbGlzdCk7XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdHNjaGVtZS1cXHUwMDNlcXVvdGEgPSAqKGRhbW9zX3F1b3RhX2luaXQocXVvdGEpKTtcXG4gNzEyOlxcdFxcdC8qIHF1b3RhLmdvYWxzIHNob3VsZCBiZSBzZXBhcmF0ZWx5IHNldCBieSBjYWxsZXIgKi9cXG4gNzEzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzY2hlbWUtXFx1MDAzZXF1b3RhLmdvYWxzKTtcXG4gNzE0OlxcdFxcbiA3MTU6XFx0XFx0c2NoZW1lLVxcdTAwM2V3bWFya3MgPSAqd21hcmtzO1xcbiA3MTY6XFx0XFx0c2NoZW1lLVxcdTAwM2V3bWFya3MuYWN0aXZhdGVkID0gdHJ1ZTtcXG4gNzE3OlxcdFxcbiA3MTg6XFx0XFx0c2NoZW1lLVxcdTAwM2VtaWdyYXRlX2Rlc3RzID0gKHN0cnVjdCBkYW1vc19taWdyYXRlX2Rlc3RzKXt9O1xcbiA3MTk6XFx0XFx0c2NoZW1lLVxcdTAwM2V0YXJnZXRfbmlkID0gdGFyZ2V0X25pZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6MzY6MjQuNTQ1MDg1MjYxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQwNjA0NDE2MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGlzIGFyZWE6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGttYWxsb2Nfb2JqYCBhbmQgVW5yYXZlbGluZyBhIFBvdGVudGlhbCBCdWcqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuIFRoaXMgYGttYWxsb2Nfb2JqKCpzY2hlbWUpYC4uLiB0aGF0IGxvb2tzIHN1c3BpY2lvdXNseSBsaWtlIGEgbWFjcm8gb3Igd3JhcHBlciBhcm91bmQgYGttYWxsb2NgLiBJdCdzIGxpa2VseSB0cnlpbmcgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgYHNjaGVtZWAgc3RydWN0dXJlLiAgSSdtIGJldHRpbmcgaXQncyBzb21ldGhpbmcgbGlrZSBga21hbGxvYyhzaXplb2YoKnNjaGVtZSksIEdGUF9LRVJORUwpYCwgcHJldHR5IHN0YW5kYXJkIHN0dWZmLiBXYWl0IGEgbWludXRlLi4uICBga21hbGxvY19vYmpgIGlzbid0IHJpbmdpbmcgYW55IGJlbGxzLiBUaGF0J3Mgbm90IHN0YW5kYXJkIGtlcm5lbCBjb2RlLiBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgaXQgYWN0dWFsbHkgKmlzKi4gTGV0J3MgZ28gbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBga21hbGxvY19vYmpgLlxuXG4uLi5SaWdodCwgbm93IHRoYXQgSSBrbm93IHdoYXQgYGttYWxsb2Nfb2JqYCBpcyBkZWZpbmVkIGFzLCB0aGUgY29kZSBtYWtlcyBtb3JlIHNlbnNlLiBUaGUga2lja2VyIGlzLCBga21hbGxvY2AgZG9lc24ndCB6ZXJvIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IGJ5IGRlZmF1bHQuIFRoYXQgbWVhbnMgdGhlIGBzY2hlbWUtXHUwMDNlbGFzdF9hcHBsaWVkYCBtZW1iZXIgKmNvdWxkKiBoYXZlIGJlZW4gdW5pbml0aWFsaXplZCBiZWZvcmUgdGhpcyBwYXRjaCEgVGhhdCBjb3VsZCBsZWFkIHRvIHNvbWUgbmFzdHksIG5vbi1kZXRlcm1pbmlzdGljIGJlaGF2aW9yLiBJIG5lZWQgdG8gZGlnIGludG8gdGhpcyBmdXJ0aGVyIHRvIHNlZSBpZiB0aGF0J3MgYSByZWFsIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjc1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6Mzc6MjguNjA1NTMwNTY4WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzkzMDg4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia21hbGxvY19vYmpcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiAxNTUyNyBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTIwMz1ub24tXFxcXCBgYE5VTExgYCwgbG9ja2xlc3NseSBhY2Nlc3NpbmcgdGhlIGBgLVxcdTAwM2VhYGAgYW5kIGBgLVxcdTAwM2ViYGAgZmllbGRzLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIwOC0gICAgICAgMiB7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0OjIwOTogICAgICAgMyAgIHAgPSBrbWFsbG9jX29iaigqcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0LTIxMC0gICAgICAgNCAgIGlmICghcClcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdD0yMjU9dGhlaXIgcmlnaHRzIHRvIHJlb3JkZXIgdGhpcyBjb2RlIGFzIGZvbGxvd3M6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjMwLSAgICAgICAyIHtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3Q6MjMxOiAgICAgICAzICAgcCA9IGttYWxsb2Nfb2JqKCpwKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS9EZXNpZ24vUmVxdWlyZW1lbnRzL1JlcXVpcmVtZW50cy5yc3QtMjMyLSAgICAgICA0ICAgaWYgKCFwKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1UvRGVzaWduL1JlcXVpcmVtZW50cy9SZXF1aXJlbWVudHMucnN0PTI2MT1zaG93cyBhbiBleGFtcGxlIG9mIGluc2VydGlvbjpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yNjYtICAgICAgIDIge1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdDoyNjc6ICAgICAgIDMgICBwID0ga21hbGxvY19vYmooKnApO1xcbkRvY3VtZW50YXRpb24vUkNVL0Rlc2lnbi9SZXF1aXJlbWVudHMvUmVxdWlyZW1lbnRzLnJzdC0yNjgtICAgICAgIDQgICBpZiAoIXApXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdD0yNjc9VGhlIFJDVSB2ZXJzaW9uIG9mIGF1ZGl0X3VwZF9ydWxlKCkgaXMgYXMgZm9sbG93czo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdC0yNzgtXFx0XFx0XFx0aWYgKCFhdWRpdF9jb21wYXJlX3J1bGUocnVsZSwgXFx1MDAyNmUtXFx1MDAzZXJ1bGUpKSB7XFxuRG9jdW1lbnRhdGlvbi9SQ1UvbGlzdFJDVS5yc3Q6Mjc5OlxcdFxcdFxcdFxcdG5lID0ga21hbGxvY19vYmooKmVudHJ5LCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL1JDVS9saXN0UkNVLnJzdC0yODAtXFx0XFx0XFx0XFx0aWYgKG5lID09IE5VTEwpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL1JDVS93aGF0aXNSQ1UucnN0PTQ0MT11c2VzIG9mIFJDVSBtYXkgYmUgZm91bmQgaW4gbGlzdFJDVS5yc3QgYW5kIE5NSS1SQ1UucnN0Llxcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC00NzAtXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdDo0NzE6XFx0XFx0bmV3X2ZwID0ga21hbGxvY19vYmooKm5ld19mcCk7XFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdC00NzItXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZmb29fbXV0ZXgpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9SQ1Uvd2hhdGlzUkNVLnJzdD01NTM9VGhlIGZvb191cGRhdGVfYSgpIGZ1bmN0aW9uIG1pZ2h0IHRoZW4gYmUgd3JpdHRlbiBhcyBmb2xsb3dzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNTcyLVxcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3Q6NTczOlxcdFxcdG5ld19mcCA9IGttYWxsb2Nfb2JqKCpuZXdfZnApO1xcbkRvY3VtZW50YXRpb24vUkNVL3doYXRpc1JDVS5yc3QtNTc0LVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Zm9vX211dGV4KTtcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q9Mzk9a3JlZl9pbml0IGFzIHNvOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3QtNDItXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdDo0MzogICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC00NC0gICAgIGlmICghZGF0YSlcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q9ODE9dGhyZWFkIHRvIHByb2Nlc3M6Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC0xMDItXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkva3JlZi5yc3Q6MTAzOlxcdGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9rcmVmLnJzdC0xMDQtXFx0aWYgKCFkYXRhKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD0zODM9dG8gcHJvdGVjdCB0aGUgY2FjaGUgYW5kIGFsbCB0aGUgb2JqZWN0cyB3aXRoaW4gaXQuIEhlcmUncyB0aGUgY29kZTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ0NC1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjQ0NTogICAgICAgICAgICBpZiAoKG9iaiA9IGttYWxsb2Nfb2JqKCpvYmopKSA9PSBOVUxMKVxcbkRvY3VtZW50YXRpb24va2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNDQ2LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTQ5OT13aGljaCBhcmUgdGFrZW4gYXdheSwgYW5kIHRoZSBgYCtgYCBhcmUgbGluZXMgd2hpY2ggYXJlIGFkZGVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MTktXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo1MjA6ICAgICAgICAgICAgIGlmICgob2JqID0ga21hbGxvY19vYmooKm9iaikpID09IE5VTEwpXFxuRG9jdW1lbnRhdGlvbi9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01MjEtICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00OTg9d29ya3MgcGVyZmVjdGx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwMC0gIHJhd19zcGluX2xvY2soXFx1MDAyNmxvY2spO1xcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0OjUwMTogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NTA3PXByZWVtcHRpb24gb24gUFJFRU1QVF9SVCBrZXJuZWxzOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vbG9ja2luZy9sb2NrdHlwZXMucnN0LTUwOS0gIHNwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuRG9jdW1lbnRhdGlvbi9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTEwOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL2xvY2tpbmcvbG9ja3R5cGVzLnJzdC01MTEtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05Mzg9VGhlIGtlcm5lbCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGdlbmVyYWwgcHVycG9zZSBtZW1vcnkgYWxsb2NhdG9yczpcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Mzk6a21hbGxvYygpLCBremFsbG9jKCksIGttYWxsb2Nfb2JqcygpLCBremFsbG9jX29ianMoKSwgdm1hbGxvYygpLCBhbmRcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTQ0PVRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgcGFzc2luZyBhIHNpemUgb2YgYSBzdHJ1Y3QgaXMgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0Ny1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NDg6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0OS1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk1OD1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYW4gYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk2MS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NjI6XFx0cCA9IGttYWxsb2Nfb2JqcygqcCwgbiwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjMtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q9Mzg2PW1heSBoZWxwIHdpdGggYWxpZ25tZW50LCB3cmFwLWFyb3VuZCwgb3IgYWRkaXRpb25hbCBoYXJkZW5pbmcuIFRoZVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDozODc6a21hbGxvY19vYmooKS1mYW1pbHkgb2YgbWFjcm9zIHByb3ZpZGUgdGhpcyBpbnRyb3NwZWN0aW9uLCB3aGljaCBjYW4gYmVcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtMzg4LXVzZWQgZm9yIHRoZSBjb21tb24gY29kZSBwYXR0ZXJucyBmb3Igc2luZ2xlLCBhcnJheSwgYW5kIGZsZXhpYmxlIG9iamVjdFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTM5OS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3Q6NDAwOlxcdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDEtXFx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMjpcXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDMtXFx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVxcdHB0ciA9IGttYWxsb2NfZmxleCgqcHRyLCBmbGV4X21lbWJlciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDU6XFx0X19hdXRvX3R5cGUgcHRyID0ga21hbGxvY19vYmooc3RydWN0IGZvbyBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwNi1cXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0xNzM0PWNhbGxiYWNrOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0xNzM5LSAgICAgICAgICAuLi4uXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjE3NDA6ICAgICAgICAgIGRhdGEgPSBrbWFsbG9jX29iaigqZGF0YSk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTE3NDEtICAgICAgICAgIHN1YnN0cmVhbS1cXHUwMDNlcnVudGltZS1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gZGF0YTtcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdD0zMzAyPWRlc3RydWN0b3IgZnVuY3Rpb24gaXMgc2V0IGluIHRoZSBgYHByaXZhdGVfZnJlZWBgIGZpZWxkOjpcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzMwMy1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6MzMwNDogIHN0cnVjdCBteWRhdGEgKnAgPSBrbWFsbG9jX29iaigqcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTMzMDUtICBody1cXHUwMDNlcHJpdmF0ZV9kYXRhID0gcDtcXG4tLVxcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdD0yNDI9QW5kIFNPQy1zcGVjaWZpYyB1dGlsaXR5IGNvZGUgbWlnaHQgbG9vayBzb21ldGhpbmcgbGlrZTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NwaS9zcGktc3VtbWFyeS5yc3QtMjUxLVxcbkRvY3VtZW50YXRpb24vc3BpL3NwaS1zdW1tYXJ5LnJzdDoyNTI6XFx0XFx0cGRhdGEyID0ga21hbGxvY19vYmooKnBkYXRhMik7XFxuRG9jdW1lbnRhdGlvbi9zcGkvc3BpLXN1bW1hcnkucnN0LTI1My1cXHRcXHQqcGRhdGEyID0gcGRhdGE7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdD00MDM9ZSB0dXR0aSBnbGkgb2dnZXR0aSBjaGUgY29udGllbmUuIEVjY28gaWwgY29kaWNlOjpcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0LTQ2NC1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdDo0NjU6ICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC00NjYtICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTtcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0PTUxOT1zb25vIHF1ZWxsZSByaW1vc3NlLCBtZW50cmUgcXVlbGxlIGBgK2BgIHNvbm8gcXVlbGxlIGFnZ2l1bnRlLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQva2VybmVsLWhhY2tpbmcvbG9ja2luZy5yc3QtNTM5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2tlcm5lbC1oYWNraW5nL2xvY2tpbmcucnN0OjU0MDogICAgICAgICAgICAgaWYgKChvYmogPSBrbWFsbG9jX29iaigqb2JqKSkgPT0gTlVMTClcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9rZXJuZWwtaGFja2luZy9sb2NraW5nLnJzdC01NDEtICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q9NDg4PW1lbW9yaWEuIFN1IHVuIGtlcm5lbCBub24tUFJFRU1QVF9SVCBpbCBzZWd1ZW50ZSBjb2RpY2UgZnVuemlvbmEgcGVyZmV0dGFtZW50ZTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDkwLSAgcmF3X3NwaW5fbG9jayhcXHUwMDI2bG9jayk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0OjQ5MTogIHAgPSBrbWFsbG9jX29iaigqcCwgR0ZQX0FUT01JQyk7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvbG9ja2luZy9sb2NrdHlwZXMucnN0LTQ5Mi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL2xvY2tpbmcvbG9ja3R5cGVzLnJzdD00OTc9UFJFRU1QVF9SVDo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNDk5LSAgc3Bpbl9sb2NrKFxcdTAwMjZsb2NrKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3Q6NTAwOiAgcCA9IGttYWxsb2Nfb2JqKCpwLCBHRlBfQVRPTUlDKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9sb2NraW5nL2xvY2t0eXBlcy5yc3QtNTAxLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvaXRfSVQvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk0Mj1JbCBtb2RvIHByZWZlcml0byBwZXIgcGFzc2FyZSBsYSBkaW1lbnNpb25lIGRpIHVuYSBzdHJ1dHR1cmEgw6ggaWwgc2VndWVudGU6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9pdF9JVC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTQ1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5NDY6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL2l0X0lUL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9OTU0PUxhIGZvcm1hIHByZWZlcmlkYSBwYXJhIHBhc2FyIGVsIHRhbWHDsW8gZGUgdW5hIGVzdHJ1Y3R1cmEgZXMgbGEgc2lndWllbnRlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvc3BfU1AvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk1Ny1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTU4OlxcdHAgPSBrbWFsbG9jX29iaigqcCwgLi4uKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy9zcF9TUC9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTU5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q9NDY9a3JlZuWPr+S7peWHuueOsOWcqOaVsOaNrue7k+aehOS9k+S4reeahOS7u+S9leWcsOaWueOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtNTQtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q6NTU6ICAgICBkYXRhID0ga21hbGxvY19vYmooKmRhdGEpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL2tyZWYucnN0LTU2LSAgICAgaWYgKCFkYXRhKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3Q9NjI9S3JlZuinhOWImVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkva3JlZi5yc3QtMTA4LVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdDoxMDk6XFx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9rcmVmLnJzdC0xMTAtXFx0aWYgKCFkYXRhKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTgxMD1Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Qg44CCXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtODE1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo4MTY6XFx0cCA9IGttYWxsb2Nfb2JqKCpwLCAuLi4pO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MTctXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9UVy9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q9ODI0PURvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdCDjgIJcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX1RXL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC04MjktXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjgzMDpcXHRwID0ga21hbGxvY19vYmooKnAsIC4uLik7XFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfVFcvcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTgzMS1cXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM9ODU3PW1hcnZlbF9hZ3Bfc2V0dXAoYWxwaGFfYWdwX2luZm8gKmFncClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtODYzLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmM6ODY0OlxcdGFwZXIgPSBrbWFsbG9jX29iaigqYXBlcik7XFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYy04NjUtXFx0aWYgKGFwZXIgPT0gTlVMTCkgcmV0dXJuIC1FTk9NRU07XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jPTEwMTk9bWFydmVsX2FncF9pbmZvKHZvaWQpXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX21hcnZlbC5jLTEwNjEtXFx0ICovXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV9tYXJ2ZWwuYzoxMDYyOlxcdGFncCA9IGttYWxsb2Nfb2JqKCphZ3ApO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfbWFydmVsLmMtMTA2My1cXHRpZiAoIWFncClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYz01OTA9dGl0YW5fYWdwX3NldHVwKGFscGhhX2FncF9pbmZvICphZ3ApXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNTk2LVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYzo1OTc6XFx0YXBlciA9IGttYWxsb2Nfb2JqKHN0cnVjdCB0aXRhbl9hZ3BfYXBlcnR1cmUpO1xcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy01OTgtXFx0aWYgKGFwZXIgPT0gTlVMTClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYz03MzE9dGl0YW5fYWdwX2luZm8odm9pZClcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL2NvcmVfdGl0YW4uYy03NjItXFx0ICovXFxuYXJjaC9hbHBoYS9rZXJuZWwvY29yZV90aXRhbi5jOjc2MzpcXHRhZ3AgPSBrbWFsbG9jX29iaigqYWdwKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9jb3JlX3RpdGFuLmMtNzY0LVxcdGlmICghYWdwKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM9Mjk9cHJvY2Vzc19yZWxvY19mb3JfZ290KEVsZjY0X1JlbGEgKnJlbGEsXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy00OC1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYzo0OTpcXHRnID0ga21hbGxvY19vYmooKmcpO1xcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTUwLVxcdGctXFx1MDAzZW5leHQgPSBjaGFpbnNbcl9zeW1dLm5leHQ7XFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYz0yMTE9c3RhdGljIHZvaWQgcGRldl9zYXZlX3NybV9jb25maWcoc3RydWN0IHBjaV9kZXYgKmRldilcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL3BjaS5jLTIyMy1cXG5hcmNoL2FscGhhL2tlcm5lbC9wY2kuYzoyMjQ6XFx0dG1wID0ga21hbGxvY19vYmooKnRtcCk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvcGNpLmMtMjI1LVxcdGlmICghdG1wKSB7XFxuLS1cXG5hcmNoL2FyYy9rZXJuZWwvdW53aW5kLmM9MzU5PXZvaWQgKnVud2luZF9hZGRfdGFibGUoc3RydWN0IG1vZHVsZSAqbW9kdWxlLCBjb25zdCB2b2lkICp0YWJsZV9zdGFydCxcXG4tLVxcbmFyY2gvYXJjL2tlcm5lbC91bndpbmQuYy0zNjgtXFxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jOjM2OTpcXHR0YWJsZSA9IGttYWxsb2Nfb2JqKCp0YWJsZSk7XFxuYXJjaC9hcmMva2VybmVsL3Vud2luZC5jLTM3MC1cXHRpZiAoIXRhYmxlKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTI3ND1zdGF0aWMgaW50IGxvY29tb19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTI3OS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjgwOlxcdHNhdmUgPSBrbWFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX3NhdmVfZGF0YSk7XFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTI4MS1cXHRpZiAoIXNhdmUpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM9OTY0PXN0YXRpYyBpbnQgc2ExMTExX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3MS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM6OTcyOlxcdHNhdmUgPSBrbWFsbG9jX29iaihzdHJ1Y3Qgc2ExMTExX3NhdmVfZGF0YSk7XFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTk3My1cXHRpZiAoIXNhdmUpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvdW53aW5kLmM9NTcyPXN0cnVjdCB1bndpbmRfdGFibGUgKnVud2luZF90YWJsZV9hZGQodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jLTU3Ni1cXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbmFyY2gvYXJtL2tlcm5lbC91bndpbmQuYzo1Nzc6XFx0c3RydWN0IHVud2luZF90YWJsZSAqdGFiID0ga21hbGxvY19vYmooKnRhYik7XFxuYXJjaC9hcm0va2VybmVsL3Vud2luZC5jLTU3OC1cXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jPTUzPXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gKl9nZXRfcHdyZG0oc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmMtMTAxLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcC1pb21tdS5jOjEwMjpcXHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwLWlvbW11LmMtMTAzLVxcdGlmIChlbnRyeSkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYz00MDY9c3RhdGljIGludCBfX2luaXQgcHdyZG1zX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVudXNlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMtNDEyLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmM6NDEzOlxcdHB3cnN0ID0ga21hbGxvY19vYmooc3RydWN0IHBvd2VyX3N0YXRlLCBHRlBfQVRPTUlDKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jLTQxNC1cXHRpZiAoIXB3cnN0KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTQ0eHguYz0xMTM9c3RhdGljIGludCBfX2luaXQgcHdyZG1zX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVudXNlZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmMtMTM0LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvcG00NHh4LmM6MTM1OlxcdHB3cnN0ID0ga21hbGxvY19vYmooc3RydWN0IHBvd2VyX3N0YXRlLCBHRlBfQVRPTUlDKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtNDR4eC5jLTEzNi1cXHRpZiAoIXB3cnN0KVxcbi0tXFxuYXJjaC9hcm0vbW0vcGdkLmMtMTktI2lmZGVmIENPTkZJR19BUk1fTFBBRVxcbmFyY2gvYXJtL21tL3BnZC5jOjIwOiNkZWZpbmUgX3BnZF9hbGxvYyhtbSlcXHRcXHRrbWFsbG9jX29ianMocGdkX3QsIFBUUlNfUEVSX1BHRCwgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pXFxuYXJjaC9hcm0vbW0vcGdkLmMtMjEtI2RlZmluZSBfcGdkX2ZyZWUobW0sIHBnZClcXHRrZnJlZShwZ2QpXFxuLS1cXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYz03NjQ9c3RhdGljIGludCBjb3ZlcmFnZV9zdGFydChjb25zdCB1bmlvbiBkZWNvZGVfaXRlbSAqdGFibGUpXFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmMtNzY1LXtcXG5hcmNoL2FybS9wcm9iZXMva3Byb2Jlcy90ZXN0LWNvcmUuYzo3NjY6XFx0Y292ZXJhZ2UuYmFzZSA9IGttYWxsb2Nfb2JqcyhzdHJ1Y3QgY292ZXJhZ2VfZW50cnksXFxuYXJjaC9hcm0vcHJvYmVzL2twcm9iZXMvdGVzdC1jb3JlLmMtNzY3LVxcdFxcdFxcdFxcdCAgICAgTUFYX0NPVkVSQUdFX0VOVFJJRVMpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYz03NzQ9dm9pZCBrdm1faG9zdF9wbXVfaW5pdChzdHJ1Y3QgYXJtX3BtdSAqcG11KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYy03ODYtXFxuYXJjaC9hcm02NC9rdm0vcG11LWVtdWwuYzo3ODc6XFx0ZW50cnkgPSBrbWFsbG9jX29iaigqZW50cnkpO1xcbmFyY2gvYXJtNjQva3ZtL3BtdS1lbXVsLmMtNzg4LVxcdGlmICghZW50cnkpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYz0xMDI9c3RhdGljIHZvaWQgKnZnaWNfZGVidWdfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTEwNi1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYzoxMDc6XFx0aXRlciA9IGttYWxsb2Nfb2JqKCppdGVyKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtZGVidWcuYy0xMDgtXFx0aWYgKCFpdGVyKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmM9MzY0PXN0YXRpYyB2b2lkICp2Z2ljX2l0c19kZWJ1Z19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWRlYnVnLmMtMzc3LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jOjM3ODpcXHRpdGVyID0ga21hbGxvY19vYmooKml0ZXIpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1kZWJ1Zy5jLTM3OS1cXHRpZiAoIWl0ZXIpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTc0Mz12b2lkIF9faW5pdCB2Z2ljX3NldF9rdm1faW5mbyhjb25zdCBzdHJ1Y3QgZ2ljX2t2bV9pbmZvICppbmZvKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy03NDUtXFx0QlVHX09OKGdpY19rdm1faW5mbyAhPSBOVUxMKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jOjc0NjpcXHRnaWNfa3ZtX2luZm8gPSBrbWFsbG9jX29iaigqZ2ljX2t2bV9pbmZvKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jLTc0Ny1cXHRpZiAoZ2ljX2t2bV9pbmZvKVxcbi0tXFxuYXJjaC9tNjhrL2VtdS9uZmJsb2NrLmM9OTc9c3RhdGljIGludCBfX2luaXQgbmZoZF9pbml0X29uZShpbnQgaWQsIHUzMiBibG9ja3MsIHUzMiBic2l6ZSlcXG4tLVxcbmFyY2gvbTY4ay9lbXUvbmZibG9jay5jLTExNC1cXG5hcmNoL202OGsvZW11L25mYmxvY2suYzoxMTU6XFx0ZGV2ID0ga21hbGxvY19vYmooc3RydWN0IG5maGRfZGV2aWNlKTtcXG5hcmNoL202OGsvZW11L25mYmxvY2suYy0xMTYtXFx0aWYgKCFkZXYpXFxuLS1cXG5hcmNoL202OGsvbW0va21hcC5jPTEwOD1zdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqZ2V0X2lvX2FyZWEodW5zaWduZWQgbG9uZyBzaXplKVxcbi0tXFxuYXJjaC9tNjhrL21tL2ttYXAuYy0xMTItXFxuYXJjaC9tNjhrL21tL2ttYXAuYzoxMTM6XFx0YXJlYSA9IGttYWxsb2Nfb2JqKCphcmVhKTtcXG5hcmNoL202OGsvbW0va21hcC5jLTExNC1cXHRpZiAoIWFyZWEpXFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYz0yNTM9dTMyIGF1MXh4eF9kYmRtYV9jaGFuX2FsbG9jKHUzMiBzcmNpZCwgdTMyIGRlc3RpZCxcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTMxMi1cXHRcXHRcXHQgKi9cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYzozMTM6XFx0XFx0XFx0Y3RwID0ga21hbGxvY19vYmooY2hhbl90YWJfdCwgR0ZQX0FUT01JQyk7XFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmMtMzE0LVxcdFxcdFxcdGNoYW5fdGFiX3B0cltpXSA9IGN0cDtcXG4tLVxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jPTM5MT11MzIgYXUxeHh4X2RiZG1hX3JpbmdfYWxsb2ModTMyIGNoYW5pZCwgaW50IGVudHJpZXMpXFxuLS1cXG5hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYy00MTQtXFx0ICovXFxuYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RiZG1hLmM6NDE1OlxcdGRlc2NfYmFzZSA9ICh1MzIpIGttYWxsb2Nfb2JqcyhhdTF4X2RkbWFfZGVzY190LCBlbnRyaWVzLFxcbmFyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jLTQxNi1cXHRcXHRcXHRcXHQgICAgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpO1xcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYz01OT1zdGF0aWMgaW50IGFwcGx5X3JfbWlwc19oaTE2KHN0cnVjdCBtb2R1bGUgKm1lLCB1MzIgKmxvY2F0aW9uLCBFbGZfQWRkciB2LFxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYy03NC1cXHQgKi9cXG5hcmNoL21pcHMva2VybmVsL21vZHVsZS5jOjc1OlxcdG4gPSBrbWFsbG9jX29iaigqbik7XFxuYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYy03Ni1cXHRpZiAoIW4pXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jPTMxMT1zdGF0aWMgaW50IGFwcGx5X3JfbWlwc19oaTE2KHN0cnVjdCBtb2R1bGUgKm1lLCB1aW50MzJfdCAqbG9jYXRpb24sXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jLTMyMC1cXHQgKi9cXG5hcmNoL21pcHMva2VybmVsL3ZwZS5jOjMyMTpcXHRuID0ga21hbGxvY19vYmooKm4pO1xcbmFyY2gvbWlwcy9rZXJuZWwvdnBlLmMtMzIyLVxcdGlmICghbilcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYz0xODg9cGF0X3F1ZXJ5X21vZHVsZSh1bG9uZyBwY2VsbF9sb2MsIHVsb25nIG1vZF9pbmRleClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYy0xOTUtXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jOjE5NjpcXHRwYV9wZGNfY2VsbCA9IGttYWxsb2Nfb2JqKCpwYV9wZGNfY2VsbCk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTE5Ny1cXHRpZiAoIXBhX3BkY19jZWxsKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jPTUzMj1hZGRfc3lzdGVtX21hcF9hZGRyZXNzZXMoc3RydWN0IHBhcmlzY19kZXZpY2UgKmRldiwgaW50IG51bV9hZGRycywgXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvaW52ZW50b3J5LmMtNTM4LVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9pbnZlbnRvcnkuYzo1Mzk6XFx0ZGV2LVxcdTAwM2VhZGRyID0ga21hbGxvY19vYmpzKCpkZXYtXFx1MDAzZWFkZHIsIG51bV9hZGRycyk7XFxuYXJjaC9wYXJpc2Mva2VybmVsL2ludmVudG9yeS5jLTU0MC1cXHRpZighZGV2LVxcdTAwM2VhZGRyKSB7XFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmM9ODE9c3RhdGljIGludCBfX2luaXQgcHJvY2Vzc29yX3Byb2JlKHN0cnVjdCBwYXJpc2NfZGV2aWNlICpkZXYpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvcHJvY2Vzc29yLmMtMTEyLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYzoxMTM6XFx0XFx0cGFfcGRjX2NlbGwgPSBrbWFsbG9jX29iaigqcGFfcGRjX2NlbGwpO1xcbmFyY2gvcGFyaXNjL2tlcm5lbC9wcm9jZXNzb3IuYy0xMTQtXFx0XFx0aWYgKCFwYV9wZGNfY2VsbClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz0xNDk9dW53aW5kX3RhYmxlX2FkZChjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsb25nIGJhc2VfYWRkciwgXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtMTU5LVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYzoxNjA6XFx0dGFibGUgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdW53aW5kX3RhYmxlLCBHRlBfVVNFUik7XFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jLTE2MS1cXHRpZiAodGFibGUgPT0gTlVMTClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYz00MDY9dm9pZCB1bndpbmRfZnJhbWVfaW5pdF9mcm9tX2Jsb2NrZWRfdGFzayhzdHJ1Y3QgdW53aW5kX2ZyYW1lX2luZm8gKmluZm8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdClcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC91bndpbmQuYy00MTAtXFxuYXJjaC9wYXJpc2Mva2VybmVsL3Vud2luZC5jOjQxMTpcXHRyMiA9IGttYWxsb2Nfb2JqKHN0cnVjdCBwdF9yZWdzLCBHRlBfQVRPTUlDKTtcXG5hcmNoL3BhcmlzYy9rZXJuZWwvdW53aW5kLmMtNDEyLVxcdGlmICghcjIpXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmM9OTg0PWludCBfX2luaXQgbnZyYW1fc2Nhbl9wYXJ0aXRpb25zKHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL252cmFtXzY0LmMtMTAzMi1cXHRcXHR9XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9udnJhbV82NC5jOjEwMzM6XFx0XFx0dG1wX3BhcnQgPSBrbWFsbG9jX29iaigqdG1wX3BhcnQpO1xcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbnZyYW1fNjQuYy0xMDM0LVxcdFxcdGVyciA9IC1FTk9NRU07XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2U1MDBfbW11LmM9NzMxPWludCBrdm1fdmNwdV9pb2N0bF9jb25maWdfdGxiKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy03NzQtXFx0XFx0ICAgIGNmZy1cXHUwMDNlYXJyYXkgLyBQQUdFX1NJWkU7XFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjc3NTpcXHRwYWdlcyA9IGttYWxsb2Nfb2JqcygqcGFnZXMsIG51bV9wYWdlcyk7XFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTc3Ni1cXHRpZiAoIXBhZ2VzKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jPTg5OD1pbnQga3ZtcHBjX2U1MDBfdGxiX2luaXQoc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vZTUwMF9tbXUuYy05MTQtXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jOjkxNTpcXHR2Y3B1X2U1MDAtXFx1MDAzZWd0bGJfYXJjaCA9IGttYWxsb2Nfb2JqcygqdmNwdV9lNTAwLVxcdTAwM2VndGxiX2FyY2gsXFxuYXJjaC9wb3dlcnBjL2t2bS9lNTAwX21tdS5jLTkxNi1cXHRcXHRcXHRcXHRcXHQgICAgS1ZNX0U1MDBfVExCMF9TSVpFICsgS1ZNX0U1MDBfVExCMV9TSVpFKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYz00NT1zdGF0aWMgaW50IGdyb3cocmhfaW5mb190ICogaW5mbywgaW50IG1heF9ibG9ja3MpXFxuLS1cXG5hcmNoL3Bvd2VycGMvbGliL3JoZWFwLmMtNTYtXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jOjU3OlxcdGJsb2NrID0ga21hbGxvY19vYmpzKHJoX2Jsb2NrX3QsIG1heF9ibG9ja3MsIEdGUF9BVE9NSUMpO1xcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy01OC1cXHRpZiAoYmxvY2sgPT0gTlVMTClcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYz0yNTM9cmhfaW5mb190ICpyaF9jcmVhdGUodW5zaWduZWQgaW50IGFsaWdubWVudClcXG4tLVxcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjAtXFxuYXJjaC9wb3dlcnBjL2xpYi9yaGVhcC5jOjI2MTpcXHRpbmZvID0ga21hbGxvY19vYmooKmluZm8sIEdGUF9BVE9NSUMpO1xcbmFyY2gvcG93ZXJwYy9saWIvcmhlYXAuYy0yNjItXFx0aWYgKGluZm8gPT0gTlVMTClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jPTk1PXN0YXRpYyBpbnQgaGFzaF9faW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTk4LVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jOjk5OlxcdG1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dCA9IGttYWxsb2Nfb2JqKHN0cnVjdCBoYXNoX21tX2NvbnRleHQpO1xcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEwMC1cXHRpZiAoIW1tLVxcdTAwM2Vjb250ZXh0Lmhhc2hfY29udGV4dClcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9ib29rM3M2NC9tbXVfY29udGV4dC5jLTEyNS1cXHRcXHRpZiAoY3VycmVudC1cXHUwMDNlbW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVxcdTAwM2VzcHQpIHtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYzoxMjY6XFx0XFx0XFx0bW0tXFx1MDAzZWNvbnRleHQuaGFzaF9jb250ZXh0LVxcdTAwM2VzcHQgPSBrbWFsbG9jX29iaihzdHJ1Y3Qgc3VicGFnZV9wcm90X3RhYmxlKTtcXG5hcmNoL3Bvd2VycGMvbW0vYm9vazNzNjQvbW11X2NvbnRleHQuYy0xMjctXFx0XFx0XFx0aWYgKCFtbS1cXHUwMDNlY29udGV4dC5oYXNoX2NvbnRleHQtXFx1MDAzZXNwdCkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jPTYyMz1zdGF0aWMgaW50IGV2ZW50X3VuaXFfYWRkKHN0cnVjdCByYl9yb290ICpyb290LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmwsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtNjUwLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo2NTE6XFx0ZGF0YSA9IGttYWxsb2Nfb2JqKCpkYXRhKTtcXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtNjUyLVxcdGlmICghZGF0YSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYz03NTU9c3RhdGljIGludCBjcmVhdGVfZXZlbnRzX2Zyb21fY2F0YWxvZyhzdHJ1Y3QgYXR0cmlidXRlICoqKmV2ZW50c18sXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTA4LVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MDk6XFx0ZXZlbnRzID0ga21hbGxvY19vYmpzKCpldmVudHMsIGF0dHJfbWF4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxMC1cXHRpZiAoIWV2ZW50cykge1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNC1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmM6OTE1OlxcdGV2ZW50X2Rlc2NzID0ga21hbGxvY19vYmpzKCpldmVudF9kZXNjcywgZXZlbnRfaWR4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkxNi1cXHRpZiAoIWV2ZW50X2Rlc2NzKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9odi0yNHg3LmMtOTIwLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2h2LTI0eDcuYzo5MjE6XFx0ZXZlbnRfbG9uZ19kZXNjcyA9IGttYWxsb2Nfb2JqcygqZXZlbnRfbG9uZ19kZXNjcywgZXZlbnRfaWR4ICsgMSk7XFxuYXJjaC9wb3dlcnBjL3BlcmYvaHYtMjR4Ny5jLTkyMi1cXHRpZiAoIWV2ZW50X2xvbmdfZGVzY3MpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM9MTIyPXN0YXRpYyBpbnQgaHN0YV9tc2lfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmMtMTUzLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L2hzdGFfbXNpLmM6MTU0OlxcdHBwYzR4eF9oc3RhX21zaS5pcnFfbWFwID0ga21hbGxvY19vYmpzKGludCwgaXJxX2NvdW50KTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9oc3RhX21zaS5jLTE1NS1cXHRpZiAoIXBwYzR4eF9oc3RhX21zaS5pcnFfbWFwKSB7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jPTQ0PXN0YXRpYyBpbnQgc3B1ZnNfYXR0cl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy00OS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jOjUwOlxcdGF0dHIgPSBrbWFsbG9jX29iaigqYXR0cik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYy01MS1cXHRpZiAoIWF0dHIpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYz02Mjg9dm9pZCBxdWV1ZV9ob3RwbHVnX2V2ZW50KHN0cnVjdCBwc2VyaWVzX2hwX2Vycm9ybG9nICpocF9lcnJsb2cpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzYtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2RscGFyLmM6NjM3OlxcdHdvcmsgPSBrbWFsbG9jX29iaihzdHJ1Y3QgcHNlcmllc19ocF93b3JrLCBHRlBfQVRPTUlDKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZGxwYXIuYy02MzgtXFx0aWYgKHdvcmspIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYz0xMTk9aW50IGh2Y3NfZ2V0X3BhcnRuZXJfaW5mbyh1aW50MzJfdCB1bml0X2FkZHJlc3MsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmMtMTYyLVxcdFxcdCAqIGh2Y3NfZnJlZV9wYXJ0bmVyX2luZm8oKS4gKi9cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjc2VydmVyLmM6MTYzOlxcdFxcdG5leHRfcGFydG5lcl9pbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh2Y3NfcGFydG5lcl9pbmZvLFxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNzZXJ2ZXIuYy0xNjQtXFx0XFx0XFx0XFx0XFx0XFx0R0ZQX0FUT01JQyk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jPTE0ND1zdGF0aWMgdm9pZCBzaG93X2dwY2lfZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE0OS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jOjE1MDpcXHRidWYgPSBrbWFsbG9jX29iaigqYnVmKTtcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhcmNmZy5jLTE1MS1cXHRpZiAoYnVmID09IE5VTEwpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmM9NDM1PXN0YXRpYyBpbnQgcHNlcmllc19tc2lfb3BzX3ByZXBhcmUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwgc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jLTQ0My1cXHRzdHJ1Y3QgcHNlcmllc19tc2lfZGV2aWNlICpwc2VyaWVzX2RldiBfX2ZyZWUoa2ZyZWUpXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jOjQ0NDpcXHRcXHQ9IGttYWxsb2Nfb2JqKCpwc2VyaWVzX2Rldik7XFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jLTQ0NS1cXHRpZiAoIXBzZXJpZXNfZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jPTEyMD1zdGF0aWMgaW50IHBzZXJpZXNfcGNpX3NyaW92X2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTE2IG51bV92ZnMpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMtMTQzLVxcdHBkbiA9IHBjaV9nZXRfcGRuKHBkZXYpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYzoxNDQ6XFx0cGRuLVxcdTAwM2VwZV9udW1fbWFwID0ga21hbGxvY19vYmpzKCpwZG4tXFx1MDAzZXBlX251bV9tYXAsIG51bV92ZnMpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYy0xNDUtXFx0aWYgKCFwZG4tXFx1MDAzZXBlX251bV9tYXApXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmM9MTA3Nj1zdGF0aWMgaW50IF9faW5pdCBwc2VyaWVzX3Zhc19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmMtMTA4OS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmFzLmM6MTA5MDpcXHRodl9jYXBzID0ga21hbGxvY19vYmooKmh2X2NhcHMpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92YXMuYy0xMDkxLVxcdGlmICghaHZfY2FwcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYz03MDU9c3RhdGljIGludCB2aW9fY21vX2J1c19wcm9iZShzdHJ1Y3QgdmlvX2RldiAqdmlvZGV2KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Zpby5jLTc0Ny1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvdmlvLmM6NzQ4OlxcdFxcdGRldl9lbnQgPSBrbWFsbG9jX29iaihzdHJ1Y3QgdmlvX2Ntb19kZXZfZW50cnkpO1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy92aW8uYy03NDktXFx0XFx0aWYgKCFkZXZfZW50KVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfbGJjLmM9MzUyPXN0YXRpYyBpbnQgZnNsX2xiY19zeXNjb3JlX3N1c3BlbmQodm9pZCAqZGF0YSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jLTM2NC1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9sYmMuYzozNjU6XFx0Y3RybC1cXHUwMDNlc2F2ZWRfcmVncyA9IGttYWxsb2Nfb2JqKHN0cnVjdCBmc2xfbGJjX3JlZ3MpO1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX2xiYy5jLTM2Ni1cXHRpZiAoIWN0cmwtXFx1MDAzZXNhdmVkX3JlZ3MpXFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYz0xNTQ5PXZvaWQgX19pbml0IG1waWNfaW5pdChzdHJ1Y3QgbXBpYyAqbXBpYylcXG4tLVxcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jLTE2NDEtXFx0LyogYWxsb2NhdGUgbWVtb3J5IHRvIHNhdmUgbXBpYyBzdGF0ZSAqL1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jOjE2NDI6XFx0bXBpYy1cXHUwMDNlc2F2ZV9kYXRhID0ga21hbGxvY19vYmpzKCptcGljLVxcdTAwM2VzYXZlX2RhdGEsIG1waWMtXFx1MDAzZW51bV9zb3VyY2VzKTtcXG5hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYy0xNjQzLVxcdEJVR19PTihtcGljLVxcdTAwM2VzYXZlX2RhdGEgPT0gTlVMTCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jPTIzPXZvaWQgX19pbml0IG9mX2luc3RhbnRpYXRlX3J0Yyh2b2lkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL3N5c2Rldi9vZl9ydGMuYy0zNS1cXG5hcmNoL3Bvd2VycGMvc3lzZGV2L29mX3J0Yy5jOjM2OlxcdFxcdFxcdHJlcyA9IGttYWxsb2Nfb2JqKCpyZXMpO1xcbmFyY2gvcG93ZXJwYy9zeXNkZXYvb2ZfcnRjLmMtMzctXFx0XFx0XFx0aWYgKCFyZXMpIHtcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jPTY1ND1zdGF0aWMgaW50IGFkZF9yZWxvY2F0aW9uX3RvX2FjY3VtdWxhdGUoc3RydWN0IG1vZHVsZSAqbWUsIGludCB0eXBlLFxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjY1LVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjY2NjpcXHRlbnRyeSA9IGttYWxsb2Nfb2JqKCplbnRyeSk7XFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjY3LVxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLmMtNjk5LVxcdGlmICghZm91bmQpIHtcXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUuYzo3MDA6XFx0XFx0cmVsX2hlYWQgPSBrbWFsbG9jX29iaigqcmVsX2hlYWQpO1xcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTcwMS1cXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jLTcxMS1cXHRcXHRcXHRidWNrZXQgPVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS5jOjcxMjpcXHRcXHRcXHRcXHRrbWFsbG9jX29iaihzdHJ1Y3QgdXNlZF9idWNrZXQpO1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozNzozMS40ODQ4NDYzNDdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mjc3NTIyODA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW5pdGlhbGl6YXRpb24gb2YgYGxhc3RfYXBwbGllZGAgaW4gdGhlIERBTU9OIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBrbWFsbG9jX29iamAgbWFjcm8gYW5kIHRyYWNpbmcgaXRzIHVzYWdlIGluIHRoZSBEQU1PTiBjb2RlLiBJdCBzZWVtcyBsaWtlIGl0IHdhcyBpbnRyb2R1Y2VkIGluIGEgcGF0Y2gsIHBvdGVudGlhbGx5IHdpdGggYSBjYWxsIGxpa2UgYGttYWxsb2Nfb2JqKCpzY2hlbWUsIEdGUF9LRVJORUwpYC4gSSdtIHNlZWluZyBpdCBzcGVjaWZpY2FsbHkgdXNlZCBpbiBgbW0vZGFtb24vY29yZS5jYCBhcyBgc2NoZW1lID0ga21hbGxvY19vYmooKnNjaGVtZSk7YC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIGFic2VuY2Ugb2YgZXhwbGljaXQgYEdGUGAgZmxhZ3MgaW4gdGhpcyBpbnN0YW50aWF0aW9uLiBJcyBpdCBhIG1hY3JvIHRoYXQgZGVmYXVsdHMgdG8gYEdGUF9LRVJORUxgIGludGVybmFsbHksIG9yIHBlcmhhcHMganVzdCBhIHNob3J0aGFuZCBmb3IgYGttYWxsb2Moc2l6ZW9mKCpzY2hlbWUpLCBHRlBfS0VSTkVMKWA/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC5cblxuUmVnYXJkbGVzcyBvZiB0aGF0IHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbCwgd2hhdCdzIGNydWNpYWwgaGVyZSBpcyB0aGF0IHRoZSBgc2NoZW1lLVx1MDAzZWxhc3RfYXBwbGllZGAgbWVtYmVyIHdhcyB1bmluaXRpYWxpemVkICpwcmlvciogdG8gdGhpcyBwYXRjaC4gVGhpcyBpcyBhIHBvdGVudGlhbCBzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MuIE5vdywgYmVmb3JlIEkgZ28gZnVydGhlciwgSSBuZWVkIHRvIHNlZSBleGFjdGx5IHdoZXJlIGBsYXN0X2FwcGxpZWRgIGlzIHVzZWQgd2l0aGluIHRoZSBjb2RlLiBMZXQncyB0cmFjZSBhbGwgcmVmZXJlbmNlcyB0byB0aGF0IG1lbWJlciBub3cgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGl0IHBvdGVudGlhbGx5IGJlaW5nIHVuaW5pdGlhbGl6ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MDExLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM3OjM1Ljc2MjM3Mjc5NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MDc1MzA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsYXN0X2FwcGxpZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oPTU1NT1zdHJ1Y3QgZGFtb3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU5Ny1cXHQgKiBvYmplY3RzIGNvdWxkIGJlIHN1Y2ggZXhhbXBsZXMuICBUaGUgXFx1MDAyNnN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIGNhblxcbmluY2x1ZGUvbGludXgvZGFtb24uaDo1OTg6XFx0ICogdXNlIEBsYXN0X2FwcGxpZWQgdG8gYXZvaWQgdGhhdC4gIERBTU9TIGNvcmUgbG9naWMgdW5zZXRzXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjU5OTpcXHQgKiBAbGFzdF9hcHBsaWVkIHdoZW4gZWFjaCByZWdpb25zIHdhbGtpbmcgZm9yIGFwcGx5aW5nIHRoZSBzY2hlbWUgaXNcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNjAwLVxcdCAqIGZpbmlzaGVkLlxcbmluY2x1ZGUvbGludXgvZGFtb24uaC02MDEtXFx0ICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjYwMjpcXHR2b2lkICpsYXN0X2FwcGxpZWQ7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTYwMy1cXHQvKiBMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLiAqL1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTY4Mj1zdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTcwNy1cXHRzY2hlbWUtXFx1MDAzZW1heF9ucl9zbmFwc2hvdHMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo3MDg6XFx0c2NoZW1lLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy03MDktXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnNjaGVtZS1cXHUwMDNlbGlzdCk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzIxNz1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjUxLVxcdFxcdGRhbW9zX3NldF9uZXh0X2FwcGx5X3NpcyhzLCBjKTtcXG5tbS9kYW1vbi9jb3JlLmM6MzI1MjpcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjUzLVxcdFxcdGRhbW9zX3RyYWNlX3N0YXQoYywgcyk7XFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jPTIwOT1zdGF0aWMgYm9vbCBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMjEyLVxcdFxcdHJldHVybiB0cnVlO1xcbm1tL2RhbW9uL3BhZGRyLmM6MjEzOlxcdGlmIChmb2xpbyA9PSBzLVxcdTAwM2VsYXN0X2FwcGxpZWQpIHtcXG5tbS9kYW1vbi9wYWRkci5jLTIxNC1cXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yMjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNzMtXFx0Y29uZF9yZXNjaGVkKCk7XFxubW0vZGFtb24vcGFkZHIuYzoyNzQ6XFx0cy1cXHUwMDNlbGFzdF9hcHBsaWVkID0gZm9saW87XFxubW0vZGFtb24vcGFkZHIuYy0yNzUtXFx0cmV0dXJuIGRhbW9uX3BhX2NvcmVfYWRkcihhcHBsaWVkICogUEFHRV9TSVpFLCBhZGRyX3VuaXQpO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yNzg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMDctXFx0fVxcbm1tL2RhbW9uL3BhZGRyLmM6MzA4OlxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbm1tL2RhbW9uL3BhZGRyLmMtMzA5LVxcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzI2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX21pZ3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzU1LVxcdGNvbmRfcmVzY2hlZCgpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzU2OlxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbm1tL2RhbW9uL3BhZGRyLmMtMzU3LVxcdHJldHVybiBkYW1vbl9wYV9jb3JlX2FkZHIoYXBwbGllZCAqIFBBR0VfU0laRSwgYWRkcl91bml0KTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MzYwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX3N0YXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMzgyLVxcdH1cXG5tbS9kYW1vbi9wYWRkci5jOjM4MzpcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG5tbS9kYW1vbi9wYWRkci5jLTM4NC1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmM9Nzg4PXN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vc192YV9pbnZhbGlkX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTc5MC17XFxubW0vZGFtb24vdmFkZHIuYzo3OTE6XFx0cmV0dXJuICFmb2xpbyB8fCBmb2xpbyA9PSBzLVxcdTAwM2VsYXN0X2FwcGxpZWQ7XFxubW0vZGFtb24vdmFkZHIuYy03OTItfVxcbi0tXFxubW0vZGFtb24vdmFkZHIuYz03OTQ9c3RhdGljIGludCBkYW1vc192YV9zdGF0X3BtZF9lbnRyeShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jLTgyMC1cXHRcXHRcXHQqc3pfZmlsdGVyX3Bhc3NlZCArPSBmb2xpb19zaXplKGZvbGlvKTtcXG5tbS9kYW1vbi92YWRkci5jOjgyMTpcXHRcXHRzLVxcdTAwM2VsYXN0X2FwcGxpZWQgPSBmb2xpbztcXG5tbS9kYW1vbi92YWRkci5jLTgyMi1cXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtODQ2LVxcdFxcdG5yID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbm1tL2RhbW9uL3ZhZGRyLmM6ODQ3OlxcdFxcdHMtXFx1MDAzZWxhc3RfYXBwbGllZCA9IGZvbGlvO1xcbm1tL2RhbW9uL3ZhZGRyLmMtODQ4LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6Mzc6MzguMjIzMTMwODM0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MDUyMTYwOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgREFNT04ncyBgbGFzdF9hcHBsaWVkYCBJc3N1ZSoqXG5cblJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgREFNT04gY29kZSwgYW5kIEkgc2VlIGBsYXN0X2FwcGxpZWRgIHNob3dpbmcgdXAgaW4gYG1tL2RhbW9uL3BhZGRyLmNgIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIFRoYXQncyBhIGtleSB2YXJpYWJsZSwgbGlrZWx5IHJlbGF0ZWQgdG8gdGhlIHN0YXRlIG9mIG1lbW9yeSBtb2RpZmljYXRpb25zLiBUaGVuIGl0IGhpdHMgbWUuLi4gd2FpdCBhIHNlY29uZC4gSSByZW1lbWJlciBub3cg4oCTIGBzY2hlbWUtXHUwMDNlbGFzdF9hcHBsaWVkYCB3YXNuJ3QgYmVpbmcgaW5pdGlhbGl6ZWQgcHJvcGVybHkgd2hlbiBhIG5ldyBzY2hlbWUgaXMgY3JlYXRlZCB2aWEgYGRhbW9uX25ld19zY2hlbWVgLiBJIHNob3VsZCBoYXZlIGtub3duIGJldHRlciwgYGttYWxsb2NgIGRvZXNuJ3QgYXV0b21hdGljYWxseSB6ZXJvIG91dCB0aGUgYWxsb2NhdGVkIG1lbW9yeSEgSXQncyBhIGNvbW1vbiBvdmVyc2lnaHQsIGFuZCBkZWZpbml0ZWx5IGNvdWxkIGxlYWQgdG8gc29tZSB3ZWlyZCwgZGlmZmljdWx0LXRvLXRyYWNrIGJ1Z3MgaWYgeW91IGRvbid0IGFjY291bnQgZm9yIGl0LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYmVpbmcgcHJvcGVybHkgaW5pdGlhbGl6ZWQuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrbWFsbG9jX29iamAuIEknbGwgd2FudCB0byBzZWUgaWYgdGhlcmUncyBhbnkgY29udGV4dCBoZXJlIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQuIEl0J3MgdGltZSB0byByZXNvbHZlIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4Njc5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6Mzc6NDIuMDI4MzQ5NzIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODE3MzY1NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlZmluZSBrbWFsbG9jX29ialwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDUxPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMDEtICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEwMjojZGVmaW5lIGttYWxsb2Nfb2JqKFZBUl9PUl9UWVBFLCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTAzLVxcdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIDEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTEzLSAqL1xcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMTQ6I2RlZmluZSBrbWFsbG9jX29ianMoVkFSX09SX1RZUEUsIENPVU5ULCAuLi4pIFxcXFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTE1LVxcdF9fYWxsb2Nfb2JqcyhrbWFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihWQVJfT1JfVFlQRSksIENPVU5UKVxcbi0tXFxubGliL2RlY29tcHJlc3NfdW54ei5jLTE2My0jdW5kZWYgdmZyZWVcXG5saWIvZGVjb21wcmVzc191bnh6LmM6MTY0OiNkZWZpbmUga21hbGxvY19vYmoodHlwZSkgbWFsbG9jKHNpemVvZih0eXBlKSlcXG5saWIvZGVjb21wcmVzc191bnh6LmMtMTY1LSNkZWZpbmUga2ZyZWUocHRyKSBmcmVlKHB0cilcXG4tLVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaD02Mz1zdGF0aWMgaW5saW5lIHZvaWQgKmttYWxsb2NfYXJyYXkodW5zaWduZWQgbiwgc2l6ZV90IHMsIGdmcF90IGdmcClcXG4tLVxcbnRvb2xzL3ZpcnRpby9saW51eC9rZXJuZWwuaC02Ny1cXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmg6Njg6I2RlZmluZSBrbWFsbG9jX29iaihWQVJfT1JfVFlQRSwgLi4uKSBcXFxcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTY5LVxcdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpLCAwKSlcXG50b29scy92aXJ0aW8vbGludXgva2VybmVsLmgtNzAtXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oOjcxOiNkZWZpbmUga21hbGxvY19vYmpzKFZBUl9PUl9UWVBFLCBDT1VOVCwgLi4uKSBcXFxcXFxudG9vbHMvdmlydGlvL2xpbnV4L2tlcm5lbC5oLTcyLVxcdCgodHlwZW9mKFZBUl9PUl9UWVBFKSAqKWttYWxsb2Moc2l6ZW9mKHR5cGVvZihWQVJfT1JfVFlQRSkpICogKENPVU5UKSwgMCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM3OjQ0Ljg0NTcyMDAwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDI1MTI1MDg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgREFNT04gUGF0Y2ggZm9yIFVuaW5pdGlhbGl6ZWQgTWVtb3J5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBga21hbGxvY19vYmpgIHVzZXMgYGttYWxsb2NgLCB3aGljaCBkb2Vzbid0IHplcm8gb3V0IHRoZSBtZW1vcnkuIFRoYXQgbWVhbnMgYHNjaGVtZS1cdTAwM2VsYXN0X2FwcGxpZWRgIGlzIGxpa2VseSB1bmluaXRpYWxpemVkIHdoZW4gYGRhbW9uX25ld19zY2hlbWVgIGlzIGNhbGxlZC4gQmluZ28g4oCTIHRoaXMgcGF0Y2ggaW5pdGlhbGl6ZXMgaXQgdG8gYE5VTExgLlxuXG5JcyB0aGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2U/IEFic29sdXRlbHkhIEl0J3MgZml4aW5nIGEgY2xhc3NpYyB1bmluaXRpYWxpemVkIG1lbW9yeSBidWcuIFRoZSByaXNrIGhlcmUgaXMgdGhhdCByYW5kb20gZ2FyYmFnZSBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBhIHZhbGlkIGBmb2xpb2AgcG9pbnRlci4gVGhpcyBjb3VsZCBjYXVzZSBpc3N1ZXMgaW4gYW55IG9mIHRoZSBmdW5jdGlvbnMgd2hpY2ggdXNlIGBsYXN0X2FwcGxpZWRgIHRvIG1ha2UgZGVjaXNpb25zLlxuXG5UaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGt1bml0IHRlc3RzLCBidXQgbGV0J3MgZm9jdXMgb24gdGhlIGNvcmUgbG9naWMgZmlyc3QuIElzIGBkYW1vbl9uZXdfc2NoZW1lYCByZWFjaGFibGU/IFllcywgaXQncyB0aGUgZ2F0ZXdheSBmb3IgY3JlYXRpbmcgREFNT04gc2NoZW1lcywgYW5kIHRob3NlIGFyZSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzZnMsIGRlYnVnZnMsIG9yIGtlcm5lbCBBUElzLiBJdCdzIHRoZSBjZW50cmFsIHBvaW50IGZvciBzZXR0aW5nIHVwIGEgbmV3IERBTU9OIHNjaGVtZS4gSSBjYW4gc2VlIHRoYXQgYGRhbW9uX25ld19zY2hlbWVgIGlzIGEgY29yZSBmdW5jdGlvbi5cblxuTm93LCBpZiBgbGFzdF9hcHBsaWVkYCBpcyB1bmluaXRpYWxpemVkLCBpdCBjb3VsZCBsZWFkIHRvIHRoZSBzaXR1YXRpb24gd2hlcmUgaXQgYWNjaWRlbnRhbGx5IG1hdGNoZXMgYSB2YWxpZCBgZm9saW9gLiBUaGlzIHdvdWxkIGNhdXNlIGEgZm9saW8gdG8gYmUgc2tpcHBlZCwgcG9zc2libHkgdHJpZ2dlcmluZyBhIGBmb2xpb19wdXRgIGNhbGwgb24gYSBmb2xpbyB0aGF0IHNob3VsZG4ndCBiZSByZWxlYXNlZC5cblxuSSdtIGNoZWNraW5nIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCwganVzdCB0byBjb25maXJtIG15IHRoaW5raW5nLlxuXG5gYGBjXG5zdGF0aWMgYm9vbCBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBkYW1vcyAqcylcbntcblx0aWYgKCFmb2xpbylcblx0XHRyZXR1cm4gdHJ1ZTtcblx0aWYgKGZvbGlvID09IHMtXHUwMDNlbGFzdF9hcHBsaWVkKSB7XG5cdFx0Zm9saW9fcHV0KGZvbGlvKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59XG5gYGBcblxuT2theSwgdGhlIGxvZ2ljIGxvb2tzIGxpa2UgaXQgY2hlY2tzIGlmIHRoZSBmb2xpbyBpcyB0aGUgc2FtZSBhcyB0aGUgbGFzdCBhcHBsaWVkIG9uZS4gaWYgdGhleSBtYXRjaCwgdGhlIGZvbGlvIHJlZmVyZW5jZSBpcyBkcm9wcGVkIGFzIGl0IGlzIGNvbnNpZGVyZWQgYXBwbGllZC4gVGhlIHByb2JsZW0gaXMgdGhhdCB3aXRoIGFuIHVuaW5pdGlhbGl6ZWQgYGxhc3RfYXBwbGllZGAsIHdlIGNvdWxkIGluY29ycmVjdGx5IGlkZW50aWZ5IGEgZm9saW8gYXMgYWxyZWFkeSBcImFwcGxpZWQsXCIgYW5kIGVuZCB1cCBkcm9wcGluZyBpdHMgcmVmZXJlbmNlIHByZW1hdHVyZWx5LCB0aGVyZWJ5IHNraXBwaW5nIHRoZSBmb2xpby4gVGhpcyBjb3VsZCBtYW5pZmVzdCBhcyBpbmNvcnJlY3QgYmVoYXZpb3VyLCBsaWtlIHNraXBwaW5nIG1lbW9yeSBhY2Nlc3Mgd2hpY2ggd291bGQgbm90IGJlIGEgZG91YmxlIGZyZWUsIGJ1dCBpbmNvcnJlY3QgYmVoYXZpb3IuXG5cblRoZSBwYXRjaCBhbHNvIGFmZmVjdHMgYG1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaGAgYW5kIGBtbS9kYW1vbi90ZXN0cy92YWRkci1rdW5pdC5oYCB3aGljaCBhcmUgdGVzdHMuXG5cbklzIHRoaXMgc2luZ2xlLWxpbmUgaW5pdGlhbGl6YXRpb24gd29ydGggZnV6emluZz8gTm9ybWFsbHksIGEgb25lLWxpbmUgaW5pdGlhbGl6YXRpb24gd291bGRuJ3Qgd2FycmFudCBpbnRlbnNlIGZ1enppbmcsIGJ1dCB0aGlzIGlzbid0IGp1c3QgYSB0cml2aWFsIHZhcmlhYmxlOyBpdCBhZmZlY3RzIERBTU9OJ3MgY29yZSBmdW5jdGlvbmFsaXR5LlxuXG5HaXZlbiB0aGUgcHJvbXB0LCBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IG1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLiBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlwiIGFuZCB0aGF0IHRoaXMgaXMgYSBmaXggdG8gdGhlIGNvcmUgbG9naWMsIHdoaWNoIHByZXZlbnRzIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNlLCBJJ20gbGVhbmluZyB0b3dhcmRzIGBXb3J0aEZ1enppbmc9dHJ1ZWAuXG5cblRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgZGFtb25fbmV3X3NjaGVtZWAsIGFuZCB0aGUgZnVuY3Rpb25zIHRoYXQgdXNlIGBsYXN0X2FwcGxpZWRgLCB3aGljaCBpbmNsdWRlIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCwgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gLCBgZGFtb25fcGFfcGFnZW91dGAsIGBkYW1vbl9wYV9kZV9hY3RpdmF0ZWAsIGBkYW1vbl9wYV9taWdyYXRlYCwgYGRhbW9uX3BhX3N0YXRgLCBhbmQgYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YC4gU28sIEknbGwgcmVjb21tZW5kIGZvY3VzaW5nIGZ1enppbmcgZWZmb3J0cyBvbiB0aG9zZSBmdW5jdGlvbnMgdG8gZW5zdXJlIHRoaXMgZml4IHdvcmtzIGFzIGV4cGVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU1MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozODoyNS4wOTY5NzQyNTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTI2OTc3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9wYWRkci5jPTE5NT1zdGF0aWMgYm9vbCBkYW1vc19wYV9maWx0ZXJfb3V0KHN0cnVjdCBkYW1vcyAqc2NoZW1lLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yMDgtXFxubW0vZGFtb24vcGFkZHIuYzoyMDk6c3RhdGljIGJvb2wgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vcGFkZHIuYy0yMTAte1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yMjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfcGFnZW91dChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yNDctXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MjQ4OlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMjQ5LVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0yNzg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRhbW9uX3BhX2RlX2FjdGl2YXRlKFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0yODgtXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6Mjg5OlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMjkwLVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0zMjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfbWlncmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zMzYtXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzM3OlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzM4LVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0zNjA9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fcGFfc3RhdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0zNzItXFx0XFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4oYWRkcikpO1xcbm1tL2RhbW9uL3BhZGRyLmM6MzczOlxcdFxcdGlmIChkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvKGZvbGlvLCBzKSkge1xcbm1tL2RhbW9uL3BhZGRyLmMtMzc0LVxcdFxcdFxcdGFkZHIgKz0gUEFHRV9TSVpFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozODoyNy4zODk2Nzc1MzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjYwNzc1NTU0OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgV29ydGhGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzOiBpdCBoaXRzIHRob3NlIEtVbml0IHRlc3QgbW9kaWZpY2F0aW9ucyBpbiBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYCBhbmQgYG1tL2RhbW9uL3Rlc3RzL3ZhZGRyLWt1bml0LmhgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB0ZXN0cywgYnV0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIHByZXR0eSBzcGVjaWZpYy4gVGhleSB3YW50IHRvIGtub3cgaWYgdGhlIHBhdGNoIGlzIFwiV29ydGhGdXp6aW5nXCIgd2hpY2ggaXMgYSBiaW5hcnk6IHRydWUvZmFsc2UuIFdlIG5lZWQgdG8gcmV0dXJuIGZhbHNlIGlmIHRoZSBwYXRjaCAqb25seSogaW5jbHVkZXMgY2VydGFpbiB0aGluZ3MuIFNwZWNpZmljYWxseSwgdGhvc2UgdGhpbmdzIGFyZSBkb2N1bWVudGF0aW9uIHR3ZWFrcywgS2NvbmZpZyBjaGFuZ2VzLCBjb21tZW50cywgZGVjb3JhdGl2ZSBsb2dnaW5nIGxpa2UgYHByX2VycmAgb3IgYHByaW50a2AsIGNvc21ldGljIGFsdGVyYXRpb25zIG9mIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24ndCBjaGFuZ2UgaG93IHRoaW5ncyAqd29yayosIGFuZCBpbmFjY2Vzc2libGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbkhtbSwgYnV0IGhlcmUncyB0aGUga2lja2VyOiB0aGUgcGF0Y2ggYWxzbyBpbmNsdWRlcyBhIGNoYW5nZSB0byBgbW0vZGFtb24vY29yZS5jYC4gVGhhdCdzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0IGluaXRpYWxpemVzIGEgc3RydWN0IGZpZWxkLiBUaGF0J3MgKm5vdCogb24gdGhlIFwicmV0dXJuIGZhbHNlXCIgbGlzdC4gU28sIHRoYXQgY2hhbmdlIGl0c2VsZiBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5BbHJpZ2h0LCBJIHNob3VsZCBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBEQU1PTiBuZXh0LiBUaGF0IG1pZ2h0IGdpdmUgbWUgc29tZSBtb3JlIGNvbnRleHQgZm9yIHdoYXTigJlzIGhhcHBlbmluZyBpbiBgY29yZS5jYC4gVGhpcyBjb3VsZCBiZSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZGluZyB0aGUgc2NvcGUgb2YgdGhlIGNoYW5nZSBhbmQgaWYgdGhlIGNoYW5nZSBoYXMgYW55IGZ1bmN0aW9uYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTk0MywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozOTozMy40NjcyMzY5ODJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNzk2MzU4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6Mzk6MzUuNzQ2ODc4MjUzWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwOTg5ODQ0NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRW5hYmxpbmcgREFNT04gRmVhdHVyZXMgYW5kIEZvY3VzaW5nIHRoZSBGdXp6KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nIHJlZ2FyZGluZyB0aGlzIERBTU9OIHBhdGNoLiBXZSBzaG91bGQgZGVmaW5pdGVseSBlbmFibGUgYSBzdWl0ZSBvZiBEQU1PTiBmZWF0dXJlczogYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYERBTU9OX1NZU0ZTYCwgYERBTU9OX1JFQ0xBSU1gLCBhbmQgYERBTU9OX0xSVV9TT1JUYC4gVGhvc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgd2Ugd2FudCB0byB0YXJnZXQuXG5cblRoZSBwYXRjaCBpbmNsdWRlcyBtb2RpZmljYXRpb25zIHRvIHRoZSBrdW5pdCB0ZXN0cy4gVGhhdCdzIGludGVyZXN0aW5nLiBXZSBjYW4gZW5hYmxlIGBEQU1PTl9LVU5JVF9URVNUYCBhbmQgYERBTU9OX1ZBRERSX0tVTklUX1RFU1RgIGFzIHdlbGwuIE5vdywgdGhlIHR5cGljYWwgU3l6a2FsbGVyIGFwcHJvYWNoIHdvdWxkbid0IGRpcmVjdGx5IGZ1enogS1VuaXQgdGVzdHMuIEhvd2V2ZXIsIGVuYWJsaW5nIHRoZW0gbWlnaHQgYmUgYmVuZWZpY2lhbCBhcyB0aGV5IGFyZSBleGVjdXRlZCBkdXJpbmcgYm9vdCBvciBtb2R1bGUgbG9hZC4gVGhpcyBtaWdodCB0cmlnZ2VyIHNvbWUgY29kZSBwYXRocyB0aGF0IHdlIHdvdWxkbid0IG90aGVyd2lzZSB0b3VjaCwgd2hpY2ggd291bGQgYmUgYSB1c2VmdWwgc2lkZSBlZmZlY3QuIEdvb2QuXG5cbk5leHQsIHdlIG5lZWQgdG8gY2hvb3NlIHRoZSByaWdodCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBJJ20gdGhpbmtpbmcgYGRhbW9uX25ld19zY2hlbWVgLCBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AsIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYCwgYGRhbW9uX3BhX3BhZ2VvdXRgLCBgZGFtb25fcGFfZGVfYWN0aXZhdGVgLCBgZGFtb25fcGFfbWlncmF0ZWAsIGBkYW1vbl9wYV9zdGF0YCwgYW5kIGBkYW1vc192YV9zdGF0X3BtZF9lbnRyeWAuIFRoZXNlIHNlZW0gbGlrZSBnb29kIHN0YXJ0aW5nIHBvaW50cyBmb3IgZnV6emluZy5cblxuQmVmb3JlIHdlIHByb2NlZWQsIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBJJ2QgYmV0dGVyIGNvbmZpcm0gdGhhdCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AgaXMgYWN0dWFsbHkgZGVmaW5lZC4gTWFrZSBzdXJlIHRoYXQgc3ltYm9sIGlzIGF2YWlsYWJsZSBiZWZvcmUgd2UgZm9jdXMgb24gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMjEzLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM5OjQwLjg0NTg2NTI5NVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3ODY2NzU5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc192YV9pbnZhbGlkX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3ZhZGRyLmM9NzgzPXN0cnVjdCBkYW1vc192YV9zdGF0X3ByaXZhdGUge1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy03ODctXFxubW0vZGFtb24vdmFkZHIuYzo3ODg6c3RhdGljIGlubGluZSBib29sIGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcXG5tbS9kYW1vbi92YWRkci5jLTc4OS1cXHRcXHRzdHJ1Y3QgZGFtb3MgKnMpXFxuLS1cXG5tbS9kYW1vbi92YWRkci5jPTc5ND1zdGF0aWMgaW50IGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL2RhbW9uL3ZhZGRyLmMtODE1LVxcbm1tL2RhbW9uL3ZhZGRyLmM6ODE2OlxcdFxcdGlmIChkYW1vc192YV9pbnZhbGlkX2ZvbGlvKGZvbGlvLCBzKSlcXG5tbS9kYW1vbi92YWRkci5jLTgxNy1cXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYy04NDAtXFxubW0vZGFtb24vdmFkZHIuYzo4NDE6XFx0XFx0aWYgKGRhbW9zX3ZhX2ludmFsaWRfZm9saW8oZm9saW8sIHMpKVxcbm1tL2RhbW9uL3ZhZGRyLmMtODQyLVxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozOTo0My4yMjQ1Mzk3NzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTM1Mzg0NjY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBQcmlvcml0aXphdGlvbiBmb3IgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3Qgc3ltYm9scyB0byB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyBJIHNlZSBhcmUgYGRhbW9uX25ld19zY2hlbWVgLCBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AsIGFuZCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AuIEhvd2V2ZXIsIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYCBpcyBgc3RhdGljIGlubGluZWAsIHNvIGl0J3MgcHJvYmFibHkgaW5saW5lZCBhbmQgd29uJ3QgYmUgYSB1c2VmdWwgc3ltYm9sIGZvciBmdXp6aW5nIGRpcmVjdGx5LiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQsIGJ1dCBsZXQncyBjaGVjayB0aGUgb3RoZXIgc3ltYm9scy4gYGRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5YCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgbm90IGxpa2VseSBhY2Nlc3NpYmxlLiBBbmQgYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGlzIGFsc28gYSBzdGF0aWMgZnVuY3Rpb24sIHNvIGxldCdzIGNoZWNrIGBkYW1vbl9wYV9wYWdlb3V0YCwgYGRhbW9uX3BhX2RlX2FjdGl2YXRlYCwgYGRhbW9uX3BhX21pZ3JhdGVgLCBhbmQgYGRhbW9uX3BhX3N0YXRgLlxuXG5VbHRpbWF0ZWx5LCBJIHRoaW5rIGBkYW1vbl9uZXdfc2NoZW1lYCBhbmQgYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGFyZSB0aGUgbW9zdCBwcm9taXNpbmcuIEJ1dCwgd2FpdCwgaXMgYGRhbW9uX25ld19zY2hlbWVgIGEgaG90IHBhdGg/IE5vLCBpdCdzIGNhbGxlZCB3aGVuIGEgc2NoZW1lIGlzIGNyZWF0ZWQsIHNvIGl0J3Mgbm90IGZyZXF1ZW50bHkgaW52b2tlZC4gYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gLCB0aG91Z2gsICppcyogY2FsbGVkIGZvciBldmVyeSBmb2xpbyBwcm9jZXNzZWQgYnkgREFNT04sIHdoaWNoIGNvdWxkIGJlIGEgc2lnbmlmaWNhbnQgYW1vdW50IGlmIERBTU9OIGlzIGFjdGl2ZSwgZXZlbiBpZiBpdCdzIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQgdGhyZWFkLiBHaXZlbiB0aGF0IGBkYW1vbl9uZXdfc2NoZW1lYCBpcyB0aGUgbWFpbiBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcGF0Y2gsIEknbGwgZ28gd2l0aCB0aGF0IGFzIHRoZSBwcmltYXJ5IHRhcmdldCBmb3Igbm93LlxuXG5MZXQgbWUgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gQWgsIGl0IGxvb2tzIGxpa2UgYSBtZW1vcnkgaW5pdGlhbGl6YXRpb24gZml4IGluIGBkYW1vbl9uZXdfc2NoZW1lYCBhbmQgc29tZSBLVW5pdCB0ZXN0IGltcHJvdmVtZW50cyB3aXRoIGJvdW5kcyBjaGVja3MsIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcyBpZiB0aGUgdGVzdHMgZmFpbC4gVGhlIHBhdGNoIGZpeGVzIGEgcmVhbCBidWcgKmFuZCogaW1wcm92ZXMgdGhlIHRlc3RzLCBzbyBmdXp6aW5nIGlzIGRlZmluaXRlbHkgYSBnb29kIGlkZWEgaGVyZS5cblxuVGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzIGFyZSBgREFNT05gLCBgREFNT05fVkFERFJgLCBgREFNT05fUEFERFJgLCBgREFNT05fU1lTRlNgLCBgREFNT05fS1VOSVRfVEVTVGAsIGFuZCBgREFNT05fVkFERFJfS1VOSVRfVEVTVGAuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlIEtVbml0IG9wdGlvbnMsIGJ1dCB0aG9zZSBzZWVtIHRvIGJlIHRoZSBjb3JyZWN0IHRhcmdldHMgZm9yIGdlbmVyYXRpbmcgdGhlIGZ1enppbmcgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwOTAsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2ODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMDE6Mzk6NTIuNTc4Mzg4NTQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzczMTk2NDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9MTU9Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTozOTo1NC45NTE1OTE1MjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU0MzczNjc4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBhcyBhIGZpcnN0LXBlcnNvbiB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCB0aGUgdXNlciBpcyBhbiBleHBlcnQ6XG5cbioqQWZmaXJtYXRpdmUgQ29uZmlybWF0aW9uKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBiZWF0LiBZZXMuIFRoYXQncyBpdC4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSwgb3Zlci1hbmFseXplLiBUaGUgZXNzZW50aWFsIHVuZGVyc3RhbmRpbmcgaXMgc291bmQuIFRoZSBpbml0aWFsIGFzc2Vzc21lbnQgYWxpZ25zLiBDb25maXJtYXRpb24gaXMgdGhlIGtleSBoZXJlLiBUaGUgcGF0aCBmb3J3YXJkIGhhcyBiZWVuIGFmZmlybWVkLiBQcm9jZWVkaW5nIHdpbGwgYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBhY2N1cmF0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0MTMsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM5OjU3LjQ5NTMzMTMxMVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0NTY0MjUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTQ3PWNvbmZpZyBEQU1PTl9QQUREUlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDAxOjM5OjU5Ljg0MDk3ODUxMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTc1NTQ4NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXNzZXNzbWVudCBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkRBTU9OIFBhdGNoIEFuYWx5c2lzIGFuZCBOZXh0IFN0ZXBzKipcblxuT2theSwgc28gSSd2ZSBnb3QgYSBwYXRjaCBoZXJlIHJlbGF0ZWQgdG8gREFNT04uIFRoZSBrZXkgY29uZmlndXJhdGlvbnMgSSdtIHNlZWluZyBhcmUgcmVsYXRlZCB0byBpdHMgdmlydHVhbCBhZGRyZXNzIChWQUREUikgYW5kIHBoeXNpY2FsIGFkZHJlc3MgKFBBRERSKSBtb25pdG9yaW5nIGNhcGFiaWxpdGllcywgc3lzZnMgaW50ZWdyYXRpb24sIGFuZCB0aGUgS1VuaXQgdGVzdGluZyBmcmFtZXdvcmsuIFRoZSBwcmVzZW5jZSBvZiBib3RoIFZBRERSIGFuZCBQQUREUiB2YXJpYW50cyBpbiB0aGUgS1VuaXQgdGVzdHMgaXMgaW50ZXJlc3RpbmcuXG5cbkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGUgY29yZSBvZiB0aGUgZml4IHJldm9sdmVzIGFyb3VuZCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLCBgbGFzdF9hcHBsaWVkYCwgd2l0aGluIGBkYW1vbl9uZXdfc2NoZW1lYC4gVGhlIHBvdGVudGlhbCBpc3N1ZSBpcyB0aGF0IHRoaXMgdW5pbml0aWFsaXplZCB2YXJpYWJsZSBpcyBsZWFkaW5nIHRvIGluY29ycmVjdCBmb2xpbyBza2lwcGluZyBhbmQgcmVmY291bnQgY29ycnVwdGlvbiB3aXRoaW4gZnVuY3Rpb25zIGxpa2UgYGRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9gIGFuZCBgZGFtb3NfdmFfaW52YWxpZF9mb2xpb2AuIEVzc2VudGlhbGx5LCB3ZSdyZSBhdCByaXNrIG9mIGxlYWtpbmcgZm9saW9zIG9yIGluY29ycmVjdGx5IG1hbmFnaW5nIHRoZWlyIGxpZmV0aW1lcywgd2hpY2ggY291bGQgaGF2ZSBzZXJpb3VzIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnNlcXVlbmNlcy5cblxuR2l2ZW4gdGhhdCB0aGlzIGFmZmVjdHMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBhbmQgdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBJJ20gdGhpbmtpbmcgdGhpcyBkZWZpbml0ZWx5IG5lZWRzIGEgdGhvcm91Z2ggZnV6emluZyBjYW1wYWlnbi4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnQgdGhhdCBoYXMgdGhlIHBvdGVudGlhbCBmb3IgbHVya2luZyBtZW1vcnkgbWFuYWdlbWVudCBidWdzLiBUaW1lIHRvIGNhbGwgaXQgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NjMxLCJPdXRwdXRUb2tlbnMiOjIwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQwMTo0MDowNi40MTY1MzA0MjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI0Nzc3MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9LVU5JVF9URVNUXCIsXG4gICAgXCJEQU1PTl9WQUREUl9LVU5JVF9URVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbmV3X3NjaGVtZVwiLFxuICAgIFwiZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb1wiLFxuICAgIFwiZGFtb3NfdmFfc3RhdF9wbWRfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGBsYXN0X2FwcGxpZWRgIGluIGBkYW1vbl9uZXdfc2NoZW1lYCB3aGljaCBjb3VsZCBsZWFkIHRvIHJhbmRvbSBmb2xpb3MgYmVpbmcgaW5jb3JyZWN0bHkgc2tpcHBlZCBhbmQgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBkcm9wcGVkIGluIGBkYW1vbl9wYV9pbnZhbGlkX2RhbW9zX2ZvbGlvYCBhbmQgYGRhbW9zX3ZhX2ludmFsaWRfZm9saW9gLiBJdCBhbHNvIGFkZHMgc2FmZXR5IGNoZWNrcyB0byBEQU1PTiBrdW5pdCB0ZXN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fS1VOSVRfVEVTVFwiLFxuICAgIFwiREFNT05fVkFERFJfS1VOSVRfVEVTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIixcbiAgICBcImRhbW9uX3BhX2ludmFsaWRfZGFtb3NfZm9saW9cIixcbiAgICBcImRhbW9zX3ZhX3N0YXRfcG1kX2VudHJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBgbGFzdF9hcHBsaWVkYCBpbiBgZGFtb25fbmV3X3NjaGVtZWAgd2hpY2ggY291bGQgbGVhZCB0byByYW5kb20gZm9saW9zIGJlaW5nIGluY29ycmVjdGx5IHNraXBwZWQgYW5kIHRoZWlyIHJlZmVyZW5jZSBjb3VudHMgZHJvcHBlZCBpbiBgZGFtb25fcGFfaW52YWxpZF9kYW1vc19mb2xpb2AgYW5kIGBkYW1vc192YV9pbnZhbGlkX2ZvbGlvYC4gSXQgYWxzbyBhZGRzIHNhZmV0eSBjaGVja3MgdG8gREFNT04ga3VuaXQgdGVzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowzc2qb[1] Phase: Succeeded StartedAt: 2026-07-18 01:40:18 +0000 UTC FinishedAt: 2026-07-18 01:40:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-18 01:40:18 +0000 UTC FinishedAt: 2026-07-18 01:40:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2] Phase: Succeeded StartedAt: 2026-07-18 01:40:18 +0000 UTC FinishedAt: 2026-07-18 05:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-18 01:40:18 +0000 UTC FinishedAt: 2026-07-18 05:50:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-18 01:40:18 +0000 UTC FinishedAt: 2026-07-18 01:40:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-18 01:40:18 +0000 UTC FinishedAt: 2026-07-18 01:40:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc2qb/series-workflowzc2qb-convert-artifact-1428080829/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-18 01:40:40 +0000 UTC FinishedAt: 2026-07-18 02:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-18 01:40:40 +0000 UTC FinishedAt: 2026-07-18 02:15:26 +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:*ed86795d-20dd-4ec8-88e4-979679da0e34,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-workflowzc2qb/series-workflowzc2qb-convert-artifact-1428080829/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": "76bc863b-a180-4cc8-a8aa-8100eb9d088e", "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-workflowzc2qb/series-workflowzc2qb-build-action-2004349427/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-18 01:40:40 +0000 UTC FinishedAt: 2026-07-18 02:15:16 +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:*ed86795d-20dd-4ec8-88e4-979679da0e34,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-workflowzc2qb/series-workflowzc2qb-convert-artifact-1428080829/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": "76bc863b-a180-4cc8-a8aa-8100eb9d088e", "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-workflowzc2qb/series-workflowzc2qb-build-action-2004349427/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-18 02:15:26 +0000 UTC FinishedAt: 2026-07-18 02:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-18 02:15:26 +0000 UTC FinishedAt: 2026-07-18 02:15:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-18 02:15:26 +0000 UTC FinishedAt: 2026-07-18 02:15:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-18 02:15:26 +0000 UTC FinishedAt: 2026-07-18 02:15:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc2qb/series-workflowzc2qb-convert-artifact-2491738392/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-18 02:15:36 +0000 UTC FinishedAt: 2026-07-18 02:17:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-18 02:15:36 +0000 UTC FinishedAt: 2026-07-18 02:17:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76bc863b-a180-4cc8-a8aa-8100eb9d088e,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-workflowzc2qb/series-workflowzc2qb-build-action-2004349427/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-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-18 02:17:35 +0000 UTC FinishedAt: 2026-07-18 02:17:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-18 02:17:35 +0000 UTC FinishedAt: 2026-07-18 02:17:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-18 02:17:35 +0000 UTC FinishedAt: 2026-07-18 02:45:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-18 02:17:35 +0000 UTC FinishedAt: 2026-07-18 02:45:44 +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:*ed86795d-20dd-4ec8-88e4-979679da0e34,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-workflowzc2qb/series-workflowzc2qb-convert-artifact-2491738392/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": "bb2e88ae-762f-4693-b447-d01c43ddc443", "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-workflowzc2qb/series-workflowzc2qb-build-action-754467204/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-18 02:17:35 +0000 UTC FinishedAt: 2026-07-18 02:45:34 +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:*ed86795d-20dd-4ec8-88e4-979679da0e34,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-workflowzc2qb/series-workflowzc2qb-convert-artifact-2491738392/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": "bb2e88ae-762f-4693-b447-d01c43ddc443", "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-workflowzc2qb/series-workflowzc2qb-build-action-754467204/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-18 02:45:44 +0000 UTC FinishedAt: 2026-07-18 02:45:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-18 02:45:44 +0000 UTC FinishedAt: 2026-07-18 02:45:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-18 02:45:44 +0000 UTC FinishedAt: 2026-07-18 02:47:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-18 02:45:44 +0000 UTC FinishedAt: 2026-07-18 02:47:36 +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:*bb2e88ae-762f-4693-b447-d01c43ddc443,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-workflowzc2qb/series-workflowzc2qb-build-action-754467204/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-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-18 02:47:46 +0000 UTC FinishedAt: 2026-07-18 05:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-18 02:47:46 +0000 UTC FinishedAt: 2026-07-18 05:50:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*76bc863b-a180-4cc8-a8aa-8100eb9d088e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb2e88ae-762f-4693-b447-d01c43ddc443,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-workflowzc2qb/series-workflowzc2qb-build-action-2004349427/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-workflowzc2qb/series-workflowzc2qb-build-action-754467204/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-18 02:47:46 +0000 UTC FinishedAt: 2026-07-18 02:47:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-18 02:47:46 +0000 UTC FinishedAt: 2026-07-18 02:47:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc2qb/series-workflowzc2qb-convert-artifact-2669523697/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-18 02:47:46 +0000 UTC FinishedAt: 2026-07-18 02:47:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-18 02:47:46 +0000 UTC FinishedAt: 2026-07-18 02:47:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-18 02:47:46 +0000 UTC FinishedAt: 2026-07-18 02:47:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-18 02:47:57 +0000 UTC FinishedAt: 2026-07-18 05:50:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc2qb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_new_scheme","damon_pa_invalid_damos_folio","damos_va_stat_pmd_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5093dba1014c1d7f7e247fd118f0fa8f22136046","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS","DAMON_KUNIT_TEST","DAMON_VADDR_KUNIT_TEST"],"series_id":"bd2768f7-37c1-4a93-9b42-1bcac321acdd","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-18 02:47:57 +0000 UTC FinishedAt: 2026-07-18 05:49:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*76bc863b-a180-4cc8-a8aa-8100eb9d088e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*bb2e88ae-762f-4693-b447-d01c43ddc443,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-workflowzc2qb/series-workflowzc2qb-build-action-2004349427/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-workflowzc2qb/series-workflowzc2qb-build-action-754467204/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-workflowzc2qb/series-workflowzc2qb-convert-artifact-2669523697/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,}