Name: series-workflowntcqp Phase: Succeeded StartedAt: 2026-08-08 05:35:52 +0000 UTC FinishedAt: 2026-08-08 09:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[0] Phase: Succeeded StartedAt: 2026-08-08 05:35:52 +0000 UTC FinishedAt: 2026-08-08 05:59:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[0].run-triage Phase: Succeeded StartedAt: 2026-08-08 05:35:52 +0000 UTC FinishedAt: 2026-08-08 05:59:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "8086604be9733378461a5534c39cb72635226b23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COREDUMP", "ELF_CORE", "PROC_FS" ], "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": "8086604be9733378461a5534c39cb72635226b23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COREDUMP", "ELF_CORE", "PROC_FS" ], "series_id": "b863090f-2e0a-41c6-b2a7-bce731c056b9" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_coredump" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPUkVEVU1QJiMzNDssCiAgICAmIzM0O0VMRl9DT1JFJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfY29yZWR1bXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZWR1bXAgbG9naWMgdG8gYWxsb3cgcmVsZWFzaW5nIGZpbGUgZGVzY3JpcHRvcnMgZWFybGllciBkdXJpbmcgYSBjb3JlZHVtcCBpZiB0aGUgYE1NRl9EVU1QX0ZEX0xJU1RgIGZpbHRlciBiaXQgaXMgbm90IHNldC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgY29yZWR1bXBfcHJlX2V4aXQoKWAgd2hpY2ggY2FsbHMgYGV4aXRfZmlsZXMoKWAgb24gYWxsIHRocmVhZHMsIGFuZCBtb2RpZmllcyBgX19mcHV0X2RlZmVycmVkKClgIHRvIGJ5cGFzcyBgdGFza193b3JrYCB3aGVuIGBQRl9EVU1QQ09SRWAgaXMgc2V0LlxuVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHRpbWluZyBvZiBmaWxlIGRlc2NyaXB0b3JzIGR1cmluZyBhIGNvcmVkdW1wLiBUaGUgcHJpbWFyeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHVzZS1hZnRlci1mcmVlIChpZiBhIGZpbGUgaXMgYWNjZXNzZWQgYWZ0ZXIgYmVpbmcgcmVsZWFzZWQpIG9yIGxvY2tpbmcgaXNzdWVzIChkdWUgdG8gc3luY2hyb25vdXMgYGZwdXRgIGluc3RlYWQgb2YgZGVmZXJyZWQpLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJpdCBpbiBgY29yZWR1bXBfZmlsdGVyYCB0byBjb250cm9sIHdoZXRoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgcmVsZWFzZWQgYmVmb3JlIG9yIGFmdGVyIGR1bXBpbmcgY29yZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvcmVkdW1wIGdlbmVyYXRpb24gYW5kIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2U2OTJhYjY5NzNkOTk0OWZlMzhmYTc3YWE4ZjZiNjdmYmYzYjA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMDU6NTc6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcbmluZGV4IDI3MTg5ZjZlMDA0ZWUuLjAwMWNlMTM2ZTk2NGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG5AQCAtMTkyOSw3ICYjNDM7MTkyOSw3IEBAIHdpbGwgYmUgZHVtcGVkIHdoZW4gdGhlIFx1MDAzY3BpZFx1MDAzZSBwcm9jZXNzIGlzIGR1bXBlZC4gY29yZWR1bXBfZmlsdGVyIGlzIGEgYml0bWFza1xuIG9mIG1lbW9yeSB0eXBlcy4gSWYgYSBiaXQgb2YgdGhlIGJpdG1hc2sgaXMgc2V0LCBtZW1vcnkgc2VnbWVudHMgb2YgdGhlXG4gY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC5cbiBcbi1UaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XG4mIzQzO1RoZSBmb2xsb3dpbmcgMTAgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XG4gXG4gICAtIChiaXQgMCkgYW5vbnltb3VzIHByaXZhdGUgbWVtb3J5XG4gICAtIChiaXQgMSkgYW5vbnltb3VzIHNoYXJlZCBtZW1vcnlcbkBAIC0xOTQxLDYgJiM0MzsxOTQxLDcgQEAgVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOlxuICAgLSAoYml0IDYpIGh1Z2V0bGIgc2hhcmVkIG1lbW9yeVxuICAgLSAoYml0IDcpIERBWCBwcml2YXRlIG1lbW9yeVxuICAgLSAoYml0IDgpIERBWCBzaGFyZWQgbWVtb3J5XG4mIzQzOyAgLSAoYml0IDkpIGZkIGxpc3RcbiBcbiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXNcbiAgIGFyZSBhbHdheXMgZHVtcGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGJpdG1hc2sgc3RhdHVzLlxuQEAgLTE5NDgsMTMgJiM0MzsxOTQ5LDE5IEBAIFRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcbiAgIE5vdGUgdGhhdCBiaXRzIDAtNCBkb24mIzM5O3QgYWZmZWN0IGh1Z2V0bGIgb3IgREFYIG1lbW9yeS4gaHVnZXRsYiBtZW1vcnkgaXNcbiAgIG9ubHkgYWZmZWN0ZWQgYnkgYml0IDUtNiwgYW5kIERBWCBpcyBvbmx5IGFmZmVjdGVkIGJ5IGJpdHMgNy04LlxuIFxuLVRoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDMzOyB0aGlzIG1lYW5zIGFsbCBhbm9ueW1vdXMgbWVtb3J5XG4tc2VnbWVudHMsIEVMRiBoZWFkZXIgcGFnZXMgYW5kIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkgYXJlIGR1bXBlZC5cbiYjNDM7ICBOb3RlIHRoYXQgYml0IDkgaXMgc2V0IGJ5IGRlZmF1bHQgYmVjYXVzZSB0b29scyBsaWtlIHN5c3RlbWQtY29yZWR1bXAgZ29cbiYjNDM7ICB0aHJvdWdoIHRoZSBmZHMuIElmIHlvdSBkbyBub3Qgc2V0IGJpdCA5LCBmaWxlcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBieVxuJiM0MzsgIGFueSBWTUEgYXJlIHJlbGVhc2VkIGJlZm9yZSBkdW1waW5nIGNvcmUuIFNvbWUgZmlsZSByZWxlYXNlIGxvZ2ljLCBzdWNoIGFzXG4mIzQzOyAgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWQgYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoXG4mIzQzOyAgZWFybGllci5cbiYjNDM7XG4mIzQzO1RoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDIzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeVxuJiM0MztzZWdtZW50cywgRUxGIGhlYWRlciBwYWdlcywgaHVnZXRsYiBwcml2YXRlIG1lbW9yeSBhbmQgZmQgbGlzdCBhcmUgZHVtcGVkLlxuIFxuIElmIHlvdSBkb24mIzM5O3Qgd2FudCB0byBkdW1wIGFsbCBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGF0dGFjaGVkIHRvIHBpZCAxMjM0LFxuLXdyaXRlIDB4MzEgdG8gdGhlIHByb2Nlc3MmIzM5O3MgcHJvYyBmaWxlOjpcbiYjNDM7d3JpdGUgMHgyMzEgdG8gdGhlIHByb2Nlc3MmIzM5O3MgcHJvYyBmaWxlOjpcbiBcbi0gICQgZWNobyAweDMxIFx1MDAzZSAvcHJvYy8xMjM0L2NvcmVkdW1wX2ZpbHRlclxuJiM0MzsgICQgZWNobyAweDIzMSBcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcbiBcbiBXaGVuIGEgbmV3IHByb2Nlc3MgaXMgY3JlYXRlZCwgdGhlIHByb2Nlc3MgaW5oZXJpdHMgdGhlIGJpdG1hc2sgc3RhdHVzIGZyb20gaXRzXG4gcGFyZW50LiBJdCBpcyB1c2VmdWwgdG8gc2V0IHVwIGNvcmVkdW1wX2ZpbHRlciBiZWZvcmUgdGhlIHByb2dyYW0gcnVucy5cbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xuaW5kZXggZTY4YTc2ZmY5MmEzOC4uZDM3OGU2OWM2MzZlMiAxMDA2NDRcbi0tLSBhL2ZzL2NvcmVkdW1wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvcmVkdW1wLmNcbkBAIC01MjAsNiAmIzQzOzUyMCwyNSBAQCBzdGF0aWMgaW50IHphcF90aHJlYWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuIFx0cmV0dXJuIG5yO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogSWYgZG8gbm90IGR1bXAgZmQgbGlzdCwgZmlsZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkgYW55IFZNQVxuJiM0MzsgKiBjYW4gYmUgcmVsZWFzZWQgYmVmb3JlIGR1bXBpbmcgY29yZS4gVGhlcmVmb3JlLCBzb21lIGZpbGUgcmVsZWFzZVxuJiM0MzsgKiBsb2dpYywgc3VjaCBhcyBleGl0aW5nIGZsb2NrIG9yIHJlbGVhc2luZyByZWZlcmVuY2VzIHRvIHNoYXJlZFxuJiM0MzsgKiBidWZmZXJzIGlzIGV4ZWN1dGVkIG11Y2ggZWFybGllci4gTm90ZSB0aGF0IGRvX2NvcmVkdW1wKCkgb2Z0ZW5cbiYjNDM7ICogdGFrZXMgc2V2ZXJhbCBzZWNvbmRzIG9yIGV2ZW4gbG9uZ2VyIHRvIGV4ZWN1dGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBjb3JlZHVtcF9wcmVfZXhpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50LCAqdDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX0RVTVBfRkRfTElTVCwgdHNrLVx1MDAzZW1tKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfdGhyZWFkKHRzaywgdCkge1xuJiM0MztcdFx0ZXhpdF9maWxlcyh0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBjb3JlZHVtcF93YWl0KGludCBleGl0X2NvZGUsIHN0cnVjdCBjb3JlX3N0YXRlICpjb3JlX3N0YXRlKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDtcbkBAIC0xMTIzLDYgJiM0MzsxMTQyLDggQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHRpZiAoY24tXHUwMDNlbWFzayBcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0Y29yZWR1bXBfcHJlX2V4aXQoKTtcbiYjNDM7XG4gXHQvKiBnZXQgdXMgYW4gdW5zaGFyZWQgZGVzY3JpcHRvciB0YWJsZTsgYWxtb3N0IGFsd2F5cyBhIG5vLW9wICovXG4gXHQvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovXG4gXHRpZiAodW5zaGFyZV9maWxlcygpKVxuZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuY1xuaW5kZXggYzY4YjhjMGE0MDk3YS4uMDJlZTRlOGIxY2ZlOCAxMDA2NDRcbi0tLSBhL2ZzL2ZpbGVfdGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZV90YWJsZS5jXG5AQCAtNTY4LDcgJiM0Mzs1NjgsMTIgQEAgc3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobGlrZWx5KCFpbl9pbnRlcnJ1cHQoKSBcdTAwMjZcdTAwMjYgISh0YXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSkpIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGNvcmVkdW1wX3ByZV9leGl0KCkgbWF5IHJlbGVhc2UgZmlsZXMgYmVmb3JlIGR1bXBpbmcgY29yZS5cbiYjNDM7XHQgKiBDYW5ub3QgdXNlIHRhc2tfd29yayBpbiB0aGUgY2FzZSwgbmVlZHMgdG8gcmVsZWFzZSBmaWxlc1xuJiM0MztcdCAqIGVhcmxpZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgXHUwMDI2XHUwMDI2ICEodGFzay1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0tUSFJFQUQgfCBQRl9EVU1QQ09SRSkpKSkge1xuIFx0XHRpbml0X3Rhc2tfd29yayhcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBfX19fZnB1dCk7XG4gXHRcdGlmICghdGFza193b3JrX2FkZCh0YXNrLCBcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBUV0FfUkVTVU1FKSlcbiBcdFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCBlYmYwZDkxMmJlN2RiLi5mMzU1ODU4YmZiNjJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC0xOTQ3LDE0ICYjNDM7MTk0NywxNiBAQCBlbnVtIHtcbiAjZGVmaW5lIE1NRl9EVU1QX0hVR0VUTEJfU0hBUkVEICA4XG4gI2RlZmluZSBNTUZfRFVNUF9EQVhfUFJJVkFURVx0OVxuICNkZWZpbmUgTU1GX0RVTVBfREFYX1NIQVJFRFx0MTBcbiYjNDM7I2RlZmluZSBNTUZfRFVNUF9GRF9MSVNUXHQxMVxuIFxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX1NISUZUXHRNTUZfRFVNUEFCTEVfQklUU1xuLSNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0JJVFNcdDlcbiYjNDM7I2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUU1x0MTBcbiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9NQVNLIFxcXG4gXHQoKEJJVChNTUZfRFVNUF9GSUxURVJfQklUUykgLSAxKSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfRklMVEVSX1NISUZUKVxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0RFRkFVTFQgXFxcbiBcdChCSVQoTU1GX0RVTVBfQU5PTl9QUklWQVRFKSB8IEJJVChNTUZfRFVNUF9BTk9OX1NIQVJFRCkgfCBcXFxuLVx0IEJJVChNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUpIHwgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRilcbiYjNDM7XHQgKDEgXHUwMDNjXHUwMDNjIE1NRl9EVU1QX0hVR0VUTEJfUFJJVkFURSkgfCBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGIHxcXFxuJiM0MztcdCAoMSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfRkRfTElTVCkpXG4gXG4gI2lmZGVmIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSU1xuICMgZGVmaW5lIE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEZcdEJJVChNTUZfRFVNUF9FTEZfSEVBREVSUylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09SRURVTVAmIzM0OywKICAgICYjMzQ7RUxGX0NPUkUmIzM0OywKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19jb3JlZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJpdCBpbiBgY29yZWR1bXBfZmlsdGVyYCB0byBjb250cm9sIHdoZXRoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgcmVsZWFzZWQgYmVmb3JlIG9yIGFmdGVyIGR1bXBpbmcgY29yZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvcmVkdW1wIGdlbmVyYXRpb24gYW5kIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2U2OTJhYjY5NzNkOTk0OWZlMzhmYTc3YWE4ZjZiNjdmYmYzYjA5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDggMDU6NTc6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdAppbmRleCAyNzE4OWY2ZTAwNGVlLi4wMDFjZTEzNmU5NjRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QKQEAgLTE5MjksNyAmIzQzOzE5MjksNyBAQCB3aWxsIGJlIGR1bXBlZCB3aGVuIHRoZSAmbHQ7cGlkJmd0OyBwcm9jZXNzIGlzIGR1bXBlZC4gY29yZWR1bXBfZmlsdGVyIGlzIGEgYml0bWFzawogb2YgbWVtb3J5IHR5cGVzLiBJZiBhIGJpdCBvZiB0aGUgYml0bWFzayBpcyBzZXQsIG1lbW9yeSBzZWdtZW50cyBvZiB0aGUKIGNvcnJlc3BvbmRpbmcgbWVtb3J5IHR5cGUgYXJlIGR1bXBlZCwgb3RoZXJ3aXNlIHRoZXkgYXJlIG5vdCBkdW1wZWQuCiAKLVRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDoKJiM0MztUaGUgZm9sbG93aW5nIDEwIG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgogCiAgIC0gKGJpdCAwKSBhbm9ueW1vdXMgcHJpdmF0ZSBtZW1vcnkKICAgLSAoYml0IDEpIGFub255bW91cyBzaGFyZWQgbWVtb3J5CkBAIC0xOTQxLDYgJiM0MzsxOTQxLDcgQEAgVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgogICAtIChiaXQgNikgaHVnZXRsYiBzaGFyZWQgbWVtb3J5CiAgIC0gKGJpdCA3KSBEQVggcHJpdmF0ZSBtZW1vcnkKICAgLSAoYml0IDgpIERBWCBzaGFyZWQgbWVtb3J5CiYjNDM7ICAtIChiaXQgOSkgZmQgbGlzdAogCiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXMKICAgYXJlIGFsd2F5cyBkdW1wZWQgcmVnYXJkbGVzcyBvZiB0aGUgYml0bWFzayBzdGF0dXMuCkBAIC0xOTQ4LDEzICYjNDM7MTk0OSwxOSBAQCBUaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CiAgIE5vdGUgdGhhdCBiaXRzIDAtNCBkb24mIzM5O3QgYWZmZWN0IGh1Z2V0bGIgb3IgREFYIG1lbW9yeS4gaHVnZXRsYiBtZW1vcnkgaXMKICAgb25seSBhZmZlY3RlZCBieSBiaXQgNS02LCBhbmQgREFYIGlzIG9ubHkgYWZmZWN0ZWQgYnkgYml0cyA3LTguCiAKLVRoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDMzOyB0aGlzIG1lYW5zIGFsbCBhbm9ueW1vdXMgbWVtb3J5Ci1zZWdtZW50cywgRUxGIGhlYWRlciBwYWdlcyBhbmQgaHVnZXRsYiBwcml2YXRlIG1lbW9yeSBhcmUgZHVtcGVkLgomIzQzOyAgTm90ZSB0aGF0IGJpdCA5IGlzIHNldCBieSBkZWZhdWx0IGJlY2F1c2UgdG9vbHMgbGlrZSBzeXN0ZW1kLWNvcmVkdW1wIGdvCiYjNDM7ICB0aHJvdWdoIHRoZSBmZHMuIElmIHlvdSBkbyBub3Qgc2V0IGJpdCA5LCBmaWxlcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBieQomIzQzOyAgYW55IFZNQSBhcmUgcmVsZWFzZWQgYmVmb3JlIGR1bXBpbmcgY29yZS4gU29tZSBmaWxlIHJlbGVhc2UgbG9naWMsIHN1Y2ggYXMKJiM0MzsgIGV4aXRpbmcgZmxvY2sgb3IgcmVsZWFzaW5nIHJlZmVyZW5jZXMgdG8gc2hhcmVkIGJ1ZmZlcnMgaXMgZXhlY3V0ZWQgbXVjaAomIzQzOyAgZWFybGllci4KJiM0MzsKJiM0MztUaGUgZGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgyMzM7IHRoaXMgbWVhbnMgYWxsIGFub255bW91cyBtZW1vcnkKJiM0MztzZWdtZW50cywgRUxGIGhlYWRlciBwYWdlcywgaHVnZXRsYiBwcml2YXRlIG1lbW9yeSBhbmQgZmQgbGlzdCBhcmUgZHVtcGVkLgogCiBJZiB5b3UgZG9uJiMzOTt0IHdhbnQgdG8gZHVtcCBhbGwgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBhdHRhY2hlZCB0byBwaWQgMTIzNCwKLXdyaXRlIDB4MzEgdG8gdGhlIHByb2Nlc3MmIzM5O3MgcHJvYyBmaWxlOjoKJiM0Mzt3cml0ZSAweDIzMSB0byB0aGUgcHJvY2VzcyYjMzk7cyBwcm9jIGZpbGU6OgogCi0gICQgZWNobyAweDMxICZndDsgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXIKJiM0MzsgICQgZWNobyAweDIzMSAmZ3Q7IC9wcm9jLzEyMzQvY29yZWR1bXBfZmlsdGVyCiAKIFdoZW4gYSBuZXcgcHJvY2VzcyBpcyBjcmVhdGVkLCB0aGUgcHJvY2VzcyBpbmhlcml0cyB0aGUgYml0bWFzayBzdGF0dXMgZnJvbSBpdHMKIHBhcmVudC4gSXQgaXMgdXNlZnVsIHRvIHNldCB1cCBjb3JlZHVtcF9maWx0ZXIgYmVmb3JlIHRoZSBwcm9ncmFtIHJ1bnMuCmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuYwppbmRleCBlNjhhNzZmZjkyYTM4Li5kMzc4ZTY5YzYzNmUyIDEwMDY0NAotLS0gYS9mcy9jb3JlZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvcmVkdW1wLmMKQEAgLTUyMCw2ICYjNDM7NTIwLDI1IEBAIHN0YXRpYyBpbnQgemFwX3RocmVhZHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJcmV0dXJuIG5yOwogfQogCiYjNDM7LyoKJiM0MzsgKiBJZiBkbyBub3QgZHVtcCBmZCBsaXN0LCBmaWxlcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBieSBhbnkgVk1BCiYjNDM7ICogY2FuIGJlIHJlbGVhc2VkIGJlZm9yZSBkdW1waW5nIGNvcmUuIFRoZXJlZm9yZSwgc29tZSBmaWxlIHJlbGVhc2UKJiM0MzsgKiBsb2dpYywgc3VjaCBhcyBleGl0aW5nIGZsb2NrIG9yIHJlbGVhc2luZyByZWZlcmVuY2VzIHRvIHNoYXJlZAomIzQzOyAqIGJ1ZmZlcnMgaXMgZXhlY3V0ZWQgbXVjaCBlYXJsaWVyLiBOb3RlIHRoYXQgZG9fY29yZWR1bXAoKSBvZnRlbgomIzQzOyAqIHRha2VzIHNldmVyYWwgc2Vjb25kcyBvciBldmVuIGxvbmdlciB0byBleGVjdXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGNvcmVkdW1wX3ByZV9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQsICp0OwomIzQzOwomIzQzOwlpZiAobW1fZmxhZ3NfdGVzdChNTUZfRFVNUF9GRF9MSVNULCB0c2stJmd0O21tKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkKHRzaywgdCkgewomIzQzOwkJZXhpdF9maWxlcyh0KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgY29yZWR1bXBfd2FpdChpbnQgZXhpdF9jb2RlLCBzdHJ1Y3QgY29yZV9zdGF0ZSAqY29yZV9zdGF0ZSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CkBAIC0xMTIzLDYgJiM0MzsxMTQyLDggQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sCiAJaWYgKGNuLSZndDttYXNrICZhbXA7IENPUkVEVU1QX1JFSkVDVCkKIAkJcmV0dXJuOwogCiYjNDM7CWNvcmVkdW1wX3ByZV9leGl0KCk7CiYjNDM7CiAJLyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqLwogCS8qIFRoZSBjZWxsIHNwdWZzIGNvcmVkdW1wIGNvZGUgcmVhZHMgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZXMgKi8KIAlpZiAodW5zaGFyZV9maWxlcygpKQpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IGM2OGI4YzBhNDA5N2EuLjAyZWU0ZThiMWNmZTggMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTU2OCw3ICYjNDM7NTY4LDEyIEBAIHN0YXRpYyB2b2lkIF9fZnB1dF9kZWZlcnJlZChzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJcmV0dXJuOwogCX0KIAotCWlmIChsaWtlbHkoIWluX2ludGVycnVwdCgpICZhbXA7JmFtcDsgISh0YXNrLSZndDtmbGFncyAmYW1wOyBQRl9LVEhSRUFEKSkpIHsKJiM0MzsJLyoKJiM0MzsJICogY29yZWR1bXBfcHJlX2V4aXQoKSBtYXkgcmVsZWFzZSBmaWxlcyBiZWZvcmUgZHVtcGluZyBjb3JlLgomIzQzOwkgKiBDYW5ub3QgdXNlIHRhc2tfd29yayBpbiB0aGUgY2FzZSwgbmVlZHMgdG8gcmVsZWFzZSBmaWxlcwomIzQzOwkgKiBlYXJsaWVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgJmFtcDsmYW1wOyAhKHRhc2stJmd0O2ZsYWdzICZhbXA7IChQRl9LVEhSRUFEIHwgUEZfRFVNUENPUkUpKSkpIHsKIAkJaW5pdF90YXNrX3dvcmsoJmFtcDtmaWxlLSZndDtmX3Rhc2tfd29yaywgX19fX2ZwdXQpOwogCQlpZiAoIXRhc2tfd29ya19hZGQodGFzaywgJmFtcDtmaWxlLSZndDtmX3Rhc2tfd29yaywgVFdBX1JFU1VNRSkpCiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggZWJmMGQ5MTJiZTdkYi4uZjM1NTg1OGJmYjYyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMTk0NywxNCAmIzQzOzE5NDcsMTYgQEAgZW51bSB7CiAjZGVmaW5lIE1NRl9EVU1QX0hVR0VUTEJfU0hBUkVEICA4CiAjZGVmaW5lIE1NRl9EVU1QX0RBWF9QUklWQVRFCTkKICNkZWZpbmUgTU1GX0RVTVBfREFYX1NIQVJFRAkxMAomIzQzOyNkZWZpbmUgTU1GX0RVTVBfRkRfTElTVAkxMQogCiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9TSElGVAlNTUZfRFVNUEFCTEVfQklUUwotI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUUwk5CiYjNDM7I2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUUwkxMAogI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfTUFTSyBcCiAJKChCSVQoTU1GX0RVTVBfRklMVEVSX0JJVFMpIC0gMSkgJmx0OyZsdDsgTU1GX0RVTVBfRklMVEVSX1NISUZUKQogI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfREVGQVVMVCBcCiAJKEJJVChNTUZfRFVNUF9BTk9OX1BSSVZBVEUpIHwgQklUKE1NRl9EVU1QX0FOT05fU0hBUkVEKSB8IFwKLQkgQklUKE1NRl9EVU1QX0hVR0VUTEJfUFJJVkFURSkgfCBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGKQomIzQzOwkgKDEgJmx0OyZsdDsgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYgfFwKJiM0MzsJICgxICZsdDsmbHQ7IE1NRl9EVU1QX0ZEX0xJU1QpKQogCiAjaWZkZWYgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTCiAjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGCUJJVChNTUZfRFVNUF9FTEZfSEVBREVSUykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvcmVkdW1wIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFsdGVycyBob3cgY29yZWR1bXBzIGJlaGF2ZSBpbiB0aGUga2VybmVsLiBJdCYjMzk7cyBhZGRpbmcgYSBuZXcgYml0LCBiaXQgOSwgYE1NRl9EVU1QX0ZEX0xJU1RgLCB0byB0aGUgYGNvcmVkdW1wX2ZpbHRlcmAuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGhhbmRsZWQgZHVyaW5nIHRoZSBjb3JlZHVtcCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIHdoZW4gdGhpcyBuZXcgYml0ICppc24mIzM5O3QqIHNldCwgYGNvcmVkdW1wX3ByZV9leGl0KClgIGdldHMgY2FsbGVkIGZyb20gd2l0aGluIGBkb19jb3JlZHVtcCgpYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaXRlcmF0aW9uIHRocm91Z2ggdGhyZWFkcyBhbmQgdGhlIHN1YnNlcXVlbnQgY2FsbHMgdG8gYGV4aXRfZmlsZXModClgIGhhcHBlbiwgcmVsZWFzaW5nIHRoZSBmaWxlcy4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIGludGVyZXN0aW5nIGxvZ2ljIGluIGBfX2ZwdXRfZGVmZXJyZWQoKWAsIHdoZXJlIHRoZSBgUEZfS1RIUkVBRCB8IFBGX0RVTVBDT1JFYCBmbGFncyBhcmUgY2hlY2tlZCB0byBhdm9pZCB0YXNrIHdvcmsgd2hlbiByZWxlYXNpbmcgZmlsZXMgZHVyaW5nIGEgY29yZWR1bXAuCgpHaXZlbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGNvcmUga2VybmVsIGxvZ2ljIOKAkyBjb3JlZHVtcCBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgZmlsZSB0YWJsZS4gSW50cm9kdWNpbmcgYSBuZXcgZmVhdHVyZSwgZXNwZWNpYWxseSBvbmUgdGhhdCBtb2RpZmllcyB0aGUgZmlsZSByZWxlYXNlIHByb2Nlc3MgZHVyaW5nIGEgY3JpdGljYWwgZXZlbnQgbGlrZSBhIGNvcmVkdW1wLCBtZWFucyB0aGVyZSYjMzk7cyBhIGhpZ2hlciBsaWtlbGlob29kIG9mIHVuY292ZXJpbmcgaW50ZXJlc3RpbmcgYnVncy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBgZG9fY29yZWR1bXBgIGlzIG9idmlvdXNseSBhbiBlbnRyeSBwb2ludCwgdGhlIG1haW4gZnVuY3Rpb24uIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIHNvbWV3aGF0IGdlbmVyaWMsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdGlvbiBiZWdpbnMuIGBjb3JlZHVtcF9wcmVfZXhpdGAgaXMgYWxzbyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24sIGFuZCBgX19mcHV0X2RlZmVycmVkYCBpcyBhIGNvbmNlcm4gdG9vLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZW0gaW4gYGZzL2NvcmVkdW1wLmNgIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBmaWxlIHRhYmxlLiBBbmQsIGBkb19jb3JlZHVtcGAgaXMgbm90IHN0YXRpYywgc28gdGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIGBleGl0X2ZpbGVzYCBpcyBsaWtlbHkgaW4gYGtlcm5lbC9leGl0LmNgIG9yIGEgc2ltaWxhciBmaWxlLiBMZXQmIzM5O3MgZG8gYSBzZWFyY2ggdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGhvdyB0aGV5JiMzOTtyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2NvcmVkdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY29yZWR1bXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb3JlZHVtcC5jPTUwND1zdGF0aWMgaW50IHphcF90aHJlYWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuLS1cbmZzL2NvcmVkdW1wLmMtNTI2LSAqIGxvZ2ljLCBzdWNoIGFzIGV4aXRpbmcgZmxvY2sgb3IgcmVsZWFzaW5nIHJlZmVyZW5jZXMgdG8gc2hhcmVkXG5mcy9jb3JlZHVtcC5jOjUyNzogKiBidWZmZXJzIGlzIGV4ZWN1dGVkIG11Y2ggZWFybGllci4gTm90ZSB0aGF0IGRvX2NvcmVkdW1wKCkgb2Z0ZW5cbmZzL2NvcmVkdW1wLmMtNTI4LSAqIHRha2VzIHNldmVyYWwgc2Vjb25kcyBvciBldmVuIGxvbmdlciB0byBleGVjdXRlLlxuLS1cbmZzL2NvcmVkdW1wLmM9MTA5OT1zdGF0aWMgaW5saW5lIGJvb2wgY29yZWR1bXBfc2tpcChjb25zdCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuLS1cbmZzL2NvcmVkdW1wLmMtMTExMC1cbmZzL2NvcmVkdW1wLmM6MTExMTpzdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbmZzL2NvcmVkdW1wLmMtMTExMi1cdFx0XHRzaXplX3QgKiphcmd2LCBpbnQgKmFyZ2MsIGNvbnN0IHN0cnVjdCBsaW51eF9iaW5mbXQgKmJpbmZtdClcbi0tXG5mcy9jb3JlZHVtcC5jPTExODI9dm9pZCB2ZnNfY29yZWR1bXAoY29uc3Qga2VybmVsX3NpZ2luZm9fdCAqc2lnaW5mbylcbi0tXG5mcy9jb3JlZHVtcC5jLTEyMjAtXHRzY29wZWRfd2l0aF9jcmVkcyhjcmVkKVxuZnMvY29yZWR1bXAuYzoxMjIxOlx0XHRkb19jb3JlZHVtcChcdTAwMjZjbiwgXHUwMDI2Y3BybSwgXHUwMDI2YXJndiwgXHUwMDI2YXJnYywgYmluZm10KTtcbmZzL2NvcmVkdW1wLmMtMTIyMi1cdGNvcmVkdW1wX2NsZWFudXAoXHUwMDI2Y24sIFx1MDAyNmNwcm0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MTEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29yZSBEdW1wIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBjb3JlIGR1bXBzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGFyY2hpdGVjdHVyZTogYGRvX2NvcmVkdW1wYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0JiMzOTtzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBsaWtlbHkgdGhlICp3b3JraG9yc2UqIGJlaGluZCB0aGUgY29yZSBkdW1wIGZ1bmN0aW9uYWxpdHkuIEl0JiMzOTtzIG1lYW50IHRvIGJlIGhpZGRlbiB3aXRoaW4gdGhlIHRyYW5zbGF0aW9uIHVuaXQgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCwgc2VydmluZyBhcyBhIHByaXZhdGUgaGVscGVyLiBOb3csIHRoZSBwdWJsaWMgZW50cnkgcG9pbnQgbXVzdCBiZSBgdmZzX2NvcmVkdW1wYC4gVGhhdCYjMzk7cyB0aGUgb25lIHdlIG5lZWQgdG8gdHJhY2UgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBpbml0aWF0ZWQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGB2ZnNfY29yZWR1bXBgIG5vdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1mYWNpbmcgdHJpZ2dlciBhbmQgdGhlIGNvcmUgZHVtcCYjMzk7cyBhY3R1YWwgbWVjaGFuaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19jb3JlZHVtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdD01NTU9ZGlmZmVyZW50IHNldCBvZiBjcmVkZW50aWFscy4gIFRoaXMgaXMgZG9uZSBpbiB0aGUgZm9sbG93aW5nIHBsYWNlczpcbi0tXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC01NTctICogYGBzeXNfZmFjY2Vzc2F0KClgYC5cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0OjU1ODogKiBgYHZmc19jb3JlZHVtcCgpYGAuXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC01NTktICogbmZzNHJlY292ZXIuYy5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q9MjU0PWNvbnN05oyH6ZKI5LiK5pON5L2c77yM5Zug5q2k5LiN6ZyA6KaB6L+b6KGM57G75Z6L6L2s5o2i77yM5L2G6ZyA6KaB5Li05pe25pS+5byDY29uc3TpmZDlrprvvIzku6Xkvr/og73lpJ/kv67mlLlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3QtNDc3LSAqIGBgc3lzX2ZhY2Nlc3NhdCgpYGAuXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q6NDc4OiAqIGBgdmZzX2NvcmVkdW1wKClgYC5cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC00NzktICogbmZzNHJlY292ZXIuYy5cbi0tXG5mcy9jb3JlZHVtcC5jPTExMTE9c3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4tLVxuZnMvY29yZWR1bXAuYy0xMTgxLVxuZnMvY29yZWR1bXAuYzoxMTgyOnZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pXG5mcy9jb3JlZHVtcC5jLTExODMte1xuLS1cbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaD00OD1pbnQgZHVtcF91c2VyX3JhbmdlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNDktXHRcdCAgICB1bnNpZ25lZCBsb25nIGxlbik7XG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmg6NTA6ZXh0ZXJuIHZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pO1xuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oLTUxLVxuLS1cbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaC02OS0jZWxzZVxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oOjcwOnN0YXRpYyBpbmxpbmUgdm9pZCB2ZnNfY29yZWR1bXAoY29uc3Qga2VybmVsX3NpZ2luZm9fdCAqc2lnaW5mbykge31cbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaC03MS1cbi0tXG5rZXJuZWwvc2lnbmFsLmM9MjgxMD1ib29sIGdldF9zaWduYWwoc3RydWN0IGtzaWduYWwgKmtzaWcpXG4tLVxua2VybmVsL3NpZ25hbC5jLTMwMzAtXHRcdFx0ICovXG5rZXJuZWwvc2lnbmFsLmM6MzAzMTpcdFx0XHR2ZnNfY29yZWR1bXAoXHUwMDI2a3NpZy1cdTAwM2VpbmZvKTtcbmtlcm5lbC9zaWduYWwuYy0zMDMyLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRmlsZSBEZXNjcmlwdG9yIENsZWFudXAgZHVyaW5nIFNpZ25hbCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcG90ZW50aWFsIGNsZWFudXAgZHVyaW5nIHNpZ25hbCBkZWxpdmVyeS4gTXkgdHJhaW4gb2YgdGhvdWdodCBzdGFydHMgd2l0aCBgdmZzX2NvcmVkdW1wYCBhbmQgaG93IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBnZXRfc2lnbmFsYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQuIE5vdywgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgYF9fZnB1dF9kZWZlcnJlZGAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkLCBhbmQgaXRzIGRpcmVjdCB1c2FnZSBtaWdodCBiZSByZXN0cmljdGVkLgoKVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGNhbGxzIGBfX2ZwdXRfZGVmZXJyZWRgIGluIGBmcy9maWxlX3RhYmxlLmNgPyBJcyB0aGVyZSBhbm90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gdGhhdCBmaWxlIHRoYXQgZG9lcz8gSG9sZCBvbiwgYF9fZnB1dF9kZWZlcnJlZGAgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgZWl0aGVyIGBmcHV0YCBvciBgZnB1dF9tYW55YCwgcmlnaHQ/IE9rYXksIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24gYW5kIHRvIGJ1aWxkIHRoZSBtYXAsIEkgc2hvdWxkIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjb2RlIGluIGBmcy9maWxlX3RhYmxlLmNgIGFnYWluLiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBzdXJlIHdoZXJlIHRoaXMgdGhpbmcgZml0cyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mcHV0X2RlZmVycmVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmlsZV90YWJsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZpbGVfdGFibGUuYz01NjA9RVhQT1JUX1NZTUJPTF9HUEwoZmx1c2hfZGVsYXllZF9mcHV0KTtcbmZzL2ZpbGVfdGFibGUuYy01NjEtXG5mcy9maWxlX3RhYmxlLmM6NTYyOnN0YXRpYyB2b2lkIF9fZnB1dF9kZWZlcnJlZChzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL2ZpbGVfdGFibGUuYy01NjMte1xuLS1cbmZzL2ZpbGVfdGFibGUuYz01OTE9dm9pZCBmcHV0KHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL2ZpbGVfdGFibGUuYy01OTMtXHRpZiAodW5saWtlbHkoZmlsZV9yZWZfcHV0KFx1MDAyNmZpbGUtXHUwMDNlZl9yZWYpKSlcbmZzL2ZpbGVfdGFibGUuYzo1OTQ6XHRcdF9fZnB1dF9kZWZlcnJlZChmaWxlKTtcbmZzL2ZpbGVfdGFibGUuYy01OTUtfVxuLS1cbmZzL2ZpbGVfdGFibGUuYz02MzE9dm9pZCBmcHV0X2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL2ZpbGVfdGFibGUuYy02MzMtXHRpZiAoZmlsZV9yZWZfcHV0X2Nsb3NlKFx1MDAyNmZpbGUtXHUwMDNlZl9yZWYpKVxuZnMvZmlsZV90YWJsZS5jOjYzNDpcdFx0X19mcHV0X2RlZmVycmVkKGZpbGUpO1xuZnMvZmlsZV90YWJsZS5jLTYzNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI1MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGaWxlIEhhbmRsaW5nIEZ1bmN0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZpbGUgaGFuZGxpbmcsIGFuZCBJJiMzOTt2ZSBub3RpY2VkIHRoYXQgYGZwdXRgIGFuZCBgZnB1dF9jbG9zZWAgYXJlIGRlZmluZWQgYXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlbSBhcyBwb3RlbnRpYWxseSBjcml0aWNhbCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gb3IgcGVyaGFwcyB1c2VkIHdpdGhpbiBhIG1vcmUgY29tcGxleCBzZXQgb2Ygcm91dGluZXMuICBBbmQgdGhlbiB0aGVyZSYjMzk7cyBgZXhpdF9maWxlc2AsIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gYSB0ZXJtaW5hdGlvbiBjb250ZXh0LiBTbyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjYWxsaW5nIHRoZW0sIHdoYXQgdGhleSYjMzk7cmUgZG9pbmcsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBga2VybmVsL2V4aXQuY2Agb3Igd2hlcmV2ZXIgdGhvc2Ugcm91dGluZXMgYXJlIGRlZmluZWQg4oCTIHByb2JhYmx5IGluIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW0gc2VjdGlvbiwgZGVwZW5kaW5nIG9uIGhvdyB0aGlzIGlzIHN0cnVjdHVyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleGl0X2ZpbGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvcmVkdW1wLmM9NTMwPXN0YXRpYyB2b2lkIGNvcmVkdW1wX3ByZV9leGl0KHZvaWQpXG4tLVxuZnMvY29yZWR1bXAuYy01MzctXHRmb3JfZWFjaF90aHJlYWQodHNrLCB0KSB7XG5mcy9jb3JlZHVtcC5jOjUzODpcdFx0ZXhpdF9maWxlcyh0KTtcbmZzL2NvcmVkdW1wLmMtNTM5LVx0fVxuLS1cbmZzL2ZpbGUuYz01MDY9dm9pZCBwdXRfZmlsZXNfc3RydWN0KHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzKVxuLS1cbmZzL2ZpbGUuYy01MTctXG5mcy9maWxlLmM6NTE4OnZvaWQgZXhpdF9maWxlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmZzL2ZpbGUuYy01MTkte1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oPTkzPWV4dGVybiBfX25vcmV0dXJuIHZvaWQgZG9fZ3JvdXBfZXhpdChpbnQpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtOTQtXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaDo5NTpleHRlcm4gdm9pZCBleGl0X2ZpbGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oLTk2LWV4dGVybiB2b2lkIGV4aXRfaXRpbWVycyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7XG4tLVxua2VybmVsL2V4aXQuYz05Mjk9dm9pZCBfX25vcmV0dXJuIGRvX2V4aXQobG9uZyBjb2RlKVxuLS1cbmtlcm5lbC9leGl0LmMtMTAwMy1cdGV4aXRfc2htKHRzayk7XG5rZXJuZWwvZXhpdC5jOjEwMDQ6XHRleGl0X2ZpbGVzKHRzayk7XG5rZXJuZWwvZXhpdC5jLTEwMDUtXHRleGl0X2ZzKHRzayk7XG4tLVxua2VybmVsL2ZvcmsuYz0xOTk0PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4tLVxua2VybmVsL2ZvcmsuYy0yNTk1LWJhZF9mb3JrX2NsZWFudXBfZmlsZXM6XG5rZXJuZWwvZm9yay5jOjI1OTY6XHRleGl0X2ZpbGVzKHApOyAvKiBibG9ja2luZyAqL1xua2VybmVsL2ZvcmsuYy0yNTk3LWJhZF9mb3JrX2NsZWFudXBfc2VtdW5kbzpcbi0tXG5rZXJuZWwvcGlkLmM9ODc5PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqX19waWRmZF9mZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGZkKVxuLS1cbmtlcm5lbC9waWQuYy05MDEtXHRcdCAqIDEuIGJlZm9yZSBleGl0X3NpZ25hbHMoKSwgd2hpY2ggZ2l2ZXMgYSByZWFsIGZkXG5rZXJuZWwvcGlkLmM6OTAyOlx0XHQgKiAyLiBiZWZvcmUgZXhpdF9maWxlcygpIHRha2VzIHRoZSB0YXNrX2xvY2soKSBnaXZlcyBhIHJlYWwgZmRcbmtlcm5lbC9waWQuYzo5MDM6XHRcdCAqIDMuIGFmdGVyIGV4aXRfZmlsZXMoKSByZWxlYXNlcyB0YXNrX2xvY2soKSwgLVx1MDAzZWZpbGVzIGlzIE5VTEw7XG5rZXJuZWwvcGlkLmMtOTA0LVx0XHQgKiAgICB0aGlzIGhhcyBQRl9FWElUSU5HLCBzaW5jZSBpdCB3YXMgc2V0IGluIGV4aXRfc2lnbmFscygpLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkX2dldGZkX3Rlc3QuYz0yNDQ9VEVTVF9GKGNoaWxkLCBub19zdHJhbmdlX0VCQURGKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkX2dldGZkX3Rlc3QuYy0yNTctXHQgKiBJdCB1c2VkIHRvIGJlIHRoYXQgcGlkZmRfZ2V0ZmQoKSBjb3VsZCByYWNlIHdpdGggdGhlIGV4aXRpbmcgdGhyZWFkXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9waWRmZC9waWRmZF9nZXRmZF90ZXN0LmM6MjU4Olx0ICogYmV0d2VlbiBleGl0X2ZpbGVzKCkgYW5kIHJlbGVhc2VfdGFzaygpLCBhbmQgZ2V0IGEgbm9uLW51bGwgdGFza1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcGlkZmQvcGlkZmRfZ2V0ZmRfdGVzdC5jLTI1OS1cdCAqIHdpdGggYSBOVUxMIGZpbGVzIHN0cnVjdCwgYW5kIHlvdSYjMzk7ZCBnZXQgRUJBREYsIHdoaWNoIHdhcyBzbGlnaHRseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjkxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb3JlZHVtcCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGNvcmVkdW1wcywgYW5kIGl0IHNlZW1zIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUgaXMgYHZmc19jb3JlZHVtcGAg4oCTIHRoYXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQsIHRoZSBvbmUgdGhhdCBraWNrcyBldmVyeXRoaW5nIG9mZi4gTm93LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIG5ldyBiaXQsIGBNTUZfRFVNUF9GRF9MSVNUYCAoYml0IDkpLCB0byBgY29yZWR1bXBfZmlsdGVyYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBmbGFnLgoKSWYgdGhhdCBgTU1GX0RVTVBfRkRfTElTVGAgYml0IGlzbiYjMzk7dCBzZXQsIHRoZW4gdGhlIGNvZGUgY2FsbHMgYGNvcmVkdW1wX3ByZV9leGl0YC4gQW5kIGZyb20gdGhlcmUsIGl0IGFwcGVhcnMgdGhlIGZ1bmN0aW9uIGNhbGxzIGBleGl0X2ZpbGVzKHQpYCBmb3IgYWxsIHRocmVhZHMuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgYmUgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIEEgY29yZWR1bXAgY29tYmluZWQgd2l0aCBhIG1vZGlmaWVkIGBjb3JlZHVtcF9maWx0ZXJgIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGVhc2lseSBmdXp6ZWQgdG8gdHJpZ2dlciBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLiBJIHNob3VsZCBtYWtlIGEgbm90ZSB0byBmb2xsb3cgdGhhdCBwYXRoLgoKVGhlIHdheSB0byBtb2RpZnkgdGhhdCBgY29yZWR1bXBfZmlsdGVyYCBpcyB0aHJvdWdoIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLCB3aGljaCBpcyBzdGFuZGFyZC4gSSBhbSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc3BlY2lmaWMgY29uZmlnIHJlcXVpcmVkIGZvciBjb3JlZHVtcHMgdG8gYmUgZW5hYmxlZCBvbiB0aGUgc3lzdGVtLCBmb3IgZXhhbXBsZSwgYENPTkZJR19DT1JFRFVNUGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT1JFRFVNUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdD0xNDU9Y29uZmlnIEJJTkZNVF9NSVNDXG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtMTcwLVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTcxOmNvbmZpZyBDT1JFRFVNUFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcyLVx0Ym9vbCBcJiMzNDtFbmFibGUgY29yZSBkdW1wIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb3JlZHVtcCBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgQ09ORklHX0NPUkVEVU1QYCBpcyB0aGUgYmFzZSBjb25maWd1cmF0aW9uLCB0aGF0JiMzOTtzIGNsZWFyLiBCdXQgaG9sZCBvbiwgdGhlIGRvY3VtZW50YXRpb24gaXMgc2xpZ2h0bHkgb2ZmLiBJIG5lZWQgdG8gc29ydCBvdXQgdGhlc2UgYml0IG51bWJlcnMuIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGBNTUZfRFVNUF9GRF9MSVNUYCBpcyBiaXQgOSwgYnV0IGluIGBtbV90eXBlcy5oYCwgaXQmIzM5O3MgYml0IDExLiBBaCwgbm93IEkgc2VlIHRoZSBwcm9ibGVtLiBgTU1GX0RVTVBfRkRfTElTVGAgaXMgYml0IDExIGluIGBtbV9mbGFnc2AsIGJ1dCBiaXQgMiBpbiBgbW1fZmxhZ3NgIGlzIGBNTUZfRFVNUF9BTk9OX1BSSVZBVEVgLiBXaGljaCwgbWVhbnMgYml0IDAgaW4gdGhlIGZpbHRlciBjb3JyZXNwb25kcyB0byBiaXQgMiBpbiBgbW1fZmxhZ3NgLiBBbmQsIHRoaXMgaXMgYWxsIGNvcnJlY3QuIEdvb2QuCgpUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9jb3JlZHVtcC5jYCwgYGZzL2ZpbGVfdGFibGUuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9tbV90eXBlcy5oYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3Igb2Ygc29tZXRoaW5nIHNpZ25pZmljYW50LCBsaWtlbHkgaW52b2x2aW5nIGZpbGUgaGFuZGxpbmcgZHVyaW5nIGNvcmVkdW1wcy4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gVGltZSB0byBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIEkmIzM5O20gc2VlaW5nIGB2ZnNfY29yZWR1bXBgLCBgZnB1dGAsIGBmcHV0X2Nsb3NlYCwgYW5kIGBleGl0X2ZpbGVzYC4gV2FpdCwgYGZwdXRgIGFuZCBgZnB1dF9jbG9zZWAgYXJlICp2ZXJ5KiBob3QgcGF0aHMsIEkgcHJvYmFibHkgZG9uJiMzOTt0IHdhbnQgdG8gdGFyZ2V0IHRob3NlLCB0aGUgc2lnbmFsIHRvIG5vaXNlIHJhdGlvIHdpbGwgYmUgdGVycmlibGUuIExldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIGB2ZnNfY29yZWR1bXBgIGFuZCBgZXhpdF9maWxlc2Agc2VlbSBsaWtlIGJldHRlciBjYW5kaWRhdGVzLiBgZXhpdF9maWxlc2AgaXMgcmVhc29uYWJseSBob3Qgc2luY2UgaXQmIzM5O3MgY2FsbGVkIG9uIGV2ZXJ5IHByb2Nlc3MgZXhpdCwgYnV0IGB2ZnNfY29yZWR1bXBgIGlzIG5vdC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHN3ZWVwIG9mIGBmcy9jb3JlZHVtcC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGJ1dCBhcmUgbm90IGhvdC4gTG9va2luZy4uLm5vIGNoYW5nZXMgdG8gYGR1bXBfdXNlcl9yYW5nZWAuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGluIGBkb19jb3JlZHVtcGAgYW5kIGBfX2ZwdXRfZGVmZXJyZWRgLiBCdXQgYGRvX2NvcmVkdW1wYCBpcyBzdGF0aWMuIExvb2tzIGxpa2UgYHZmc19jb3JlZHVtcGAgaXMgdGhlIGJlc3QgYmV0IGFzIHRoZSBwcmltYXJ5IGZvY3VzLgoKT2gsIGFuZCB0aGVyZSYjMzk7cyB0aGUgYGNvcmVkdW1wX2ZpbHRlcmAgZXhwb3NlZCB2aWEgYC9wcm9jL1twaWRdL2NvcmVkdW1wX2ZpbHRlcmAuIFRoZSB3cml0ZSBoYW5kbGVyLCBgcHJvY19jb3JlZHVtcF9maWx0ZXJfd3JpdGVgLCBpcyBpbiBgZnMvcHJvYy9iYXNlLmNgLiBXZSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCB3b3JrcyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlZHVtcF9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYz0yOTE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX2F0dHJfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMjkyMi0jaWZkZWYgQ09ORklHX0VMRl9DT1JFXG5mcy9wcm9jL2Jhc2UuYzoyOTIzOnN0YXRpYyBzc2l6ZV90IHByb2NfY29yZWR1bXBfZmlsdGVyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5mcy9wcm9jL2Jhc2UuYy0yOTI0LVx0XHRcdFx0XHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy9iYXNlLmMtMjk1MS1cbmZzL3Byb2MvYmFzZS5jOjI5NTI6c3RhdGljIHNzaXplX3QgcHJvY19jb3JlZHVtcF9maWx0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5mcy9wcm9jL2Jhc2UuYy0yOTUzLVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9iYXNlLmMtMjk5My1cbmZzL3Byb2MvYmFzZS5jOjI5OTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jb3JlZHVtcF9maWx0ZXJfb3BlcmF0aW9ucyA9IHtcbmZzL3Byb2MvYmFzZS5jOjI5OTU6XHQucmVhZFx0XHQ9IHByb2NfY29yZWR1bXBfZmlsdGVyX3JlYWQsXG5mcy9wcm9jL2Jhc2UuYzoyOTk2Olx0LndyaXRlXHRcdD0gcHJvY19jb3JlZHVtcF9maWx0ZXJfd3JpdGUsXG5mcy9wcm9jL2Jhc2UuYy0yOTk3LVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4tLVxuZnMvcHJvYy9iYXNlLmM9MzI4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zMzYyLSNpZmRlZiBDT05GSUdfRUxGX0NPUkVcbmZzL3Byb2MvYmFzZS5jOjMzNjM6XHRSRUcoXCYjMzQ7Y29yZWR1bXBfZmlsdGVyXCYjMzQ7LCBTX0lSVUdPfFNfSVdVU1IsIHByb2NfY29yZWR1bXBfZmlsdGVyX29wZXJhdGlvbnMpLFxuZnMvcHJvYy9iYXNlLmMtMzM2NC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI3NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBDb3JlIER1bXAgRmlsdGVyIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gYHByb2NfY29yZWR1bXBfZmlsdGVyX3dyaXRlYCBhbmQgYHByb2NfY29yZWR1bXBfZmlsdGVyX3JlYWRgIGFzIHBvdGVudGlhbGx5IHVzZWZ1bCBzdGFydGluZyBwb2ludHMgZm9yIHRoaXMgYW5hbHlzaXMuIEhvd2V2ZXIsIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBwcm9jX2NvcmVkdW1wX2ZpbHRlcl93cml0ZWAgaXMgYWN0dWFsbHkgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBwcm9ibGVtLCBhcyB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBxdWl0ZSBjbGVhcjogcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuCgpSaWdodCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIEFoLCB5ZXMsIGB2ZnNfY29yZWR1bXBgIGlzIGEgbm9uLXN0YXRpYyBlbnRyeSBwb2ludC4gQnV0IGlzIHRoZXJlIGFub3RoZXIgb3B0aW9uPyBJIGtub3cgYGZwdXRgIGFuZCBgZnB1dF9jbG9zZWAgYXJlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBidXQgdGhleSBhcmUgaG90IHBhdGhzIGFuZCBJIHNob3VsZCBhdm9pZCB0aG9zZS4gU28sIGl0IHNlZW1zIGxpa2UgYHZmc19jb3JlZHVtcGAgaXMgdGhlIGJlc3QgY2hvaWNlIGZvciBteSBmb2N1cy4KCk5leHQsIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYENPTkZJR19DT1JFRFVNUGAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIGhlcmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgL3Byb2MvW3BpZF0vY29yZWR1bXBfZmlsdGVyYCBmaWxlIGFuZCBjb25maWd1cmF0aW9ucywgdG8gYmUgc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGEgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gV2FpdCwgaXQgc2VlbXMgdGhlIGZpbGUgaXMgdW5kZXIgYENPTkZJR19FTEZfQ09SRWAsIHNvIGl0JiMzOTtzIGEgYml0IG1vcmUgaW52b2x2ZWQgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRUxGX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4MDE9Y29uZmlnIEJVR1xuLS1cbmluaXQvS2NvbmZpZy0xODEwLVxuaW5pdC9LY29uZmlnOjE4MTE6Y29uZmlnIEVMRl9DT1JFXG5pbml0L0tjb25maWctMTgxMi1cdGRlcGVuZHMgb24gQ09SRURVTVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCwgc28gYEVMRl9DT1JFYCBhbmQgYENPUkVEVU1QYCBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEludGVyZXN0aW5nLiBOb3csIEkgc2VlbSB0byByZWNhbGwgYSBkZXBlbmRlbmN5IGJldHdlZW4gdGhlbS4uLiBMZXQgbWUganVzdCB2ZXJpZnkgdGhhdC4gQWggeWVzLCBgRUxGX0NPUkVgIGRlcGVuZHMgb24gYENPUkVEVU1QYC4gR29vZC4gVGhhdCBtYWtlcyBzZW5zZS4gT2theSwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MganVzdCBkb3VibGUgY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIHJlbGF0aW9uc2hpcHMgaW4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIHRha2UgYSBsb29rIGluIHRoZXJlIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVMRl9DT1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODAxPWNvbmZpZyBCVUdcbi0tXG5pbml0L0tjb25maWctMTgxMC1cbmluaXQvS2NvbmZpZzoxODExOmNvbmZpZyBFTEZfQ09SRVxuaW5pdC9LY29uZmlnLTE4MTItXHRkZXBlbmRzIG9uIENPUkVEVU1QXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRoZSBkZWZpbml0aW9uIEkmIzM5O20gbG9va2luZyBmb3I/IEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIEl0JiMzOTtzIGdlbmVyYWxseSB0aGUgY2VudHJhbCBodWIgZm9yIGEgbG90IG9mIGZ1bmRhbWVudGFsIGtlcm5lbCBvcHRpb25zLCBhbmQgdGhlIGZpbGUgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgd2hpY2ggb2Z0ZW4gdG91Y2hlcyBhIHZhcmlldHkgb2YgYmFzZSBtb2R1bGVzLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyB0cnkgdG8gZm9jdXMgb24gYSBtb3JlIGdyYW51bGFyIGxvY2F0aW9uIHRvIHN0YXJ0IG15IHNlYXJjaC4gTGluZSAxODExIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHNwb3Qgd2l0aGluIHN1Y2ggYSBmaWxlIHRvIHRyeSB0byBmaW5kIHRoZSBzcGVjaWZpYyBvcHRpb25zIEkgbWlnaHQgYmUgbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODA1Olx0XHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiBlbGltaW5hdGVzIHN1cHBvcnQgZm9yIEJVRyBhbmQgV0FSTiwgcmVkdWNpbmdcbjE4MDY6XHRcdCAgdGhlIHNpemUgb2YgeW91ciBrZXJuZWwgaW1hZ2UgYW5kIHBvdGVudGlhbGx5IHF1aWV0bHkgaWdub3JpbmdcbjE4MDc6XHRcdCAgbnVtZXJvdXMgZmF0YWwgY29uZGl0aW9ucy4gWW91IHNob3VsZCBvbmx5IGNvbnNpZGVyIGRpc2FibGluZyB0aGlzXG4xODA4Olx0XHQgIG9wdGlvbiBmb3IgZW1iZWRkZWQgc3lzdGVtcyB3aXRoIG5vIGZhY2lsaXRpZXMgZm9yIHJlcG9ydGluZyBlcnJvcnMuXG4xODA5Olx0XHQgIEp1c3Qgc2F5IFkuXG4xODEwOlx0XG4xODExOlx0Y29uZmlnIEVMRl9DT1JFXG4xODEyOlx0XHRkZXBlbmRzIG9uIENPUkVEVU1QXG4xODEzOlx0XHRkZWZhdWx0IHlcbjE4MTQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEVMRiBjb3JlIGR1bXBzXCYjMzQ7IGlmIEVYUEVSVFxuMTgxNTpcdFx0aGVscFxuMTgxNjpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgZ2VuZXJhdGluZyBjb3JlIGR1bXBzLiBEaXNhYmxpbmcgc2F2ZXMgYWJvdXQgNGsuXG4xODE3Olx0XG4xODE4Olx0XG4xODE5Olx0Y29uZmlnIFBDU1BLUl9QTEFURk9STVxuMTgyMDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgUEMtU3BlYWtlciBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuMTgyMTpcdFx0ZGVwZW5kcyBvbiBIQVZFX1BDU1BLUl9QTEFURk9STVxuMTgyMjpcdFx0c2VsZWN0IEk4MjUzX0xPQ0tcbjE4MjM6XHRcdGRlZmF1bHQgeVxuMTgyNDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYwOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb3JlIER1bXAgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgY29yZSBkdW1wcyBhbmQgaG93IHRvIGNvbmZpZ3VyZSB0aGVtLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludHMsIGFzIHVzdWFsLCBhcmUgYEVMRl9DT1JFYCBhbmQgYENPUkVEVU1QYCDigJMgdGhhdCBtdWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZW4sIGl0IGhpdHMgbWXigKYgSSBjYW4mIzM5O3QgZm9yZ2V0IGFib3V0IGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLiBUaGF0IG1lYW5zIGBQUk9DX0ZTYCBoYXMgdG8gYmUgZW5hYmxlZCB0b28sIGRvZXNuJiMzOTt0IGl0PyBJdCBhbGwgaGFzIHRvIHdvcmsgaW4gY29uY2VydCB0byBnaXZlIGEgbWVhbmluZ2Z1bCBjb3JlZHVtcCwgc28gSSBtdXN0IHRha2UgdGhhdCBpbnRvIGFjY291bnQsIGFzIHdlbGwuIEdvdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST0NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9wcm9jL0tjb25maWc6Mjpjb25maWcgUFJPQ19GU1xuZnMvcHJvYy9LY29uZmlnLTMtXHRib29sIFwmIzM0Oy9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODc4CgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29yZSBEdW1wIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIGNvcmUgZHVtcHMuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYENPUkVEVU1QYCwgYEVMRl9DT1JFYCwgYW5kIGBQUk9DX0ZTYC4gVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBjb3JlZHVtcCBoYW5kbGluZyBhbmQgZmlsZSBjbG9zaW5nLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBoZXJlIHNob3VsZCBiZSBvbiB0aGUgYHZmc19jb3JlZHVtcGAgc3ltYm9sLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBiaXQgaW4gdGhlIGBjb3JlZHVtcF9maWx0ZXJgLCB3aGljaCBjb250cm9scyB3aGVuIGZpbGUgZGVzY3JpcHRvcnMgYXJlIHJlbGVhc2VkIGR1cmluZyBhIGNvcmUgZHVtcC4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgaW50ZXJlc3Rpbmcgc3RhdGVzIGFuZCBlZGdlIGNhc2VzIHdpdGhpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLiBUaGUgZmFjdCB0aGF0IHdlIGNhbiBtYW5pcHVsYXRlIHRoaXMgdGhyb3VnaCBgL3Byb2MvW3BpZF0vY29yZWR1bXBfZmlsdGVyYCBtYWtlcyBpdCBldmVuIG1vcmUgYXR0cmFjdGl2ZSBmb3IgZnV6emluZy4KCkkgcXVpY2tseSBzY2FubmVkIGZvciBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMuIFdoaWxlIGBmcHV0YCBhbmQgYGZwdXRfY2xvc2VgIGFyZSB0b3VjaGVkICh0aHJvdWdoIGBfX2ZwdXRfZGVmZXJyZWRgKSBhbmQgYGV4aXRfZmlsZXNgIGlzIGFsc28gbW9kaWZpZWQgKHZpYSBgY29yZWR1bXBfcHJlX2V4aXRgKSwgdGhlc2UgYXJlIGhvdCBwYXRocyBhbmQgdGhlcmVmb3JlLCBsaWtlbHkgbW9yZSB0aG9yb3VnaGx5IHRlc3RlZC4gYHZmc19jb3JlZHVtcGAgaXMgc3RpbGwgbXkgYmVzdCBiZXQuCgpTbywgaGVyZSYjMzk7cyBteSBwcmVwYXJlZCBzdW1tYXJ5IGZvciBmdXJ0aGVyIGFuYWx5c2lzOgoKKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKioKKiAgICoqRm9jdXNTeW1ib2xzOioqIFxbJiMzNDt2ZnNcX2NvcmVkdW1wJiMzNDtdCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogXFsmIzM0O0NPUkVEVU1QJiMzNDssICYjMzQ7RUxGXF9DT1JFJiMzNDssICYjMzQ7UFJPQ1xfRlMmIzM0O10KKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJpdCBpbiBgY29yZWR1bXBfZmlsdGVyYCB0byBjb250cm9sIHdoZXRoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgcmVsZWFzZWQgYmVmb3JlIG9yIGFmdGVyIGR1bXBpbmcgY29yZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvcmVkdW1wIGdlbmVyYXRpb24gYW5kIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLgoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gZGl2ZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT1JFRFVNUCYjMzQ7LAogICAgJiMzNDtFTEZfQ09SRSYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2NvcmVkdW1wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYml0IGluIGBjb3JlZHVtcF9maWx0ZXJgIHRvIGNvbnRyb2wgd2hldGhlciBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWxlYXNlZCBiZWZvcmUgb3IgYWZ0ZXIgZHVtcGluZyBjb3JlLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBmcy9jb3JlZHVtcC5jYCBhbmQgYGZzL2ZpbGVfdGFibGUuY2AsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29yZWR1bXAgZ2VuZXJhdGlvbiBhbmQgYC9wcm9jL1twaWRdL2NvcmVkdW1wX2ZpbHRlcmAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPUkVEVU1QJiMzNDssCiAgICAmIzM0O0VMRl9DT1JFJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfY29yZWR1bXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBiaXQgaW4gYGNvcmVkdW1wX2ZpbHRlcmAgdG8gY29udHJvbCB3aGV0aGVyIGZpbGUgZGVzY3JpcHRvcnMgYXJlIHJlbGVhc2VkIGJlZm9yZSBvciBhZnRlciBkdW1waW5nIGNvcmUuIFRoaXMgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYGZzL2NvcmVkdW1wLmNgIGFuZCBgZnMvZmlsZV90YWJsZS5jYCwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb3JlZHVtcCBnZW5lcmF0aW9uIGFuZCBgL3Byb2MvW3BpZF0vY29yZWR1bXBfZmlsdGVyYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZWR1bXAgbG9naWMgdG8gYWxsb3cgcmVsZWFzaW5nIGZpbGUgZGVzY3JpcHRvcnMgZWFybGllciBkdXJpbmcgYSBjb3JlZHVtcCBpZiB0aGUgYE1NRl9EVU1QX0ZEX0xJU1RgIGZpbHRlciBiaXQgaXMgbm90IHNldC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgY29yZWR1bXBfcHJlX2V4aXQoKWAgd2hpY2ggY2FsbHMgYGV4aXRfZmlsZXMoKWAgb24gYWxsIHRocmVhZHMsIGFuZCBtb2RpZmllcyBgX19mcHV0X2RlZmVycmVkKClgIHRvIGJ5cGFzcyBgdGFza193b3JrYCB3aGVuIGBQRl9EVU1QQ09SRWAgaXMgc2V0LlxuVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHRpbWluZyBvZiBmaWxlIGRlc2NyaXB0b3JzIGR1cmluZyBhIGNvcmVkdW1wLiBUaGUgcHJpbWFyeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHVzZS1hZnRlci1mcmVlIChpZiBhIGZpbGUgaXMgYWNjZXNzZWQgYWZ0ZXIgYmVpbmcgcmVsZWFzZWQpIG9yIGxvY2tpbmcgaXNzdWVzIChkdWUgdG8gc3luY2hyb25vdXMgYGZwdXRgIGluc3RlYWQgb2YgZGVmZXJyZWQpLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZTY5MmFiNjk3M2Q5OTQ5ZmUzOGZhNzdhYThmNmI2N2ZiZjNiMDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAwNTo1NzowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0CmluZGV4IDI3MTg5ZjZlMDA0ZWUuLjAwMWNlMTM2ZTk2NGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdApAQCAtMTkyOSw3ICYjNDM7MTkyOSw3IEBAIHdpbGwgYmUgZHVtcGVkIHdoZW4gdGhlICZsdDtwaWQmZ3Q7IHByb2Nlc3MgaXMgZHVtcGVkLiBjb3JlZHVtcF9maWx0ZXIgaXMgYSBiaXRtYXNrCiBvZiBtZW1vcnkgdHlwZXMuIElmIGEgYml0IG9mIHRoZSBiaXRtYXNrIGlzIHNldCwgbWVtb3J5IHNlZ21lbnRzIG9mIHRoZQogY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC4KIAotVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgomIzQzO1RoZSBmb2xsb3dpbmcgMTAgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CiAKICAgLSAoYml0IDApIGFub255bW91cyBwcml2YXRlIG1lbW9yeQogICAtIChiaXQgMSkgYW5vbnltb3VzIHNoYXJlZCBtZW1vcnkKQEAgLTE5NDEsNiAmIzQzOzE5NDEsNyBAQCBUaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CiAgIC0gKGJpdCA2KSBodWdldGxiIHNoYXJlZCBtZW1vcnkKICAgLSAoYml0IDcpIERBWCBwcml2YXRlIG1lbW9yeQogICAtIChiaXQgOCkgREFYIHNoYXJlZCBtZW1vcnkKJiM0MzsgIC0gKGJpdCA5KSBmZCBsaXN0CiAKICAgTm90ZSB0aGF0IE1NSU8gcGFnZXMgc3VjaCBhcyBmcmFtZSBidWZmZXIgYXJlIG5ldmVyIGR1bXBlZCBhbmQgdkRTTyBwYWdlcwogICBhcmUgYWx3YXlzIGR1bXBlZCByZWdhcmRsZXNzIG9mIHRoZSBiaXRtYXNrIHN0YXR1cy4KQEAgLTE5NDgsMTMgJiM0MzsxOTQ5LDE5IEBAIFRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDoKICAgTm90ZSB0aGF0IGJpdHMgMC00IGRvbiYjMzk7dCBhZmZlY3QgaHVnZXRsYiBvciBEQVggbWVtb3J5LiBodWdldGxiIG1lbW9yeSBpcwogICBvbmx5IGFmZmVjdGVkIGJ5IGJpdCA1LTYsIGFuZCBEQVggaXMgb25seSBhZmZlY3RlZCBieSBiaXRzIDctOC4KIAotVGhlIGRlZmF1bHQgdmFsdWUgb2YgY29yZWR1bXBfZmlsdGVyIGlzIDB4MzM7IHRoaXMgbWVhbnMgYWxsIGFub255bW91cyBtZW1vcnkKLXNlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzIGFuZCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFyZSBkdW1wZWQuCiYjNDM7ICBOb3RlIHRoYXQgYml0IDkgaXMgc2V0IGJ5IGRlZmF1bHQgYmVjYXVzZSB0b29scyBsaWtlIHN5c3RlbWQtY29yZWR1bXAgZ28KJiM0MzsgIHRocm91Z2ggdGhlIGZkcy4gSWYgeW91IGRvIG5vdCBzZXQgYml0IDksIGZpbGVzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGJ5CiYjNDM7ICBhbnkgVk1BIGFyZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBTb21lIGZpbGUgcmVsZWFzZSBsb2dpYywgc3VjaCBhcwomIzQzOyAgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWQgYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoCiYjNDM7ICBlYXJsaWVyLgomIzQzOwomIzQzO1RoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDIzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeQomIzQzO3NlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzLCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFuZCBmZCBsaXN0IGFyZSBkdW1wZWQuCiAKIElmIHlvdSBkb24mIzM5O3Qgd2FudCB0byBkdW1wIGFsbCBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGF0dGFjaGVkIHRvIHBpZCAxMjM0LAotd3JpdGUgMHgzMSB0byB0aGUgcHJvY2VzcyYjMzk7cyBwcm9jIGZpbGU6OgomIzQzO3dyaXRlIDB4MjMxIHRvIHRoZSBwcm9jZXNzJiMzOTtzIHByb2MgZmlsZTo6CiAKLSAgJCBlY2hvIDB4MzEgJmd0OyAvcHJvYy8xMjM0L2NvcmVkdW1wX2ZpbHRlcgomIzQzOyAgJCBlY2hvIDB4MjMxICZndDsgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXIKIAogV2hlbiBhIG5ldyBwcm9jZXNzIGlzIGNyZWF0ZWQsIHRoZSBwcm9jZXNzIGluaGVyaXRzIHRoZSBiaXRtYXNrIHN0YXR1cyBmcm9tIGl0cwogcGFyZW50LiBJdCBpcyB1c2VmdWwgdG8gc2V0IHVwIGNvcmVkdW1wX2ZpbHRlciBiZWZvcmUgdGhlIHByb2dyYW0gcnVucy4KZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jCmluZGV4IGU2OGE3NmZmOTJhMzguLmQzNzhlNjljNjM2ZTIgMTAwNjQ0Ci0tLSBhL2ZzL2NvcmVkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29yZWR1bXAuYwpAQCAtNTIwLDYgJiM0Mzs1MjAsMjUgQEAgc3RhdGljIGludCB6YXBfdGhyZWFkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAlyZXR1cm4gbnI7CiB9CiAKJiM0MzsvKgomIzQzOyAqIElmIGRvIG5vdCBkdW1wIGZkIGxpc3QsIGZpbGVzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGJ5IGFueSBWTUEKJiM0MzsgKiBjYW4gYmUgcmVsZWFzZWQgYmVmb3JlIGR1bXBpbmcgY29yZS4gVGhlcmVmb3JlLCBzb21lIGZpbGUgcmVsZWFzZQomIzQzOyAqIGxvZ2ljLCBzdWNoIGFzIGV4aXRpbmcgZmxvY2sgb3IgcmVsZWFzaW5nIHJlZmVyZW5jZXMgdG8gc2hhcmVkCiYjNDM7ICogYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoIGVhcmxpZXIuIE5vdGUgdGhhdCBkb19jb3JlZHVtcCgpIG9mdGVuCiYjNDM7ICogdGFrZXMgc2V2ZXJhbCBzZWNvbmRzIG9yIGV2ZW4gbG9uZ2VyIHRvIGV4ZWN1dGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgY29yZWR1bXBfcHJlX2V4aXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudCwgKnQ7CiYjNDM7CiYjNDM7CWlmIChtbV9mbGFnc190ZXN0KE1NRl9EVU1QX0ZEX0xJU1QsIHRzay0mZ3Q7bW0pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF90aHJlYWQodHNrLCB0KSB7CiYjNDM7CQlleGl0X2ZpbGVzKHQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBjb3JlZHVtcF93YWl0KGludCBleGl0X2NvZGUsIHN0cnVjdCBjb3JlX3N0YXRlICpjb3JlX3N0YXRlKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKQEAgLTExMjMsNiAmIzQzOzExNDIsOCBAQCBzdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwKIAlpZiAoY24tJmd0O21hc2sgJmFtcDsgQ09SRURVTVBfUkVKRUNUKQogCQlyZXR1cm47CiAKJiM0MzsJY29yZWR1bXBfcHJlX2V4aXQoKTsKJiM0MzsKIAkvKiBnZXQgdXMgYW4gdW5zaGFyZWQgZGVzY3JpcHRvciB0YWJsZTsgYWxtb3N0IGFsd2F5cyBhIG5vLW9wICovCiAJLyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqLwogCWlmICh1bnNoYXJlX2ZpbGVzKCkpCmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggYzY4YjhjMGE0MDk3YS4uMDJlZTRlOGIxY2ZlOCAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtNTY4LDcgJiM0Mzs1NjgsMTIgQEAgc3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKQogCQlyZXR1cm47CiAJfQogCi0JaWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgJmFtcDsmYW1wOyAhKHRhc2stJmd0O2ZsYWdzICZhbXA7IFBGX0tUSFJFQUQpKSkgewomIzQzOwkvKgomIzQzOwkgKiBjb3JlZHVtcF9wcmVfZXhpdCgpIG1heSByZWxlYXNlIGZpbGVzIGJlZm9yZSBkdW1waW5nIGNvcmUuCiYjNDM7CSAqIENhbm5vdCB1c2UgdGFza193b3JrIGluIHRoZSBjYXNlLCBuZWVkcyB0byByZWxlYXNlIGZpbGVzCiYjNDM7CSAqIGVhcmxpZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAobGlrZWx5KCFpbl9pbnRlcnJ1cHQoKSAmYW1wOyZhbXA7ICEodGFzay0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX0tUSFJFQUQgfCBQRl9EVU1QQ09SRSkpKSkgewogCQlpbml0X3Rhc2tfd29yaygmYW1wO2ZpbGUtJmd0O2ZfdGFza193b3JrLCBfX19fZnB1dCk7CiAJCWlmICghdGFza193b3JrX2FkZCh0YXNrLCAmYW1wO2ZpbGUtJmd0O2ZfdGFza193b3JrLCBUV0FfUkVTVU1FKSkKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCBlYmYwZDkxMmJlN2RiLi5mMzU1ODU4YmZiNjJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC0xOTQ3LDE0ICYjNDM7MTk0NywxNiBAQCBlbnVtIHsKICNkZWZpbmUgTU1GX0RVTVBfSFVHRVRMQl9TSEFSRUQgIDgKICNkZWZpbmUgTU1GX0RVTVBfREFYX1BSSVZBVEUJOQogI2RlZmluZSBNTUZfRFVNUF9EQVhfU0hBUkVECTEwCiYjNDM7I2RlZmluZSBNTUZfRFVNUF9GRF9MSVNUCTExCiAKICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX1NISUZUCU1NRl9EVU1QQUJMRV9CSVRTCi0jZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTCTkKJiM0MzsjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTCTEwCiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9NQVNLIFwKIAkoKEJJVChNTUZfRFVNUF9GSUxURVJfQklUUykgLSAxKSAmbHQ7Jmx0OyBNTUZfRFVNUF9GSUxURVJfU0hJRlQpCiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9ERUZBVUxUIFwKIAkoQklUKE1NRl9EVU1QX0FOT05fUFJJVkFURSkgfCBCSVQoTU1GX0RVTVBfQU5PTl9TSEFSRUQpIHwgXAotCSBCSVQoTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYpCiYjNDM7CSAoMSAmbHQ7Jmx0OyBNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUpIHwgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRiB8XAomIzQzOwkgKDEgJmx0OyZsdDsgTU1GX0RVTVBfRkRfTElTVCkpCiAKICNpZmRlZiBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMKICMgZGVmaW5lIE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYJQklUKE1NRl9EVU1QX0VMRl9IRUFERVJTKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzNAoJCQkJCQkJb3V0cHV0OiAyNDcKCQkJCQkJCXRob3VnaHRzOiA1NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvcmVkdW1wIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgdGhlIExpbnV4IGNvcmVkdW1wIG1lY2hhbmlzbS4gSSBzZWUgaXQgaW50cm9kdWNlcyBhIG5ldyBtZW1vcnkgZmlsdGVyIHR5cGUsIGBNTUZfRFVNUF9GRF9MSVNUYC4gSW50ZXJlc3RpbmcuIElmIHRoYXQgYml0ICppc24mIzM5O3QqIHNldCwgYGNvcmVkdW1wX3ByZV9leGl0KClgIGdldHMgY2FsbGVkIHdpdGhpbiBgZG9fY29yZWR1bXAoKWAsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSB0aHJlYWRzIGFuZCBjYWxscyBgZXhpdF9maWxlcyh0KWAgb24gZWFjaCBvbmUuIFRoYXQmIzM5O3MgYSBrZXkgY2hhbmdlIOKAkyBwdXNoaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBlYXJsaWVyIGluIHRoZSBwcm9jZXNzLiBJIGFsc28gbm90aWNlIGEgbW9kaWZpY2F0aW9uIHRvIGBfX2ZwdXRfZGVmZXJyZWQoKWAsIHNraXBwaW5nIHRoZSBgdGFza193b3JrYCBtZWNoYW5pc20gaWYgYFBGX0RVTVBDT1JFYCBpcyBzZXQsIHByZXN1bWFibHkgdG8gYXZvaWQgaXNzdWVzIHdpdGggZGVmZXJyZWQgY2xlYW51cCBkdXJpbmcgYSBjb3JlZHVtcC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGFsbCBhYm91dCBmaWxlIGRlc2NyaXB0b3IgbGlmZWN5Y2xlIHdpdGhpbiBhIGNvcmVkdW1wIHNjZW5hcmlvLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlJiMzOTtzIG5vIG5ldyBidWZmZXIgYWxsb2NhdGlvbiBvciBtYW5pcHVsYXRpb24gdGhhdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLiYjMzQ7IENydWNpYWxseSwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyBlaXRoZXIuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgY29udHJvbCBmbG93OiBjYWxsaW5nIGBleGl0X2ZpbGVzYCBlYXJsaWVyIGFuZCBjaXJjdW12ZW50aW5nIGB0YXNrX3dvcmtgIGR1cmluZyBjb3JlZHVtcC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSB0aGUgcHJpbWFyeSByaXNrIGhlcmUuIFNwZWNpZmljYWxseSwgaWYgYSBmaWxlIGlzIGFjY2Vzc2VkIGFmdGVyIGJlaW5nIGNsb3NlZCBieSB0aGUgc3luY2hyb25vdXMgYGV4aXRfZmlsZXMoKWAgY2FsbCwgdGhhdCYjMzk7cyBhIGNsYXNzaWMgVUFGIHNjZW5hcmlvLiBBbHNvLCB0aGVyZSBjb3VsZCBiZSBsb2NraW5nIGlzc3VlcyB3aXRoIHRoZSBzeW5jaHJvbm91cyBgZnB1dGAuIEJ1dCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgS0FTQU4gYW5kIExPQ0tERVAgc2hvdWxkIGJlIHByZXR0eSBlZmZlY3RpdmUgYXQgY2F0Y2hpbmcgdGhvc2UuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2vigKYgbm8sIEkgZG9uJiMzOTt0IHNlZSBhbnkgY2hhbmdlcyB3aXRoaW4gYGV4aXRfZmlsZXMoKWAgb3IgYF9fZnB1dF9kZWZlcnJlZCgpYCB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgY2xvc2luZyBmaWxlcy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OiB0aGUgcGF0Y2ggc3BlZWRzIHVwIGZpbGUgZGVzY3JpcHRvciBjbGVhbnVwIGR1cmluZyBjb3JlZHVtcHMgd2hlbiB0aGUgbmV3IGZpbHRlciBiaXQgaXNuJiMzOTt0IHVzZWQsIGJ5IGFkZGluZyBhIG5ldyBwcmUtZXhpdCBwaGFzZSBhbmQgYXZvaWRpbmcgdGhlIHVzdWFsIGRlZmVycmVkIGNsZWFudXAuIFdoaWxlIGl0IGludHJvZHVjZXMgdGhlIHJpc2sgb2YgVUFGIGJ1Z3MgYW5kIGxvY2tpbmcgaXNzdWVzIGR1ZSB0byBjaGFuZ2VkIHRpbWluZywgdGhlc2UgYXJlIHJpc2tzIGVmZmVjdGl2ZWx5IGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBObyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlZHVtcCBsb2dpYyB0byBhbGxvdyByZWxlYXNpbmcgZmlsZSBkZXNjcmlwdG9ycyBlYXJsaWVyIGR1cmluZyBhIGNvcmVkdW1wIGlmIHRoZSBgTU1GX0RVTVBfRkRfTElTVGAgZmlsdGVyIGJpdCBpcyBub3Qgc2V0LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBjb3JlZHVtcF9wcmVfZXhpdCgpYCB3aGljaCBjYWxscyBgZXhpdF9maWxlcygpYCBvbiBhbGwgdGhyZWFkcywgYW5kIG1vZGlmaWVzIGBfX2ZwdXRfZGVmZXJyZWQoKWAgdG8gYnlwYXNzIGB0YXNrX3dvcmtgIHdoZW4gYFBGX0RVTVBDT1JFYCBpcyBzZXQuXG5UaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBsaWZlY3ljbGUgYW5kIGNsZWFudXAgdGltaW5nIG9mIGZpbGUgZGVzY3JpcHRvcnMgZHVyaW5nIGEgY29yZWR1bXAuIFRoZSBwcmltYXJ5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgdXNlLWFmdGVyLWZyZWUgKGlmIGEgZmlsZSBpcyBhY2Nlc3NlZCBhZnRlciBiZWluZyByZWxlYXNlZCkgb3IgbG9ja2luZyBpc3N1ZXMgKGR1ZSB0byBzeW5jaHJvbm91cyBgZnB1dGAgaW5zdGVhZCBvZiBkZWZlcnJlZCkuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLlxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZWR1bXAgbG9naWMgdG8gYWxsb3cgcmVsZWFzaW5nIGZpbGUgZGVzY3JpcHRvcnMgZWFybGllciBkdXJpbmcgYSBjb3JlZHVtcCBpZiB0aGUgYE1NRl9EVU1QX0ZEX0xJU1RgIGZpbHRlciBiaXQgaXMgbm90IHNldC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgY29yZWR1bXBfcHJlX2V4aXQoKWAgd2hpY2ggY2FsbHMgYGV4aXRfZmlsZXMoKWAgb24gYWxsIHRocmVhZHMsIGFuZCBtb2RpZmllcyBgX19mcHV0X2RlZmVycmVkKClgIHRvIGJ5cGFzcyBgdGFza193b3JrYCB3aGVuIGBQRl9EVU1QQ09SRWAgaXMgc2V0LlxuVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHRpbWluZyBvZiBmaWxlIGRlc2NyaXB0b3JzIGR1cmluZyBhIGNvcmVkdW1wLiBUaGUgcHJpbWFyeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHVzZS1hZnRlci1mcmVlIChpZiBhIGZpbGUgaXMgYWNjZXNzZWQgYWZ0ZXIgYmVpbmcgcmVsZWFzZWQpIG9yIGxvY2tpbmcgaXNzdWVzIChkdWUgdG8gc3luY2hyb25vdXMgYGZwdXRgIGluc3RlYWQgb2YgZGVmZXJyZWQpLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzowOC44OTk5MDY5MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2Mzk2NzA1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09SRURVTVBcIixcbiAgICBcIkVMRl9DT1JFXCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2NvcmVkdW1wXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZWR1bXAgbG9naWMgdG8gYWxsb3cgcmVsZWFzaW5nIGZpbGUgZGVzY3JpcHRvcnMgZWFybGllciBkdXJpbmcgYSBjb3JlZHVtcCBpZiB0aGUgYE1NRl9EVU1QX0ZEX0xJU1RgIGZpbHRlciBiaXQgaXMgbm90IHNldC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgY29yZWR1bXBfcHJlX2V4aXQoKWAgd2hpY2ggY2FsbHMgYGV4aXRfZmlsZXMoKWAgb24gYWxsIHRocmVhZHMsIGFuZCBtb2RpZmllcyBgX19mcHV0X2RlZmVycmVkKClgIHRvIGJ5cGFzcyBgdGFza193b3JrYCB3aGVuIGBQRl9EVU1QQ09SRWAgaXMgc2V0LlxcblRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGxpZmVjeWNsZSBhbmQgY2xlYW51cCB0aW1pbmcgb2YgZmlsZSBkZXNjcmlwdG9ycyBkdXJpbmcgYSBjb3JlZHVtcC4gVGhlIHByaW1hcnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSB1c2UtYWZ0ZXItZnJlZSAoaWYgYSBmaWxlIGlzIGFjY2Vzc2VkIGFmdGVyIGJlaW5nIHJlbGVhc2VkKSBvciBsb2NraW5nIGlzc3VlcyAoZHVlIHRvIHN5bmNocm9ub3VzIGBmcHV0YCBpbnN0ZWFkIG9mIGRlZmVycmVkKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBiaXQgaW4gYGNvcmVkdW1wX2ZpbHRlcmAgdG8gY29udHJvbCB3aGV0aGVyIGZpbGUgZGVzY3JpcHRvcnMgYXJlIHJlbGVhc2VkIGJlZm9yZSBvciBhZnRlciBkdW1waW5nIGNvcmUuIFRoaXMgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYGZzL2NvcmVkdW1wLmNgIGFuZCBgZnMvZmlsZV90YWJsZS5jYCwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb3JlZHVtcCBnZW5lcmF0aW9uIGFuZCBgL3Byb2MvW3BpZF0vY29yZWR1bXBfZmlsdGVyYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTc6MDguODk5OTEzMTE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk1OTY5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZTY5MmFiNjk3M2Q5OTQ5ZmUzOGZhNzdhYThmNmI2N2ZiZjNiMDljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMDU6NTc6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcXG5pbmRleCAyNzE4OWY2ZTAwNGVlLi4wMDFjZTEzNmU5NjRiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XFxuQEAgLTE5MjksNyArMTkyOSw3IEBAIHdpbGwgYmUgZHVtcGVkIHdoZW4gdGhlIFxcdTAwM2NwaWRcXHUwMDNlIHByb2Nlc3MgaXMgZHVtcGVkLiBjb3JlZHVtcF9maWx0ZXIgaXMgYSBiaXRtYXNrXFxuIG9mIG1lbW9yeSB0eXBlcy4gSWYgYSBiaXQgb2YgdGhlIGJpdG1hc2sgaXMgc2V0LCBtZW1vcnkgc2VnbWVudHMgb2YgdGhlXFxuIGNvcnJlc3BvbmRpbmcgbWVtb3J5IHR5cGUgYXJlIGR1bXBlZCwgb3RoZXJ3aXNlIHRoZXkgYXJlIG5vdCBkdW1wZWQuXFxuIFxcbi1UaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XFxuK1RoZSBmb2xsb3dpbmcgMTAgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XFxuIFxcbiAgIC0gKGJpdCAwKSBhbm9ueW1vdXMgcHJpdmF0ZSBtZW1vcnlcXG4gICAtIChiaXQgMSkgYW5vbnltb3VzIHNoYXJlZCBtZW1vcnlcXG5AQCAtMTk0MSw2ICsxOTQxLDcgQEAgVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOlxcbiAgIC0gKGJpdCA2KSBodWdldGxiIHNoYXJlZCBtZW1vcnlcXG4gICAtIChiaXQgNykgREFYIHByaXZhdGUgbWVtb3J5XFxuICAgLSAoYml0IDgpIERBWCBzaGFyZWQgbWVtb3J5XFxuKyAgLSAoYml0IDkpIGZkIGxpc3RcXG4gXFxuICAgTm90ZSB0aGF0IE1NSU8gcGFnZXMgc3VjaCBhcyBmcmFtZSBidWZmZXIgYXJlIG5ldmVyIGR1bXBlZCBhbmQgdkRTTyBwYWdlc1xcbiAgIGFyZSBhbHdheXMgZHVtcGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGJpdG1hc2sgc3RhdHVzLlxcbkBAIC0xOTQ4LDEzICsxOTQ5LDE5IEBAIFRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcXG4gICBOb3RlIHRoYXQgYml0cyAwLTQgZG9uJ3QgYWZmZWN0IGh1Z2V0bGIgb3IgREFYIG1lbW9yeS4gaHVnZXRsYiBtZW1vcnkgaXNcXG4gICBvbmx5IGFmZmVjdGVkIGJ5IGJpdCA1LTYsIGFuZCBEQVggaXMgb25seSBhZmZlY3RlZCBieSBiaXRzIDctOC5cXG4gXFxuLVRoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDMzOyB0aGlzIG1lYW5zIGFsbCBhbm9ueW1vdXMgbWVtb3J5XFxuLXNlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzIGFuZCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFyZSBkdW1wZWQuXFxuKyAgTm90ZSB0aGF0IGJpdCA5IGlzIHNldCBieSBkZWZhdWx0IGJlY2F1c2UgdG9vbHMgbGlrZSBzeXN0ZW1kLWNvcmVkdW1wIGdvXFxuKyAgdGhyb3VnaCB0aGUgZmRzLiBJZiB5b3UgZG8gbm90IHNldCBiaXQgOSwgZmlsZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnlcXG4rICBhbnkgVk1BIGFyZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBTb21lIGZpbGUgcmVsZWFzZSBsb2dpYywgc3VjaCBhc1xcbisgIGV4aXRpbmcgZmxvY2sgb3IgcmVsZWFzaW5nIHJlZmVyZW5jZXMgdG8gc2hhcmVkIGJ1ZmZlcnMgaXMgZXhlY3V0ZWQgbXVjaFxcbisgIGVhcmxpZXIuXFxuK1xcbitUaGUgZGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgyMzM7IHRoaXMgbWVhbnMgYWxsIGFub255bW91cyBtZW1vcnlcXG4rc2VnbWVudHMsIEVMRiBoZWFkZXIgcGFnZXMsIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkgYW5kIGZkIGxpc3QgYXJlIGR1bXBlZC5cXG4gXFxuIElmIHlvdSBkb24ndCB3YW50IHRvIGR1bXAgYWxsIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgYXR0YWNoZWQgdG8gcGlkIDEyMzQsXFxuLXdyaXRlIDB4MzEgdG8gdGhlIHByb2Nlc3MncyBwcm9jIGZpbGU6Olxcbit3cml0ZSAweDIzMSB0byB0aGUgcHJvY2VzcydzIHByb2MgZmlsZTo6XFxuIFxcbi0gICQgZWNobyAweDMxIFxcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcXG4rICAkIGVjaG8gMHgyMzEgXFx1MDAzZSAvcHJvYy8xMjM0L2NvcmVkdW1wX2ZpbHRlclxcbiBcXG4gV2hlbiBhIG5ldyBwcm9jZXNzIGlzIGNyZWF0ZWQsIHRoZSBwcm9jZXNzIGluaGVyaXRzIHRoZSBiaXRtYXNrIHN0YXR1cyBmcm9tIGl0c1xcbiBwYXJlbnQuIEl0IGlzIHVzZWZ1bCB0byBzZXQgdXAgY29yZWR1bXBfZmlsdGVyIGJlZm9yZSB0aGUgcHJvZ3JhbSBydW5zLlxcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xcbmluZGV4IGU2OGE3NmZmOTJhMzguLmQzNzhlNjljNjM2ZTIgMTAwNjQ0XFxuLS0tIGEvZnMvY29yZWR1bXAuY1xcbisrKyBiL2ZzL2NvcmVkdW1wLmNcXG5AQCAtNTIwLDYgKzUyMCwyNSBAQCBzdGF0aWMgaW50IHphcF90aHJlYWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxcbiBcXHRyZXR1cm4gbnI7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIElmIGRvIG5vdCBkdW1wIGZkIGxpc3QsIGZpbGVzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGJ5IGFueSBWTUFcXG4rICogY2FuIGJlIHJlbGVhc2VkIGJlZm9yZSBkdW1waW5nIGNvcmUuIFRoZXJlZm9yZSwgc29tZSBmaWxlIHJlbGVhc2VcXG4rICogbG9naWMsIHN1Y2ggYXMgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWRcXG4rICogYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoIGVhcmxpZXIuIE5vdGUgdGhhdCBkb19jb3JlZHVtcCgpIG9mdGVuXFxuKyAqIHRha2VzIHNldmVyYWwgc2Vjb25kcyBvciBldmVuIGxvbmdlciB0byBleGVjdXRlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgY29yZWR1bXBfcHJlX2V4aXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQsICp0O1xcbitcXG4rXFx0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX0RVTVBfRkRfTElTVCwgdHNrLVxcdTAwM2VtbSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvcl9lYWNoX3RocmVhZCh0c2ssIHQpIHtcXG4rXFx0XFx0ZXhpdF9maWxlcyh0KTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IGNvcmVkdW1wX3dhaXQoaW50IGV4aXRfY29kZSwgc3RydWN0IGNvcmVfc3RhdGUgKmNvcmVfc3RhdGUpXFxuIHtcXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50O1xcbkBAIC0xMTIzLDYgKzExNDIsOCBAQCBzdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4gXFx0aWYgKGNuLVxcdTAwM2VtYXNrIFxcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRjb3JlZHVtcF9wcmVfZXhpdCgpO1xcbitcXG4gXFx0LyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqL1xcbiBcXHQvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovXFxuIFxcdGlmICh1bnNoYXJlX2ZpbGVzKCkpXFxuZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuY1xcbmluZGV4IGM2OGI4YzBhNDA5N2EuLjAyZWU0ZThiMWNmZTggMTAwNjQ0XFxuLS0tIGEvZnMvZmlsZV90YWJsZS5jXFxuKysrIGIvZnMvZmlsZV90YWJsZS5jXFxuQEAgLTU2OCw3ICs1NjgsMTIgQEAgc3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChsaWtlbHkoIWluX2ludGVycnVwdCgpIFxcdTAwMjZcXHUwMDI2ICEodGFzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9LVEhSRUFEKSkpIHtcXG4rXFx0LypcXG4rXFx0ICogY29yZWR1bXBfcHJlX2V4aXQoKSBtYXkgcmVsZWFzZSBmaWxlcyBiZWZvcmUgZHVtcGluZyBjb3JlLlxcbitcXHQgKiBDYW5ub3QgdXNlIHRhc2tfd29yayBpbiB0aGUgY2FzZSwgbmVlZHMgdG8gcmVsZWFzZSBmaWxlc1xcbitcXHQgKiBlYXJsaWVyLlxcbitcXHQgKi9cXG4rXFx0aWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgXFx1MDAyNlxcdTAwMjYgISh0YXNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9LVEhSRUFEIHwgUEZfRFVNUENPUkUpKSkpIHtcXG4gXFx0XFx0aW5pdF90YXNrX3dvcmsoXFx1MDAyNmZpbGUtXFx1MDAzZWZfdGFza193b3JrLCBfX19fZnB1dCk7XFxuIFxcdFxcdGlmICghdGFza193b3JrX2FkZCh0YXNrLCBcXHUwMDI2ZmlsZS1cXHUwMDNlZl90YXNrX3dvcmssIFRXQV9SRVNVTUUpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbmluZGV4IGViZjBkOTEyYmU3ZGIuLmYzNTU4NThiZmI2MmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuQEAgLTE5NDcsMTQgKzE5NDcsMTYgQEAgZW51bSB7XFxuICNkZWZpbmUgTU1GX0RVTVBfSFVHRVRMQl9TSEFSRUQgIDhcXG4gI2RlZmluZSBNTUZfRFVNUF9EQVhfUFJJVkFURVxcdDlcXG4gI2RlZmluZSBNTUZfRFVNUF9EQVhfU0hBUkVEXFx0MTBcXG4rI2RlZmluZSBNTUZfRFVNUF9GRF9MSVNUXFx0MTFcXG4gXFxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX1NISUZUXFx0TU1GX0RVTVBBQkxFX0JJVFNcXG4tI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUU1xcdDlcXG4rI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUU1xcdDEwXFxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX01BU0sgXFxcXFxcbiBcXHQoKEJJVChNTUZfRFVNUF9GSUxURVJfQklUUykgLSAxKSBcXHUwMDNjXFx1MDAzYyBNTUZfRFVNUF9GSUxURVJfU0hJRlQpXFxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0RFRkFVTFQgXFxcXFxcbiBcXHQoQklUKE1NRl9EVU1QX0FOT05fUFJJVkFURSkgfCBCSVQoTU1GX0RVTVBfQU5PTl9TSEFSRUQpIHwgXFxcXFxcbi1cXHQgQklUKE1NRl9EVU1QX0hVR0VUTEJfUFJJVkFURSkgfCBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGKVxcbitcXHQgKDEgXFx1MDAzY1xcdTAwM2MgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYgfFxcXFxcXG4rXFx0ICgxIFxcdTAwM2NcXHUwMDNjIE1NRl9EVU1QX0ZEX0xJU1QpKVxcbiBcXG4gI2lmZGVmIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSU1xcbiAjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGXFx0QklUKE1NRl9EVU1QX0VMRl9IRUFERVJTKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzowOS4zNTAzNjExOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyOTg5NjMwNTk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT1JFRFVNUFwiLFxuICAgIFwiRUxGX0NPUkVcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfY29yZWR1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJpdCBpbiBgY29yZWR1bXBfZmlsdGVyYCB0byBjb250cm9sIHdoZXRoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgcmVsZWFzZWQgYmVmb3JlIG9yIGFmdGVyIGR1bXBpbmcgY29yZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvcmVkdW1wIGdlbmVyYXRpb24gYW5kIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTY5MmFiNjk3M2Q5OTQ5ZmUzOGZhNzdhYThmNmI2N2ZiZjNiMDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAwNTo1NzowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG5pbmRleCAyNzE4OWY2ZTAwNGVlLi4wMDFjZTEzNmU5NjRiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuQEAgLTE5MjksNyArMTkyOSw3IEBAIHdpbGwgYmUgZHVtcGVkIHdoZW4gdGhlIFx1MDAzY3BpZFx1MDAzZSBwcm9jZXNzIGlzIGR1bXBlZC4gY29yZWR1bXBfZmlsdGVyIGlzIGEgYml0bWFza1xuIG9mIG1lbW9yeSB0eXBlcy4gSWYgYSBiaXQgb2YgdGhlIGJpdG1hc2sgaXMgc2V0LCBtZW1vcnkgc2VnbWVudHMgb2YgdGhlXG4gY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC5cbiBcbi1UaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XG4rVGhlIGZvbGxvd2luZyAxMCBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcbiBcbiAgIC0gKGJpdCAwKSBhbm9ueW1vdXMgcHJpdmF0ZSBtZW1vcnlcbiAgIC0gKGJpdCAxKSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeVxuQEAgLTE5NDEsNiArMTk0MSw3IEBAIFRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcbiAgIC0gKGJpdCA2KSBodWdldGxiIHNoYXJlZCBtZW1vcnlcbiAgIC0gKGJpdCA3KSBEQVggcHJpdmF0ZSBtZW1vcnlcbiAgIC0gKGJpdCA4KSBEQVggc2hhcmVkIG1lbW9yeVxuKyAgLSAoYml0IDkpIGZkIGxpc3RcbiBcbiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXNcbiAgIGFyZSBhbHdheXMgZHVtcGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGJpdG1hc2sgc3RhdHVzLlxuQEAgLTE5NDgsMTMgKzE5NDksMTkgQEAgVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOlxuICAgTm90ZSB0aGF0IGJpdHMgMC00IGRvbid0IGFmZmVjdCBodWdldGxiIG9yIERBWCBtZW1vcnkuIGh1Z2V0bGIgbWVtb3J5IGlzXG4gICBvbmx5IGFmZmVjdGVkIGJ5IGJpdCA1LTYsIGFuZCBEQVggaXMgb25seSBhZmZlY3RlZCBieSBiaXRzIDctOC5cbiBcbi1UaGUgZGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeVxuLXNlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzIGFuZCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFyZSBkdW1wZWQuXG4rICBOb3RlIHRoYXQgYml0IDkgaXMgc2V0IGJ5IGRlZmF1bHQgYmVjYXVzZSB0b29scyBsaWtlIHN5c3RlbWQtY29yZWR1bXAgZ29cbisgIHRocm91Z2ggdGhlIGZkcy4gSWYgeW91IGRvIG5vdCBzZXQgYml0IDksIGZpbGVzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGJ5XG4rICBhbnkgVk1BIGFyZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBTb21lIGZpbGUgcmVsZWFzZSBsb2dpYywgc3VjaCBhc1xuKyAgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWQgYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoXG4rICBlYXJsaWVyLlxuK1xuK1RoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDIzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeVxuK3NlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzLCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFuZCBmZCBsaXN0IGFyZSBkdW1wZWQuXG4gXG4gSWYgeW91IGRvbid0IHdhbnQgdG8gZHVtcCBhbGwgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBhdHRhY2hlZCB0byBwaWQgMTIzNCxcbi13cml0ZSAweDMxIHRvIHRoZSBwcm9jZXNzJ3MgcHJvYyBmaWxlOjpcbit3cml0ZSAweDIzMSB0byB0aGUgcHJvY2VzcydzIHByb2MgZmlsZTo6XG4gXG4tICAkIGVjaG8gMHgzMSBcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcbisgICQgZWNobyAweDIzMSBcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcbiBcbiBXaGVuIGEgbmV3IHByb2Nlc3MgaXMgY3JlYXRlZCwgdGhlIHByb2Nlc3MgaW5oZXJpdHMgdGhlIGJpdG1hc2sgc3RhdHVzIGZyb20gaXRzXG4gcGFyZW50LiBJdCBpcyB1c2VmdWwgdG8gc2V0IHVwIGNvcmVkdW1wX2ZpbHRlciBiZWZvcmUgdGhlIHByb2dyYW0gcnVucy5cbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xuaW5kZXggZTY4YTc2ZmY5MmEzOC4uZDM3OGU2OWM2MzZlMiAxMDA2NDRcbi0tLSBhL2ZzL2NvcmVkdW1wLmNcbisrKyBiL2ZzL2NvcmVkdW1wLmNcbkBAIC01MjAsNiArNTIwLDI1IEBAIHN0YXRpYyBpbnQgemFwX3RocmVhZHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXG4gXHRyZXR1cm4gbnI7XG4gfVxuIFxuKy8qXG4rICogSWYgZG8gbm90IGR1bXAgZmQgbGlzdCwgZmlsZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkgYW55IFZNQVxuKyAqIGNhbiBiZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBUaGVyZWZvcmUsIHNvbWUgZmlsZSByZWxlYXNlXG4rICogbG9naWMsIHN1Y2ggYXMgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWRcbisgKiBidWZmZXJzIGlzIGV4ZWN1dGVkIG11Y2ggZWFybGllci4gTm90ZSB0aGF0IGRvX2NvcmVkdW1wKCkgb2Z0ZW5cbisgKiB0YWtlcyBzZXZlcmFsIHNlY29uZHMgb3IgZXZlbiBsb25nZXIgdG8gZXhlY3V0ZS5cbisgKi9cbitzdGF0aWMgdm9pZCBjb3JlZHVtcF9wcmVfZXhpdCh2b2lkKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudCwgKnQ7XG4rXG4rXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfRFVNUF9GRF9MSVNULCB0c2stXHUwMDNlbW0pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF90aHJlYWQodHNrLCB0KSB7XG4rXHRcdGV4aXRfZmlsZXModCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgY29yZWR1bXBfd2FpdChpbnQgZXhpdF9jb2RlLCBzdHJ1Y3QgY29yZV9zdGF0ZSAqY29yZV9zdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7XG5AQCAtMTEyMyw2ICsxMTQyLDggQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHRpZiAoY24tXHUwMDNlbWFzayBcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRjb3JlZHVtcF9wcmVfZXhpdCgpO1xuK1xuIFx0LyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqL1xuIFx0LyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqL1xuIFx0aWYgKHVuc2hhcmVfZmlsZXMoKSlcbmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmNcbmluZGV4IGM2OGI4YzBhNDA5N2EuLjAyZWU0ZThiMWNmZTggMTAwNjQ0XG4tLS0gYS9mcy9maWxlX3RhYmxlLmNcbisrKyBiL2ZzL2ZpbGVfdGFibGUuY1xuQEAgLTU2OCw3ICs1NjgsMTIgQEAgc3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobGlrZWx5KCFpbl9pbnRlcnJ1cHQoKSBcdTAwMjZcdTAwMjYgISh0YXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSkpIHtcbitcdC8qXG4rXHQgKiBjb3JlZHVtcF9wcmVfZXhpdCgpIG1heSByZWxlYXNlIGZpbGVzIGJlZm9yZSBkdW1waW5nIGNvcmUuXG4rXHQgKiBDYW5ub3QgdXNlIHRhc2tfd29yayBpbiB0aGUgY2FzZSwgbmVlZHMgdG8gcmVsZWFzZSBmaWxlc1xuK1x0ICogZWFybGllci5cbitcdCAqL1xuK1x0aWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgXHUwMDI2XHUwMDI2ICEodGFzay1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0tUSFJFQUQgfCBQRl9EVU1QQ09SRSkpKSkge1xuIFx0XHRpbml0X3Rhc2tfd29yayhcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBfX19fZnB1dCk7XG4gXHRcdGlmICghdGFza193b3JrX2FkZCh0YXNrLCBcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBUV0FfUkVTVU1FKSlcbiBcdFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCBlYmYwZDkxMmJlN2RiLi5mMzU1ODU4YmZiNjJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC0xOTQ3LDE0ICsxOTQ3LDE2IEBAIGVudW0ge1xuICNkZWZpbmUgTU1GX0RVTVBfSFVHRVRMQl9TSEFSRUQgIDhcbiAjZGVmaW5lIE1NRl9EVU1QX0RBWF9QUklWQVRFXHQ5XG4gI2RlZmluZSBNTUZfRFVNUF9EQVhfU0hBUkVEXHQxMFxuKyNkZWZpbmUgTU1GX0RVTVBfRkRfTElTVFx0MTFcbiBcbiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9TSElGVFx0TU1GX0RVTVBBQkxFX0JJVFNcbi0jZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTXHQ5XG4rI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUU1x0MTBcbiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9NQVNLIFxcXG4gXHQoKEJJVChNTUZfRFVNUF9GSUxURVJfQklUUykgLSAxKSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfRklMVEVSX1NISUZUKVxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0RFRkFVTFQgXFxcbiBcdChCSVQoTU1GX0RVTVBfQU5PTl9QUklWQVRFKSB8IEJJVChNTUZfRFVNUF9BTk9OX1NIQVJFRCkgfCBcXFxuLVx0IEJJVChNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUpIHwgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRilcbitcdCAoMSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYgfFxcXG4rXHQgKDEgXHUwMDNjXHUwMDNjIE1NRl9EVU1QX0ZEX0xJU1QpKVxuIFxuICNpZmRlZiBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlNcbiAjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGXHRCSVQoTU1GX0RVTVBfRUxGX0hFQURFUlMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzowOS4zNTAzNjkwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzk5NDYwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb3JlZHVtcCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWx0ZXJzIGhvdyBjb3JlZHVtcHMgYmVoYXZlIGluIHRoZSBrZXJuZWwuIEl0J3MgYWRkaW5nIGEgbmV3IGJpdCwgYml0IDksIGBNTUZfRFVNUF9GRF9MSVNUYCwgdG8gdGhlIGBjb3JlZHVtcF9maWx0ZXJgLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkIGR1cmluZyB0aGUgY29yZWR1bXAgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCB3aGVuIHRoaXMgbmV3IGJpdCAqaXNuJ3QqIHNldCwgYGNvcmVkdW1wX3ByZV9leGl0KClgIGdldHMgY2FsbGVkIGZyb20gd2l0aGluIGBkb19jb3JlZHVtcCgpYC4gVGhhdCdzIHdoZXJlIHRoZSBpdGVyYXRpb24gdGhyb3VnaCB0aHJlYWRzIGFuZCB0aGUgc3Vic2VxdWVudCBjYWxscyB0byBgZXhpdF9maWxlcyh0KWAgaGFwcGVuLCByZWxlYXNpbmcgdGhlIGZpbGVzLiBUaGVyZSdzIGFsc28gc29tZSBpbnRlcmVzdGluZyBsb2dpYyBpbiBgX19mcHV0X2RlZmVycmVkKClgLCB3aGVyZSB0aGUgYFBGX0tUSFJFQUQgfCBQRl9EVU1QQ09SRWAgZmxhZ3MgYXJlIGNoZWNrZWQgdG8gYXZvaWQgdGFzayB3b3JrIHdoZW4gcmVsZWFzaW5nIGZpbGVzIGR1cmluZyBhIGNvcmVkdW1wLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gY29yZSBrZXJuZWwgbG9naWMg4oCTIGNvcmVkdW1wIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSBmaWxlIHRhYmxlLiBJbnRyb2R1Y2luZyBhIG5ldyBmZWF0dXJlLCBlc3BlY2lhbGx5IG9uZSB0aGF0IG1vZGlmaWVzIHRoZSBmaWxlIHJlbGVhc2UgcHJvY2VzcyBkdXJpbmcgYSBjcml0aWNhbCBldmVudCBsaWtlIGEgY29yZWR1bXAsIG1lYW5zIHRoZXJlJ3MgYSBoaWdoZXIgbGlrZWxpaG9vZCBvZiB1bmNvdmVyaW5nIGludGVyZXN0aW5nIGJ1Z3MuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIGBkb19jb3JlZHVtcGAgaXMgb2J2aW91c2x5IGFuIGVudHJ5IHBvaW50LCB0aGUgbWFpbiBmdW5jdGlvbi4gRXZlbiB0aG91Z2ggaXQncyBzb21ld2hhdCBnZW5lcmljLCB0aGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBiZWdpbnMuIGBjb3JlZHVtcF9wcmVfZXhpdGAgaXMgYWxzbyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24sIGFuZCBgX19mcHV0X2RlZmVycmVkYCBpcyBhIGNvbmNlcm4gdG9vLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZW0gaW4gYGZzL2NvcmVkdW1wLmNgIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBmaWxlIHRhYmxlLiBBbmQsIGBkb19jb3JlZHVtcGAgaXMgbm90IHN0YXRpYywgc28gdGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gYGV4aXRfZmlsZXNgIGlzIGxpa2VseSBpbiBga2VybmVsL2V4aXQuY2Agb3IgYSBzaW1pbGFyIGZpbGUuIExldCdzIGRvIGEgc2VhcmNoIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiBob3cgdGhleSdyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjM3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTc6MTYuNjkwMzE4MDU0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDc3Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX2NvcmVkdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvcmVkdW1wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29yZWR1bXAuYz01MDQ9c3RhdGljIGludCB6YXBfdGhyZWFkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayxcXG4tLVxcbmZzL2NvcmVkdW1wLmMtNTI2LSAqIGxvZ2ljLCBzdWNoIGFzIGV4aXRpbmcgZmxvY2sgb3IgcmVsZWFzaW5nIHJlZmVyZW5jZXMgdG8gc2hhcmVkXFxuZnMvY29yZWR1bXAuYzo1Mjc6ICogYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoIGVhcmxpZXIuIE5vdGUgdGhhdCBkb19jb3JlZHVtcCgpIG9mdGVuXFxuZnMvY29yZWR1bXAuYy01MjgtICogdGFrZXMgc2V2ZXJhbCBzZWNvbmRzIG9yIGV2ZW4gbG9uZ2VyIHRvIGV4ZWN1dGUuXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTEwOTk9c3RhdGljIGlubGluZSBib29sIGNvcmVkdW1wX3NraXAoY29uc3Qgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4tLVxcbmZzL2NvcmVkdW1wLmMtMTExMC1cXG5mcy9jb3JlZHVtcC5jOjExMTE6c3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXFxuZnMvY29yZWR1bXAuYy0xMTEyLVxcdFxcdFxcdHNpemVfdCAqKmFyZ3YsIGludCAqYXJnYywgY29uc3Qgc3RydWN0IGxpbnV4X2JpbmZtdCAqYmluZm10KVxcbi0tXFxuZnMvY29yZWR1bXAuYz0xMTgyPXZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pXFxuLS1cXG5mcy9jb3JlZHVtcC5jLTEyMjAtXFx0c2NvcGVkX3dpdGhfY3JlZHMoY3JlZClcXG5mcy9jb3JlZHVtcC5jOjEyMjE6XFx0XFx0ZG9fY29yZWR1bXAoXFx1MDAyNmNuLCBcXHUwMDI2Y3BybSwgXFx1MDAyNmFyZ3YsIFxcdTAwMjZhcmdjLCBiaW5mbXQpO1xcbmZzL2NvcmVkdW1wLmMtMTIyMi1cXHRjb3JlZHVtcF9jbGVhbnVwKFxcdTAwMjZjbiwgXFx1MDAyNmNwcm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzoxNi43NDE4MDA1NDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzI1MDM0MjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb3JlIER1bXAgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBjb3JlIGR1bXBzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGFyY2hpdGVjdHVyZTogYGRvX2NvcmVkdW1wYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0J3MgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIGxpa2VseSB0aGUgKndvcmtob3JzZSogYmVoaW5kIHRoZSBjb3JlIGR1bXAgZnVuY3Rpb25hbGl0eS4gSXQncyBtZWFudCB0byBiZSBoaWRkZW4gd2l0aGluIHRoZSB0cmFuc2xhdGlvbiB1bml0IHdoZXJlIGl0J3MgZGVmaW5lZCwgc2VydmluZyBhcyBhIHByaXZhdGUgaGVscGVyLiBOb3csIHRoZSBwdWJsaWMgZW50cnkgcG9pbnQgbXVzdCBiZSBgdmZzX2NvcmVkdW1wYC4gVGhhdCdzIHRoZSBvbmUgd2UgbmVlZCB0byB0cmFjZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGFjdHVhbGx5IGluaXRpYXRlZC4gTGV0J3MgZGVsdmUgaW50byB0aGUgZGV0YWlscyBvZiBgdmZzX2NvcmVkdW1wYCBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHVzZXItZmFjaW5nIHRyaWdnZXIgYW5kIHRoZSBjb3JlIGR1bXAncyBhY3R1YWwgbWVjaGFuaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODExLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTc6MjMuNDY2ODM3OTQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTgxNjkxMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2NvcmVkdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdD01NTU9ZGlmZmVyZW50IHNldCBvZiBjcmVkZW50aWFscy4gIFRoaXMgaXMgZG9uZSBpbiB0aGUgZm9sbG93aW5nIHBsYWNlczpcXG4tLVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0LTU1Ny0gKiBgYHN5c19mYWNjZXNzYXQoKWBgLlxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0OjU1ODogKiBgYHZmc19jb3JlZHVtcCgpYGAuXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3QtNTU5LSAqIG5mczRyZWNvdmVyLmMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q9MjU0PWNvbnN05oyH6ZKI5LiK5pON5L2c77yM5Zug5q2k5LiN6ZyA6KaB6L+b6KGM57G75Z6L6L2s5o2i77yM5L2G6ZyA6KaB5Li05pe25pS+5byDY29uc3TpmZDlrprvvIzku6Xkvr/og73lpJ/kv67mlLlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC00NzctICogYGBzeXNfZmFjY2Vzc2F0KClgYC5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q6NDc4OiAqIGBgdmZzX2NvcmVkdW1wKClgYC5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3QtNDc5LSAqIG5mczRyZWNvdmVyLmMuXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTExMTE9c3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXFxuLS1cXG5mcy9jb3JlZHVtcC5jLTExODEtXFxuZnMvY29yZWR1bXAuYzoxMTgyOnZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pXFxuZnMvY29yZWR1bXAuYy0xMTgzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaD00OD1pbnQgZHVtcF91c2VyX3JhbmdlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oLTQ5LVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbik7XFxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oOjUwOmV4dGVybiB2b2lkIHZmc19jb3JlZHVtcChjb25zdCBrZXJuZWxfc2lnaW5mb190ICpzaWdpbmZvKTtcXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNTEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNjktI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmg6NzA6c3RhdGljIGlubGluZSB2b2lkIHZmc19jb3JlZHVtcChjb25zdCBrZXJuZWxfc2lnaW5mb190ICpzaWdpbmZvKSB7fVxcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaC03MS1cXG4tLVxcbmtlcm5lbC9zaWduYWwuYz0yODEwPWJvb2wgZ2V0X3NpZ25hbChzdHJ1Y3Qga3NpZ25hbCAqa3NpZylcXG4tLVxcbmtlcm5lbC9zaWduYWwuYy0zMDMwLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9zaWduYWwuYzozMDMxOlxcdFxcdFxcdHZmc19jb3JlZHVtcChcXHUwMDI2a3NpZy1cXHUwMDNlaW5mbyk7XFxua2VybmVsL3NpZ25hbC5jLTMwMzItXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzoyNS4zMjUwMTQ5MzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU4ODc2ODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRmlsZSBEZXNjcmlwdG9yIENsZWFudXAgZHVyaW5nIFNpZ25hbCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBob3cgZmlsZSBkZXNjcmlwdG9ycyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCBjbGVhbnVwIGR1cmluZyBzaWduYWwgZGVsaXZlcnkuIE15IHRyYWluIG9mIHRob3VnaHQgc3RhcnRzIHdpdGggYHZmc19jb3JlZHVtcGAgYW5kIGhvdyBpdCdzIGNhbGxlZCBmcm9tIGBnZXRfc2lnbmFsYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBJJ20gd29uZGVyaW5nIGFib3V0IGBfX2ZwdXRfZGVmZXJyZWRgLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkLCBhbmQgaXRzIGRpcmVjdCB1c2FnZSBtaWdodCBiZSByZXN0cmljdGVkLlxuXG5UaGUgcXVlc3Rpb24gaXMsIHdoYXQgY2FsbHMgYF9fZnB1dF9kZWZlcnJlZGAgaW4gYGZzL2ZpbGVfdGFibGUuY2A/IElzIHRoZXJlIGFub3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbiBpbiB0aGF0IGZpbGUgdGhhdCBkb2VzPyBIb2xkIG9uLCBgX19mcHV0X2RlZmVycmVkYCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBlaXRoZXIgYGZwdXRgIG9yIGBmcHV0X21hbnlgLCByaWdodD8gT2theSwgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbiBhbmQgdG8gYnVpbGQgdGhlIG1hcCwgSSBzaG91bGQgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUgaW4gYGZzL2ZpbGVfdGFibGUuY2AgYWdhaW4uIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHN1cmUgd2hlcmUgdGhpcyB0aGluZyBmaXRzIGluIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYyOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU3OjI5LjQ4Mzg5NDczNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM2ODYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZwdXRfZGVmZXJyZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmlsZV90YWJsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZpbGVfdGFibGUuYz01NjA9RVhQT1JUX1NZTUJPTF9HUEwoZmx1c2hfZGVsYXllZF9mcHV0KTtcXG5mcy9maWxlX3RhYmxlLmMtNTYxLVxcbmZzL2ZpbGVfdGFibGUuYzo1NjI6c3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL2ZpbGVfdGFibGUuYy01NjMte1xcbi0tXFxuZnMvZmlsZV90YWJsZS5jPTU5MT12b2lkIGZwdXQoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9maWxlX3RhYmxlLmMtNTkzLVxcdGlmICh1bmxpa2VseShmaWxlX3JlZl9wdXQoXFx1MDAyNmZpbGUtXFx1MDAzZWZfcmVmKSkpXFxuZnMvZmlsZV90YWJsZS5jOjU5NDpcXHRcXHRfX2ZwdXRfZGVmZXJyZWQoZmlsZSk7XFxuZnMvZmlsZV90YWJsZS5jLTU5NS19XFxuLS1cXG5mcy9maWxlX3RhYmxlLmM9NjMxPXZvaWQgZnB1dF9jbG9zZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2ZpbGVfdGFibGUuYy02MzMtXFx0aWYgKGZpbGVfcmVmX3B1dF9jbG9zZShcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yZWYpKVxcbmZzL2ZpbGVfdGFibGUuYzo2MzQ6XFx0XFx0X19mcHV0X2RlZmVycmVkKGZpbGUpO1xcbmZzL2ZpbGVfdGFibGUuYy02MzUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzoyOS41MzIyNjc3MzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzkwMTU0ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5vbi1TdGF0aWMgRmlsZSBIYW5kbGluZyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiBmaWxlIGhhbmRsaW5nLCBhbmQgSSd2ZSBub3RpY2VkIHRoYXQgYGZwdXRgIGFuZCBgZnB1dF9jbG9zZWAgYXJlIGRlZmluZWQgYXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlbSBhcyBwb3RlbnRpYWxseSBjcml0aWNhbCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gb3IgcGVyaGFwcyB1c2VkIHdpdGhpbiBhIG1vcmUgY29tcGxleCBzZXQgb2Ygcm91dGluZXMuICBBbmQgdGhlbiB0aGVyZSdzIGBleGl0X2ZpbGVzYCwgYWxzbyBub24tc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBpbiBhIHRlcm1pbmF0aW9uIGNvbnRleHQuIFNvIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBjYWxsaW5nIHRoZW0sIHdoYXQgdGhleSdyZSBkb2luZywgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvZXhpdC5jYCBvciB3aGVyZXZlciB0aG9zZSByb3V0aW5lcyBhcmUgZGVmaW5lZCDigJMgcHJvYmFibHkgaW4gdGhlIGtlcm5lbCdzIGZpbGUgc3lzdGVtIHNlY3Rpb24sIGRlcGVuZGluZyBvbiBob3cgdGhpcyBpcyBzdHJ1Y3R1cmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1MCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU3OjM4LjkyMjQyNTUzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyODk1MzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleGl0X2ZpbGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb3JlZHVtcC5jPTUzMD1zdGF0aWMgdm9pZCBjb3JlZHVtcF9wcmVfZXhpdCh2b2lkKVxcbi0tXFxuZnMvY29yZWR1bXAuYy01MzctXFx0Zm9yX2VhY2hfdGhyZWFkKHRzaywgdCkge1xcbmZzL2NvcmVkdW1wLmM6NTM4OlxcdFxcdGV4aXRfZmlsZXModCk7XFxuZnMvY29yZWR1bXAuYy01MzktXFx0fVxcbi0tXFxuZnMvZmlsZS5jPTUwNj12b2lkIHB1dF9maWxlc19zdHJ1Y3Qoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXFxuLS1cXG5mcy9maWxlLmMtNTE3LVxcbmZzL2ZpbGUuYzo1MTg6dm9pZCBleGl0X2ZpbGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmZzL2ZpbGUuYy01MTkte1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg9OTM9ZXh0ZXJuIF9fbm9yZXR1cm4gdm9pZCBkb19ncm91cF9leGl0KGludCk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtOTQtXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg6OTU6ZXh0ZXJuIHZvaWQgZXhpdF9maWxlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtOTYtZXh0ZXJuIHZvaWQgZXhpdF9pdGltZXJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcXG4tLVxcbmtlcm5lbC9leGl0LmM9OTI5PXZvaWQgX19ub3JldHVybiBkb19leGl0KGxvbmcgY29kZSlcXG4tLVxcbmtlcm5lbC9leGl0LmMtMTAwMy1cXHRleGl0X3NobSh0c2spO1xcbmtlcm5lbC9leGl0LmM6MTAwNDpcXHRleGl0X2ZpbGVzKHRzayk7XFxua2VybmVsL2V4aXQuYy0xMDA1LVxcdGV4aXRfZnModHNrKTtcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MTk5ND1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yNTk1LWJhZF9mb3JrX2NsZWFudXBfZmlsZXM6XFxua2VybmVsL2ZvcmsuYzoyNTk2OlxcdGV4aXRfZmlsZXMocCk7IC8qIGJsb2NraW5nICovXFxua2VybmVsL2ZvcmsuYy0yNTk3LWJhZF9mb3JrX2NsZWFudXBfc2VtdW5kbzpcXG4tLVxcbmtlcm5lbC9waWQuYz04Nzk9c3RhdGljIHN0cnVjdCBmaWxlICpfX3BpZGZkX2ZnZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgZmQpXFxuLS1cXG5rZXJuZWwvcGlkLmMtOTAxLVxcdFxcdCAqIDEuIGJlZm9yZSBleGl0X3NpZ25hbHMoKSwgd2hpY2ggZ2l2ZXMgYSByZWFsIGZkXFxua2VybmVsL3BpZC5jOjkwMjpcXHRcXHQgKiAyLiBiZWZvcmUgZXhpdF9maWxlcygpIHRha2VzIHRoZSB0YXNrX2xvY2soKSBnaXZlcyBhIHJlYWwgZmRcXG5rZXJuZWwvcGlkLmM6OTAzOlxcdFxcdCAqIDMuIGFmdGVyIGV4aXRfZmlsZXMoKSByZWxlYXNlcyB0YXNrX2xvY2soKSwgLVxcdTAwM2VmaWxlcyBpcyBOVUxMO1xcbmtlcm5lbC9waWQuYy05MDQtXFx0XFx0ICogICAgdGhpcyBoYXMgUEZfRVhJVElORywgc2luY2UgaXQgd2FzIHNldCBpbiBleGl0X3NpZ25hbHMoKSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkX2dldGZkX3Rlc3QuYz0yNDQ9VEVTVF9GKGNoaWxkLCBub19zdHJhbmdlX0VCQURGKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcGlkZmQvcGlkZmRfZ2V0ZmRfdGVzdC5jLTI1Ny1cXHQgKiBJdCB1c2VkIHRvIGJlIHRoYXQgcGlkZmRfZ2V0ZmQoKSBjb3VsZCByYWNlIHdpdGggdGhlIGV4aXRpbmcgdGhyZWFkXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcGlkZmQvcGlkZmRfZ2V0ZmRfdGVzdC5jOjI1ODpcXHQgKiBiZXR3ZWVuIGV4aXRfZmlsZXMoKSBhbmQgcmVsZWFzZV90YXNrKCksIGFuZCBnZXQgYSBub24tbnVsbCB0YXNrXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcGlkZmQvcGlkZmRfZ2V0ZmRfdGVzdC5jLTI1OS1cXHQgKiB3aXRoIGEgTlVMTCBmaWxlcyBzdHJ1Y3QsIGFuZCB5b3UnZCBnZXQgRUJBREYsIHdoaWNoIHdhcyBzbGlnaHRseVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1Nzo0MC44NTEzODY3MjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4NzkxMTkyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvcmVkdW1wIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGNvcmVkdW1wcywgYW5kIGl0IHNlZW1zIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUgaXMgYHZmc19jb3JlZHVtcGAg4oCTIHRoYXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGF0IGtpY2tzIGV2ZXJ5dGhpbmcgb2ZmLiBOb3csIHRoZXkndmUgYWRkZWQgYSBuZXcgYml0LCBgTU1GX0RVTVBfRkRfTElTVGAgKGJpdCA5KSwgdG8gYGNvcmVkdW1wX2ZpbHRlcmAuIFRoYXQncyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBmbGFnLlxuXG5JZiB0aGF0IGBNTUZfRFVNUF9GRF9MSVNUYCBiaXQgaXNuJ3Qgc2V0LCB0aGVuIHRoZSBjb2RlIGNhbGxzIGBjb3JlZHVtcF9wcmVfZXhpdGAuIEFuZCBmcm9tIHRoZXJlLCBpdCBhcHBlYXJzIHRoZSBmdW5jdGlvbiBjYWxscyBgZXhpdF9maWxlcyh0KWAgZm9yIGFsbCB0aHJlYWRzLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBBIGNvcmVkdW1wIGNvbWJpbmVkIHdpdGggYSBtb2RpZmllZCBgY29yZWR1bXBfZmlsdGVyYCBzb3VuZHMgbGlrZSBpdCBjb3VsZCBiZSBlYXNpbHkgZnV6emVkIHRvIHRyaWdnZXIgc29tZSB1bmV4cGVjdGVkIGJlaGF2aW9ycy4gSSBzaG91bGQgbWFrZSBhIG5vdGUgdG8gZm9sbG93IHRoYXQgcGF0aC5cblxuVGhlIHdheSB0byBtb2RpZnkgdGhhdCBgY29yZWR1bXBfZmlsdGVyYCBpcyB0aHJvdWdoIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLCB3aGljaCBpcyBzdGFuZGFyZC4gSSBhbSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc3BlY2lmaWMgY29uZmlnIHJlcXVpcmVkIGZvciBjb3JlZHVtcHMgdG8gYmUgZW5hYmxlZCBvbiB0aGUgc3lzdGVtLCBmb3IgZXhhbXBsZSwgYENPTkZJR19DT1JFRFVNUGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTg6MTYuNzMwNTEwMTY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM5NjMwMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT1JFRFVNUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXQ9MTQ1PWNvbmZpZyBCSU5GTVRfTUlTQ1xcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcwLVxcbmZzL0tjb25maWcuYmluZm10OjE3MTpjb25maWcgQ09SRURVTVBcXG5mcy9LY29uZmlnLmJpbmZtdC0xNzItXFx0Ym9vbCBcXFwiRW5hYmxlIGNvcmUgZHVtcCBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTg6MTguODcwMTQ2ODQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MDA1MzMwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb3JlZHVtcCBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYENPTkZJR19DT1JFRFVNUGAgaXMgdGhlIGJhc2UgY29uZmlndXJhdGlvbiwgdGhhdCdzIGNsZWFyLiBCdXQgaG9sZCBvbiwgdGhlIGRvY3VtZW50YXRpb24gaXMgc2xpZ2h0bHkgb2ZmLiBJIG5lZWQgdG8gc29ydCBvdXQgdGhlc2UgYml0IG51bWJlcnMuIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGBNTUZfRFVNUF9GRF9MSVNUYCBpcyBiaXQgOSwgYnV0IGluIGBtbV90eXBlcy5oYCwgaXQncyBiaXQgMTEuIEFoLCBub3cgSSBzZWUgdGhlIHByb2JsZW0uIGBNTUZfRFVNUF9GRF9MSVNUYCBpcyBiaXQgMTEgaW4gYG1tX2ZsYWdzYCwgYnV0IGJpdCAyIGluIGBtbV9mbGFnc2AgaXMgYE1NRl9EVU1QX0FOT05fUFJJVkFURWAuIFdoaWNoLCBtZWFucyBiaXQgMCBpbiB0aGUgZmlsdGVyIGNvcnJlc3BvbmRzIHRvIGJpdCAyIGluIGBtbV9mbGFnc2AuIEFuZCwgdGhpcyBpcyBhbGwgY29ycmVjdC4gR29vZC5cblxuVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnMvY29yZWR1bXAuY2AsIGBmcy9maWxlX3RhYmxlLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvbW1fdHlwZXMuaGAuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3Igb2Ygc29tZXRoaW5nIHNpZ25pZmljYW50LCBsaWtlbHkgaW52b2x2aW5nIGZpbGUgaGFuZGxpbmcgZHVyaW5nIGNvcmVkdW1wcy4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gVGltZSB0byBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIEknbSBzZWVpbmcgYHZmc19jb3JlZHVtcGAsIGBmcHV0YCwgYGZwdXRfY2xvc2VgLCBhbmQgYGV4aXRfZmlsZXNgLiBXYWl0LCBgZnB1dGAgYW5kIGBmcHV0X2Nsb3NlYCBhcmUgKnZlcnkqIGhvdCBwYXRocywgSSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHRhcmdldCB0aG9zZSwgdGhlIHNpZ25hbCB0byBub2lzZSByYXRpbyB3aWxsIGJlIHRlcnJpYmxlLiBMZXQncyB0aGluayB0aGlzIHRocm91Z2guIGB2ZnNfY29yZWR1bXBgIGFuZCBgZXhpdF9maWxlc2Agc2VlbSBsaWtlIGJldHRlciBjYW5kaWRhdGVzLiBgZXhpdF9maWxlc2AgaXMgcmVhc29uYWJseSBob3Qgc2luY2UgaXQncyBjYWxsZWQgb24gZXZlcnkgcHJvY2VzcyBleGl0LCBidXQgYHZmc19jb3JlZHVtcGAgaXMgbm90LlxuXG5MZXQncyBkbyBhIHF1aWNrIHN3ZWVwIG9mIGBmcy9jb3JlZHVtcC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGJ1dCBhcmUgbm90IGhvdC4gTG9va2luZy4uLm5vIGNoYW5nZXMgdG8gYGR1bXBfdXNlcl9yYW5nZWAuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGluIGBkb19jb3JlZHVtcGAgYW5kIGBfX2ZwdXRfZGVmZXJyZWRgLiBCdXQgYGRvX2NvcmVkdW1wYCBpcyBzdGF0aWMuIExvb2tzIGxpa2UgYHZmc19jb3JlZHVtcGAgaXMgdGhlIGJlc3QgYmV0IGFzIHRoZSBwcmltYXJ5IGZvY3VzLlxuXG5PaCwgYW5kIHRoZXJlJ3MgdGhlIGBjb3JlZHVtcF9maWx0ZXJgIGV4cG9zZWQgdmlhIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLiBUaGUgd3JpdGUgaGFuZGxlciwgYHByb2NfY29yZWR1bXBfZmlsdGVyX3dyaXRlYCwgaXMgaW4gYGZzL3Byb2MvYmFzZS5jYC4gV2UnbGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCB3b3JrcyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODE0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU4OjI4LjY3MDY4Mjc4MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1ODAxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29yZWR1bXBfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTI5MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfYXR0cl9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTI5MjItI2lmZGVmIENPTkZJR19FTEZfQ09SRVxcbmZzL3Byb2MvYmFzZS5jOjI5MjM6c3RhdGljIHNzaXplX3QgcHJvY19jb3JlZHVtcF9maWx0ZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG5mcy9wcm9jL2Jhc2UuYy0yOTI0LVxcdFxcdFxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTI5NTEtXFxuZnMvcHJvYy9iYXNlLmM6Mjk1MjpzdGF0aWMgc3NpemVfdCBwcm9jX2NvcmVkdW1wX2ZpbHRlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5mcy9wcm9jL2Jhc2UuYy0yOTUzLVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTI5OTMtXFxuZnMvcHJvYy9iYXNlLmM6Mjk5NDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2NvcmVkdW1wX2ZpbHRlcl9vcGVyYXRpb25zID0ge1xcbmZzL3Byb2MvYmFzZS5jOjI5OTU6XFx0LnJlYWRcXHRcXHQ9IHByb2NfY29yZWR1bXBfZmlsdGVyX3JlYWQsXFxuZnMvcHJvYy9iYXNlLmM6Mjk5NjpcXHQud3JpdGVcXHRcXHQ9IHByb2NfY29yZWR1bXBfZmlsdGVyX3dyaXRlLFxcbmZzL3Byb2MvYmFzZS5jLTI5OTctXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTMyODI9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGdpZF9iYXNlX3N0dWZmW10gPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zMzYyLSNpZmRlZiBDT05GSUdfRUxGX0NPUkVcXG5mcy9wcm9jL2Jhc2UuYzozMzYzOlxcdFJFRyhcXFwiY29yZWR1bXBfZmlsdGVyXFxcIiwgU19JUlVHT3xTX0lXVVNSLCBwcm9jX2NvcmVkdW1wX2ZpbHRlcl9vcGVyYXRpb25zKSxcXG5mcy9wcm9jL2Jhc2UuYy0zMzY0LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1ODoyOC43MjMyNzAxNTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1NDYwNjUyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gQ29yZSBEdW1wIEZpbHRlciBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHplcm9lZCBpbiBvbiBgcHJvY19jb3JlZHVtcF9maWx0ZXJfd3JpdGVgIGFuZCBgcHJvY19jb3JlZHVtcF9maWx0ZXJfcmVhZGAgYXMgcG90ZW50aWFsbHkgdXNlZnVsIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhpcyBhbmFseXNpcy4gSG93ZXZlciwgYSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYHByb2NfY29yZWR1bXBfZmlsdGVyX3dyaXRlYCBpcyBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGEgcHJvYmxlbSwgYXMgdGhlIGluc3RydWN0aW9ucyBhcmUgcXVpdGUgY2xlYXI6IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLlxuXG5SaWdodCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIEFoLCB5ZXMsIGB2ZnNfY29yZWR1bXBgIGlzIGEgbm9uLXN0YXRpYyBlbnRyeSBwb2ludC4gQnV0IGlzIHRoZXJlIGFub3RoZXIgb3B0aW9uPyBJIGtub3cgYGZwdXRgIGFuZCBgZnB1dF9jbG9zZWAgYXJlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBidXQgdGhleSBhcmUgaG90IHBhdGhzIGFuZCBJIHNob3VsZCBhdm9pZCB0aG9zZS4gU28sIGl0IHNlZW1zIGxpa2UgYHZmc19jb3JlZHVtcGAgaXMgdGhlIGJlc3QgY2hvaWNlIGZvciBteSBmb2N1cy5cblxuTmV4dCwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgQ09ORklHX0NPUkVEVU1QYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcgaGVyZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgIGZpbGUgYW5kIGNvbmZpZ3VyYXRpb25zLCB0byBiZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYSByZWxldmFudCBjb25maWd1cmF0aW9uLiBXYWl0LCBpdCBzZWVtcyB0aGUgZmlsZSBpcyB1bmRlciBgQ09ORklHX0VMRl9DT1JFYCwgc28gaXQncyBhIGJpdCBtb3JlIGludm9sdmVkIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1ODo0MS4yNjkzMzgyMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzY0MDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRUxGX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODAxPWNvbmZpZyBCVUdcXG4tLVxcbmluaXQvS2NvbmZpZy0xODEwLVxcbmluaXQvS2NvbmZpZzoxODExOmNvbmZpZyBFTEZfQ09SRVxcbmluaXQvS2NvbmZpZy0xODEyLVxcdGRlcGVuZHMgb24gQ09SRURVTVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTg6NDMuMDEyOTg4Mjc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDg0MzE2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCwgc28gYEVMRl9DT1JFYCBhbmQgYENPUkVEVU1QYCBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEludGVyZXN0aW5nLiBOb3csIEkgc2VlbSB0byByZWNhbGwgYSBkZXBlbmRlbmN5IGJldHdlZW4gdGhlbS4uLiBMZXQgbWUganVzdCB2ZXJpZnkgdGhhdC4gQWggeWVzLCBgRUxGX0NPUkVgIGRlcGVuZHMgb24gYENPUkVEVU1QYC4gR29vZC4gVGhhdCBtYWtlcyBzZW5zZS4gT2theSwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBqdXN0IGRvdWJsZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgcmVsYXRpb25zaGlwcyBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSSdsbCB0YWtlIGEgbG9vayBpbiB0aGVyZSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU4OjQ3LjcyMTQyMjYyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNzE3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVMRl9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTgwMT1jb25maWcgQlVHXFxuLS1cXG5pbml0L0tjb25maWctMTgxMC1cXG5pbml0L0tjb25maWc6MTgxMTpjb25maWcgRUxGX0NPUkVcXG5pbml0L0tjb25maWctMTgxMi1cXHRkZXBlbmRzIG9uIENPUkVEVU1QXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU4OjQ3Ljc2NzcwNTQ2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODc0NDc2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgd2hlcmUncyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBJJ20gbG9va2luZyBmb3I/IEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIEl0J3MgZ2VuZXJhbGx5IHRoZSBjZW50cmFsIGh1YiBmb3IgYSBsb3Qgb2YgZnVuZGFtZW50YWwga2VybmVsIG9wdGlvbnMsIGFuZCB0aGUgZmlsZSBuYW1lIHN1Z2dlc3RzIGl0J3MgaW52b2x2ZWQgaW4gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHdoaWNoIG9mdGVuIHRvdWNoZXMgYSB2YXJpZXR5IG9mIGJhc2UgbW9kdWxlcy5cblxuQWxyaWdodCwgbm93IGxldCdzIHRyeSB0byBmb2N1cyBvbiBhIG1vcmUgZ3JhbnVsYXIgbG9jYXRpb24gdG8gc3RhcnQgbXkgc2VhcmNoLiBMaW5lIDE4MTEgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3BvdCB3aXRoaW4gc3VjaCBhIGZpbGUgdG8gdHJ5IHRvIGZpbmQgdGhlIHNwZWNpZmljIG9wdGlvbnMgSSBtaWdodCBiZSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwOTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1ODo1MS4zNTUxNTU3NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MDU6XFx0XFx0ICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gZWxpbWluYXRlcyBzdXBwb3J0IGZvciBCVUcgYW5kIFdBUk4sIHJlZHVjaW5nXFxuMTgwNjpcXHRcXHQgIHRoZSBzaXplIG9mIHlvdXIga2VybmVsIGltYWdlIGFuZCBwb3RlbnRpYWxseSBxdWlldGx5IGlnbm9yaW5nXFxuMTgwNzpcXHRcXHQgIG51bWVyb3VzIGZhdGFsIGNvbmRpdGlvbnMuIFlvdSBzaG91bGQgb25seSBjb25zaWRlciBkaXNhYmxpbmcgdGhpc1xcbjE4MDg6XFx0XFx0ICBvcHRpb24gZm9yIGVtYmVkZGVkIHN5c3RlbXMgd2l0aCBubyBmYWNpbGl0aWVzIGZvciByZXBvcnRpbmcgZXJyb3JzLlxcbjE4MDk6XFx0XFx0ICBKdXN0IHNheSBZLlxcbjE4MTA6XFx0XFxuMTgxMTpcXHRjb25maWcgRUxGX0NPUkVcXG4xODEyOlxcdFxcdGRlcGVuZHMgb24gQ09SRURVTVBcXG4xODEzOlxcdFxcdGRlZmF1bHQgeVxcbjE4MTQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEVMRiBjb3JlIGR1bXBzXFxcIiBpZiBFWFBFUlRcXG4xODE1OlxcdFxcdGhlbHBcXG4xODE2OlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgY29yZSBkdW1wcy4gRGlzYWJsaW5nIHNhdmVzIGFib3V0IDRrLlxcbjE4MTc6XFx0XFxuMTgxODpcXHRcXG4xODE5OlxcdGNvbmZpZyBQQ1NQS1JfUExBVEZPUk1cXG4xODIwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBQQy1TcGVha2VyIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE4MjE6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX1BDU1BLUl9QTEFURk9STVxcbjE4MjI6XFx0XFx0c2VsZWN0IEk4MjUzX0xPQ0tcXG4xODIzOlxcdFxcdGRlZmF1bHQgeVxcbjE4MjQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1ODo1MS4zNTUyNzYzN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTM3MTU0NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29yZSBEdW1wIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBjb3JlIGR1bXBzIGFuZCBob3cgdG8gY29uZmlndXJlIHRoZW0uIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cywgYXMgdXN1YWwsIGFyZSBgRUxGX0NPUkVgIGFuZCBgQ09SRURVTVBgIOKAkyB0aGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlbiwgaXQgaGl0cyBtZeKApiBJIGNhbid0IGZvcmdldCBhYm91dCBgL3Byb2MvW3BpZF0vY29yZWR1bXBfZmlsdGVyYC4gVGhhdCBtZWFucyBgUFJPQ19GU2AgaGFzIHRvIGJlIGVuYWJsZWQgdG9vLCBkb2Vzbid0IGl0PyBJdCBhbGwgaGFzIHRvIHdvcmsgaW4gY29uY2VydCB0byBnaXZlIGEgbWVhbmluZ2Z1bCBjb3JlZHVtcCwgc28gSSBtdXN0IHRha2UgdGhhdCBpbnRvIGFjY291bnQsIGFzIHdlbGwuIEdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MDgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU5OjAwLjI5MjQzMzg3N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxMjQ0MDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPQ19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcXG5mcy9wcm9jL0tjb25maWctMy1cXHRib29sIFxcXCIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTk6MDIuMDA0ODc4NzM5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MTY4NTMyNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb3JlIER1bXAgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gY29yZSBkdW1wcy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQ09SRURVTVBgLCBgRUxGX0NPUkVgLCBhbmQgYFBST0NfRlNgLiBUaGUgbWVhdCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGNvcmVkdW1wIGhhbmRsaW5nIGFuZCBmaWxlIGNsb3NpbmcuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBzaG91bGQgYmUgb24gdGhlIGB2ZnNfY29yZWR1bXBgIHN5bWJvbC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYml0IGluIHRoZSBgY29yZWR1bXBfZmlsdGVyYCwgd2hpY2ggY29udHJvbHMgd2hlbiBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWxlYXNlZCBkdXJpbmcgYSBjb3JlIGR1bXAuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIGludGVyZXN0aW5nIHN0YXRlcyBhbmQgZWRnZSBjYXNlcyB3aXRoaW4gYGZzL2NvcmVkdW1wLmNgIGFuZCBgZnMvZmlsZV90YWJsZS5jYC4gVGhlIGZhY3QgdGhhdCB3ZSBjYW4gbWFuaXB1bGF0ZSB0aGlzIHRocm91Z2ggYC9wcm9jL1twaWRdL2NvcmVkdW1wX2ZpbHRlcmAgbWFrZXMgaXQgZXZlbiBtb3JlIGF0dHJhY3RpdmUgZm9yIGZ1enppbmcuXG5cbkkgcXVpY2tseSBzY2FubmVkIGZvciBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMuIFdoaWxlIGBmcHV0YCBhbmQgYGZwdXRfY2xvc2VgIGFyZSB0b3VjaGVkICh0aHJvdWdoIGBfX2ZwdXRfZGVmZXJyZWRgKSBhbmQgYGV4aXRfZmlsZXNgIGlzIGFsc28gbW9kaWZpZWQgKHZpYSBgY29yZWR1bXBfcHJlX2V4aXRgKSwgdGhlc2UgYXJlIGhvdCBwYXRocyBhbmQgdGhlcmVmb3JlLCBsaWtlbHkgbW9yZSB0aG9yb3VnaGx5IHRlc3RlZC4gYHZmc19jb3JlZHVtcGAgaXMgc3RpbGwgbXkgYmVzdCBiZXQuXG5cblNvLCBoZXJlJ3MgbXkgcHJlcGFyZWQgc3VtbWFyeSBmb3IgZnVydGhlciBhbmFseXNpczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKipcbiogICAqKkZvY3VzU3ltYm9sczoqKiBcXFtcInZmc1xcX2NvcmVkdW1wXCJdXG4qICAgKipFbmFibGVDb25maWdzOioqIFxcW1wiQ09SRURVTVBcIiwgXCJFTEZcXF9DT1JFXCIsIFwiUFJPQ1xcX0ZTXCJdXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYml0IGluIGBjb3JlZHVtcF9maWx0ZXJgIHRvIGNvbnRyb2wgd2hldGhlciBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWxlYXNlZCBiZWZvcmUgb3IgYWZ0ZXIgZHVtcGluZyBjb3JlLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBmcy9jb3JlZHVtcC5jYCBhbmQgYGZzL2ZpbGVfdGFibGUuY2AsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29yZWR1bXAgZ2VuZXJhdGlvbiBhbmQgYC9wcm9jL1twaWRdL2NvcmVkdW1wX2ZpbHRlcmAuXG5cbkknbSBjb25maWRlbnQgdGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gZGl2ZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc4LCJPdXRwdXRUb2tlbnMiOjEyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1OToxOS4xNzM0MTM5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjUwOTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT1JFRFVNUFwiLFxuICAgIFwiRUxGX0NPUkVcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfY29yZWR1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJpdCBpbiBgY29yZWR1bXBfZmlsdGVyYCB0byBjb250cm9sIHdoZXRoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgcmVsZWFzZWQgYmVmb3JlIG9yIGFmdGVyIGR1bXBpbmcgY29yZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvcmVkdW1wIGdlbmVyYXRpb24gYW5kIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPUkVEVU1QXCIsXG4gICAgXCJFTEZfQ09SRVwiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19jb3JlZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYml0IGluIGBjb3JlZHVtcF9maWx0ZXJgIHRvIGNvbnRyb2wgd2hldGhlciBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWxlYXNlZCBiZWZvcmUgb3IgYWZ0ZXIgZHVtcGluZyBjb3JlLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBmcy9jb3JlZHVtcC5jYCBhbmQgYGZzL2ZpbGVfdGFibGUuY2AsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29yZWR1bXAgZ2VuZXJhdGlvbiBhbmQgYC9wcm9jL1twaWRdL2NvcmVkdW1wX2ZpbHRlcmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU5OjE5LjI0NjY3MDQyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyOTI4OTcxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1OToxOS4yNDcyMTgxNDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIyOTIzNDQzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlZHVtcCBsb2dpYyB0byBhbGxvdyByZWxlYXNpbmcgZmlsZSBkZXNjcmlwdG9ycyBlYXJsaWVyIGR1cmluZyBhIGNvcmVkdW1wIGlmIHRoZSBgTU1GX0RVTVBfRkRfTElTVGAgZmlsdGVyIGJpdCBpcyBub3Qgc2V0LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBjb3JlZHVtcF9wcmVfZXhpdCgpYCB3aGljaCBjYWxscyBgZXhpdF9maWxlcygpYCBvbiBhbGwgdGhyZWFkcywgYW5kIG1vZGlmaWVzIGBfX2ZwdXRfZGVmZXJyZWQoKWAgdG8gYnlwYXNzIGB0YXNrX3dvcmtgIHdoZW4gYFBGX0RVTVBDT1JFYCBpcyBzZXQuXFxuVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHRpbWluZyBvZiBmaWxlIGRlc2NyaXB0b3JzIGR1cmluZyBhIGNvcmVkdW1wLiBUaGUgcHJpbWFyeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHVzZS1hZnRlci1mcmVlIChpZiBhIGZpbGUgaXMgYWNjZXNzZWQgYWZ0ZXIgYmVpbmcgcmVsZWFzZWQpIG9yIGxvY2tpbmcgaXNzdWVzIChkdWUgdG8gc3luY2hyb25vdXMgYGZwdXRgIGluc3RlYWQgb2YgZGVmZXJyZWQpLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTY5MmFiNjk3M2Q5OTQ5ZmUzOGZhNzdhYThmNmI2N2ZiZjNiMDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAwNTo1NzowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG5pbmRleCAyNzE4OWY2ZTAwNGVlLi4wMDFjZTEzNmU5NjRiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuQEAgLTE5MjksNyArMTkyOSw3IEBAIHdpbGwgYmUgZHVtcGVkIHdoZW4gdGhlIFx1MDAzY3BpZFx1MDAzZSBwcm9jZXNzIGlzIGR1bXBlZC4gY29yZWR1bXBfZmlsdGVyIGlzIGEgYml0bWFza1xuIG9mIG1lbW9yeSB0eXBlcy4gSWYgYSBiaXQgb2YgdGhlIGJpdG1hc2sgaXMgc2V0LCBtZW1vcnkgc2VnbWVudHMgb2YgdGhlXG4gY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC5cbiBcbi1UaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XG4rVGhlIGZvbGxvd2luZyAxMCBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcbiBcbiAgIC0gKGJpdCAwKSBhbm9ueW1vdXMgcHJpdmF0ZSBtZW1vcnlcbiAgIC0gKGJpdCAxKSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeVxuQEAgLTE5NDEsNiArMTk0MSw3IEBAIFRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcbiAgIC0gKGJpdCA2KSBodWdldGxiIHNoYXJlZCBtZW1vcnlcbiAgIC0gKGJpdCA3KSBEQVggcHJpdmF0ZSBtZW1vcnlcbiAgIC0gKGJpdCA4KSBEQVggc2hhcmVkIG1lbW9yeVxuKyAgLSAoYml0IDkpIGZkIGxpc3RcbiBcbiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXNcbiAgIGFyZSBhbHdheXMgZHVtcGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGJpdG1hc2sgc3RhdHVzLlxuQEAgLTE5NDgsMTMgKzE5NDksMTkgQEAgVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOlxuICAgTm90ZSB0aGF0IGJpdHMgMC00IGRvbid0IGFmZmVjdCBodWdldGxiIG9yIERBWCBtZW1vcnkuIGh1Z2V0bGIgbWVtb3J5IGlzXG4gICBvbmx5IGFmZmVjdGVkIGJ5IGJpdCA1LTYsIGFuZCBEQVggaXMgb25seSBhZmZlY3RlZCBieSBiaXRzIDctOC5cbiBcbi1UaGUgZGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeVxuLXNlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzIGFuZCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFyZSBkdW1wZWQuXG4rICBOb3RlIHRoYXQgYml0IDkgaXMgc2V0IGJ5IGRlZmF1bHQgYmVjYXVzZSB0b29scyBsaWtlIHN5c3RlbWQtY29yZWR1bXAgZ29cbisgIHRocm91Z2ggdGhlIGZkcy4gSWYgeW91IGRvIG5vdCBzZXQgYml0IDksIGZpbGVzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGJ5XG4rICBhbnkgVk1BIGFyZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBTb21lIGZpbGUgcmVsZWFzZSBsb2dpYywgc3VjaCBhc1xuKyAgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWQgYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoXG4rICBlYXJsaWVyLlxuK1xuK1RoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDIzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeVxuK3NlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzLCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFuZCBmZCBsaXN0IGFyZSBkdW1wZWQuXG4gXG4gSWYgeW91IGRvbid0IHdhbnQgdG8gZHVtcCBhbGwgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBhdHRhY2hlZCB0byBwaWQgMTIzNCxcbi13cml0ZSAweDMxIHRvIHRoZSBwcm9jZXNzJ3MgcHJvYyBmaWxlOjpcbit3cml0ZSAweDIzMSB0byB0aGUgcHJvY2VzcydzIHByb2MgZmlsZTo6XG4gXG4tICAkIGVjaG8gMHgzMSBcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcbisgICQgZWNobyAweDIzMSBcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcbiBcbiBXaGVuIGEgbmV3IHByb2Nlc3MgaXMgY3JlYXRlZCwgdGhlIHByb2Nlc3MgaW5oZXJpdHMgdGhlIGJpdG1hc2sgc3RhdHVzIGZyb20gaXRzXG4gcGFyZW50LiBJdCBpcyB1c2VmdWwgdG8gc2V0IHVwIGNvcmVkdW1wX2ZpbHRlciBiZWZvcmUgdGhlIHByb2dyYW0gcnVucy5cbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xuaW5kZXggZTY4YTc2ZmY5MmEzOC4uZDM3OGU2OWM2MzZlMiAxMDA2NDRcbi0tLSBhL2ZzL2NvcmVkdW1wLmNcbisrKyBiL2ZzL2NvcmVkdW1wLmNcbkBAIC01MjAsNiArNTIwLDI1IEBAIHN0YXRpYyBpbnQgemFwX3RocmVhZHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXG4gXHRyZXR1cm4gbnI7XG4gfVxuIFxuKy8qXG4rICogSWYgZG8gbm90IGR1bXAgZmQgbGlzdCwgZmlsZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkgYW55IFZNQVxuKyAqIGNhbiBiZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBUaGVyZWZvcmUsIHNvbWUgZmlsZSByZWxlYXNlXG4rICogbG9naWMsIHN1Y2ggYXMgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWRcbisgKiBidWZmZXJzIGlzIGV4ZWN1dGVkIG11Y2ggZWFybGllci4gTm90ZSB0aGF0IGRvX2NvcmVkdW1wKCkgb2Z0ZW5cbisgKiB0YWtlcyBzZXZlcmFsIHNlY29uZHMgb3IgZXZlbiBsb25nZXIgdG8gZXhlY3V0ZS5cbisgKi9cbitzdGF0aWMgdm9pZCBjb3JlZHVtcF9wcmVfZXhpdCh2b2lkKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudCwgKnQ7XG4rXG4rXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfRFVNUF9GRF9MSVNULCB0c2stXHUwMDNlbW0pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF90aHJlYWQodHNrLCB0KSB7XG4rXHRcdGV4aXRfZmlsZXModCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgY29yZWR1bXBfd2FpdChpbnQgZXhpdF9jb2RlLCBzdHJ1Y3QgY29yZV9zdGF0ZSAqY29yZV9zdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7XG5AQCAtMTEyMyw2ICsxMTQyLDggQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHRpZiAoY24tXHUwMDNlbWFzayBcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRjb3JlZHVtcF9wcmVfZXhpdCgpO1xuK1xuIFx0LyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqL1xuIFx0LyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqL1xuIFx0aWYgKHVuc2hhcmVfZmlsZXMoKSlcbmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmNcbmluZGV4IGM2OGI4YzBhNDA5N2EuLjAyZWU0ZThiMWNmZTggMTAwNjQ0XG4tLS0gYS9mcy9maWxlX3RhYmxlLmNcbisrKyBiL2ZzL2ZpbGVfdGFibGUuY1xuQEAgLTU2OCw3ICs1NjgsMTIgQEAgc3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobGlrZWx5KCFpbl9pbnRlcnJ1cHQoKSBcdTAwMjZcdTAwMjYgISh0YXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSkpIHtcbitcdC8qXG4rXHQgKiBjb3JlZHVtcF9wcmVfZXhpdCgpIG1heSByZWxlYXNlIGZpbGVzIGJlZm9yZSBkdW1waW5nIGNvcmUuXG4rXHQgKiBDYW5ub3QgdXNlIHRhc2tfd29yayBpbiB0aGUgY2FzZSwgbmVlZHMgdG8gcmVsZWFzZSBmaWxlc1xuK1x0ICogZWFybGllci5cbitcdCAqL1xuK1x0aWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgXHUwMDI2XHUwMDI2ICEodGFzay1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0tUSFJFQUQgfCBQRl9EVU1QQ09SRSkpKSkge1xuIFx0XHRpbml0X3Rhc2tfd29yayhcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBfX19fZnB1dCk7XG4gXHRcdGlmICghdGFza193b3JrX2FkZCh0YXNrLCBcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBUV0FfUkVTVU1FKSlcbiBcdFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCBlYmYwZDkxMmJlN2RiLi5mMzU1ODU4YmZiNjJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC0xOTQ3LDE0ICsxOTQ3LDE2IEBAIGVudW0ge1xuICNkZWZpbmUgTU1GX0RVTVBfSFVHRVRMQl9TSEFSRUQgIDhcbiAjZGVmaW5lIE1NRl9EVU1QX0RBWF9QUklWQVRFXHQ5XG4gI2RlZmluZSBNTUZfRFVNUF9EQVhfU0hBUkVEXHQxMFxuKyNkZWZpbmUgTU1GX0RVTVBfRkRfTElTVFx0MTFcbiBcbiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9TSElGVFx0TU1GX0RVTVBBQkxFX0JJVFNcbi0jZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTXHQ5XG4rI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUU1x0MTBcbiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9NQVNLIFxcXG4gXHQoKEJJVChNTUZfRFVNUF9GSUxURVJfQklUUykgLSAxKSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfRklMVEVSX1NISUZUKVxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0RFRkFVTFQgXFxcbiBcdChCSVQoTU1GX0RVTVBfQU5PTl9QUklWQVRFKSB8IEJJVChNTUZfRFVNUF9BTk9OX1NIQVJFRCkgfCBcXFxuLVx0IEJJVChNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUpIHwgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRilcbitcdCAoMSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYgfFxcXG4rXHQgKDEgXHUwMDNjXHUwMDNjIE1NRl9EVU1QX0ZEX0xJU1QpKVxuIFxuICNpZmRlZiBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlNcbiAjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGXHRCSVQoTU1GX0RVTVBfRUxGX0hFQURFUlMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1OToxOS4yNDcyMTg5NDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyOTIzMTQ1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvcmVkdW1wIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgTGludXggY29yZWR1bXAgbWVjaGFuaXNtLiBJIHNlZSBpdCBpbnRyb2R1Y2VzIGEgbmV3IG1lbW9yeSBmaWx0ZXIgdHlwZSwgYE1NRl9EVU1QX0ZEX0xJU1RgLiBJbnRlcmVzdGluZy4gSWYgdGhhdCBiaXQgKmlzbid0KiBzZXQsIGBjb3JlZHVtcF9wcmVfZXhpdCgpYCBnZXRzIGNhbGxlZCB3aXRoaW4gYGRvX2NvcmVkdW1wKClgLCBhbmQgdGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSB0aHJlYWRzIGFuZCBjYWxscyBgZXhpdF9maWxlcyh0KWAgb24gZWFjaCBvbmUuIFRoYXQncyBhIGtleSBjaGFuZ2Ug4oCTIHB1c2hpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBjbGVhbnVwIGVhcmxpZXIgaW4gdGhlIHByb2Nlc3MuIEkgYWxzbyBub3RpY2UgYSBtb2RpZmljYXRpb24gdG8gYF9fZnB1dF9kZWZlcnJlZCgpYCwgc2tpcHBpbmcgdGhlIGB0YXNrX3dvcmtgIG1lY2hhbmlzbSBpZiBgUEZfRFVNUENPUkVgIGlzIHNldCwgcHJlc3VtYWJseSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBkZWZlcnJlZCBjbGVhbnVwIGR1cmluZyBhIGNvcmVkdW1wLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhbGwgYWJvdXQgZmlsZSBkZXNjcmlwdG9yIGxpZmVjeWNsZSB3aXRoaW4gYSBjb3JlZHVtcCBzY2VuYXJpby4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCB0aGVyZSdzIG5vIG5ldyBidWZmZXIgYWxsb2NhdGlvbiBvciBtYW5pcHVsYXRpb24gdGhhdCBzY3JlYW1zIFwicG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLlwiIENydWNpYWxseSwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyBlaXRoZXIuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgY29udHJvbCBmbG93OiBjYWxsaW5nIGBleGl0X2ZpbGVzYCBlYXJsaWVyIGFuZCBjaXJjdW12ZW50aW5nIGB0YXNrX3dvcmtgIGR1cmluZyBjb3JlZHVtcC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHRoZSBwcmltYXJ5IHJpc2sgaGVyZS4gU3BlY2lmaWNhbGx5LCBpZiBhIGZpbGUgaXMgYWNjZXNzZWQgYWZ0ZXIgYmVpbmcgY2xvc2VkIGJ5IHRoZSBzeW5jaHJvbm91cyBgZXhpdF9maWxlcygpYCBjYWxsLCB0aGF0J3MgYSBjbGFzc2ljIFVBRiBzY2VuYXJpby4gQWxzbywgdGhlcmUgY291bGQgYmUgbG9ja2luZyBpc3N1ZXMgd2l0aCB0aGUgc3luY2hyb25vdXMgYGZwdXRgLiBCdXQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBiZSBwcmV0dHkgZWZmZWN0aXZlIGF0IGNhdGNoaW5nIHRob3NlLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2vigKYgbm8sIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHdpdGhpbiBgZXhpdF9maWxlcygpYCBvciBgX19mcHV0X2RlZmVycmVkKClgIHRoYXQgd291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIHJlYWxseSBqdXN0IGNsb3NpbmcgZmlsZXMuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS5cblxuTGV0J3Mgc3VtbWFyaXplIHRoaXMgY2xlYXJseTogdGhlIHBhdGNoIHNwZWVkcyB1cCBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBkdXJpbmcgY29yZWR1bXBzIHdoZW4gdGhlIG5ldyBmaWx0ZXIgYml0IGlzbid0IHVzZWQsIGJ5IGFkZGluZyBhIG5ldyBwcmUtZXhpdCBwaGFzZSBhbmQgYXZvaWRpbmcgdGhlIHVzdWFsIGRlZmVycmVkIGNsZWFudXAuIFdoaWxlIGl0IGludHJvZHVjZXMgdGhlIHJpc2sgb2YgVUFGIGJ1Z3MgYW5kIGxvY2tpbmcgaXNzdWVzIGR1ZSB0byBjaGFuZ2VkIHRpbWluZywgdGhlc2UgYXJlIHJpc2tzIGVmZmVjdGl2ZWx5IGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIE5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzQsIk91dHB1dFRva2VucyI6MjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTk6MzEuNTM5NTM3ODIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZWR1bXAgbG9naWMgdG8gYWxsb3cgcmVsZWFzaW5nIGZpbGUgZGVzY3JpcHRvcnMgZWFybGllciBkdXJpbmcgYSBjb3JlZHVtcCBpZiB0aGUgYE1NRl9EVU1QX0ZEX0xJU1RgIGZpbHRlciBiaXQgaXMgbm90IHNldC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgY29yZWR1bXBfcHJlX2V4aXQoKWAgd2hpY2ggY2FsbHMgYGV4aXRfZmlsZXMoKWAgb24gYWxsIHRocmVhZHMsIGFuZCBtb2RpZmllcyBgX19mcHV0X2RlZmVycmVkKClgIHRvIGJ5cGFzcyBgdGFza193b3JrYCB3aGVuIGBQRl9EVU1QQ09SRWAgaXMgc2V0LlxcblRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGxpZmVjeWNsZSBhbmQgY2xlYW51cCB0aW1pbmcgb2YgZmlsZSBkZXNjcmlwdG9ycyBkdXJpbmcgYSBjb3JlZHVtcC4gVGhlIHByaW1hcnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSB1c2UtYWZ0ZXItZnJlZSAoaWYgYSBmaWxlIGlzIGFjY2Vzc2VkIGFmdGVyIGJlaW5nIHJlbGVhc2VkKSBvciBsb2NraW5nIGlzc3VlcyAoZHVlIHRvIHN5bmNocm9ub3VzIGBmcHV0YCBpbnN0ZWFkIG9mIGRlZmVycmVkKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmVkdW1wIGxvZ2ljIHRvIGFsbG93IHJlbGVhc2luZyBmaWxlIGRlc2NyaXB0b3JzIGVhcmxpZXIgZHVyaW5nIGEgY29yZWR1bXAgaWYgdGhlIGBNTUZfRFVNUF9GRF9MSVNUYCBmaWx0ZXIgYml0IGlzIG5vdCBzZXQuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGNvcmVkdW1wX3ByZV9leGl0KClgIHdoaWNoIGNhbGxzIGBleGl0X2ZpbGVzKClgIG9uIGFsbCB0aHJlYWRzLCBhbmQgbW9kaWZpZXMgYF9fZnB1dF9kZWZlcnJlZCgpYCB0byBieXBhc3MgYHRhc2tfd29ya2Agd2hlbiBgUEZfRFVNUENPUkVgIGlzIHNldC5cXG5UaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBsaWZlY3ljbGUgYW5kIGNsZWFudXAgdGltaW5nIG9mIGZpbGUgZGVzY3JpcHRvcnMgZHVyaW5nIGEgY29yZWR1bXAuIFRoZSBwcmltYXJ5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgdXNlLWFmdGVyLWZyZWUgKGlmIGEgZmlsZSBpcyBhY2Nlc3NlZCBhZnRlciBiZWluZyByZWxlYXNlZCkgb3IgbG9ja2luZyBpc3N1ZXMgKGR1ZSB0byBzeW5jaHJvbm91cyBgZnB1dGAgaW5zdGVhZCBvZiBkZWZlcnJlZCkuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLlxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowntcqp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-08 05:35:52 +0000 UTC FinishedAt: 2026-08-08 05:59:32 +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": "8086604be9733378461a5534c39cb72635226b23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COREDUMP", "ELF_CORE", "PROC_FS" ], "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": "8086604be9733378461a5534c39cb72635226b23", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COREDUMP", "ELF_CORE", "PROC_FS" ], "series_id": "b863090f-2e0a-41c6-b2a7-bce731c056b9" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "vfs_coredump" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPUkVEVU1QJiMzNDssCiAgICAmIzM0O0VMRl9DT1JFJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfY29yZWR1bXAmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZWR1bXAgbG9naWMgdG8gYWxsb3cgcmVsZWFzaW5nIGZpbGUgZGVzY3JpcHRvcnMgZWFybGllciBkdXJpbmcgYSBjb3JlZHVtcCBpZiB0aGUgYE1NRl9EVU1QX0ZEX0xJU1RgIGZpbHRlciBiaXQgaXMgbm90IHNldC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgY29yZWR1bXBfcHJlX2V4aXQoKWAgd2hpY2ggY2FsbHMgYGV4aXRfZmlsZXMoKWAgb24gYWxsIHRocmVhZHMsIGFuZCBtb2RpZmllcyBgX19mcHV0X2RlZmVycmVkKClgIHRvIGJ5cGFzcyBgdGFza193b3JrYCB3aGVuIGBQRl9EVU1QQ09SRWAgaXMgc2V0LlxuVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHRpbWluZyBvZiBmaWxlIGRlc2NyaXB0b3JzIGR1cmluZyBhIGNvcmVkdW1wLiBUaGUgcHJpbWFyeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHVzZS1hZnRlci1mcmVlIChpZiBhIGZpbGUgaXMgYWNjZXNzZWQgYWZ0ZXIgYmVpbmcgcmVsZWFzZWQpIG9yIGxvY2tpbmcgaXNzdWVzIChkdWUgdG8gc3luY2hyb25vdXMgYGZwdXRgIGluc3RlYWQgb2YgZGVmZXJyZWQpLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJpdCBpbiBgY29yZWR1bXBfZmlsdGVyYCB0byBjb250cm9sIHdoZXRoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgcmVsZWFzZWQgYmVmb3JlIG9yIGFmdGVyIGR1bXBpbmcgY29yZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvcmVkdW1wIGdlbmVyYXRpb24gYW5kIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgN2U2OTJhYjY5NzNkOTk0OWZlMzhmYTc3YWE4ZjZiNjdmYmYzYjA5Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDggMDU6NTc6MDggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcbmluZGV4IDI3MTg5ZjZlMDA0ZWUuLjAwMWNlMTM2ZTk2NGIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG5AQCAtMTkyOSw3ICYjNDM7MTkyOSw3IEBAIHdpbGwgYmUgZHVtcGVkIHdoZW4gdGhlIFx1MDAzY3BpZFx1MDAzZSBwcm9jZXNzIGlzIGR1bXBlZC4gY29yZWR1bXBfZmlsdGVyIGlzIGEgYml0bWFza1xuIG9mIG1lbW9yeSB0eXBlcy4gSWYgYSBiaXQgb2YgdGhlIGJpdG1hc2sgaXMgc2V0LCBtZW1vcnkgc2VnbWVudHMgb2YgdGhlXG4gY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC5cbiBcbi1UaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XG4mIzQzO1RoZSBmb2xsb3dpbmcgMTAgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XG4gXG4gICAtIChiaXQgMCkgYW5vbnltb3VzIHByaXZhdGUgbWVtb3J5XG4gICAtIChiaXQgMSkgYW5vbnltb3VzIHNoYXJlZCBtZW1vcnlcbkBAIC0xOTQxLDYgJiM0MzsxOTQxLDcgQEAgVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOlxuICAgLSAoYml0IDYpIGh1Z2V0bGIgc2hhcmVkIG1lbW9yeVxuICAgLSAoYml0IDcpIERBWCBwcml2YXRlIG1lbW9yeVxuICAgLSAoYml0IDgpIERBWCBzaGFyZWQgbWVtb3J5XG4mIzQzOyAgLSAoYml0IDkpIGZkIGxpc3RcbiBcbiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXNcbiAgIGFyZSBhbHdheXMgZHVtcGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGJpdG1hc2sgc3RhdHVzLlxuQEAgLTE5NDgsMTMgJiM0MzsxOTQ5LDE5IEBAIFRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcbiAgIE5vdGUgdGhhdCBiaXRzIDAtNCBkb24mIzM5O3QgYWZmZWN0IGh1Z2V0bGIgb3IgREFYIG1lbW9yeS4gaHVnZXRsYiBtZW1vcnkgaXNcbiAgIG9ubHkgYWZmZWN0ZWQgYnkgYml0IDUtNiwgYW5kIERBWCBpcyBvbmx5IGFmZmVjdGVkIGJ5IGJpdHMgNy04LlxuIFxuLVRoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDMzOyB0aGlzIG1lYW5zIGFsbCBhbm9ueW1vdXMgbWVtb3J5XG4tc2VnbWVudHMsIEVMRiBoZWFkZXIgcGFnZXMgYW5kIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkgYXJlIGR1bXBlZC5cbiYjNDM7ICBOb3RlIHRoYXQgYml0IDkgaXMgc2V0IGJ5IGRlZmF1bHQgYmVjYXVzZSB0b29scyBsaWtlIHN5c3RlbWQtY29yZWR1bXAgZ29cbiYjNDM7ICB0aHJvdWdoIHRoZSBmZHMuIElmIHlvdSBkbyBub3Qgc2V0IGJpdCA5LCBmaWxlcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBieVxuJiM0MzsgIGFueSBWTUEgYXJlIHJlbGVhc2VkIGJlZm9yZSBkdW1waW5nIGNvcmUuIFNvbWUgZmlsZSByZWxlYXNlIGxvZ2ljLCBzdWNoIGFzXG4mIzQzOyAgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWQgYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoXG4mIzQzOyAgZWFybGllci5cbiYjNDM7XG4mIzQzO1RoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDIzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeVxuJiM0MztzZWdtZW50cywgRUxGIGhlYWRlciBwYWdlcywgaHVnZXRsYiBwcml2YXRlIG1lbW9yeSBhbmQgZmQgbGlzdCBhcmUgZHVtcGVkLlxuIFxuIElmIHlvdSBkb24mIzM5O3Qgd2FudCB0byBkdW1wIGFsbCBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGF0dGFjaGVkIHRvIHBpZCAxMjM0LFxuLXdyaXRlIDB4MzEgdG8gdGhlIHByb2Nlc3MmIzM5O3MgcHJvYyBmaWxlOjpcbiYjNDM7d3JpdGUgMHgyMzEgdG8gdGhlIHByb2Nlc3MmIzM5O3MgcHJvYyBmaWxlOjpcbiBcbi0gICQgZWNobyAweDMxIFx1MDAzZSAvcHJvYy8xMjM0L2NvcmVkdW1wX2ZpbHRlclxuJiM0MzsgICQgZWNobyAweDIzMSBcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcbiBcbiBXaGVuIGEgbmV3IHByb2Nlc3MgaXMgY3JlYXRlZCwgdGhlIHByb2Nlc3MgaW5oZXJpdHMgdGhlIGJpdG1hc2sgc3RhdHVzIGZyb20gaXRzXG4gcGFyZW50LiBJdCBpcyB1c2VmdWwgdG8gc2V0IHVwIGNvcmVkdW1wX2ZpbHRlciBiZWZvcmUgdGhlIHByb2dyYW0gcnVucy5cbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xuaW5kZXggZTY4YTc2ZmY5MmEzOC4uZDM3OGU2OWM2MzZlMiAxMDA2NDRcbi0tLSBhL2ZzL2NvcmVkdW1wLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvcmVkdW1wLmNcbkBAIC01MjAsNiAmIzQzOzUyMCwyNSBAQCBzdGF0aWMgaW50IHphcF90aHJlYWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuIFx0cmV0dXJuIG5yO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogSWYgZG8gbm90IGR1bXAgZmQgbGlzdCwgZmlsZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkgYW55IFZNQVxuJiM0MzsgKiBjYW4gYmUgcmVsZWFzZWQgYmVmb3JlIGR1bXBpbmcgY29yZS4gVGhlcmVmb3JlLCBzb21lIGZpbGUgcmVsZWFzZVxuJiM0MzsgKiBsb2dpYywgc3VjaCBhcyBleGl0aW5nIGZsb2NrIG9yIHJlbGVhc2luZyByZWZlcmVuY2VzIHRvIHNoYXJlZFxuJiM0MzsgKiBidWZmZXJzIGlzIGV4ZWN1dGVkIG11Y2ggZWFybGllci4gTm90ZSB0aGF0IGRvX2NvcmVkdW1wKCkgb2Z0ZW5cbiYjNDM7ICogdGFrZXMgc2V2ZXJhbCBzZWNvbmRzIG9yIGV2ZW4gbG9uZ2VyIHRvIGV4ZWN1dGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBjb3JlZHVtcF9wcmVfZXhpdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50LCAqdDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX0RVTVBfRkRfTElTVCwgdHNrLVx1MDAzZW1tKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfdGhyZWFkKHRzaywgdCkge1xuJiM0MztcdFx0ZXhpdF9maWxlcyh0KTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBjb3JlZHVtcF93YWl0KGludCBleGl0X2NvZGUsIHN0cnVjdCBjb3JlX3N0YXRlICpjb3JlX3N0YXRlKVxuIHtcbiBcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDtcbkBAIC0xMTIzLDYgJiM0MzsxMTQyLDggQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHRpZiAoY24tXHUwMDNlbWFzayBcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0Y29yZWR1bXBfcHJlX2V4aXQoKTtcbiYjNDM7XG4gXHQvKiBnZXQgdXMgYW4gdW5zaGFyZWQgZGVzY3JpcHRvciB0YWJsZTsgYWxtb3N0IGFsd2F5cyBhIG5vLW9wICovXG4gXHQvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovXG4gXHRpZiAodW5zaGFyZV9maWxlcygpKVxuZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuY1xuaW5kZXggYzY4YjhjMGE0MDk3YS4uMDJlZTRlOGIxY2ZlOCAxMDA2NDRcbi0tLSBhL2ZzL2ZpbGVfdGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZmlsZV90YWJsZS5jXG5AQCAtNTY4LDcgJiM0Mzs1NjgsMTIgQEAgc3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobGlrZWx5KCFpbl9pbnRlcnJ1cHQoKSBcdTAwMjZcdTAwMjYgISh0YXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSkpIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGNvcmVkdW1wX3ByZV9leGl0KCkgbWF5IHJlbGVhc2UgZmlsZXMgYmVmb3JlIGR1bXBpbmcgY29yZS5cbiYjNDM7XHQgKiBDYW5ub3QgdXNlIHRhc2tfd29yayBpbiB0aGUgY2FzZSwgbmVlZHMgdG8gcmVsZWFzZSBmaWxlc1xuJiM0MztcdCAqIGVhcmxpZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgXHUwMDI2XHUwMDI2ICEodGFzay1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0tUSFJFQUQgfCBQRl9EVU1QQ09SRSkpKSkge1xuIFx0XHRpbml0X3Rhc2tfd29yayhcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBfX19fZnB1dCk7XG4gXHRcdGlmICghdGFza193b3JrX2FkZCh0YXNrLCBcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBUV0FfUkVTVU1FKSlcbiBcdFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCBlYmYwZDkxMmJlN2RiLi5mMzU1ODU4YmZiNjJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC0xOTQ3LDE0ICYjNDM7MTk0NywxNiBAQCBlbnVtIHtcbiAjZGVmaW5lIE1NRl9EVU1QX0hVR0VUTEJfU0hBUkVEICA4XG4gI2RlZmluZSBNTUZfRFVNUF9EQVhfUFJJVkFURVx0OVxuICNkZWZpbmUgTU1GX0RVTVBfREFYX1NIQVJFRFx0MTBcbiYjNDM7I2RlZmluZSBNTUZfRFVNUF9GRF9MSVNUXHQxMVxuIFxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX1NISUZUXHRNTUZfRFVNUEFCTEVfQklUU1xuLSNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0JJVFNcdDlcbiYjNDM7I2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUU1x0MTBcbiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9NQVNLIFxcXG4gXHQoKEJJVChNTUZfRFVNUF9GSUxURVJfQklUUykgLSAxKSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfRklMVEVSX1NISUZUKVxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0RFRkFVTFQgXFxcbiBcdChCSVQoTU1GX0RVTVBfQU5PTl9QUklWQVRFKSB8IEJJVChNTUZfRFVNUF9BTk9OX1NIQVJFRCkgfCBcXFxuLVx0IEJJVChNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUpIHwgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRilcbiYjNDM7XHQgKDEgXHUwMDNjXHUwMDNjIE1NRl9EVU1QX0hVR0VUTEJfUFJJVkFURSkgfCBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGIHxcXFxuJiM0MztcdCAoMSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfRkRfTElTVCkpXG4gXG4gI2lmZGVmIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSU1xuICMgZGVmaW5lIE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEZcdEJJVChNTUZfRFVNUF9FTEZfSEVBREVSUylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09SRURVTVAmIzM0OywKICAgICYjMzQ7RUxGX0NPUkUmIzM0OywKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Zmc19jb3JlZHVtcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJpdCBpbiBgY29yZWR1bXBfZmlsdGVyYCB0byBjb250cm9sIHdoZXRoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgcmVsZWFzZWQgYmVmb3JlIG9yIGFmdGVyIGR1bXBpbmcgY29yZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvcmVkdW1wIGdlbmVyYXRpb24gYW5kIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgN2U2OTJhYjY5NzNkOTk0OWZlMzhmYTc3YWE4ZjZiNjdmYmYzYjA5YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDggMDU6NTc6MDggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdAppbmRleCAyNzE4OWY2ZTAwNGVlLi4wMDFjZTEzNmU5NjRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QKQEAgLTE5MjksNyAmIzQzOzE5MjksNyBAQCB3aWxsIGJlIGR1bXBlZCB3aGVuIHRoZSAmbHQ7cGlkJmd0OyBwcm9jZXNzIGlzIGR1bXBlZC4gY29yZWR1bXBfZmlsdGVyIGlzIGEgYml0bWFzawogb2YgbWVtb3J5IHR5cGVzLiBJZiBhIGJpdCBvZiB0aGUgYml0bWFzayBpcyBzZXQsIG1lbW9yeSBzZWdtZW50cyBvZiB0aGUKIGNvcnJlc3BvbmRpbmcgbWVtb3J5IHR5cGUgYXJlIGR1bXBlZCwgb3RoZXJ3aXNlIHRoZXkgYXJlIG5vdCBkdW1wZWQuCiAKLVRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDoKJiM0MztUaGUgZm9sbG93aW5nIDEwIG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgogCiAgIC0gKGJpdCAwKSBhbm9ueW1vdXMgcHJpdmF0ZSBtZW1vcnkKICAgLSAoYml0IDEpIGFub255bW91cyBzaGFyZWQgbWVtb3J5CkBAIC0xOTQxLDYgJiM0MzsxOTQxLDcgQEAgVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgogICAtIChiaXQgNikgaHVnZXRsYiBzaGFyZWQgbWVtb3J5CiAgIC0gKGJpdCA3KSBEQVggcHJpdmF0ZSBtZW1vcnkKICAgLSAoYml0IDgpIERBWCBzaGFyZWQgbWVtb3J5CiYjNDM7ICAtIChiaXQgOSkgZmQgbGlzdAogCiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXMKICAgYXJlIGFsd2F5cyBkdW1wZWQgcmVnYXJkbGVzcyBvZiB0aGUgYml0bWFzayBzdGF0dXMuCkBAIC0xOTQ4LDEzICYjNDM7MTk0OSwxOSBAQCBUaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CiAgIE5vdGUgdGhhdCBiaXRzIDAtNCBkb24mIzM5O3QgYWZmZWN0IGh1Z2V0bGIgb3IgREFYIG1lbW9yeS4gaHVnZXRsYiBtZW1vcnkgaXMKICAgb25seSBhZmZlY3RlZCBieSBiaXQgNS02LCBhbmQgREFYIGlzIG9ubHkgYWZmZWN0ZWQgYnkgYml0cyA3LTguCiAKLVRoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDMzOyB0aGlzIG1lYW5zIGFsbCBhbm9ueW1vdXMgbWVtb3J5Ci1zZWdtZW50cywgRUxGIGhlYWRlciBwYWdlcyBhbmQgaHVnZXRsYiBwcml2YXRlIG1lbW9yeSBhcmUgZHVtcGVkLgomIzQzOyAgTm90ZSB0aGF0IGJpdCA5IGlzIHNldCBieSBkZWZhdWx0IGJlY2F1c2UgdG9vbHMgbGlrZSBzeXN0ZW1kLWNvcmVkdW1wIGdvCiYjNDM7ICB0aHJvdWdoIHRoZSBmZHMuIElmIHlvdSBkbyBub3Qgc2V0IGJpdCA5LCBmaWxlcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBieQomIzQzOyAgYW55IFZNQSBhcmUgcmVsZWFzZWQgYmVmb3JlIGR1bXBpbmcgY29yZS4gU29tZSBmaWxlIHJlbGVhc2UgbG9naWMsIHN1Y2ggYXMKJiM0MzsgIGV4aXRpbmcgZmxvY2sgb3IgcmVsZWFzaW5nIHJlZmVyZW5jZXMgdG8gc2hhcmVkIGJ1ZmZlcnMgaXMgZXhlY3V0ZWQgbXVjaAomIzQzOyAgZWFybGllci4KJiM0MzsKJiM0MztUaGUgZGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgyMzM7IHRoaXMgbWVhbnMgYWxsIGFub255bW91cyBtZW1vcnkKJiM0MztzZWdtZW50cywgRUxGIGhlYWRlciBwYWdlcywgaHVnZXRsYiBwcml2YXRlIG1lbW9yeSBhbmQgZmQgbGlzdCBhcmUgZHVtcGVkLgogCiBJZiB5b3UgZG9uJiMzOTt0IHdhbnQgdG8gZHVtcCBhbGwgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBhdHRhY2hlZCB0byBwaWQgMTIzNCwKLXdyaXRlIDB4MzEgdG8gdGhlIHByb2Nlc3MmIzM5O3MgcHJvYyBmaWxlOjoKJiM0Mzt3cml0ZSAweDIzMSB0byB0aGUgcHJvY2VzcyYjMzk7cyBwcm9jIGZpbGU6OgogCi0gICQgZWNobyAweDMxICZndDsgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXIKJiM0MzsgICQgZWNobyAweDIzMSAmZ3Q7IC9wcm9jLzEyMzQvY29yZWR1bXBfZmlsdGVyCiAKIFdoZW4gYSBuZXcgcHJvY2VzcyBpcyBjcmVhdGVkLCB0aGUgcHJvY2VzcyBpbmhlcml0cyB0aGUgYml0bWFzayBzdGF0dXMgZnJvbSBpdHMKIHBhcmVudC4gSXQgaXMgdXNlZnVsIHRvIHNldCB1cCBjb3JlZHVtcF9maWx0ZXIgYmVmb3JlIHRoZSBwcm9ncmFtIHJ1bnMuCmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuYwppbmRleCBlNjhhNzZmZjkyYTM4Li5kMzc4ZTY5YzYzNmUyIDEwMDY0NAotLS0gYS9mcy9jb3JlZHVtcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvcmVkdW1wLmMKQEAgLTUyMCw2ICYjNDM7NTIwLDI1IEBAIHN0YXRpYyBpbnQgemFwX3RocmVhZHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJcmV0dXJuIG5yOwogfQogCiYjNDM7LyoKJiM0MzsgKiBJZiBkbyBub3QgZHVtcCBmZCBsaXN0LCBmaWxlcyB0aGF0IGFyZSBub3QgcmVmZXJlbmNlZCBieSBhbnkgVk1BCiYjNDM7ICogY2FuIGJlIHJlbGVhc2VkIGJlZm9yZSBkdW1waW5nIGNvcmUuIFRoZXJlZm9yZSwgc29tZSBmaWxlIHJlbGVhc2UKJiM0MzsgKiBsb2dpYywgc3VjaCBhcyBleGl0aW5nIGZsb2NrIG9yIHJlbGVhc2luZyByZWZlcmVuY2VzIHRvIHNoYXJlZAomIzQzOyAqIGJ1ZmZlcnMgaXMgZXhlY3V0ZWQgbXVjaCBlYXJsaWVyLiBOb3RlIHRoYXQgZG9fY29yZWR1bXAoKSBvZnRlbgomIzQzOyAqIHRha2VzIHNldmVyYWwgc2Vjb25kcyBvciBldmVuIGxvbmdlciB0byBleGVjdXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGNvcmVkdW1wX3ByZV9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQsICp0OwomIzQzOwomIzQzOwlpZiAobW1fZmxhZ3NfdGVzdChNTUZfRFVNUF9GRF9MSVNULCB0c2stJmd0O21tKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfdGhyZWFkKHRzaywgdCkgewomIzQzOwkJZXhpdF9maWxlcyh0KTsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgY29yZWR1bXBfd2FpdChpbnQgZXhpdF9jb2RlLCBzdHJ1Y3QgY29yZV9zdGF0ZSAqY29yZV9zdGF0ZSkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CkBAIC0xMTIzLDYgJiM0MzsxMTQyLDggQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sCiAJaWYgKGNuLSZndDttYXNrICZhbXA7IENPUkVEVU1QX1JFSkVDVCkKIAkJcmV0dXJuOwogCiYjNDM7CWNvcmVkdW1wX3ByZV9leGl0KCk7CiYjNDM7CiAJLyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqLwogCS8qIFRoZSBjZWxsIHNwdWZzIGNvcmVkdW1wIGNvZGUgcmVhZHMgdGhlIGZpbGUgZGVzY3JpcHRvciB0YWJsZXMgKi8KIAlpZiAodW5zaGFyZV9maWxlcygpKQpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IGM2OGI4YzBhNDA5N2EuLjAyZWU0ZThiMWNmZTggMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTU2OCw3ICYjNDM7NTY4LDEyIEBAIHN0YXRpYyB2b2lkIF9fZnB1dF9kZWZlcnJlZChzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJcmV0dXJuOwogCX0KIAotCWlmIChsaWtlbHkoIWluX2ludGVycnVwdCgpICZhbXA7JmFtcDsgISh0YXNrLSZndDtmbGFncyAmYW1wOyBQRl9LVEhSRUFEKSkpIHsKJiM0MzsJLyoKJiM0MzsJICogY29yZWR1bXBfcHJlX2V4aXQoKSBtYXkgcmVsZWFzZSBmaWxlcyBiZWZvcmUgZHVtcGluZyBjb3JlLgomIzQzOwkgKiBDYW5ub3QgdXNlIHRhc2tfd29yayBpbiB0aGUgY2FzZSwgbmVlZHMgdG8gcmVsZWFzZSBmaWxlcwomIzQzOwkgKiBlYXJsaWVyLgomIzQzOwkgKi8KJiM0MzsJaWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgJmFtcDsmYW1wOyAhKHRhc2stJmd0O2ZsYWdzICZhbXA7IChQRl9LVEhSRUFEIHwgUEZfRFVNUENPUkUpKSkpIHsKIAkJaW5pdF90YXNrX3dvcmsoJmFtcDtmaWxlLSZndDtmX3Rhc2tfd29yaywgX19fX2ZwdXQpOwogCQlpZiAoIXRhc2tfd29ya19hZGQodGFzaywgJmFtcDtmaWxlLSZndDtmX3Rhc2tfd29yaywgVFdBX1JFU1VNRSkpCiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggZWJmMGQ5MTJiZTdkYi4uZjM1NTg1OGJmYjYyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMTk0NywxNCAmIzQzOzE5NDcsMTYgQEAgZW51bSB7CiAjZGVmaW5lIE1NRl9EVU1QX0hVR0VUTEJfU0hBUkVEICA4CiAjZGVmaW5lIE1NRl9EVU1QX0RBWF9QUklWQVRFCTkKICNkZWZpbmUgTU1GX0RVTVBfREFYX1NIQVJFRAkxMAomIzQzOyNkZWZpbmUgTU1GX0RVTVBfRkRfTElTVAkxMQogCiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9TSElGVAlNTUZfRFVNUEFCTEVfQklUUwotI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUUwk5CiYjNDM7I2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUUwkxMAogI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfTUFTSyBcCiAJKChCSVQoTU1GX0RVTVBfRklMVEVSX0JJVFMpIC0gMSkgJmx0OyZsdDsgTU1GX0RVTVBfRklMVEVSX1NISUZUKQogI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfREVGQVVMVCBcCiAJKEJJVChNTUZfRFVNUF9BTk9OX1BSSVZBVEUpIHwgQklUKE1NRl9EVU1QX0FOT05fU0hBUkVEKSB8IFwKLQkgQklUKE1NRl9EVU1QX0hVR0VUTEJfUFJJVkFURSkgfCBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGKQomIzQzOwkgKDEgJmx0OyZsdDsgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYgfFwKJiM0MzsJICgxICZsdDsmbHQ7IE1NRl9EVU1QX0ZEX0xJU1QpKQogCiAjaWZkZWYgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTCiAjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGCUJJVChNTUZfRFVNUF9FTEZfSEVBREVSUykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzNwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvcmVkdW1wIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IGFsdGVycyBob3cgY29yZWR1bXBzIGJlaGF2ZSBpbiB0aGUga2VybmVsLiBJdCYjMzk7cyBhZGRpbmcgYSBuZXcgYml0LCBiaXQgOSwgYE1NRl9EVU1QX0ZEX0xJU1RgLCB0byB0aGUgYGNvcmVkdW1wX2ZpbHRlcmAuIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaG93IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGhhbmRsZWQgZHVyaW5nIHRoZSBjb3JlZHVtcCBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIHdoZW4gdGhpcyBuZXcgYml0ICppc24mIzM5O3QqIHNldCwgYGNvcmVkdW1wX3ByZV9leGl0KClgIGdldHMgY2FsbGVkIGZyb20gd2l0aGluIGBkb19jb3JlZHVtcCgpYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaXRlcmF0aW9uIHRocm91Z2ggdGhyZWFkcyBhbmQgdGhlIHN1YnNlcXVlbnQgY2FsbHMgdG8gYGV4aXRfZmlsZXModClgIGhhcHBlbiwgcmVsZWFzaW5nIHRoZSBmaWxlcy4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIGludGVyZXN0aW5nIGxvZ2ljIGluIGBfX2ZwdXRfZGVmZXJyZWQoKWAsIHdoZXJlIHRoZSBgUEZfS1RIUkVBRCB8IFBGX0RVTVBDT1JFYCBmbGFncyBhcmUgY2hlY2tlZCB0byBhdm9pZCB0YXNrIHdvcmsgd2hlbiByZWxlYXNpbmcgZmlsZXMgZHVyaW5nIGEgY29yZWR1bXAuCgpHaXZlbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBtb2RpZmljYXRpb25zIHRvIGNvcmUga2VybmVsIGxvZ2ljIOKAkyBjb3JlZHVtcCBmdW5jdGlvbmFsaXR5IGFuZCB0aGUgZmlsZSB0YWJsZS4gSW50cm9kdWNpbmcgYSBuZXcgZmVhdHVyZSwgZXNwZWNpYWxseSBvbmUgdGhhdCBtb2RpZmllcyB0aGUgZmlsZSByZWxlYXNlIHByb2Nlc3MgZHVyaW5nIGEgY3JpdGljYWwgZXZlbnQgbGlrZSBhIGNvcmVkdW1wLCBtZWFucyB0aGVyZSYjMzk7cyBhIGhpZ2hlciBsaWtlbGlob29kIG9mIHVuY292ZXJpbmcgaW50ZXJlc3RpbmcgYnVncy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBgZG9fY29yZWR1bXBgIGlzIG9idmlvdXNseSBhbiBlbnRyeSBwb2ludCwgdGhlIG1haW4gZnVuY3Rpb24uIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIHNvbWV3aGF0IGdlbmVyaWMsIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGFjdGlvbiBiZWdpbnMuIGBjb3JlZHVtcF9wcmVfZXhpdGAgaXMgYWxzbyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24sIGFuZCBgX19mcHV0X2RlZmVycmVkYCBpcyBhIGNvbmNlcm4gdG9vLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZW0gaW4gYGZzL2NvcmVkdW1wLmNgIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBmaWxlIHRhYmxlLiBBbmQsIGBkb19jb3JlZHVtcGAgaXMgbm90IHN0YXRpYywgc28gdGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQuIGBleGl0X2ZpbGVzYCBpcyBsaWtlbHkgaW4gYGtlcm5lbC9leGl0LmNgIG9yIGEgc2ltaWxhciBmaWxlLiBMZXQmIzM5O3MgZG8gYSBzZWFyY2ggdG8gZ2V0IGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGhvdyB0aGV5JiMzOTtyZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX2NvcmVkdW1wJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvY29yZWR1bXAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb3JlZHVtcC5jPTUwND1zdGF0aWMgaW50IHphcF90aHJlYWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxuLS1cbmZzL2NvcmVkdW1wLmMtNTI2LSAqIGxvZ2ljLCBzdWNoIGFzIGV4aXRpbmcgZmxvY2sgb3IgcmVsZWFzaW5nIHJlZmVyZW5jZXMgdG8gc2hhcmVkXG5mcy9jb3JlZHVtcC5jOjUyNzogKiBidWZmZXJzIGlzIGV4ZWN1dGVkIG11Y2ggZWFybGllci4gTm90ZSB0aGF0IGRvX2NvcmVkdW1wKCkgb2Z0ZW5cbmZzL2NvcmVkdW1wLmMtNTI4LSAqIHRha2VzIHNldmVyYWwgc2Vjb25kcyBvciBldmVuIGxvbmdlciB0byBleGVjdXRlLlxuLS1cbmZzL2NvcmVkdW1wLmM9MTA5OT1zdGF0aWMgaW5saW5lIGJvb2wgY29yZWR1bXBfc2tpcChjb25zdCBzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zICpjcHJtLFxuLS1cbmZzL2NvcmVkdW1wLmMtMTExMC1cbmZzL2NvcmVkdW1wLmM6MTExMTpzdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcbmZzL2NvcmVkdW1wLmMtMTExMi1cdFx0XHRzaXplX3QgKiphcmd2LCBpbnQgKmFyZ2MsIGNvbnN0IHN0cnVjdCBsaW51eF9iaW5mbXQgKmJpbmZtdClcbi0tXG5mcy9jb3JlZHVtcC5jPTExODI9dm9pZCB2ZnNfY29yZWR1bXAoY29uc3Qga2VybmVsX3NpZ2luZm9fdCAqc2lnaW5mbylcbi0tXG5mcy9jb3JlZHVtcC5jLTEyMjAtXHRzY29wZWRfd2l0aF9jcmVkcyhjcmVkKVxuZnMvY29yZWR1bXAuYzoxMjIxOlx0XHRkb19jb3JlZHVtcChcdTAwMjZjbiwgXHUwMDI2Y3BybSwgXHUwMDI2YXJndiwgXHUwMDI2YXJnYywgYmluZm10KTtcbmZzL2NvcmVkdW1wLmMtMTIyMi1cdGNvcmVkdW1wX2NsZWFudXAoXHUwMDI2Y24sIFx1MDAyNmNwcm0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4MTEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgQ29yZSBEdW1wIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBjb3JlIGR1bXBzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGFyY2hpdGVjdHVyZTogYGRvX2NvcmVkdW1wYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0JiMzOTtzIGFuIGludGVybmFsIGZ1bmN0aW9uLCBsaWtlbHkgdGhlICp3b3JraG9yc2UqIGJlaGluZCB0aGUgY29yZSBkdW1wIGZ1bmN0aW9uYWxpdHkuIEl0JiMzOTtzIG1lYW50IHRvIGJlIGhpZGRlbiB3aXRoaW4gdGhlIHRyYW5zbGF0aW9uIHVuaXQgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCwgc2VydmluZyBhcyBhIHByaXZhdGUgaGVscGVyLiBOb3csIHRoZSBwdWJsaWMgZW50cnkgcG9pbnQgbXVzdCBiZSBgdmZzX2NvcmVkdW1wYC4gVGhhdCYjMzk7cyB0aGUgb25lIHdlIG5lZWQgdG8gdHJhY2UgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBpcyBhY3R1YWxseSBpbml0aWF0ZWQuIExldCYjMzk7cyBkZWx2ZSBpbnRvIHRoZSBkZXRhaWxzIG9mIGB2ZnNfY29yZWR1bXBgIG5vdy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgdXNlci1mYWNpbmcgdHJpZ2dlciBhbmQgdGhlIGNvcmUgZHVtcCYjMzk7cyBhY3R1YWwgbWVjaGFuaWNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Zmc19jb3JlZHVtcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdD01NTU9ZGlmZmVyZW50IHNldCBvZiBjcmVkZW50aWFscy4gIFRoaXMgaXMgZG9uZSBpbiB0aGUgZm9sbG93aW5nIHBsYWNlczpcbi0tXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC01NTctICogYGBzeXNfZmFjY2Vzc2F0KClgYC5cbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0OjU1ODogKiBgYHZmc19jb3JlZHVtcCgpYGAuXG5Eb2N1bWVudGF0aW9uL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC01NTktICogbmZzNHJlY292ZXIuYy5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q9MjU0PWNvbnN05oyH6ZKI5LiK5pON5L2c77yM5Zug5q2k5LiN6ZyA6KaB6L+b6KGM57G75Z6L6L2s5o2i77yM5L2G6ZyA6KaB5Li05pe25pS+5byDY29uc3TpmZDlrprvvIzku6Xkvr/og73lpJ/kv67mlLlcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3QtNDc3LSAqIGBgc3lzX2ZhY2Nlc3NhdCgpYGAuXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q6NDc4OiAqIGBgdmZzX2NvcmVkdW1wKClgYC5cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC00NzktICogbmZzNHJlY292ZXIuYy5cbi0tXG5mcy9jb3JlZHVtcC5jPTExMTE9c3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4tLVxuZnMvY29yZWR1bXAuYy0xMTgxLVxuZnMvY29yZWR1bXAuYzoxMTgyOnZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pXG5mcy9jb3JlZHVtcC5jLTExODMte1xuLS1cbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaD00OD1pbnQgZHVtcF91c2VyX3JhbmdlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNDktXHRcdCAgICB1bnNpZ25lZCBsb25nIGxlbik7XG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmg6NTA6ZXh0ZXJuIHZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pO1xuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oLTUxLVxuLS1cbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaC02OS0jZWxzZVxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oOjcwOnN0YXRpYyBpbmxpbmUgdm9pZCB2ZnNfY29yZWR1bXAoY29uc3Qga2VybmVsX3NpZ2luZm9fdCAqc2lnaW5mbykge31cbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaC03MS1cbi0tXG5rZXJuZWwvc2lnbmFsLmM9MjgxMD1ib29sIGdldF9zaWduYWwoc3RydWN0IGtzaWduYWwgKmtzaWcpXG4tLVxua2VybmVsL3NpZ25hbC5jLTMwMzAtXHRcdFx0ICovXG5rZXJuZWwvc2lnbmFsLmM6MzAzMTpcdFx0XHR2ZnNfY29yZWR1bXAoXHUwMDI2a3NpZy1cdTAwM2VpbmZvKTtcbmtlcm5lbC9zaWduYWwuYy0zMDMyLVx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgRmlsZSBEZXNjcmlwdG9yIENsZWFudXAgZHVyaW5nIFNpZ25hbCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIGhvdyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gcG90ZW50aWFsIGNsZWFudXAgZHVyaW5nIHNpZ25hbCBkZWxpdmVyeS4gTXkgdHJhaW4gb2YgdGhvdWdodCBzdGFydHMgd2l0aCBgdmZzX2NvcmVkdW1wYCBhbmQgaG93IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBnZXRfc2lnbmFsYC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQuIE5vdywgSSYjMzk7bSB3b25kZXJpbmcgYWJvdXQgYF9fZnB1dF9kZWZlcnJlZGAuIEl0JiMzOTtzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkLCBhbmQgaXRzIGRpcmVjdCB1c2FnZSBtaWdodCBiZSByZXN0cmljdGVkLgoKVGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGNhbGxzIGBfX2ZwdXRfZGVmZXJyZWRgIGluIGBmcy9maWxlX3RhYmxlLmNgPyBJcyB0aGVyZSBhbm90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb24gaW4gdGhhdCBmaWxlIHRoYXQgZG9lcz8gSG9sZCBvbiwgYF9fZnB1dF9kZWZlcnJlZGAgaXMgdWx0aW1hdGVseSBjYWxsZWQgYnkgZWl0aGVyIGBmcHV0YCBvciBgZnB1dF9tYW55YCwgcmlnaHQ/IE9rYXksIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24gYW5kIHRvIGJ1aWxkIHRoZSBtYXAsIEkgc2hvdWxkIGdvIGJhY2sgYW5kIGNoZWNrIHRoZSBjb2RlIGluIGBmcy9maWxlX3RhYmxlLmNgIGFnYWluLiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSBzdXJlIHdoZXJlIHRoaXMgdGhpbmcgZml0cyBpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19mcHV0X2RlZmVycmVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZmlsZV90YWJsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2ZpbGVfdGFibGUuYz01NjA9RVhQT1JUX1NZTUJPTF9HUEwoZmx1c2hfZGVsYXllZF9mcHV0KTtcbmZzL2ZpbGVfdGFibGUuYy01NjEtXG5mcy9maWxlX3RhYmxlLmM6NTYyOnN0YXRpYyB2b2lkIF9fZnB1dF9kZWZlcnJlZChzdHJ1Y3QgZmlsZSAqZmlsZSlcbmZzL2ZpbGVfdGFibGUuYy01NjMte1xuLS1cbmZzL2ZpbGVfdGFibGUuYz01OTE9dm9pZCBmcHV0KHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL2ZpbGVfdGFibGUuYy01OTMtXHRpZiAodW5saWtlbHkoZmlsZV9yZWZfcHV0KFx1MDAyNmZpbGUtXHUwMDNlZl9yZWYpKSlcbmZzL2ZpbGVfdGFibGUuYzo1OTQ6XHRcdF9fZnB1dF9kZWZlcnJlZChmaWxlKTtcbmZzL2ZpbGVfdGFibGUuYy01OTUtfVxuLS1cbmZzL2ZpbGVfdGFibGUuYz02MzE9dm9pZCBmcHV0X2Nsb3NlKHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbmZzL2ZpbGVfdGFibGUuYy02MzMtXHRpZiAoZmlsZV9yZWZfcHV0X2Nsb3NlKFx1MDAyNmZpbGUtXHUwMDNlZl9yZWYpKVxuZnMvZmlsZV90YWJsZS5jOjYzNDpcdFx0X19mcHV0X2RlZmVycmVkKGZpbGUpO1xuZnMvZmlsZV90YWJsZS5jLTYzNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI1MAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgTm9uLVN0YXRpYyBGaWxlIEhhbmRsaW5nIEZ1bmN0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZpbGUgaGFuZGxpbmcsIGFuZCBJJiMzOTt2ZSBub3RpY2VkIHRoYXQgYGZwdXRgIGFuZCBgZnB1dF9jbG9zZWAgYXJlIGRlZmluZWQgYXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlbSBhcyBwb3RlbnRpYWxseSBjcml0aWNhbCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gb3IgcGVyaGFwcyB1c2VkIHdpdGhpbiBhIG1vcmUgY29tcGxleCBzZXQgb2Ygcm91dGluZXMuICBBbmQgdGhlbiB0aGVyZSYjMzk7cyBgZXhpdF9maWxlc2AsIGFsc28gbm9uLXN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgaW4gYSB0ZXJtaW5hdGlvbiBjb250ZXh0LiBTbyBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSYjMzk7bSBnb2luZyB0byB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBjYWxsaW5nIHRoZW0sIHdoYXQgdGhleSYjMzk7cmUgZG9pbmcsIGFuZCB3aGF0IGRlcGVuZGVuY2llcyB0aGV5IGhhdmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGRpdmUgaW50byBga2VybmVsL2V4aXQuY2Agb3Igd2hlcmV2ZXIgdGhvc2Ugcm91dGluZXMgYXJlIGRlZmluZWQg4oCTIHByb2JhYmx5IGluIHRoZSBrZXJuZWwmIzM5O3MgZmlsZSBzeXN0ZW0gc2VjdGlvbiwgZGVwZW5kaW5nIG9uIGhvdyB0aGlzIGlzIHN0cnVjdHVyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleGl0X2ZpbGVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvcmVkdW1wLmM9NTMwPXN0YXRpYyB2b2lkIGNvcmVkdW1wX3ByZV9leGl0KHZvaWQpXG4tLVxuZnMvY29yZWR1bXAuYy01MzctXHRmb3JfZWFjaF90aHJlYWQodHNrLCB0KSB7XG5mcy9jb3JlZHVtcC5jOjUzODpcdFx0ZXhpdF9maWxlcyh0KTtcbmZzL2NvcmVkdW1wLmMtNTM5LVx0fVxuLS1cbmZzL2ZpbGUuYz01MDY9dm9pZCBwdXRfZmlsZXNfc3RydWN0KHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzKVxuLS1cbmZzL2ZpbGUuYy01MTctXG5mcy9maWxlLmM6NTE4OnZvaWQgZXhpdF9maWxlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaylcbmZzL2ZpbGUuYy01MTkte1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oPTkzPWV4dGVybiBfX25vcmV0dXJuIHZvaWQgZG9fZ3JvdXBfZXhpdChpbnQpO1xuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtOTQtXG5pbmNsdWRlL2xpbnV4L3NjaGVkL3Rhc2suaDo5NTpleHRlcm4gdm9pZCBleGl0X2ZpbGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcbmluY2x1ZGUvbGludXgvc2NoZWQvdGFzay5oLTk2LWV4dGVybiB2b2lkIGV4aXRfaXRpbWVycyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7XG4tLVxua2VybmVsL2V4aXQuYz05Mjk9dm9pZCBfX25vcmV0dXJuIGRvX2V4aXQobG9uZyBjb2RlKVxuLS1cbmtlcm5lbC9leGl0LmMtMTAwMy1cdGV4aXRfc2htKHRzayk7XG5rZXJuZWwvZXhpdC5jOjEwMDQ6XHRleGl0X2ZpbGVzKHRzayk7XG5rZXJuZWwvZXhpdC5jLTEwMDUtXHRleGl0X2ZzKHRzayk7XG4tLVxua2VybmVsL2ZvcmsuYz0xOTk0PV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4tLVxua2VybmVsL2ZvcmsuYy0yNTk1LWJhZF9mb3JrX2NsZWFudXBfZmlsZXM6XG5rZXJuZWwvZm9yay5jOjI1OTY6XHRleGl0X2ZpbGVzKHApOyAvKiBibG9ja2luZyAqL1xua2VybmVsL2ZvcmsuYy0yNTk3LWJhZF9mb3JrX2NsZWFudXBfc2VtdW5kbzpcbi0tXG5rZXJuZWwvcGlkLmM9ODc5PXN0YXRpYyBzdHJ1Y3QgZmlsZSAqX19waWRmZF9mZ2V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGZkKVxuLS1cbmtlcm5lbC9waWQuYy05MDEtXHRcdCAqIDEuIGJlZm9yZSBleGl0X3NpZ25hbHMoKSwgd2hpY2ggZ2l2ZXMgYSByZWFsIGZkXG5rZXJuZWwvcGlkLmM6OTAyOlx0XHQgKiAyLiBiZWZvcmUgZXhpdF9maWxlcygpIHRha2VzIHRoZSB0YXNrX2xvY2soKSBnaXZlcyBhIHJlYWwgZmRcbmtlcm5lbC9waWQuYzo5MDM6XHRcdCAqIDMuIGFmdGVyIGV4aXRfZmlsZXMoKSByZWxlYXNlcyB0YXNrX2xvY2soKSwgLVx1MDAzZWZpbGVzIGlzIE5VTEw7XG5rZXJuZWwvcGlkLmMtOTA0LVx0XHQgKiAgICB0aGlzIGhhcyBQRl9FWElUSU5HLCBzaW5jZSBpdCB3YXMgc2V0IGluIGV4aXRfc2lnbmFscygpLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkX2dldGZkX3Rlc3QuYz0yNDQ9VEVTVF9GKGNoaWxkLCBub19zdHJhbmdlX0VCQURGKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkX2dldGZkX3Rlc3QuYy0yNTctXHQgKiBJdCB1c2VkIHRvIGJlIHRoYXQgcGlkZmRfZ2V0ZmQoKSBjb3VsZCByYWNlIHdpdGggdGhlIGV4aXRpbmcgdGhyZWFkXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9waWRmZC9waWRmZF9nZXRmZF90ZXN0LmM6MjU4Olx0ICogYmV0d2VlbiBleGl0X2ZpbGVzKCkgYW5kIHJlbGVhc2VfdGFzaygpLCBhbmQgZ2V0IGEgbm9uLW51bGwgdGFza1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcGlkZmQvcGlkZmRfZ2V0ZmRfdGVzdC5jLTI1OS1cdCAqIHdpdGggYSBOVUxMIGZpbGVzIHN0cnVjdCwgYW5kIHlvdSYjMzk7ZCBnZXQgRUJBREYsIHdoaWNoIHdhcyBzbGlnaHRseVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjkxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb3JlZHVtcCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGNvcmVkdW1wcywgYW5kIGl0IHNlZW1zIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUgaXMgYHZmc19jb3JlZHVtcGAg4oCTIHRoYXQmIzM5O3MgdGhlIG1haW4gZW50cnkgcG9pbnQsIHRoZSBvbmUgdGhhdCBraWNrcyBldmVyeXRoaW5nIG9mZi4gTm93LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIG5ldyBiaXQsIGBNTUZfRFVNUF9GRF9MSVNUYCAoYml0IDkpLCB0byBgY29yZWR1bXBfZmlsdGVyYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBmbGFnLgoKSWYgdGhhdCBgTU1GX0RVTVBfRkRfTElTVGAgYml0IGlzbiYjMzk7dCBzZXQsIHRoZW4gdGhlIGNvZGUgY2FsbHMgYGNvcmVkdW1wX3ByZV9leGl0YC4gQW5kIGZyb20gdGhlcmUsIGl0IGFwcGVhcnMgdGhlIGZ1bmN0aW9uIGNhbGxzIGBleGl0X2ZpbGVzKHQpYCBmb3IgYWxsIHRocmVhZHMuIFRoaXMgc291bmRzIGxpa2UgaXQgY291bGQgYmUgYSBwb3RlbnRpYWwgYXR0YWNrIHN1cmZhY2UuIEEgY29yZWR1bXAgY29tYmluZWQgd2l0aCBhIG1vZGlmaWVkIGBjb3JlZHVtcF9maWx0ZXJgIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGVhc2lseSBmdXp6ZWQgdG8gdHJpZ2dlciBzb21lIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLiBJIHNob3VsZCBtYWtlIGEgbm90ZSB0byBmb2xsb3cgdGhhdCBwYXRoLgoKVGhlIHdheSB0byBtb2RpZnkgdGhhdCBgY29yZWR1bXBfZmlsdGVyYCBpcyB0aHJvdWdoIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLCB3aGljaCBpcyBzdGFuZGFyZC4gSSBhbSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc3BlY2lmaWMgY29uZmlnIHJlcXVpcmVkIGZvciBjb3JlZHVtcHMgdG8gYmUgZW5hYmxlZCBvbiB0aGUgc3lzdGVtLCBmb3IgZXhhbXBsZSwgYENPTkZJR19DT1JFRFVNUGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDT1JFRFVNUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnLmJpbmZtdD0xNDU9Y29uZmlnIEJJTkZNVF9NSVNDXG4tLVxuZnMvS2NvbmZpZy5iaW5mbXQtMTcwLVxuZnMvS2NvbmZpZy5iaW5mbXQ6MTcxOmNvbmZpZyBDT1JFRFVNUFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcyLVx0Ym9vbCBcJiMzNDtFbmFibGUgY29yZSBkdW1wIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4MTQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb3JlZHVtcCBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgQ09ORklHX0NPUkVEVU1QYCBpcyB0aGUgYmFzZSBjb25maWd1cmF0aW9uLCB0aGF0JiMzOTtzIGNsZWFyLiBCdXQgaG9sZCBvbiwgdGhlIGRvY3VtZW50YXRpb24gaXMgc2xpZ2h0bHkgb2ZmLiBJIG5lZWQgdG8gc29ydCBvdXQgdGhlc2UgYml0IG51bWJlcnMuIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGBNTUZfRFVNUF9GRF9MSVNUYCBpcyBiaXQgOSwgYnV0IGluIGBtbV90eXBlcy5oYCwgaXQmIzM5O3MgYml0IDExLiBBaCwgbm93IEkgc2VlIHRoZSBwcm9ibGVtLiBgTU1GX0RVTVBfRkRfTElTVGAgaXMgYml0IDExIGluIGBtbV9mbGFnc2AsIGJ1dCBiaXQgMiBpbiBgbW1fZmxhZ3NgIGlzIGBNTUZfRFVNUF9BTk9OX1BSSVZBVEVgLiBXaGljaCwgbWVhbnMgYml0IDAgaW4gdGhlIGZpbHRlciBjb3JyZXNwb25kcyB0byBiaXQgMiBpbiBgbW1fZmxhZ3NgLiBBbmQsIHRoaXMgaXMgYWxsIGNvcnJlY3QuIEdvb2QuCgpUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBmcy9jb3JlZHVtcC5jYCwgYGZzL2ZpbGVfdGFibGUuY2AsIGFuZCBgaW5jbHVkZS9saW51eC9tbV90eXBlcy5oYC4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3Igb2Ygc29tZXRoaW5nIHNpZ25pZmljYW50LCBsaWtlbHkgaW52b2x2aW5nIGZpbGUgaGFuZGxpbmcgZHVyaW5nIGNvcmVkdW1wcy4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gVGltZSB0byBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIEkmIzM5O20gc2VlaW5nIGB2ZnNfY29yZWR1bXBgLCBgZnB1dGAsIGBmcHV0X2Nsb3NlYCwgYW5kIGBleGl0X2ZpbGVzYC4gV2FpdCwgYGZwdXRgIGFuZCBgZnB1dF9jbG9zZWAgYXJlICp2ZXJ5KiBob3QgcGF0aHMsIEkgcHJvYmFibHkgZG9uJiMzOTt0IHdhbnQgdG8gdGFyZ2V0IHRob3NlLCB0aGUgc2lnbmFsIHRvIG5vaXNlIHJhdGlvIHdpbGwgYmUgdGVycmlibGUuIExldCYjMzk7cyB0aGluayB0aGlzIHRocm91Z2guIGB2ZnNfY29yZWR1bXBgIGFuZCBgZXhpdF9maWxlc2Agc2VlbSBsaWtlIGJldHRlciBjYW5kaWRhdGVzLiBgZXhpdF9maWxlc2AgaXMgcmVhc29uYWJseSBob3Qgc2luY2UgaXQmIzM5O3MgY2FsbGVkIG9uIGV2ZXJ5IHByb2Nlc3MgZXhpdCwgYnV0IGB2ZnNfY29yZWR1bXBgIGlzIG5vdC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHN3ZWVwIG9mIGBmcy9jb3JlZHVtcC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGJ1dCBhcmUgbm90IGhvdC4gTG9va2luZy4uLm5vIGNoYW5nZXMgdG8gYGR1bXBfdXNlcl9yYW5nZWAuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGluIGBkb19jb3JlZHVtcGAgYW5kIGBfX2ZwdXRfZGVmZXJyZWRgLiBCdXQgYGRvX2NvcmVkdW1wYCBpcyBzdGF0aWMuIExvb2tzIGxpa2UgYHZmc19jb3JlZHVtcGAgaXMgdGhlIGJlc3QgYmV0IGFzIHRoZSBwcmltYXJ5IGZvY3VzLgoKT2gsIGFuZCB0aGVyZSYjMzk7cyB0aGUgYGNvcmVkdW1wX2ZpbHRlcmAgZXhwb3NlZCB2aWEgYC9wcm9jL1twaWRdL2NvcmVkdW1wX2ZpbHRlcmAuIFRoZSB3cml0ZSBoYW5kbGVyLCBgcHJvY19jb3JlZHVtcF9maWx0ZXJfd3JpdGVgLCBpcyBpbiBgZnMvcHJvYy9iYXNlLmNgLiBXZSYjMzk7bGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCB3b3JrcyBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3JlZHVtcF9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL2Jhc2UuYz0yOTE0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBwcm9jX2F0dHJfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMjkyMi0jaWZkZWYgQ09ORklHX0VMRl9DT1JFXG5mcy9wcm9jL2Jhc2UuYzoyOTIzOnN0YXRpYyBzc2l6ZV90IHByb2NfY29yZWR1bXBfZmlsdGVyX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsXG5mcy9wcm9jL2Jhc2UuYy0yOTI0LVx0XHRcdFx0XHQgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy9iYXNlLmMtMjk1MS1cbmZzL3Byb2MvYmFzZS5jOjI5NTI6c3RhdGljIHNzaXplX3QgcHJvY19jb3JlZHVtcF9maWx0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsXG5mcy9wcm9jL2Jhc2UuYy0yOTUzLVx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgX191c2VyICpidWYsXG4tLVxuZnMvcHJvYy9iYXNlLmMtMjk5My1cbmZzL3Byb2MvYmFzZS5jOjI5OTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jb3JlZHVtcF9maWx0ZXJfb3BlcmF0aW9ucyA9IHtcbmZzL3Byb2MvYmFzZS5jOjI5OTU6XHQucmVhZFx0XHQ9IHByb2NfY29yZWR1bXBfZmlsdGVyX3JlYWQsXG5mcy9wcm9jL2Jhc2UuYzoyOTk2Olx0LndyaXRlXHRcdD0gcHJvY19jb3JlZHVtcF9maWx0ZXJfd3JpdGUsXG5mcy9wcm9jL2Jhc2UuYy0yOTk3LVx0Lmxsc2Vla1x0XHQ9IGdlbmVyaWNfZmlsZV9sbHNlZWssXG4tLVxuZnMvcHJvYy9iYXNlLmM9MzI4Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zMzYyLSNpZmRlZiBDT05GSUdfRUxGX0NPUkVcbmZzL3Byb2MvYmFzZS5jOjMzNjM6XHRSRUcoXCYjMzQ7Y29yZWR1bXBfZmlsdGVyXCYjMzQ7LCBTX0lSVUdPfFNfSVdVU1IsIHByb2NfY29yZWR1bXBfZmlsdGVyX29wZXJhdGlvbnMpLFxuZnMvcHJvYy9iYXNlLmMtMzM2NC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTI3NwoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDE3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBDb3JlIER1bXAgRmlsdGVyIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB6ZXJvZWQgaW4gb24gYHByb2NfY29yZWR1bXBfZmlsdGVyX3dyaXRlYCBhbmQgYHByb2NfY29yZWR1bXBfZmlsdGVyX3JlYWRgIGFzIHBvdGVudGlhbGx5IHVzZWZ1bCBzdGFydGluZyBwb2ludHMgZm9yIHRoaXMgYW5hbHlzaXMuIEhvd2V2ZXIsIGEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBwcm9jX2NvcmVkdW1wX2ZpbHRlcl93cml0ZWAgaXMgYWN0dWFsbHkgYSBzdGF0aWMgZnVuY3Rpb24uIFRoYXQmIzM5O3MgYSBwcm9ibGVtLCBhcyB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBxdWl0ZSBjbGVhcjogcHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuCgpSaWdodCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIEFoLCB5ZXMsIGB2ZnNfY29yZWR1bXBgIGlzIGEgbm9uLXN0YXRpYyBlbnRyeSBwb2ludC4gQnV0IGlzIHRoZXJlIGFub3RoZXIgb3B0aW9uPyBJIGtub3cgYGZwdXRgIGFuZCBgZnB1dF9jbG9zZWAgYXJlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBidXQgdGhleSBhcmUgaG90IHBhdGhzIGFuZCBJIHNob3VsZCBhdm9pZCB0aG9zZS4gU28sIGl0IHNlZW1zIGxpa2UgYHZmc19jb3JlZHVtcGAgaXMgdGhlIGJlc3QgY2hvaWNlIGZvciBteSBmb2N1cy4KCk5leHQsIEkgc2hvdWxkIGNoZWNrIHdoZXRoZXIgYENPTkZJR19DT1JFRFVNUGAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlnIGhlcmUuIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBgL3Byb2MvW3BpZF0vY29yZWR1bXBfZmlsdGVyYCBmaWxlIGFuZCBjb25maWd1cmF0aW9ucywgdG8gYmUgc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGEgcmVsZXZhbnQgY29uZmlndXJhdGlvbi4gV2FpdCwgaXQgc2VlbXMgdGhlIGZpbGUgaXMgdW5kZXIgYENPTkZJR19FTEZfQ09SRWAsIHNvIGl0JiMzOTtzIGEgYml0IG1vcmUgaW52b2x2ZWQgdGhhbiBJIGluaXRpYWxseSB0aG91Z2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRUxGX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE4MDE9Y29uZmlnIEJVR1xuLS1cbmluaXQvS2NvbmZpZy0xODEwLVxuaW5pdC9LY29uZmlnOjE4MTE6Y29uZmlnIEVMRl9DT1JFXG5pbml0L0tjb25maWctMTgxMi1cdGRlcGVuZHMgb24gQ09SRURVTVBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTgyOAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCwgc28gYEVMRl9DT1JFYCBhbmQgYENPUkVEVU1QYCBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEludGVyZXN0aW5nLiBOb3csIEkgc2VlbSB0byByZWNhbGwgYSBkZXBlbmRlbmN5IGJldHdlZW4gdGhlbS4uLiBMZXQgbWUganVzdCB2ZXJpZnkgdGhhdC4gQWggeWVzLCBgRUxGX0NPUkVgIGRlcGVuZHMgb24gYENPUkVEVU1QYC4gR29vZC4gVGhhdCBtYWtlcyBzZW5zZS4gT2theSwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MganVzdCBkb3VibGUgY2hlY2sgdGhlIGRlZmluaXRpb24gYW5kIHJlbGF0aW9uc2hpcHMgaW4gdGhlIGBpbml0L0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIHRha2UgYSBsb29rIGluIHRoZXJlIGFuZCBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVMRl9DT1JFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xODAxPWNvbmZpZyBCVUdcbi0tXG5pbml0L0tjb25maWctMTgxMC1cbmluaXQvS2NvbmZpZzoxODExOmNvbmZpZyBFTEZfQ09SRVxuaW5pdC9LY29uZmlnLTE4MTItXHRkZXBlbmRzIG9uIENPUkVEVU1QXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsIHdoZXJlJiMzOTtzIHRoZSBtb3N0IGxpa2VseSBwbGFjZSB0byBmaW5kIHRoZSBkZWZpbml0aW9uIEkmIzM5O20gbG9va2luZyBmb3I/IEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIEl0JiMzOTtzIGdlbmVyYWxseSB0aGUgY2VudHJhbCBodWIgZm9yIGEgbG90IG9mIGZ1bmRhbWVudGFsIGtlcm5lbCBvcHRpb25zLCBhbmQgdGhlIGZpbGUgbmFtZSBzdWdnZXN0cyBpdCYjMzk7cyBpbnZvbHZlZCBpbiB0aGUgaW5pdGlhbGl6YXRpb24gcHJvY2Vzcywgd2hpY2ggb2Z0ZW4gdG91Y2hlcyBhIHZhcmlldHkgb2YgYmFzZSBtb2R1bGVzLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyB0cnkgdG8gZm9jdXMgb24gYSBtb3JlIGdyYW51bGFyIGxvY2F0aW9uIHRvIHN0YXJ0IG15IHNlYXJjaC4gTGluZSAxODExIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGF0IHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIHNwb3Qgd2l0aGluIHN1Y2ggYSBmaWxlIHRvIHRyeSB0byBmaW5kIHRoZSBzcGVjaWZpYyBvcHRpb25zIEkgbWlnaHQgYmUgbG9va2luZyBmb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxODA1Olx0XHQgIERpc2FibGluZyB0aGlzIG9wdGlvbiBlbGltaW5hdGVzIHN1cHBvcnQgZm9yIEJVRyBhbmQgV0FSTiwgcmVkdWNpbmdcbjE4MDY6XHRcdCAgdGhlIHNpemUgb2YgeW91ciBrZXJuZWwgaW1hZ2UgYW5kIHBvdGVudGlhbGx5IHF1aWV0bHkgaWdub3JpbmdcbjE4MDc6XHRcdCAgbnVtZXJvdXMgZmF0YWwgY29uZGl0aW9ucy4gWW91IHNob3VsZCBvbmx5IGNvbnNpZGVyIGRpc2FibGluZyB0aGlzXG4xODA4Olx0XHQgIG9wdGlvbiBmb3IgZW1iZWRkZWQgc3lzdGVtcyB3aXRoIG5vIGZhY2lsaXRpZXMgZm9yIHJlcG9ydGluZyBlcnJvcnMuXG4xODA5Olx0XHQgIEp1c3Qgc2F5IFkuXG4xODEwOlx0XG4xODExOlx0Y29uZmlnIEVMRl9DT1JFXG4xODEyOlx0XHRkZXBlbmRzIG9uIENPUkVEVU1QXG4xODEzOlx0XHRkZWZhdWx0IHlcbjE4MTQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIEVMRiBjb3JlIGR1bXBzXCYjMzQ7IGlmIEVYUEVSVFxuMTgxNTpcdFx0aGVscFxuMTgxNjpcdFx0ICBFbmFibGUgc3VwcG9ydCBmb3IgZ2VuZXJhdGluZyBjb3JlIGR1bXBzLiBEaXNhYmxpbmcgc2F2ZXMgYWJvdXQgNGsuXG4xODE3Olx0XG4xODE4Olx0XG4xODE5Olx0Y29uZmlnIFBDU1BLUl9QTEFURk9STVxuMTgyMDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgUEMtU3BlYWtlciBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuMTgyMTpcdFx0ZGVwZW5kcyBvbiBIQVZFX1BDU1BLUl9QTEFURk9STVxuMTgyMjpcdFx0c2VsZWN0IEk4MjUzX0xPQ0tcbjE4MjM6XHRcdGRlZmF1bHQgeVxuMTgyNDpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYwOAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipDb3JlIER1bXAgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgY29yZSBkdW1wcyBhbmQgaG93IHRvIGNvbmZpZ3VyZSB0aGVtLiBUaGUgb2J2aW91cyBzdGFydGluZyBwb2ludHMsIGFzIHVzdWFsLCBhcmUgYEVMRl9DT1JFYCBhbmQgYENPUkVEVU1QYCDigJMgdGhhdCBtdWNoIGlzIHN0cmFpZ2h0Zm9yd2FyZC4gQnV0IHRoZW4sIGl0IGhpdHMgbWXigKYgSSBjYW4mIzM5O3QgZm9yZ2V0IGFib3V0IGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLiBUaGF0IG1lYW5zIGBQUk9DX0ZTYCBoYXMgdG8gYmUgZW5hYmxlZCB0b28sIGRvZXNuJiMzOTt0IGl0PyBJdCBhbGwgaGFzIHRvIHdvcmsgaW4gY29uY2VydCB0byBnaXZlIGEgbWVhbmluZ2Z1bCBjb3JlZHVtcCwgc28gSSBtdXN0IHRha2UgdGhhdCBpbnRvIGFjY291bnQsIGFzIHdlbGwuIEdvdCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBST0NfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9wcm9jL0tjb25maWc6Mjpjb25maWcgUFJPQ19GU1xuZnMvcHJvYy9LY29uZmlnLTMtXHRib29sIFwmIzM0Oy9wcm9jIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODc4CgkJCQkJCQlvdXRwdXQ6IDEyNAoJCQkJCQkJdGhvdWdodHM6IDM0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29yZSBEdW1wIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIGNvcmUgZHVtcHMuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYENPUkVEVU1QYCwgYEVMRl9DT1JFYCwgYW5kIGBQUk9DX0ZTYC4gVGhlIG1lYXQgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGFyb3VuZCBjb3JlZHVtcCBoYW5kbGluZyBhbmQgZmlsZSBjbG9zaW5nLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIHNvbWV0aGluZyB3b3J0aCBhIGNsb3NlciBsb29rLCBlc3BlY2lhbGx5IGZvciBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBoZXJlIHNob3VsZCBiZSBvbiB0aGUgYHZmc19jb3JlZHVtcGAgc3ltYm9sLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBiaXQgaW4gdGhlIGBjb3JlZHVtcF9maWx0ZXJgLCB3aGljaCBjb250cm9scyB3aGVuIGZpbGUgZGVzY3JpcHRvcnMgYXJlIHJlbGVhc2VkIGR1cmluZyBhIGNvcmUgZHVtcC4gVGhpcyBoYXMgdGhlIHBvdGVudGlhbCB0byBpbnRyb2R1Y2UgaW50ZXJlc3Rpbmcgc3RhdGVzIGFuZCBlZGdlIGNhc2VzIHdpdGhpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLiBUaGUgZmFjdCB0aGF0IHdlIGNhbiBtYW5pcHVsYXRlIHRoaXMgdGhyb3VnaCBgL3Byb2MvW3BpZF0vY29yZWR1bXBfZmlsdGVyYCBtYWtlcyBpdCBldmVuIG1vcmUgYXR0cmFjdGl2ZSBmb3IgZnV6emluZy4KCkkgcXVpY2tseSBzY2FubmVkIGZvciBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMuIFdoaWxlIGBmcHV0YCBhbmQgYGZwdXRfY2xvc2VgIGFyZSB0b3VjaGVkICh0aHJvdWdoIGBfX2ZwdXRfZGVmZXJyZWRgKSBhbmQgYGV4aXRfZmlsZXNgIGlzIGFsc28gbW9kaWZpZWQgKHZpYSBgY29yZWR1bXBfcHJlX2V4aXRgKSwgdGhlc2UgYXJlIGhvdCBwYXRocyBhbmQgdGhlcmVmb3JlLCBsaWtlbHkgbW9yZSB0aG9yb3VnaGx5IHRlc3RlZC4gYHZmc19jb3JlZHVtcGAgaXMgc3RpbGwgbXkgYmVzdCBiZXQuCgpTbywgaGVyZSYjMzk7cyBteSBwcmVwYXJlZCBzdW1tYXJ5IGZvciBmdXJ0aGVyIGFuYWx5c2lzOgoKKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKioKKiAgICoqRm9jdXNTeW1ib2xzOioqIFxbJiMzNDt2ZnNcX2NvcmVkdW1wJiMzNDtdCiogICAqKkVuYWJsZUNvbmZpZ3M6KiogXFsmIzM0O0NPUkVEVU1QJiMzNDssICYjMzQ7RUxGXF9DT1JFJiMzNDssICYjMzQ7UFJPQ1xfRlMmIzM0O10KKiAgICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJpdCBpbiBgY29yZWR1bXBfZmlsdGVyYCB0byBjb250cm9sIHdoZXRoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgcmVsZWFzZWQgYmVmb3JlIG9yIGFmdGVyIGR1bXBpbmcgY29yZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvcmVkdW1wIGdlbmVyYXRpb24gYW5kIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLgoKSSYjMzk7bSBjb25maWRlbnQgdGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gZGl2ZSBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT1JFRFVNUCYjMzQ7LAogICAgJiMzNDtFTEZfQ09SRSYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZzX2NvcmVkdW1wJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYml0IGluIGBjb3JlZHVtcF9maWx0ZXJgIHRvIGNvbnRyb2wgd2hldGhlciBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWxlYXNlZCBiZWZvcmUgb3IgYWZ0ZXIgZHVtcGluZyBjb3JlLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBmcy9jb3JlZHVtcC5jYCBhbmQgYGZzL2ZpbGVfdGFibGUuY2AsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29yZWR1bXAgZ2VuZXJhdGlvbiBhbmQgYC9wcm9jL1twaWRdL2NvcmVkdW1wX2ZpbHRlcmAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPUkVEVU1QJiMzNDssCiAgICAmIzM0O0VMRl9DT1JFJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZnNfY29yZWR1bXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBiaXQgaW4gYGNvcmVkdW1wX2ZpbHRlcmAgdG8gY29udHJvbCB3aGV0aGVyIGZpbGUgZGVzY3JpcHRvcnMgYXJlIHJlbGVhc2VkIGJlZm9yZSBvciBhZnRlciBkdW1waW5nIGNvcmUuIFRoaXMgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYGZzL2NvcmVkdW1wLmNgIGFuZCBgZnMvZmlsZV90YWJsZS5jYCwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb3JlZHVtcCBnZW5lcmF0aW9uIGFuZCBgL3Byb2MvW3BpZF0vY29yZWR1bXBfZmlsdGVyYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOCAwNTo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZWR1bXAgbG9naWMgdG8gYWxsb3cgcmVsZWFzaW5nIGZpbGUgZGVzY3JpcHRvcnMgZWFybGllciBkdXJpbmcgYSBjb3JlZHVtcCBpZiB0aGUgYE1NRl9EVU1QX0ZEX0xJU1RgIGZpbHRlciBiaXQgaXMgbm90IHNldC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgY29yZWR1bXBfcHJlX2V4aXQoKWAgd2hpY2ggY2FsbHMgYGV4aXRfZmlsZXMoKWAgb24gYWxsIHRocmVhZHMsIGFuZCBtb2RpZmllcyBgX19mcHV0X2RlZmVycmVkKClgIHRvIGJ5cGFzcyBgdGFza193b3JrYCB3aGVuIGBQRl9EVU1QQ09SRWAgaXMgc2V0LlxuVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHRpbWluZyBvZiBmaWxlIGRlc2NyaXB0b3JzIGR1cmluZyBhIGNvcmVkdW1wLiBUaGUgcHJpbWFyeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHVzZS1hZnRlci1mcmVlIChpZiBhIGZpbGUgaXMgYWNjZXNzZWQgYWZ0ZXIgYmVpbmcgcmVsZWFzZWQpIG9yIGxvY2tpbmcgaXNzdWVzIChkdWUgdG8gc3luY2hyb25vdXMgYGZwdXRgIGluc3RlYWQgb2YgZGVmZXJyZWQpLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3ZTY5MmFiNjk3M2Q5OTQ5ZmUzOGZhNzdhYThmNmI2N2ZiZjNiMDljCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgOCAwNTo1NzowOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0CmluZGV4IDI3MTg5ZjZlMDA0ZWUuLjAwMWNlMTM2ZTk2NGIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdApAQCAtMTkyOSw3ICYjNDM7MTkyOSw3IEBAIHdpbGwgYmUgZHVtcGVkIHdoZW4gdGhlICZsdDtwaWQmZ3Q7IHByb2Nlc3MgaXMgZHVtcGVkLiBjb3JlZHVtcF9maWx0ZXIgaXMgYSBiaXRtYXNrCiBvZiBtZW1vcnkgdHlwZXMuIElmIGEgYml0IG9mIHRoZSBiaXRtYXNrIGlzIHNldCwgbWVtb3J5IHNlZ21lbnRzIG9mIHRoZQogY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC4KIAotVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOgomIzQzO1RoZSBmb2xsb3dpbmcgMTAgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CiAKICAgLSAoYml0IDApIGFub255bW91cyBwcml2YXRlIG1lbW9yeQogICAtIChiaXQgMSkgYW5vbnltb3VzIHNoYXJlZCBtZW1vcnkKQEAgLTE5NDEsNiAmIzQzOzE5NDEsNyBAQCBUaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6CiAgIC0gKGJpdCA2KSBodWdldGxiIHNoYXJlZCBtZW1vcnkKICAgLSAoYml0IDcpIERBWCBwcml2YXRlIG1lbW9yeQogICAtIChiaXQgOCkgREFYIHNoYXJlZCBtZW1vcnkKJiM0MzsgIC0gKGJpdCA5KSBmZCBsaXN0CiAKICAgTm90ZSB0aGF0IE1NSU8gcGFnZXMgc3VjaCBhcyBmcmFtZSBidWZmZXIgYXJlIG5ldmVyIGR1bXBlZCBhbmQgdkRTTyBwYWdlcwogICBhcmUgYWx3YXlzIGR1bXBlZCByZWdhcmRsZXNzIG9mIHRoZSBiaXRtYXNrIHN0YXR1cy4KQEAgLTE5NDgsMTMgJiM0MzsxOTQ5LDE5IEBAIFRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDoKICAgTm90ZSB0aGF0IGJpdHMgMC00IGRvbiYjMzk7dCBhZmZlY3QgaHVnZXRsYiBvciBEQVggbWVtb3J5LiBodWdldGxiIG1lbW9yeSBpcwogICBvbmx5IGFmZmVjdGVkIGJ5IGJpdCA1LTYsIGFuZCBEQVggaXMgb25seSBhZmZlY3RlZCBieSBiaXRzIDctOC4KIAotVGhlIGRlZmF1bHQgdmFsdWUgb2YgY29yZWR1bXBfZmlsdGVyIGlzIDB4MzM7IHRoaXMgbWVhbnMgYWxsIGFub255bW91cyBtZW1vcnkKLXNlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzIGFuZCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFyZSBkdW1wZWQuCiYjNDM7ICBOb3RlIHRoYXQgYml0IDkgaXMgc2V0IGJ5IGRlZmF1bHQgYmVjYXVzZSB0b29scyBsaWtlIHN5c3RlbWQtY29yZWR1bXAgZ28KJiM0MzsgIHRocm91Z2ggdGhlIGZkcy4gSWYgeW91IGRvIG5vdCBzZXQgYml0IDksIGZpbGVzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGJ5CiYjNDM7ICBhbnkgVk1BIGFyZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBTb21lIGZpbGUgcmVsZWFzZSBsb2dpYywgc3VjaCBhcwomIzQzOyAgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWQgYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoCiYjNDM7ICBlYXJsaWVyLgomIzQzOwomIzQzO1RoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDIzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeQomIzQzO3NlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzLCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFuZCBmZCBsaXN0IGFyZSBkdW1wZWQuCiAKIElmIHlvdSBkb24mIzM5O3Qgd2FudCB0byBkdW1wIGFsbCBzaGFyZWQgbWVtb3J5IHNlZ21lbnRzIGF0dGFjaGVkIHRvIHBpZCAxMjM0LAotd3JpdGUgMHgzMSB0byB0aGUgcHJvY2VzcyYjMzk7cyBwcm9jIGZpbGU6OgomIzQzO3dyaXRlIDB4MjMxIHRvIHRoZSBwcm9jZXNzJiMzOTtzIHByb2MgZmlsZTo6CiAKLSAgJCBlY2hvIDB4MzEgJmd0OyAvcHJvYy8xMjM0L2NvcmVkdW1wX2ZpbHRlcgomIzQzOyAgJCBlY2hvIDB4MjMxICZndDsgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXIKIAogV2hlbiBhIG5ldyBwcm9jZXNzIGlzIGNyZWF0ZWQsIHRoZSBwcm9jZXNzIGluaGVyaXRzIHRoZSBiaXRtYXNrIHN0YXR1cyBmcm9tIGl0cwogcGFyZW50LiBJdCBpcyB1c2VmdWwgdG8gc2V0IHVwIGNvcmVkdW1wX2ZpbHRlciBiZWZvcmUgdGhlIHByb2dyYW0gcnVucy4KZGlmZiAtLWdpdCBhL2ZzL2NvcmVkdW1wLmMgYi9mcy9jb3JlZHVtcC5jCmluZGV4IGU2OGE3NmZmOTJhMzguLmQzNzhlNjljNjM2ZTIgMTAwNjQ0Ci0tLSBhL2ZzL2NvcmVkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29yZWR1bXAuYwpAQCAtNTIwLDYgJiM0Mzs1MjAsMjUgQEAgc3RhdGljIGludCB6YXBfdGhyZWFkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAlyZXR1cm4gbnI7CiB9CiAKJiM0MzsvKgomIzQzOyAqIElmIGRvIG5vdCBkdW1wIGZkIGxpc3QsIGZpbGVzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGJ5IGFueSBWTUEKJiM0MzsgKiBjYW4gYmUgcmVsZWFzZWQgYmVmb3JlIGR1bXBpbmcgY29yZS4gVGhlcmVmb3JlLCBzb21lIGZpbGUgcmVsZWFzZQomIzQzOyAqIGxvZ2ljLCBzdWNoIGFzIGV4aXRpbmcgZmxvY2sgb3IgcmVsZWFzaW5nIHJlZmVyZW5jZXMgdG8gc2hhcmVkCiYjNDM7ICogYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoIGVhcmxpZXIuIE5vdGUgdGhhdCBkb19jb3JlZHVtcCgpIG9mdGVuCiYjNDM7ICogdGFrZXMgc2V2ZXJhbCBzZWNvbmRzIG9yIGV2ZW4gbG9uZ2VyIHRvIGV4ZWN1dGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgY29yZWR1bXBfcHJlX2V4aXQodm9pZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudCwgKnQ7CiYjNDM7CiYjNDM7CWlmIChtbV9mbGFnc190ZXN0KE1NRl9EVU1QX0ZEX0xJU1QsIHRzay0mZ3Q7bW0pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF90aHJlYWQodHNrLCB0KSB7CiYjNDM7CQlleGl0X2ZpbGVzKHQpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBjb3JlZHVtcF93YWl0KGludCBleGl0X2NvZGUsIHN0cnVjdCBjb3JlX3N0YXRlICpjb3JlX3N0YXRlKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKQEAgLTExMjMsNiAmIzQzOzExNDIsOCBAQCBzdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSwKIAlpZiAoY24tJmd0O21hc2sgJmFtcDsgQ09SRURVTVBfUkVKRUNUKQogCQlyZXR1cm47CiAKJiM0MzsJY29yZWR1bXBfcHJlX2V4aXQoKTsKJiM0MzsKIAkvKiBnZXQgdXMgYW4gdW5zaGFyZWQgZGVzY3JpcHRvciB0YWJsZTsgYWxtb3N0IGFsd2F5cyBhIG5vLW9wICovCiAJLyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqLwogCWlmICh1bnNoYXJlX2ZpbGVzKCkpCmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmMKaW5kZXggYzY4YjhjMGE0MDk3YS4uMDJlZTRlOGIxY2ZlOCAxMDA2NDQKLS0tIGEvZnMvZmlsZV90YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2ZpbGVfdGFibGUuYwpAQCAtNTY4LDcgJiM0Mzs1NjgsMTIgQEAgc3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKQogCQlyZXR1cm47CiAJfQogCi0JaWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgJmFtcDsmYW1wOyAhKHRhc2stJmd0O2ZsYWdzICZhbXA7IFBGX0tUSFJFQUQpKSkgewomIzQzOwkvKgomIzQzOwkgKiBjb3JlZHVtcF9wcmVfZXhpdCgpIG1heSByZWxlYXNlIGZpbGVzIGJlZm9yZSBkdW1waW5nIGNvcmUuCiYjNDM7CSAqIENhbm5vdCB1c2UgdGFza193b3JrIGluIHRoZSBjYXNlLCBuZWVkcyB0byByZWxlYXNlIGZpbGVzCiYjNDM7CSAqIGVhcmxpZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAobGlrZWx5KCFpbl9pbnRlcnJ1cHQoKSAmYW1wOyZhbXA7ICEodGFzay0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX0tUSFJFQUQgfCBQRl9EVU1QQ09SRSkpKSkgewogCQlpbml0X3Rhc2tfd29yaygmYW1wO2ZpbGUtJmd0O2ZfdGFza193b3JrLCBfX19fZnB1dCk7CiAJCWlmICghdGFza193b3JrX2FkZCh0YXNrLCAmYW1wO2ZpbGUtJmd0O2ZfdGFza193b3JrLCBUV0FfUkVTVU1FKSkKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaAppbmRleCBlYmYwZDkxMmJlN2RiLi5mMzU1ODU4YmZiNjJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCkBAIC0xOTQ3LDE0ICYjNDM7MTk0NywxNiBAQCBlbnVtIHsKICNkZWZpbmUgTU1GX0RVTVBfSFVHRVRMQl9TSEFSRUQgIDgKICNkZWZpbmUgTU1GX0RVTVBfREFYX1BSSVZBVEUJOQogI2RlZmluZSBNTUZfRFVNUF9EQVhfU0hBUkVECTEwCiYjNDM7I2RlZmluZSBNTUZfRFVNUF9GRF9MSVNUCTExCiAKICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX1NISUZUCU1NRl9EVU1QQUJMRV9CSVRTCi0jZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTCTkKJiM0MzsjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTCTEwCiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9NQVNLIFwKIAkoKEJJVChNTUZfRFVNUF9GSUxURVJfQklUUykgLSAxKSAmbHQ7Jmx0OyBNTUZfRFVNUF9GSUxURVJfU0hJRlQpCiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9ERUZBVUxUIFwKIAkoQklUKE1NRl9EVU1QX0FOT05fUFJJVkFURSkgfCBCSVQoTU1GX0RVTVBfQU5PTl9TSEFSRUQpIHwgXAotCSBCSVQoTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYpCiYjNDM7CSAoMSAmbHQ7Jmx0OyBNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUpIHwgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRiB8XAomIzQzOwkgKDEgJmx0OyZsdDsgTU1GX0RVTVBfRkRfTElTVCkpCiAKICNpZmRlZiBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMKICMgZGVmaW5lIE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYJQklUKE1NRl9EVU1QX0VMRl9IRUFERVJTKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDggMDU6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzYzNAoJCQkJCQkJb3V0cHV0OiAyNDcKCQkJCQkJCXRob3VnaHRzOiA1NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvcmVkdW1wIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgdGhlIExpbnV4IGNvcmVkdW1wIG1lY2hhbmlzbS4gSSBzZWUgaXQgaW50cm9kdWNlcyBhIG5ldyBtZW1vcnkgZmlsdGVyIHR5cGUsIGBNTUZfRFVNUF9GRF9MSVNUYC4gSW50ZXJlc3RpbmcuIElmIHRoYXQgYml0ICppc24mIzM5O3QqIHNldCwgYGNvcmVkdW1wX3ByZV9leGl0KClgIGdldHMgY2FsbGVkIHdpdGhpbiBgZG9fY29yZWR1bXAoKWAsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSB0aHJlYWRzIGFuZCBjYWxscyBgZXhpdF9maWxlcyh0KWAgb24gZWFjaCBvbmUuIFRoYXQmIzM5O3MgYSBrZXkgY2hhbmdlIOKAkyBwdXNoaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBlYXJsaWVyIGluIHRoZSBwcm9jZXNzLiBJIGFsc28gbm90aWNlIGEgbW9kaWZpY2F0aW9uIHRvIGBfX2ZwdXRfZGVmZXJyZWQoKWAsIHNraXBwaW5nIHRoZSBgdGFza193b3JrYCBtZWNoYW5pc20gaWYgYFBGX0RVTVBDT1JFYCBpcyBzZXQsIHByZXN1bWFibHkgdG8gYXZvaWQgaXNzdWVzIHdpdGggZGVmZXJyZWQgY2xlYW51cCBkdXJpbmcgYSBjb3JlZHVtcC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGFsbCBhYm91dCBmaWxlIGRlc2NyaXB0b3IgbGlmZWN5Y2xlIHdpdGhpbiBhIGNvcmVkdW1wIHNjZW5hcmlvLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSwgYW5kIHRoZXJlJiMzOTtzIG5vIG5ldyBidWZmZXIgYWxsb2NhdGlvbiBvciBtYW5pcHVsYXRpb24gdGhhdCBzY3JlYW1zICYjMzQ7cG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLiYjMzQ7IENydWNpYWxseSwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyBlaXRoZXIuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgY29udHJvbCBmbG93OiBjYWxsaW5nIGBleGl0X2ZpbGVzYCBlYXJsaWVyIGFuZCBjaXJjdW12ZW50aW5nIGB0YXNrX3dvcmtgIGR1cmluZyBjb3JlZHVtcC4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB1c2UtYWZ0ZXItZnJlZSBidWdzIGFyZSB0aGUgcHJpbWFyeSByaXNrIGhlcmUuIFNwZWNpZmljYWxseSwgaWYgYSBmaWxlIGlzIGFjY2Vzc2VkIGFmdGVyIGJlaW5nIGNsb3NlZCBieSB0aGUgc3luY2hyb25vdXMgYGV4aXRfZmlsZXMoKWAgY2FsbCwgdGhhdCYjMzk7cyBhIGNsYXNzaWMgVUFGIHNjZW5hcmlvLiBBbHNvLCB0aGVyZSBjb3VsZCBiZSBsb2NraW5nIGlzc3VlcyB3aXRoIHRoZSBzeW5jaHJvbm91cyBgZnB1dGAuIEJ1dCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgS0FTQU4gYW5kIExPQ0tERVAgc2hvdWxkIGJlIHByZXR0eSBlZmZlY3RpdmUgYXQgY2F0Y2hpbmcgdGhvc2UuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2vigKYgbm8sIEkgZG9uJiMzOTt0IHNlZSBhbnkgY2hhbmdlcyB3aXRoaW4gYGV4aXRfZmlsZXMoKWAgb3IgYF9fZnB1dF9kZWZlcnJlZCgpYCB0aGF0IHdvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSXQmIzM5O3MgcmVhbGx5IGp1c3QgY2xvc2luZyBmaWxlcy4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS4KCkxldCYjMzk7cyBzdW1tYXJpemUgdGhpcyBjbGVhcmx5OiB0aGUgcGF0Y2ggc3BlZWRzIHVwIGZpbGUgZGVzY3JpcHRvciBjbGVhbnVwIGR1cmluZyBjb3JlZHVtcHMgd2hlbiB0aGUgbmV3IGZpbHRlciBiaXQgaXNuJiMzOTt0IHVzZWQsIGJ5IGFkZGluZyBhIG5ldyBwcmUtZXhpdCBwaGFzZSBhbmQgYXZvaWRpbmcgdGhlIHVzdWFsIGRlZmVycmVkIGNsZWFudXAuIFdoaWxlIGl0IGludHJvZHVjZXMgdGhlIHJpc2sgb2YgVUFGIGJ1Z3MgYW5kIGxvY2tpbmcgaXNzdWVzIGR1ZSB0byBjaGFuZ2VkIHRpbWluZywgdGhlc2UgYXJlIHJpc2tzIGVmZmVjdGl2ZWx5IGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoICpkb2VzbiYjMzk7dCogaW50cm9kdWNlIGFueSBwb3RlbnRpYWwgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBObyBuZWVkIGZvciBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA4IDA1OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlZHVtcCBsb2dpYyB0byBhbGxvdyByZWxlYXNpbmcgZmlsZSBkZXNjcmlwdG9ycyBlYXJsaWVyIGR1cmluZyBhIGNvcmVkdW1wIGlmIHRoZSBgTU1GX0RVTVBfRkRfTElTVGAgZmlsdGVyIGJpdCBpcyBub3Qgc2V0LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBjb3JlZHVtcF9wcmVfZXhpdCgpYCB3aGljaCBjYWxscyBgZXhpdF9maWxlcygpYCBvbiBhbGwgdGhyZWFkcywgYW5kIG1vZGlmaWVzIGBfX2ZwdXRfZGVmZXJyZWQoKWAgdG8gYnlwYXNzIGB0YXNrX3dvcmtgIHdoZW4gYFBGX0RVTVBDT1JFYCBpcyBzZXQuXG5UaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBsaWZlY3ljbGUgYW5kIGNsZWFudXAgdGltaW5nIG9mIGZpbGUgZGVzY3JpcHRvcnMgZHVyaW5nIGEgY29yZWR1bXAuIFRoZSBwcmltYXJ5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgdXNlLWFmdGVyLWZyZWUgKGlmIGEgZmlsZSBpcyBhY2Nlc3NlZCBhZnRlciBiZWluZyByZWxlYXNlZCkgb3IgbG9ja2luZyBpc3N1ZXMgKGR1ZSB0byBzeW5jaHJvbm91cyBgZnB1dGAgaW5zdGVhZCBvZiBkZWZlcnJlZCkuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLlxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZWR1bXAgbG9naWMgdG8gYWxsb3cgcmVsZWFzaW5nIGZpbGUgZGVzY3JpcHRvcnMgZWFybGllciBkdXJpbmcgYSBjb3JlZHVtcCBpZiB0aGUgYE1NRl9EVU1QX0ZEX0xJU1RgIGZpbHRlciBiaXQgaXMgbm90IHNldC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgY29yZWR1bXBfcHJlX2V4aXQoKWAgd2hpY2ggY2FsbHMgYGV4aXRfZmlsZXMoKWAgb24gYWxsIHRocmVhZHMsIGFuZCBtb2RpZmllcyBgX19mcHV0X2RlZmVycmVkKClgIHRvIGJ5cGFzcyBgdGFza193b3JrYCB3aGVuIGBQRl9EVU1QQ09SRWAgaXMgc2V0LlxuVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHRpbWluZyBvZiBmaWxlIGRlc2NyaXB0b3JzIGR1cmluZyBhIGNvcmVkdW1wLiBUaGUgcHJpbWFyeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHVzZS1hZnRlci1mcmVlIChpZiBhIGZpbGUgaXMgYWNjZXNzZWQgYWZ0ZXIgYmVpbmcgcmVsZWFzZWQpIG9yIGxvY2tpbmcgaXNzdWVzIChkdWUgdG8gc3luY2hyb25vdXMgYGZwdXRgIGluc3RlYWQgb2YgZGVmZXJyZWQpLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzowOC44OTk5MDY5MDdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI2Mzk2NzA1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09SRURVTVBcIixcbiAgICBcIkVMRl9DT1JFXCIsXG4gICAgXCJQUk9DX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZzX2NvcmVkdW1wXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZWR1bXAgbG9naWMgdG8gYWxsb3cgcmVsZWFzaW5nIGZpbGUgZGVzY3JpcHRvcnMgZWFybGllciBkdXJpbmcgYSBjb3JlZHVtcCBpZiB0aGUgYE1NRl9EVU1QX0ZEX0xJU1RgIGZpbHRlciBiaXQgaXMgbm90IHNldC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgY29yZWR1bXBfcHJlX2V4aXQoKWAgd2hpY2ggY2FsbHMgYGV4aXRfZmlsZXMoKWAgb24gYWxsIHRocmVhZHMsIGFuZCBtb2RpZmllcyBgX19mcHV0X2RlZmVycmVkKClgIHRvIGJ5cGFzcyBgdGFza193b3JrYCB3aGVuIGBQRl9EVU1QQ09SRWAgaXMgc2V0LlxcblRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGxpZmVjeWNsZSBhbmQgY2xlYW51cCB0aW1pbmcgb2YgZmlsZSBkZXNjcmlwdG9ycyBkdXJpbmcgYSBjb3JlZHVtcC4gVGhlIHByaW1hcnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSB1c2UtYWZ0ZXItZnJlZSAoaWYgYSBmaWxlIGlzIGFjY2Vzc2VkIGFmdGVyIGJlaW5nIHJlbGVhc2VkKSBvciBsb2NraW5nIGlzc3VlcyAoZHVlIHRvIHN5bmNocm9ub3VzIGBmcHV0YCBpbnN0ZWFkIG9mIGRlZmVycmVkKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBiaXQgaW4gYGNvcmVkdW1wX2ZpbHRlcmAgdG8gY29udHJvbCB3aGV0aGVyIGZpbGUgZGVzY3JpcHRvcnMgYXJlIHJlbGVhc2VkIGJlZm9yZSBvciBhZnRlciBkdW1waW5nIGNvcmUuIFRoaXMgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMgaW4gYGZzL2NvcmVkdW1wLmNgIGFuZCBgZnMvZmlsZV90YWJsZS5jYCwgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBjb3JlZHVtcCBnZW5lcmF0aW9uIGFuZCBgL3Byb2MvW3BpZF0vY29yZWR1bXBfZmlsdGVyYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTc6MDguODk5OTEzMTE3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk1OTY5MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3ZTY5MmFiNjk3M2Q5OTQ5ZmUzOGZhNzdhYThmNmI2N2ZiZjNiMDljXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDggMDU6NTc6MDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcXG5pbmRleCAyNzE4OWY2ZTAwNGVlLi4wMDFjZTEzNmU5NjRiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XFxuQEAgLTE5MjksNyArMTkyOSw3IEBAIHdpbGwgYmUgZHVtcGVkIHdoZW4gdGhlIFxcdTAwM2NwaWRcXHUwMDNlIHByb2Nlc3MgaXMgZHVtcGVkLiBjb3JlZHVtcF9maWx0ZXIgaXMgYSBiaXRtYXNrXFxuIG9mIG1lbW9yeSB0eXBlcy4gSWYgYSBiaXQgb2YgdGhlIGJpdG1hc2sgaXMgc2V0LCBtZW1vcnkgc2VnbWVudHMgb2YgdGhlXFxuIGNvcnJlc3BvbmRpbmcgbWVtb3J5IHR5cGUgYXJlIGR1bXBlZCwgb3RoZXJ3aXNlIHRoZXkgYXJlIG5vdCBkdW1wZWQuXFxuIFxcbi1UaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XFxuK1RoZSBmb2xsb3dpbmcgMTAgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XFxuIFxcbiAgIC0gKGJpdCAwKSBhbm9ueW1vdXMgcHJpdmF0ZSBtZW1vcnlcXG4gICAtIChiaXQgMSkgYW5vbnltb3VzIHNoYXJlZCBtZW1vcnlcXG5AQCAtMTk0MSw2ICsxOTQxLDcgQEAgVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOlxcbiAgIC0gKGJpdCA2KSBodWdldGxiIHNoYXJlZCBtZW1vcnlcXG4gICAtIChiaXQgNykgREFYIHByaXZhdGUgbWVtb3J5XFxuICAgLSAoYml0IDgpIERBWCBzaGFyZWQgbWVtb3J5XFxuKyAgLSAoYml0IDkpIGZkIGxpc3RcXG4gXFxuICAgTm90ZSB0aGF0IE1NSU8gcGFnZXMgc3VjaCBhcyBmcmFtZSBidWZmZXIgYXJlIG5ldmVyIGR1bXBlZCBhbmQgdkRTTyBwYWdlc1xcbiAgIGFyZSBhbHdheXMgZHVtcGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGJpdG1hc2sgc3RhdHVzLlxcbkBAIC0xOTQ4LDEzICsxOTQ5LDE5IEBAIFRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcXG4gICBOb3RlIHRoYXQgYml0cyAwLTQgZG9uJ3QgYWZmZWN0IGh1Z2V0bGIgb3IgREFYIG1lbW9yeS4gaHVnZXRsYiBtZW1vcnkgaXNcXG4gICBvbmx5IGFmZmVjdGVkIGJ5IGJpdCA1LTYsIGFuZCBEQVggaXMgb25seSBhZmZlY3RlZCBieSBiaXRzIDctOC5cXG4gXFxuLVRoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDMzOyB0aGlzIG1lYW5zIGFsbCBhbm9ueW1vdXMgbWVtb3J5XFxuLXNlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzIGFuZCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFyZSBkdW1wZWQuXFxuKyAgTm90ZSB0aGF0IGJpdCA5IGlzIHNldCBieSBkZWZhdWx0IGJlY2F1c2UgdG9vbHMgbGlrZSBzeXN0ZW1kLWNvcmVkdW1wIGdvXFxuKyAgdGhyb3VnaCB0aGUgZmRzLiBJZiB5b3UgZG8gbm90IHNldCBiaXQgOSwgZmlsZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnlcXG4rICBhbnkgVk1BIGFyZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBTb21lIGZpbGUgcmVsZWFzZSBsb2dpYywgc3VjaCBhc1xcbisgIGV4aXRpbmcgZmxvY2sgb3IgcmVsZWFzaW5nIHJlZmVyZW5jZXMgdG8gc2hhcmVkIGJ1ZmZlcnMgaXMgZXhlY3V0ZWQgbXVjaFxcbisgIGVhcmxpZXIuXFxuK1xcbitUaGUgZGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgyMzM7IHRoaXMgbWVhbnMgYWxsIGFub255bW91cyBtZW1vcnlcXG4rc2VnbWVudHMsIEVMRiBoZWFkZXIgcGFnZXMsIGh1Z2V0bGIgcHJpdmF0ZSBtZW1vcnkgYW5kIGZkIGxpc3QgYXJlIGR1bXBlZC5cXG4gXFxuIElmIHlvdSBkb24ndCB3YW50IHRvIGR1bXAgYWxsIHNoYXJlZCBtZW1vcnkgc2VnbWVudHMgYXR0YWNoZWQgdG8gcGlkIDEyMzQsXFxuLXdyaXRlIDB4MzEgdG8gdGhlIHByb2Nlc3MncyBwcm9jIGZpbGU6Olxcbit3cml0ZSAweDIzMSB0byB0aGUgcHJvY2VzcydzIHByb2MgZmlsZTo6XFxuIFxcbi0gICQgZWNobyAweDMxIFxcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcXG4rICAkIGVjaG8gMHgyMzEgXFx1MDAzZSAvcHJvYy8xMjM0L2NvcmVkdW1wX2ZpbHRlclxcbiBcXG4gV2hlbiBhIG5ldyBwcm9jZXNzIGlzIGNyZWF0ZWQsIHRoZSBwcm9jZXNzIGluaGVyaXRzIHRoZSBiaXRtYXNrIHN0YXR1cyBmcm9tIGl0c1xcbiBwYXJlbnQuIEl0IGlzIHVzZWZ1bCB0byBzZXQgdXAgY29yZWR1bXBfZmlsdGVyIGJlZm9yZSB0aGUgcHJvZ3JhbSBydW5zLlxcbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xcbmluZGV4IGU2OGE3NmZmOTJhMzguLmQzNzhlNjljNjM2ZTIgMTAwNjQ0XFxuLS0tIGEvZnMvY29yZWR1bXAuY1xcbisrKyBiL2ZzL2NvcmVkdW1wLmNcXG5AQCAtNTIwLDYgKzUyMCwyNSBAQCBzdGF0aWMgaW50IHphcF90aHJlYWRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLFxcbiBcXHRyZXR1cm4gbnI7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIElmIGRvIG5vdCBkdW1wIGZkIGxpc3QsIGZpbGVzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGJ5IGFueSBWTUFcXG4rICogY2FuIGJlIHJlbGVhc2VkIGJlZm9yZSBkdW1waW5nIGNvcmUuIFRoZXJlZm9yZSwgc29tZSBmaWxlIHJlbGVhc2VcXG4rICogbG9naWMsIHN1Y2ggYXMgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWRcXG4rICogYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoIGVhcmxpZXIuIE5vdGUgdGhhdCBkb19jb3JlZHVtcCgpIG9mdGVuXFxuKyAqIHRha2VzIHNldmVyYWwgc2Vjb25kcyBvciBldmVuIGxvbmdlciB0byBleGVjdXRlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgY29yZWR1bXBfcHJlX2V4aXQodm9pZClcXG4re1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQsICp0O1xcbitcXG4rXFx0aWYgKG1tX2ZsYWdzX3Rlc3QoTU1GX0RVTVBfRkRfTElTVCwgdHNrLVxcdTAwM2VtbSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvcl9lYWNoX3RocmVhZCh0c2ssIHQpIHtcXG4rXFx0XFx0ZXhpdF9maWxlcyh0KTtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IGNvcmVkdW1wX3dhaXQoaW50IGV4aXRfY29kZSwgc3RydWN0IGNvcmVfc3RhdGUgKmNvcmVfc3RhdGUpXFxuIHtcXG4gXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50O1xcbkBAIC0xMTIzLDYgKzExNDIsOCBAQCBzdGF0aWMgdm9pZCBkb19jb3JlZHVtcChzdHJ1Y3QgY29yZV9uYW1lICpjbiwgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4gXFx0aWYgKGNuLVxcdTAwM2VtYXNrIFxcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHRjb3JlZHVtcF9wcmVfZXhpdCgpO1xcbitcXG4gXFx0LyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqL1xcbiBcXHQvKiBUaGUgY2VsbCBzcHVmcyBjb3JlZHVtcCBjb2RlIHJlYWRzIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGVzICovXFxuIFxcdGlmICh1bnNoYXJlX2ZpbGVzKCkpXFxuZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuY1xcbmluZGV4IGM2OGI4YzBhNDA5N2EuLjAyZWU0ZThiMWNmZTggMTAwNjQ0XFxuLS0tIGEvZnMvZmlsZV90YWJsZS5jXFxuKysrIGIvZnMvZmlsZV90YWJsZS5jXFxuQEAgLTU2OCw3ICs1NjgsMTIgQEAgc3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChsaWtlbHkoIWluX2ludGVycnVwdCgpIFxcdTAwMjZcXHUwMDI2ICEodGFzay1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9LVEhSRUFEKSkpIHtcXG4rXFx0LypcXG4rXFx0ICogY29yZWR1bXBfcHJlX2V4aXQoKSBtYXkgcmVsZWFzZSBmaWxlcyBiZWZvcmUgZHVtcGluZyBjb3JlLlxcbitcXHQgKiBDYW5ub3QgdXNlIHRhc2tfd29yayBpbiB0aGUgY2FzZSwgbmVlZHMgdG8gcmVsZWFzZSBmaWxlc1xcbitcXHQgKiBlYXJsaWVyLlxcbitcXHQgKi9cXG4rXFx0aWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgXFx1MDAyNlxcdTAwMjYgISh0YXNrLVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9LVEhSRUFEIHwgUEZfRFVNUENPUkUpKSkpIHtcXG4gXFx0XFx0aW5pdF90YXNrX3dvcmsoXFx1MDAyNmZpbGUtXFx1MDAzZWZfdGFza193b3JrLCBfX19fZnB1dCk7XFxuIFxcdFxcdGlmICghdGFza193b3JrX2FkZCh0YXNrLCBcXHUwMDI2ZmlsZS1cXHUwMDNlZl90YXNrX3dvcmssIFRXQV9SRVNVTUUpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaFxcbmluZGV4IGViZjBkOTEyYmU3ZGIuLmYzNTU4NThiZmI2MmIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXFxuQEAgLTE5NDcsMTQgKzE5NDcsMTYgQEAgZW51bSB7XFxuICNkZWZpbmUgTU1GX0RVTVBfSFVHRVRMQl9TSEFSRUQgIDhcXG4gI2RlZmluZSBNTUZfRFVNUF9EQVhfUFJJVkFURVxcdDlcXG4gI2RlZmluZSBNTUZfRFVNUF9EQVhfU0hBUkVEXFx0MTBcXG4rI2RlZmluZSBNTUZfRFVNUF9GRF9MSVNUXFx0MTFcXG4gXFxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX1NISUZUXFx0TU1GX0RVTVBBQkxFX0JJVFNcXG4tI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUU1xcdDlcXG4rI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUU1xcdDEwXFxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX01BU0sgXFxcXFxcbiBcXHQoKEJJVChNTUZfRFVNUF9GSUxURVJfQklUUykgLSAxKSBcXHUwMDNjXFx1MDAzYyBNTUZfRFVNUF9GSUxURVJfU0hJRlQpXFxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0RFRkFVTFQgXFxcXFxcbiBcXHQoQklUKE1NRl9EVU1QX0FOT05fUFJJVkFURSkgfCBCSVQoTU1GX0RVTVBfQU5PTl9TSEFSRUQpIHwgXFxcXFxcbi1cXHQgQklUKE1NRl9EVU1QX0hVR0VUTEJfUFJJVkFURSkgfCBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGKVxcbitcXHQgKDEgXFx1MDAzY1xcdTAwM2MgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYgfFxcXFxcXG4rXFx0ICgxIFxcdTAwM2NcXHUwMDNjIE1NRl9EVU1QX0ZEX0xJU1QpKVxcbiBcXG4gI2lmZGVmIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSU1xcbiAjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGXFx0QklUKE1NRl9EVU1QX0VMRl9IRUFERVJTKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzowOS4zNTAzNjExOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEyOTg5NjMwNTk5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT1JFRFVNUFwiLFxuICAgIFwiRUxGX0NPUkVcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfY29yZWR1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJpdCBpbiBgY29yZWR1bXBfZmlsdGVyYCB0byBjb250cm9sIHdoZXRoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgcmVsZWFzZWQgYmVmb3JlIG9yIGFmdGVyIGR1bXBpbmcgY29yZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvcmVkdW1wIGdlbmVyYXRpb24gYW5kIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTY5MmFiNjk3M2Q5OTQ5ZmUzOGZhNzdhYThmNmI2N2ZiZjNiMDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAwNTo1NzowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG5pbmRleCAyNzE4OWY2ZTAwNGVlLi4wMDFjZTEzNmU5NjRiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuQEAgLTE5MjksNyArMTkyOSw3IEBAIHdpbGwgYmUgZHVtcGVkIHdoZW4gdGhlIFx1MDAzY3BpZFx1MDAzZSBwcm9jZXNzIGlzIGR1bXBlZC4gY29yZWR1bXBfZmlsdGVyIGlzIGEgYml0bWFza1xuIG9mIG1lbW9yeSB0eXBlcy4gSWYgYSBiaXQgb2YgdGhlIGJpdG1hc2sgaXMgc2V0LCBtZW1vcnkgc2VnbWVudHMgb2YgdGhlXG4gY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC5cbiBcbi1UaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XG4rVGhlIGZvbGxvd2luZyAxMCBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcbiBcbiAgIC0gKGJpdCAwKSBhbm9ueW1vdXMgcHJpdmF0ZSBtZW1vcnlcbiAgIC0gKGJpdCAxKSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeVxuQEAgLTE5NDEsNiArMTk0MSw3IEBAIFRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcbiAgIC0gKGJpdCA2KSBodWdldGxiIHNoYXJlZCBtZW1vcnlcbiAgIC0gKGJpdCA3KSBEQVggcHJpdmF0ZSBtZW1vcnlcbiAgIC0gKGJpdCA4KSBEQVggc2hhcmVkIG1lbW9yeVxuKyAgLSAoYml0IDkpIGZkIGxpc3RcbiBcbiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXNcbiAgIGFyZSBhbHdheXMgZHVtcGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGJpdG1hc2sgc3RhdHVzLlxuQEAgLTE5NDgsMTMgKzE5NDksMTkgQEAgVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOlxuICAgTm90ZSB0aGF0IGJpdHMgMC00IGRvbid0IGFmZmVjdCBodWdldGxiIG9yIERBWCBtZW1vcnkuIGh1Z2V0bGIgbWVtb3J5IGlzXG4gICBvbmx5IGFmZmVjdGVkIGJ5IGJpdCA1LTYsIGFuZCBEQVggaXMgb25seSBhZmZlY3RlZCBieSBiaXRzIDctOC5cbiBcbi1UaGUgZGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeVxuLXNlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzIGFuZCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFyZSBkdW1wZWQuXG4rICBOb3RlIHRoYXQgYml0IDkgaXMgc2V0IGJ5IGRlZmF1bHQgYmVjYXVzZSB0b29scyBsaWtlIHN5c3RlbWQtY29yZWR1bXAgZ29cbisgIHRocm91Z2ggdGhlIGZkcy4gSWYgeW91IGRvIG5vdCBzZXQgYml0IDksIGZpbGVzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGJ5XG4rICBhbnkgVk1BIGFyZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBTb21lIGZpbGUgcmVsZWFzZSBsb2dpYywgc3VjaCBhc1xuKyAgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWQgYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoXG4rICBlYXJsaWVyLlxuK1xuK1RoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDIzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeVxuK3NlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzLCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFuZCBmZCBsaXN0IGFyZSBkdW1wZWQuXG4gXG4gSWYgeW91IGRvbid0IHdhbnQgdG8gZHVtcCBhbGwgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBhdHRhY2hlZCB0byBwaWQgMTIzNCxcbi13cml0ZSAweDMxIHRvIHRoZSBwcm9jZXNzJ3MgcHJvYyBmaWxlOjpcbit3cml0ZSAweDIzMSB0byB0aGUgcHJvY2VzcydzIHByb2MgZmlsZTo6XG4gXG4tICAkIGVjaG8gMHgzMSBcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcbisgICQgZWNobyAweDIzMSBcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcbiBcbiBXaGVuIGEgbmV3IHByb2Nlc3MgaXMgY3JlYXRlZCwgdGhlIHByb2Nlc3MgaW5oZXJpdHMgdGhlIGJpdG1hc2sgc3RhdHVzIGZyb20gaXRzXG4gcGFyZW50LiBJdCBpcyB1c2VmdWwgdG8gc2V0IHVwIGNvcmVkdW1wX2ZpbHRlciBiZWZvcmUgdGhlIHByb2dyYW0gcnVucy5cbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xuaW5kZXggZTY4YTc2ZmY5MmEzOC4uZDM3OGU2OWM2MzZlMiAxMDA2NDRcbi0tLSBhL2ZzL2NvcmVkdW1wLmNcbisrKyBiL2ZzL2NvcmVkdW1wLmNcbkBAIC01MjAsNiArNTIwLDI1IEBAIHN0YXRpYyBpbnQgemFwX3RocmVhZHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXG4gXHRyZXR1cm4gbnI7XG4gfVxuIFxuKy8qXG4rICogSWYgZG8gbm90IGR1bXAgZmQgbGlzdCwgZmlsZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkgYW55IFZNQVxuKyAqIGNhbiBiZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBUaGVyZWZvcmUsIHNvbWUgZmlsZSByZWxlYXNlXG4rICogbG9naWMsIHN1Y2ggYXMgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWRcbisgKiBidWZmZXJzIGlzIGV4ZWN1dGVkIG11Y2ggZWFybGllci4gTm90ZSB0aGF0IGRvX2NvcmVkdW1wKCkgb2Z0ZW5cbisgKiB0YWtlcyBzZXZlcmFsIHNlY29uZHMgb3IgZXZlbiBsb25nZXIgdG8gZXhlY3V0ZS5cbisgKi9cbitzdGF0aWMgdm9pZCBjb3JlZHVtcF9wcmVfZXhpdCh2b2lkKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudCwgKnQ7XG4rXG4rXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfRFVNUF9GRF9MSVNULCB0c2stXHUwMDNlbW0pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF90aHJlYWQodHNrLCB0KSB7XG4rXHRcdGV4aXRfZmlsZXModCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgY29yZWR1bXBfd2FpdChpbnQgZXhpdF9jb2RlLCBzdHJ1Y3QgY29yZV9zdGF0ZSAqY29yZV9zdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7XG5AQCAtMTEyMyw2ICsxMTQyLDggQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHRpZiAoY24tXHUwMDNlbWFzayBcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRjb3JlZHVtcF9wcmVfZXhpdCgpO1xuK1xuIFx0LyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqL1xuIFx0LyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqL1xuIFx0aWYgKHVuc2hhcmVfZmlsZXMoKSlcbmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmNcbmluZGV4IGM2OGI4YzBhNDA5N2EuLjAyZWU0ZThiMWNmZTggMTAwNjQ0XG4tLS0gYS9mcy9maWxlX3RhYmxlLmNcbisrKyBiL2ZzL2ZpbGVfdGFibGUuY1xuQEAgLTU2OCw3ICs1NjgsMTIgQEAgc3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobGlrZWx5KCFpbl9pbnRlcnJ1cHQoKSBcdTAwMjZcdTAwMjYgISh0YXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSkpIHtcbitcdC8qXG4rXHQgKiBjb3JlZHVtcF9wcmVfZXhpdCgpIG1heSByZWxlYXNlIGZpbGVzIGJlZm9yZSBkdW1waW5nIGNvcmUuXG4rXHQgKiBDYW5ub3QgdXNlIHRhc2tfd29yayBpbiB0aGUgY2FzZSwgbmVlZHMgdG8gcmVsZWFzZSBmaWxlc1xuK1x0ICogZWFybGllci5cbitcdCAqL1xuK1x0aWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgXHUwMDI2XHUwMDI2ICEodGFzay1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0tUSFJFQUQgfCBQRl9EVU1QQ09SRSkpKSkge1xuIFx0XHRpbml0X3Rhc2tfd29yayhcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBfX19fZnB1dCk7XG4gXHRcdGlmICghdGFza193b3JrX2FkZCh0YXNrLCBcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBUV0FfUkVTVU1FKSlcbiBcdFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCBlYmYwZDkxMmJlN2RiLi5mMzU1ODU4YmZiNjJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC0xOTQ3LDE0ICsxOTQ3LDE2IEBAIGVudW0ge1xuICNkZWZpbmUgTU1GX0RVTVBfSFVHRVRMQl9TSEFSRUQgIDhcbiAjZGVmaW5lIE1NRl9EVU1QX0RBWF9QUklWQVRFXHQ5XG4gI2RlZmluZSBNTUZfRFVNUF9EQVhfU0hBUkVEXHQxMFxuKyNkZWZpbmUgTU1GX0RVTVBfRkRfTElTVFx0MTFcbiBcbiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9TSElGVFx0TU1GX0RVTVBBQkxFX0JJVFNcbi0jZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTXHQ5XG4rI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUU1x0MTBcbiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9NQVNLIFxcXG4gXHQoKEJJVChNTUZfRFVNUF9GSUxURVJfQklUUykgLSAxKSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfRklMVEVSX1NISUZUKVxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0RFRkFVTFQgXFxcbiBcdChCSVQoTU1GX0RVTVBfQU5PTl9QUklWQVRFKSB8IEJJVChNTUZfRFVNUF9BTk9OX1NIQVJFRCkgfCBcXFxuLVx0IEJJVChNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUpIHwgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRilcbitcdCAoMSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYgfFxcXG4rXHQgKDEgXHUwMDNjXHUwMDNjIE1NRl9EVU1QX0ZEX0xJU1QpKVxuIFxuICNpZmRlZiBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlNcbiAjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGXHRCSVQoTU1GX0RVTVBfRUxGX0hFQURFUlMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzowOS4zNTAzNjkwNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMzk5NDYwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb3JlZHVtcCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgYWx0ZXJzIGhvdyBjb3JlZHVtcHMgYmVoYXZlIGluIHRoZSBrZXJuZWwuIEl0J3MgYWRkaW5nIGEgbmV3IGJpdCwgYml0IDksIGBNTUZfRFVNUF9GRF9MSVNUYCwgdG8gdGhlIGBjb3JlZHVtcF9maWx0ZXJgLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhvdyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBoYW5kbGVkIGR1cmluZyB0aGUgY29yZWR1bXAgcHJvY2Vzcy4gU3BlY2lmaWNhbGx5LCB3aGVuIHRoaXMgbmV3IGJpdCAqaXNuJ3QqIHNldCwgYGNvcmVkdW1wX3ByZV9leGl0KClgIGdldHMgY2FsbGVkIGZyb20gd2l0aGluIGBkb19jb3JlZHVtcCgpYC4gVGhhdCdzIHdoZXJlIHRoZSBpdGVyYXRpb24gdGhyb3VnaCB0aHJlYWRzIGFuZCB0aGUgc3Vic2VxdWVudCBjYWxscyB0byBgZXhpdF9maWxlcyh0KWAgaGFwcGVuLCByZWxlYXNpbmcgdGhlIGZpbGVzLiBUaGVyZSdzIGFsc28gc29tZSBpbnRlcmVzdGluZyBsb2dpYyBpbiBgX19mcHV0X2RlZmVycmVkKClgLCB3aGVyZSB0aGUgYFBGX0tUSFJFQUQgfCBQRl9EVU1QQ09SRWAgZmxhZ3MgYXJlIGNoZWNrZWQgdG8gYXZvaWQgdGFzayB3b3JrIHdoZW4gcmVsZWFzaW5nIGZpbGVzIGR1cmluZyBhIGNvcmVkdW1wLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nLCB0aGlzIGlzIGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBXZSdyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gY29yZSBrZXJuZWwgbG9naWMg4oCTIGNvcmVkdW1wIGZ1bmN0aW9uYWxpdHkgYW5kIHRoZSBmaWxlIHRhYmxlLiBJbnRyb2R1Y2luZyBhIG5ldyBmZWF0dXJlLCBlc3BlY2lhbGx5IG9uZSB0aGF0IG1vZGlmaWVzIHRoZSBmaWxlIHJlbGVhc2UgcHJvY2VzcyBkdXJpbmcgYSBjcml0aWNhbCBldmVudCBsaWtlIGEgY29yZWR1bXAsIG1lYW5zIHRoZXJlJ3MgYSBoaWdoZXIgbGlrZWxpaG9vZCBvZiB1bmNvdmVyaW5nIGludGVyZXN0aW5nIGJ1Z3MuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIGBkb19jb3JlZHVtcGAgaXMgb2J2aW91c2x5IGFuIGVudHJ5IHBvaW50LCB0aGUgbWFpbiBmdW5jdGlvbi4gRXZlbiB0aG91Z2ggaXQncyBzb21ld2hhdCBnZW5lcmljLCB0aGF0J3Mgd2hlcmUgdGhlIGFjdGlvbiBiZWdpbnMuIGBjb3JlZHVtcF9wcmVfZXhpdGAgaXMgYWxzbyBhbiBpbXBvcnRhbnQgZnVuY3Rpb24sIGFuZCBgX19mcHV0X2RlZmVycmVkYCBpcyBhIGNvbmNlcm4gdG9vLiBMZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkLiBJIGV4cGVjdCB0byBmaW5kIHRoZW0gaW4gYGZzL2NvcmVkdW1wLmNgIG9yIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBmaWxlIHRhYmxlLiBBbmQsIGBkb19jb3JlZHVtcGAgaXMgbm90IHN0YXRpYywgc28gdGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4gYGV4aXRfZmlsZXNgIGlzIGxpa2VseSBpbiBga2VybmVsL2V4aXQuY2Agb3IgYSBzaW1pbGFyIGZpbGUuIExldCdzIGRvIGEgc2VhcmNoIHRvIGdldCBhIGJldHRlciBvdmVydmlldyBvZiBob3cgdGhleSdyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjM3LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTc6MTYuNjkwMzE4MDU0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNDc3Mjc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRvX2NvcmVkdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2NvcmVkdW1wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29yZWR1bXAuYz01MDQ9c3RhdGljIGludCB6YXBfdGhyZWFkcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayxcXG4tLVxcbmZzL2NvcmVkdW1wLmMtNTI2LSAqIGxvZ2ljLCBzdWNoIGFzIGV4aXRpbmcgZmxvY2sgb3IgcmVsZWFzaW5nIHJlZmVyZW5jZXMgdG8gc2hhcmVkXFxuZnMvY29yZWR1bXAuYzo1Mjc6ICogYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoIGVhcmxpZXIuIE5vdGUgdGhhdCBkb19jb3JlZHVtcCgpIG9mdGVuXFxuZnMvY29yZWR1bXAuYy01MjgtICogdGFrZXMgc2V2ZXJhbCBzZWNvbmRzIG9yIGV2ZW4gbG9uZ2VyIHRvIGV4ZWN1dGUuXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTEwOTk9c3RhdGljIGlubGluZSBib29sIGNvcmVkdW1wX3NraXAoY29uc3Qgc3RydWN0IGNvcmVkdW1wX3BhcmFtcyAqY3BybSxcXG4tLVxcbmZzL2NvcmVkdW1wLmMtMTExMC1cXG5mcy9jb3JlZHVtcC5jOjExMTE6c3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXFxuZnMvY29yZWR1bXAuYy0xMTEyLVxcdFxcdFxcdHNpemVfdCAqKmFyZ3YsIGludCAqYXJnYywgY29uc3Qgc3RydWN0IGxpbnV4X2JpbmZtdCAqYmluZm10KVxcbi0tXFxuZnMvY29yZWR1bXAuYz0xMTgyPXZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pXFxuLS1cXG5mcy9jb3JlZHVtcC5jLTEyMjAtXFx0c2NvcGVkX3dpdGhfY3JlZHMoY3JlZClcXG5mcy9jb3JlZHVtcC5jOjEyMjE6XFx0XFx0ZG9fY29yZWR1bXAoXFx1MDAyNmNuLCBcXHUwMDI2Y3BybSwgXFx1MDAyNmFyZ3YsIFxcdTAwMjZhcmdjLCBiaW5mbXQpO1xcbmZzL2NvcmVkdW1wLmMtMTIyMi1cXHRjb3JlZHVtcF9jbGVhbnVwKFxcdTAwMjZjbiwgXFx1MDAyNmNwcm0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzoxNi43NDE4MDA1NDhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzI1MDM0MjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDb3JlIER1bXAgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCBjb3JlIGR1bXBzLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIGFyY2hpdGVjdHVyZTogYGRvX2NvcmVkdW1wYCBpcyBkZWZpbmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGF0IGl0J3MgYW4gaW50ZXJuYWwgZnVuY3Rpb24sIGxpa2VseSB0aGUgKndvcmtob3JzZSogYmVoaW5kIHRoZSBjb3JlIGR1bXAgZnVuY3Rpb25hbGl0eS4gSXQncyBtZWFudCB0byBiZSBoaWRkZW4gd2l0aGluIHRoZSB0cmFuc2xhdGlvbiB1bml0IHdoZXJlIGl0J3MgZGVmaW5lZCwgc2VydmluZyBhcyBhIHByaXZhdGUgaGVscGVyLiBOb3csIHRoZSBwdWJsaWMgZW50cnkgcG9pbnQgbXVzdCBiZSBgdmZzX2NvcmVkdW1wYC4gVGhhdCdzIHRoZSBvbmUgd2UgbmVlZCB0byB0cmFjZSB0byB1bmRlcnN0YW5kIGhvdyB0aGUgc3lzdGVtIGlzIGFjdHVhbGx5IGluaXRpYXRlZC4gTGV0J3MgZGVsdmUgaW50byB0aGUgZGV0YWlscyBvZiBgdmZzX2NvcmVkdW1wYCBub3cuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIHVzZXItZmFjaW5nIHRyaWdnZXIgYW5kIHRoZSBjb3JlIGR1bXAncyBhY3R1YWwgbWVjaGFuaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODExLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTc6MjMuNDY2ODM3OTQ0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NTgxNjkxMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZzX2NvcmVkdW1wXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdD01NTU9ZGlmZmVyZW50IHNldCBvZiBjcmVkZW50aWFscy4gIFRoaXMgaXMgZG9uZSBpbiB0aGUgZm9sbG93aW5nIHBsYWNlczpcXG4tLVxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0LTU1Ny0gKiBgYHN5c19mYWNjZXNzYXQoKWBgLlxcbkRvY3VtZW50YXRpb24vc2VjdXJpdHkvY3JlZGVudGlhbHMucnN0OjU1ODogKiBgYHZmc19jb3JlZHVtcCgpYGAuXFxuRG9jdW1lbnRhdGlvbi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3QtNTU5LSAqIG5mczRyZWNvdmVyLmMuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q9MjU0PWNvbnN05oyH6ZKI5LiK5pON5L2c77yM5Zug5q2k5LiN6ZyA6KaB6L+b6KGM57G75Z6L6L2s5o2i77yM5L2G6ZyA6KaB5Li05pe25pS+5byDY29uc3TpmZDlrprvvIzku6Xkvr/og73lpJ/kv67mlLlcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3NlY3VyaXR5L2NyZWRlbnRpYWxzLnJzdC00NzctICogYGBzeXNfZmFjY2Vzc2F0KClgYC5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3Q6NDc4OiAqIGBgdmZzX2NvcmVkdW1wKClgYC5cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9zZWN1cml0eS9jcmVkZW50aWFscy5yc3QtNDc5LSAqIG5mczRyZWNvdmVyLmMuXFxuLS1cXG5mcy9jb3JlZHVtcC5jPTExMTE9c3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXFxuLS1cXG5mcy9jb3JlZHVtcC5jLTExODEtXFxuZnMvY29yZWR1bXAuYzoxMTgyOnZvaWQgdmZzX2NvcmVkdW1wKGNvbnN0IGtlcm5lbF9zaWdpbmZvX3QgKnNpZ2luZm8pXFxuZnMvY29yZWR1bXAuYy0xMTgzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaD00OD1pbnQgZHVtcF91c2VyX3JhbmdlKHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oLTQ5LVxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbik7XFxuaW5jbHVkZS9saW51eC9jb3JlZHVtcC5oOjUwOmV4dGVybiB2b2lkIHZmc19jb3JlZHVtcChjb25zdCBrZXJuZWxfc2lnaW5mb190ICpzaWdpbmZvKTtcXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNTEtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgtNjktI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmg6NzA6c3RhdGljIGlubGluZSB2b2lkIHZmc19jb3JlZHVtcChjb25zdCBrZXJuZWxfc2lnaW5mb190ICpzaWdpbmZvKSB7fVxcbmluY2x1ZGUvbGludXgvY29yZWR1bXAuaC03MS1cXG4tLVxcbmtlcm5lbC9zaWduYWwuYz0yODEwPWJvb2wgZ2V0X3NpZ25hbChzdHJ1Y3Qga3NpZ25hbCAqa3NpZylcXG4tLVxcbmtlcm5lbC9zaWduYWwuYy0zMDMwLVxcdFxcdFxcdCAqL1xcbmtlcm5lbC9zaWduYWwuYzozMDMxOlxcdFxcdFxcdHZmc19jb3JlZHVtcChcXHUwMDI2a3NpZy1cXHUwMDNlaW5mbyk7XFxua2VybmVsL3NpZ25hbC5jLTMwMzItXFx0XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzoyNS4zMjUwMTQ5MzFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTU4ODc2ODk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgRmlsZSBEZXNjcmlwdG9yIENsZWFudXAgZHVyaW5nIFNpZ25hbCBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBob3cgZmlsZSBkZXNjcmlwdG9ycyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCBjbGVhbnVwIGR1cmluZyBzaWduYWwgZGVsaXZlcnkuIE15IHRyYWluIG9mIHRob3VnaHQgc3RhcnRzIHdpdGggYHZmc19jb3JlZHVtcGAgYW5kIGhvdyBpdCdzIGNhbGxlZCBmcm9tIGBnZXRfc2lnbmFsYC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBJJ20gd29uZGVyaW5nIGFib3V0IGBfX2ZwdXRfZGVmZXJyZWRgLiBJdCdzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGF0IG1lYW5zIGl0cyBzY29wZSBpcyBsaW1pdGVkLCBhbmQgaXRzIGRpcmVjdCB1c2FnZSBtaWdodCBiZSByZXN0cmljdGVkLlxuXG5UaGUgcXVlc3Rpb24gaXMsIHdoYXQgY2FsbHMgYF9fZnB1dF9kZWZlcnJlZGAgaW4gYGZzL2ZpbGVfdGFibGUuY2A/IElzIHRoZXJlIGFub3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbiBpbiB0aGF0IGZpbGUgdGhhdCBkb2VzPyBIb2xkIG9uLCBgX19mcHV0X2RlZmVycmVkYCBpcyB1bHRpbWF0ZWx5IGNhbGxlZCBieSBlaXRoZXIgYGZwdXRgIG9yIGBmcHV0X21hbnlgLCByaWdodD8gT2theSwgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbiBhbmQgdG8gYnVpbGQgdGhlIG1hcCwgSSBzaG91bGQgZ28gYmFjayBhbmQgY2hlY2sgdGhlIGNvZGUgaW4gYGZzL2ZpbGVfdGFibGUuY2AgYWdhaW4uIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHN1cmUgd2hlcmUgdGhpcyB0aGluZyBmaXRzIGluIHRoZSBiaWdnZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYyOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU3OjI5LjQ4Mzg5NDczNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM2ODYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2ZwdXRfZGVmZXJyZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZmlsZV90YWJsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2ZpbGVfdGFibGUuYz01NjA9RVhQT1JUX1NZTUJPTF9HUEwoZmx1c2hfZGVsYXllZF9mcHV0KTtcXG5mcy9maWxlX3RhYmxlLmMtNTYxLVxcbmZzL2ZpbGVfdGFibGUuYzo1NjI6c3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL2ZpbGVfdGFibGUuYy01NjMte1xcbi0tXFxuZnMvZmlsZV90YWJsZS5jPTU5MT12b2lkIGZwdXQoc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5mcy9maWxlX3RhYmxlLmMtNTkzLVxcdGlmICh1bmxpa2VseShmaWxlX3JlZl9wdXQoXFx1MDAyNmZpbGUtXFx1MDAzZWZfcmVmKSkpXFxuZnMvZmlsZV90YWJsZS5jOjU5NDpcXHRcXHRfX2ZwdXRfZGVmZXJyZWQoZmlsZSk7XFxuZnMvZmlsZV90YWJsZS5jLTU5NS19XFxuLS1cXG5mcy9maWxlX3RhYmxlLmM9NjMxPXZvaWQgZnB1dF9jbG9zZShzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL2ZpbGVfdGFibGUuYy02MzMtXFx0aWYgKGZpbGVfcmVmX3B1dF9jbG9zZShcXHUwMDI2ZmlsZS1cXHUwMDNlZl9yZWYpKVxcbmZzL2ZpbGVfdGFibGUuYzo2MzQ6XFx0XFx0X19mcHV0X2RlZmVycmVkKGZpbGUpO1xcbmZzL2ZpbGVfdGFibGUuYy02MzUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1NzoyOS41MzIyNjc3MzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzkwMTU0ODcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIE5vbi1TdGF0aWMgRmlsZSBIYW5kbGluZyBGdW5jdGlvbnMqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiBmaWxlIGhhbmRsaW5nLCBhbmQgSSd2ZSBub3RpY2VkIHRoYXQgYGZwdXRgIGFuZCBgZnB1dF9jbG9zZWAgYXJlIGRlZmluZWQgYXMgbm9uLXN0YXRpYyBmdW5jdGlvbnMuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhlbSBhcyBwb3RlbnRpYWxseSBjcml0aWNhbCBmb3IgZXh0ZXJuYWwgaW50ZXJhY3Rpb24gb3IgcGVyaGFwcyB1c2VkIHdpdGhpbiBhIG1vcmUgY29tcGxleCBzZXQgb2Ygcm91dGluZXMuICBBbmQgdGhlbiB0aGVyZSdzIGBleGl0X2ZpbGVzYCwgYWxzbyBub24tc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZyBpbiBhIHRlcm1pbmF0aW9uIGNvbnRleHQuIFNvIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJJ20gZ29pbmcgdG8gd2FudCB0byB1bmRlcnN0YW5kIHdoYXQncyBjYWxsaW5nIHRoZW0sIHdoYXQgdGhleSdyZSBkb2luZywgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIHRoZXkgaGF2ZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZGl2ZSBpbnRvIGBrZXJuZWwvZXhpdC5jYCBvciB3aGVyZXZlciB0aG9zZSByb3V0aW5lcyBhcmUgZGVmaW5lZCDigJMgcHJvYmFibHkgaW4gdGhlIGtlcm5lbCdzIGZpbGUgc3lzdGVtIHNlY3Rpb24sIGRlcGVuZGluZyBvbiBob3cgdGhpcyBpcyBzdHJ1Y3R1cmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGJldHRlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1MCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU3OjM4LjkyMjQyNTUzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyODk1MzA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleGl0X2ZpbGVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9jb3JlZHVtcC5jPTUzMD1zdGF0aWMgdm9pZCBjb3JlZHVtcF9wcmVfZXhpdCh2b2lkKVxcbi0tXFxuZnMvY29yZWR1bXAuYy01MzctXFx0Zm9yX2VhY2hfdGhyZWFkKHRzaywgdCkge1xcbmZzL2NvcmVkdW1wLmM6NTM4OlxcdFxcdGV4aXRfZmlsZXModCk7XFxuZnMvY29yZWR1bXAuYy01MzktXFx0fVxcbi0tXFxuZnMvZmlsZS5jPTUwNj12b2lkIHB1dF9maWxlc19zdHJ1Y3Qoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMpXFxuLS1cXG5mcy9maWxlLmMtNTE3LVxcbmZzL2ZpbGUuYzo1MTg6dm9pZCBleGl0X2ZpbGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmZzL2ZpbGUuYy01MTkte1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg9OTM9ZXh0ZXJuIF9fbm9yZXR1cm4gdm9pZCBkb19ncm91cF9leGl0KGludCk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtOTQtXFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmg6OTU6ZXh0ZXJuIHZvaWQgZXhpdF9maWxlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7XFxuaW5jbHVkZS9saW51eC9zY2hlZC90YXNrLmgtOTYtZXh0ZXJuIHZvaWQgZXhpdF9pdGltZXJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTtcXG4tLVxcbmtlcm5lbC9leGl0LmM9OTI5PXZvaWQgX19ub3JldHVybiBkb19leGl0KGxvbmcgY29kZSlcXG4tLVxcbmtlcm5lbC9leGl0LmMtMTAwMy1cXHRleGl0X3NobSh0c2spO1xcbmtlcm5lbC9leGl0LmM6MTAwNDpcXHRleGl0X2ZpbGVzKHRzayk7XFxua2VybmVsL2V4aXQuYy0xMDA1LVxcdGV4aXRfZnModHNrKTtcXG4tLVxcbmtlcm5lbC9mb3JrLmM9MTk5ND1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbi0tXFxua2VybmVsL2ZvcmsuYy0yNTk1LWJhZF9mb3JrX2NsZWFudXBfZmlsZXM6XFxua2VybmVsL2ZvcmsuYzoyNTk2OlxcdGV4aXRfZmlsZXMocCk7IC8qIGJsb2NraW5nICovXFxua2VybmVsL2ZvcmsuYy0yNTk3LWJhZF9mb3JrX2NsZWFudXBfc2VtdW5kbzpcXG4tLVxcbmtlcm5lbC9waWQuYz04Nzk9c3RhdGljIHN0cnVjdCBmaWxlICpfX3BpZGZkX2ZnZXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgZmQpXFxuLS1cXG5rZXJuZWwvcGlkLmMtOTAxLVxcdFxcdCAqIDEuIGJlZm9yZSBleGl0X3NpZ25hbHMoKSwgd2hpY2ggZ2l2ZXMgYSByZWFsIGZkXFxua2VybmVsL3BpZC5jOjkwMjpcXHRcXHQgKiAyLiBiZWZvcmUgZXhpdF9maWxlcygpIHRha2VzIHRoZSB0YXNrX2xvY2soKSBnaXZlcyBhIHJlYWwgZmRcXG5rZXJuZWwvcGlkLmM6OTAzOlxcdFxcdCAqIDMuIGFmdGVyIGV4aXRfZmlsZXMoKSByZWxlYXNlcyB0YXNrX2xvY2soKSwgLVxcdTAwM2VmaWxlcyBpcyBOVUxMO1xcbmtlcm5lbC9waWQuYy05MDQtXFx0XFx0ICogICAgdGhpcyBoYXMgUEZfRVhJVElORywgc2luY2UgaXQgd2FzIHNldCBpbiBleGl0X3NpZ25hbHMoKSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3BpZGZkL3BpZGZkX2dldGZkX3Rlc3QuYz0yNDQ9VEVTVF9GKGNoaWxkLCBub19zdHJhbmdlX0VCQURGKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcGlkZmQvcGlkZmRfZ2V0ZmRfdGVzdC5jLTI1Ny1cXHQgKiBJdCB1c2VkIHRvIGJlIHRoYXQgcGlkZmRfZ2V0ZmQoKSBjb3VsZCByYWNlIHdpdGggdGhlIGV4aXRpbmcgdGhyZWFkXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcGlkZmQvcGlkZmRfZ2V0ZmRfdGVzdC5jOjI1ODpcXHQgKiBiZXR3ZWVuIGV4aXRfZmlsZXMoKSBhbmQgcmVsZWFzZV90YXNrKCksIGFuZCBnZXQgYSBub24tbnVsbCB0YXNrXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcGlkZmQvcGlkZmRfZ2V0ZmRfdGVzdC5jLTI1OS1cXHQgKiB3aXRoIGEgTlVMTCBmaWxlcyBzdHJ1Y3QsIGFuZCB5b3UnZCBnZXQgRUJBREYsIHdoaWNoIHdhcyBzbGlnaHRseVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1Nzo0MC44NTEzODY3MjJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4NzkxMTkyNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvcmVkdW1wIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCByZWxhdGVkIHRvIGNvcmVkdW1wcywgYW5kIGl0IHNlZW1zIHRoZSBjZW50cmFsIGZ1bmN0aW9uIGhlcmUgaXMgYHZmc19jb3JlZHVtcGAg4oCTIHRoYXQncyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGF0IGtpY2tzIGV2ZXJ5dGhpbmcgb2ZmLiBOb3csIHRoZXkndmUgYWRkZWQgYSBuZXcgYml0LCBgTU1GX0RVTVBfRkRfTElTVGAgKGJpdCA5KSwgdG8gYGNvcmVkdW1wX2ZpbHRlcmAuIFRoYXQncyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIG5ldyBmbGFnLlxuXG5JZiB0aGF0IGBNTUZfRFVNUF9GRF9MSVNUYCBiaXQgaXNuJ3Qgc2V0LCB0aGVuIHRoZSBjb2RlIGNhbGxzIGBjb3JlZHVtcF9wcmVfZXhpdGAuIEFuZCBmcm9tIHRoZXJlLCBpdCBhcHBlYXJzIHRoZSBmdW5jdGlvbiBjYWxscyBgZXhpdF9maWxlcyh0KWAgZm9yIGFsbCB0aHJlYWRzLiBUaGlzIHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGEgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLiBBIGNvcmVkdW1wIGNvbWJpbmVkIHdpdGggYSBtb2RpZmllZCBgY29yZWR1bXBfZmlsdGVyYCBzb3VuZHMgbGlrZSBpdCBjb3VsZCBiZSBlYXNpbHkgZnV6emVkIHRvIHRyaWdnZXIgc29tZSB1bmV4cGVjdGVkIGJlaGF2aW9ycy4gSSBzaG91bGQgbWFrZSBhIG5vdGUgdG8gZm9sbG93IHRoYXQgcGF0aC5cblxuVGhlIHdheSB0byBtb2RpZnkgdGhhdCBgY29yZWR1bXBfZmlsdGVyYCBpcyB0aHJvdWdoIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLCB3aGljaCBpcyBzdGFuZGFyZC4gSSBhbSBpbnRlcmVzdGVkIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgc3BlY2lmaWMgY29uZmlnIHJlcXVpcmVkIGZvciBjb3JlZHVtcHMgdG8gYmUgZW5hYmxlZCBvbiB0aGUgc3lzdGVtLCBmb3IgZXhhbXBsZSwgYENPTkZJR19DT1JFRFVNUGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyOTEsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTg6MTYuNzMwNTEwMTY5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTM5NjMwMDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT1JFRFVNUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZy5iaW5mbXQ9MTQ1PWNvbmZpZyBCSU5GTVRfTUlTQ1xcbi0tXFxuZnMvS2NvbmZpZy5iaW5mbXQtMTcwLVxcbmZzL0tjb25maWcuYmluZm10OjE3MTpjb25maWcgQ09SRURVTVBcXG5mcy9LY29uZmlnLmJpbmZtdC0xNzItXFx0Ym9vbCBcXFwiRW5hYmxlIGNvcmUgZHVtcCBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTg6MTguODcwMTQ2ODQ0WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MDA1MzMwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb3JlZHVtcCBQYXRjaCBmb3IgRnV6emluZyBPcHBvcnR1bml0aWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgYENPTkZJR19DT1JFRFVNUGAgaXMgdGhlIGJhc2UgY29uZmlndXJhdGlvbiwgdGhhdCdzIGNsZWFyLiBCdXQgaG9sZCBvbiwgdGhlIGRvY3VtZW50YXRpb24gaXMgc2xpZ2h0bHkgb2ZmLiBJIG5lZWQgdG8gc29ydCBvdXQgdGhlc2UgYml0IG51bWJlcnMuIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGBNTUZfRFVNUF9GRF9MSVNUYCBpcyBiaXQgOSwgYnV0IGluIGBtbV90eXBlcy5oYCwgaXQncyBiaXQgMTEuIEFoLCBub3cgSSBzZWUgdGhlIHByb2JsZW0uIGBNTUZfRFVNUF9GRF9MSVNUYCBpcyBiaXQgMTEgaW4gYG1tX2ZsYWdzYCwgYnV0IGJpdCAyIGluIGBtbV9mbGFnc2AgaXMgYE1NRl9EVU1QX0FOT05fUFJJVkFURWAuIFdoaWNoLCBtZWFucyBiaXQgMCBpbiB0aGUgZmlsdGVyIGNvcnJlc3BvbmRzIHRvIGJpdCAyIGluIGBtbV9mbGFnc2AuIEFuZCwgdGhpcyBpcyBhbGwgY29ycmVjdC4gR29vZC5cblxuVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZnMvY29yZWR1bXAuY2AsIGBmcy9maWxlX3RhYmxlLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvbW1fdHlwZXMuaGAuIFRoYXQncyBhIHN0cm9uZyBpbmRpY2F0b3Igb2Ygc29tZXRoaW5nIHNpZ25pZmljYW50LCBsaWtlbHkgaW52b2x2aW5nIGZpbGUgaGFuZGxpbmcgZHVyaW5nIGNvcmVkdW1wcy4gRGVmaW5pdGVseSBmdXp6LXdvcnRoeS4gVGltZSB0byBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIEknbSBzZWVpbmcgYHZmc19jb3JlZHVtcGAsIGBmcHV0YCwgYGZwdXRfY2xvc2VgLCBhbmQgYGV4aXRfZmlsZXNgLiBXYWl0LCBgZnB1dGAgYW5kIGBmcHV0X2Nsb3NlYCBhcmUgKnZlcnkqIGhvdCBwYXRocywgSSBwcm9iYWJseSBkb24ndCB3YW50IHRvIHRhcmdldCB0aG9zZSwgdGhlIHNpZ25hbCB0byBub2lzZSByYXRpbyB3aWxsIGJlIHRlcnJpYmxlLiBMZXQncyB0aGluayB0aGlzIHRocm91Z2guIGB2ZnNfY29yZWR1bXBgIGFuZCBgZXhpdF9maWxlc2Agc2VlbSBsaWtlIGJldHRlciBjYW5kaWRhdGVzLiBgZXhpdF9maWxlc2AgaXMgcmVhc29uYWJseSBob3Qgc2luY2UgaXQncyBjYWxsZWQgb24gZXZlcnkgcHJvY2VzcyBleGl0LCBidXQgYHZmc19jb3JlZHVtcGAgaXMgbm90LlxuXG5MZXQncyBkbyBhIHF1aWNrIHN3ZWVwIG9mIGBmcy9jb3JlZHVtcC5jYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGJ1dCBhcmUgbm90IGhvdC4gTG9va2luZy4uLm5vIGNoYW5nZXMgdG8gYGR1bXBfdXNlcl9yYW5nZWAuIFRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBwYXRjaCBhcHBlYXJzIHRvIGJlIGluIGBkb19jb3JlZHVtcGAgYW5kIGBfX2ZwdXRfZGVmZXJyZWRgLiBCdXQgYGRvX2NvcmVkdW1wYCBpcyBzdGF0aWMuIExvb2tzIGxpa2UgYHZmc19jb3JlZHVtcGAgaXMgdGhlIGJlc3QgYmV0IGFzIHRoZSBwcmltYXJ5IGZvY3VzLlxuXG5PaCwgYW5kIHRoZXJlJ3MgdGhlIGBjb3JlZHVtcF9maWx0ZXJgIGV4cG9zZWQgdmlhIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLiBUaGUgd3JpdGUgaGFuZGxlciwgYHByb2NfY29yZWR1bXBfZmlsdGVyX3dyaXRlYCwgaXMgaW4gYGZzL3Byb2MvYmFzZS5jYC4gV2UnbGwgbmVlZCB0byBjaGVjayBob3cgdGhhdCB3b3JrcyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODE0LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU4OjI4LjY3MDY4Mjc4MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI1ODAxMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29yZWR1bXBfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvYmFzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvYmFzZS5jPTI5MTQ9c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHByb2NfYXR0cl9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTI5MjItI2lmZGVmIENPTkZJR19FTEZfQ09SRVxcbmZzL3Byb2MvYmFzZS5jOjI5MjM6c3RhdGljIHNzaXplX3QgcHJvY19jb3JlZHVtcF9maWx0ZXJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZixcXG5mcy9wcm9jL2Jhc2UuYy0yOTI0LVxcdFxcdFxcdFxcdFxcdCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTI5NTEtXFxuZnMvcHJvYy9iYXNlLmM6Mjk1MjpzdGF0aWMgc3NpemVfdCBwcm9jX2NvcmVkdW1wX2ZpbHRlcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5mcy9wcm9jL2Jhc2UuYy0yOTUzLVxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZixcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTI5OTMtXFxuZnMvcHJvYy9iYXNlLmM6Mjk5NDpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2NvcmVkdW1wX2ZpbHRlcl9vcGVyYXRpb25zID0ge1xcbmZzL3Byb2MvYmFzZS5jOjI5OTU6XFx0LnJlYWRcXHRcXHQ9IHByb2NfY29yZWR1bXBfZmlsdGVyX3JlYWQsXFxuZnMvcHJvYy9iYXNlLmM6Mjk5NjpcXHQud3JpdGVcXHRcXHQ9IHByb2NfY29yZWR1bXBfZmlsdGVyX3dyaXRlLFxcbmZzL3Byb2MvYmFzZS5jLTI5OTctXFx0Lmxsc2Vla1xcdFxcdD0gZ2VuZXJpY19maWxlX2xsc2VlayxcXG4tLVxcbmZzL3Byb2MvYmFzZS5jPTMyODI9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGdpZF9iYXNlX3N0dWZmW10gPSB7XFxuLS1cXG5mcy9wcm9jL2Jhc2UuYy0zMzYyLSNpZmRlZiBDT05GSUdfRUxGX0NPUkVcXG5mcy9wcm9jL2Jhc2UuYzozMzYzOlxcdFJFRyhcXFwiY29yZWR1bXBfZmlsdGVyXFxcIiwgU19JUlVHT3xTX0lXVVNSLCBwcm9jX2NvcmVkdW1wX2ZpbHRlcl9vcGVyYXRpb25zKSxcXG5mcy9wcm9jL2Jhc2UuYy0zMzY0LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1ODoyOC43MjMyNzAxNTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1NDYwNjUyMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXNpbmcgb24gQ29yZSBEdW1wIEZpbHRlciBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHplcm9lZCBpbiBvbiBgcHJvY19jb3JlZHVtcF9maWx0ZXJfd3JpdGVgIGFuZCBgcHJvY19jb3JlZHVtcF9maWx0ZXJfcmVhZGAgYXMgcG90ZW50aWFsbHkgdXNlZnVsIHN0YXJ0aW5nIHBvaW50cyBmb3IgdGhpcyBhbmFseXNpcy4gSG93ZXZlciwgYSBxdWljayBjaGVjayByZXZlYWxzIHRoYXQgYHByb2NfY29yZWR1bXBfZmlsdGVyX3dyaXRlYCBpcyBhY3R1YWxseSBhIHN0YXRpYyBmdW5jdGlvbi4gVGhhdCdzIGEgcHJvYmxlbSwgYXMgdGhlIGluc3RydWN0aW9ucyBhcmUgcXVpdGUgY2xlYXI6IHByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLlxuXG5SaWdodCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gbG9vayBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuIEFoLCB5ZXMsIGB2ZnNfY29yZWR1bXBgIGlzIGEgbm9uLXN0YXRpYyBlbnRyeSBwb2ludC4gQnV0IGlzIHRoZXJlIGFub3RoZXIgb3B0aW9uPyBJIGtub3cgYGZwdXRgIGFuZCBgZnB1dF9jbG9zZWAgYXJlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLCBidXQgdGhleSBhcmUgaG90IHBhdGhzIGFuZCBJIHNob3VsZCBhdm9pZCB0aG9zZS4gU28sIGl0IHNlZW1zIGxpa2UgYHZmc19jb3JlZHVtcGAgaXMgdGhlIGJlc3QgY2hvaWNlIGZvciBteSBmb2N1cy5cblxuTmV4dCwgSSBzaG91bGQgY2hlY2sgd2hldGhlciBgQ09ORklHX0NPUkVEVU1QYCBpcyB0aGUgb25seSByZWxldmFudCBjb25maWcgaGVyZS4gSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgIGZpbGUgYW5kIGNvbmZpZ3VyYXRpb25zLCB0byBiZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYSByZWxldmFudCBjb25maWd1cmF0aW9uLiBXYWl0LCBpdCBzZWVtcyB0aGUgZmlsZSBpcyB1bmRlciBgQ09ORklHX0VMRl9DT1JFYCwgc28gaXQncyBhIGJpdCBtb3JlIGludm9sdmVkIHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTI3NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1ODo0MS4yNjkzMzgyMloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzY0MDAzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRUxGX0NPUkVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xODAxPWNvbmZpZyBCVUdcXG4tLVxcbmluaXQvS2NvbmZpZy0xODEwLVxcbmluaXQvS2NvbmZpZzoxODExOmNvbmZpZyBFTEZfQ09SRVxcbmluaXQvS2NvbmZpZy0xODEyLVxcdGRlcGVuZHMgb24gQ09SRURVTVBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTg6NDMuMDEyOTg4Mjc5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3MDg0MzE2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZS4uLiBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCwgc28gYEVMRl9DT1JFYCBhbmQgYENPUkVEVU1QYCBhcmUgdGhlIGtleSBwbGF5ZXJzIGhlcmUuIEludGVyZXN0aW5nLiBOb3csIEkgc2VlbSB0byByZWNhbGwgYSBkZXBlbmRlbmN5IGJldHdlZW4gdGhlbS4uLiBMZXQgbWUganVzdCB2ZXJpZnkgdGhhdC4gQWggeWVzLCBgRUxGX0NPUkVgIGRlcGVuZHMgb24gYENPUkVEVU1QYC4gR29vZC4gVGhhdCBtYWtlcyBzZW5zZS4gT2theSwgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyBqdXN0IGRvdWJsZSBjaGVjayB0aGUgZGVmaW5pdGlvbiBhbmQgcmVsYXRpb25zaGlwcyBpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSSdsbCB0YWtlIGEgbG9vayBpbiB0aGVyZSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTgyOCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU4OjQ3LjcyMTQyMjYyNVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyNzE3NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEVMRl9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTgwMT1jb25maWcgQlVHXFxuLS1cXG5pbml0L0tjb25maWctMTgxMC1cXG5pbml0L0tjb25maWc6MTgxMTpjb25maWcgRUxGX0NPUkVcXG5pbml0L0tjb25maWctMTgxMi1cXHRkZXBlbmRzIG9uIENPUkVEVU1QXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU4OjQ3Ljc2NzcwNTQ2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODc0NDc2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgd2hlcmUncyB0aGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBJJ20gbG9va2luZyBmb3I/IEdpdmVuIHRoZSBjb250ZXh0LCBteSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgYGluaXQvS2NvbmZpZ2AuIEl0J3MgZ2VuZXJhbGx5IHRoZSBjZW50cmFsIGh1YiBmb3IgYSBsb3Qgb2YgZnVuZGFtZW50YWwga2VybmVsIG9wdGlvbnMsIGFuZCB0aGUgZmlsZSBuYW1lIHN1Z2dlc3RzIGl0J3MgaW52b2x2ZWQgaW4gdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHdoaWNoIG9mdGVuIHRvdWNoZXMgYSB2YXJpZXR5IG9mIGJhc2UgbW9kdWxlcy5cblxuQWxyaWdodCwgbm93IGxldCdzIHRyeSB0byBmb2N1cyBvbiBhIG1vcmUgZ3JhbnVsYXIgbG9jYXRpb24gdG8gc3RhcnQgbXkgc2VhcmNoLiBMaW5lIDE4MTEgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc3BvdCB3aXRoaW4gc3VjaCBhIGZpbGUgdG8gdHJ5IHRvIGZpbmQgdGhlIHNwZWNpZmljIG9wdGlvbnMgSSBtaWdodCBiZSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwOTgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1ODo1MS4zNTUxNTU3NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MDUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MDU6XFx0XFx0ICBEaXNhYmxpbmcgdGhpcyBvcHRpb24gZWxpbWluYXRlcyBzdXBwb3J0IGZvciBCVUcgYW5kIFdBUk4sIHJlZHVjaW5nXFxuMTgwNjpcXHRcXHQgIHRoZSBzaXplIG9mIHlvdXIga2VybmVsIGltYWdlIGFuZCBwb3RlbnRpYWxseSBxdWlldGx5IGlnbm9yaW5nXFxuMTgwNzpcXHRcXHQgIG51bWVyb3VzIGZhdGFsIGNvbmRpdGlvbnMuIFlvdSBzaG91bGQgb25seSBjb25zaWRlciBkaXNhYmxpbmcgdGhpc1xcbjE4MDg6XFx0XFx0ICBvcHRpb24gZm9yIGVtYmVkZGVkIHN5c3RlbXMgd2l0aCBubyBmYWNpbGl0aWVzIGZvciByZXBvcnRpbmcgZXJyb3JzLlxcbjE4MDk6XFx0XFx0ICBKdXN0IHNheSBZLlxcbjE4MTA6XFx0XFxuMTgxMTpcXHRjb25maWcgRUxGX0NPUkVcXG4xODEyOlxcdFxcdGRlcGVuZHMgb24gQ09SRURVTVBcXG4xODEzOlxcdFxcdGRlZmF1bHQgeVxcbjE4MTQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIEVMRiBjb3JlIGR1bXBzXFxcIiBpZiBFWFBFUlRcXG4xODE1OlxcdFxcdGhlbHBcXG4xODE2OlxcdFxcdCAgRW5hYmxlIHN1cHBvcnQgZm9yIGdlbmVyYXRpbmcgY29yZSBkdW1wcy4gRGlzYWJsaW5nIHNhdmVzIGFib3V0IDRrLlxcbjE4MTc6XFx0XFxuMTgxODpcXHRcXG4xODE5OlxcdGNvbmZpZyBQQ1NQS1JfUExBVEZPUk1cXG4xODIwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBQQy1TcGVha2VyIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbjE4MjE6XFx0XFx0ZGVwZW5kcyBvbiBIQVZFX1BDU1BLUl9QTEFURk9STVxcbjE4MjI6XFx0XFx0c2VsZWN0IEk4MjUzX0xPQ0tcXG4xODIzOlxcdFxcdGRlZmF1bHQgeVxcbjE4MjQ6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1ODo1MS4zNTUyNzYzN1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTM3MTU0NjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQ29yZSBEdW1wIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBjb3JlIGR1bXBzIGFuZCBob3cgdG8gY29uZmlndXJlIHRoZW0uIFRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50cywgYXMgdXN1YWwsIGFyZSBgRUxGX0NPUkVgIGFuZCBgQ09SRURVTVBgIOKAkyB0aGF0IG11Y2ggaXMgc3RyYWlnaHRmb3J3YXJkLiBCdXQgdGhlbiwgaXQgaGl0cyBtZeKApiBJIGNhbid0IGZvcmdldCBhYm91dCBgL3Byb2MvW3BpZF0vY29yZWR1bXBfZmlsdGVyYC4gVGhhdCBtZWFucyBgUFJPQ19GU2AgaGFzIHRvIGJlIGVuYWJsZWQgdG9vLCBkb2Vzbid0IGl0PyBJdCBhbGwgaGFzIHRvIHdvcmsgaW4gY29uY2VydCB0byBnaXZlIGEgbWVhbmluZ2Z1bCBjb3JlZHVtcCwgc28gSSBtdXN0IHRha2UgdGhhdCBpbnRvIGFjY291bnQsIGFzIHdlbGwuIEdvdCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MDgsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU5OjAwLjI5MjQzMzg3N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxMjQ0MDU0MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPQ19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvcHJvYy9LY29uZmlnOjI6Y29uZmlnIFBST0NfRlNcXG5mcy9wcm9jL0tjb25maWctMy1cXHRib29sIFxcXCIvcHJvYyBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTk6MDIuMDA0ODc4NzM5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MTY4NTMyNzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBDb3JlIER1bXAgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gY29yZSBkdW1wcy4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgQ09SRURVTVBgLCBgRUxGX0NPUkVgLCBhbmQgYFBST0NfRlNgLiBUaGUgbWVhdCBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGluIGNvcmUga2VybmVsIGxvZ2ljLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGNvcmVkdW1wIGhhbmRsaW5nIGFuZCBmaWxlIGNsb3NpbmcuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHdvcnRoIGEgY2xvc2VyIGxvb2ssIGVzcGVjaWFsbHkgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgaGVyZSBzaG91bGQgYmUgb24gdGhlIGB2ZnNfY29yZWR1bXBgIHN5bWJvbC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYml0IGluIHRoZSBgY29yZWR1bXBfZmlsdGVyYCwgd2hpY2ggY29udHJvbHMgd2hlbiBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWxlYXNlZCBkdXJpbmcgYSBjb3JlIGR1bXAuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgdG8gaW50cm9kdWNlIGludGVyZXN0aW5nIHN0YXRlcyBhbmQgZWRnZSBjYXNlcyB3aXRoaW4gYGZzL2NvcmVkdW1wLmNgIGFuZCBgZnMvZmlsZV90YWJsZS5jYC4gVGhlIGZhY3QgdGhhdCB3ZSBjYW4gbWFuaXB1bGF0ZSB0aGlzIHRocm91Z2ggYC9wcm9jL1twaWRdL2NvcmVkdW1wX2ZpbHRlcmAgbWFrZXMgaXQgZXZlbiBtb3JlIGF0dHJhY3RpdmUgZm9yIGZ1enppbmcuXG5cbkkgcXVpY2tseSBzY2FubmVkIGZvciBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBmdW5jdGlvbnMuIFdoaWxlIGBmcHV0YCBhbmQgYGZwdXRfY2xvc2VgIGFyZSB0b3VjaGVkICh0aHJvdWdoIGBfX2ZwdXRfZGVmZXJyZWRgKSBhbmQgYGV4aXRfZmlsZXNgIGlzIGFsc28gbW9kaWZpZWQgKHZpYSBgY29yZWR1bXBfcHJlX2V4aXRgKSwgdGhlc2UgYXJlIGhvdCBwYXRocyBhbmQgdGhlcmVmb3JlLCBsaWtlbHkgbW9yZSB0aG9yb3VnaGx5IHRlc3RlZC4gYHZmc19jb3JlZHVtcGAgaXMgc3RpbGwgbXkgYmVzdCBiZXQuXG5cblNvLCBoZXJlJ3MgbXkgcHJlcGFyZWQgc3VtbWFyeSBmb3IgZnVydGhlciBhbmFseXNpczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKipcbiogICAqKkZvY3VzU3ltYm9sczoqKiBcXFtcInZmc1xcX2NvcmVkdW1wXCJdXG4qICAgKipFbmFibGVDb25maWdzOioqIFxcW1wiQ09SRURVTVBcIiwgXCJFTEZcXF9DT1JFXCIsIFwiUFJPQ1xcX0ZTXCJdXG4qICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYml0IGluIGBjb3JlZHVtcF9maWx0ZXJgIHRvIGNvbnRyb2wgd2hldGhlciBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWxlYXNlZCBiZWZvcmUgb3IgYWZ0ZXIgZHVtcGluZyBjb3JlLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBmcy9jb3JlZHVtcC5jYCBhbmQgYGZzL2ZpbGVfdGFibGUuY2AsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29yZWR1bXAgZ2VuZXJhdGlvbiBhbmQgYC9wcm9jL1twaWRdL2NvcmVkdW1wX2ZpbHRlcmAuXG5cbkknbSBjb25maWRlbnQgdGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRpbWUgdG8gZGl2ZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODc4LCJPdXRwdXRUb2tlbnMiOjEyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1OToxOS4xNzM0MTM5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMjUwOTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT1JFRFVNUFwiLFxuICAgIFwiRUxGX0NPUkVcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZnNfY29yZWR1bXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGJpdCBpbiBgY29yZWR1bXBfZmlsdGVyYCB0byBjb250cm9sIHdoZXRoZXIgZmlsZSBkZXNjcmlwdG9ycyBhcmUgcmVsZWFzZWQgYmVmb3JlIG9yIGFmdGVyIGR1bXBpbmcgY29yZS4gVGhpcyBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYyBpbiBgZnMvY29yZWR1bXAuY2AgYW5kIGBmcy9maWxlX3RhYmxlLmNgLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIGNvcmVkdW1wIGdlbmVyYXRpb24gYW5kIGAvcHJvYy9bcGlkXS9jb3JlZHVtcF9maWx0ZXJgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPUkVEVU1QXCIsXG4gICAgXCJFTEZfQ09SRVwiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmc19jb3JlZHVtcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYml0IGluIGBjb3JlZHVtcF9maWx0ZXJgIHRvIGNvbnRyb2wgd2hldGhlciBmaWxlIGRlc2NyaXB0b3JzIGFyZSByZWxlYXNlZCBiZWZvcmUgb3IgYWZ0ZXIgZHVtcGluZyBjb3JlLiBUaGlzIG1vZGlmaWVzIGNvcmUga2VybmVsIGxvZ2ljIGluIGBmcy9jb3JlZHVtcC5jYCBhbmQgYGZzL2ZpbGVfdGFibGUuY2AsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgY29yZWR1bXAgZ2VuZXJhdGlvbiBhbmQgYC9wcm9jL1twaWRdL2NvcmVkdW1wX2ZpbHRlcmAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA4VDA1OjU5OjE5LjI0NjY3MDQyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyOTI4OTcxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1OToxOS4yNDcyMTgxNDNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTIyOTIzNDQzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlZHVtcCBsb2dpYyB0byBhbGxvdyByZWxlYXNpbmcgZmlsZSBkZXNjcmlwdG9ycyBlYXJsaWVyIGR1cmluZyBhIGNvcmVkdW1wIGlmIHRoZSBgTU1GX0RVTVBfRkRfTElTVGAgZmlsdGVyIGJpdCBpcyBub3Qgc2V0LiBJdCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGBjb3JlZHVtcF9wcmVfZXhpdCgpYCB3aGljaCBjYWxscyBgZXhpdF9maWxlcygpYCBvbiBhbGwgdGhyZWFkcywgYW5kIG1vZGlmaWVzIGBfX2ZwdXRfZGVmZXJyZWQoKWAgdG8gYnlwYXNzIGB0YXNrX3dvcmtgIHdoZW4gYFBGX0RVTVBDT1JFYCBpcyBzZXQuXFxuVGhlc2UgY2hhbmdlcyBhbHRlciB0aGUgbGlmZWN5Y2xlIGFuZCBjbGVhbnVwIHRpbWluZyBvZiBmaWxlIGRlc2NyaXB0b3JzIGR1cmluZyBhIGNvcmVkdW1wLiBUaGUgcHJpbWFyeSByaXNrcyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgYXJlIHVzZS1hZnRlci1mcmVlIChpZiBhIGZpbGUgaXMgYWNjZXNzZWQgYWZ0ZXIgYmVpbmcgcmVsZWFzZWQpIG9yIGxvY2tpbmcgaXNzdWVzIChkdWUgdG8gc3luY2hyb25vdXMgYGZwdXRgIGluc3RlYWQgb2YgZGVmZXJyZWQpLiBUaGVzZSB0eXBlcyBvZiBidWdzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC5cXG5UaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhbGxvY2F0ZSBvciBtYW5pcHVsYXRlIGJ1ZmZlcnMgaW4gYSB3YXkgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3ZTY5MmFiNjk3M2Q5OTQ5ZmUzOGZhNzdhYThmNmI2N2ZiZjNiMDljXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgOCAwNTo1NzowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG5pbmRleCAyNzE4OWY2ZTAwNGVlLi4wMDFjZTEzNmU5NjRiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuQEAgLTE5MjksNyArMTkyOSw3IEBAIHdpbGwgYmUgZHVtcGVkIHdoZW4gdGhlIFx1MDAzY3BpZFx1MDAzZSBwcm9jZXNzIGlzIGR1bXBlZC4gY29yZWR1bXBfZmlsdGVyIGlzIGEgYml0bWFza1xuIG9mIG1lbW9yeSB0eXBlcy4gSWYgYSBiaXQgb2YgdGhlIGJpdG1hc2sgaXMgc2V0LCBtZW1vcnkgc2VnbWVudHMgb2YgdGhlXG4gY29ycmVzcG9uZGluZyBtZW1vcnkgdHlwZSBhcmUgZHVtcGVkLCBvdGhlcndpc2UgdGhleSBhcmUgbm90IGR1bXBlZC5cbiBcbi1UaGUgZm9sbG93aW5nIDkgbWVtb3J5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ6XG4rVGhlIGZvbGxvd2luZyAxMCBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcbiBcbiAgIC0gKGJpdCAwKSBhbm9ueW1vdXMgcHJpdmF0ZSBtZW1vcnlcbiAgIC0gKGJpdCAxKSBhbm9ueW1vdXMgc2hhcmVkIG1lbW9yeVxuQEAgLTE5NDEsNiArMTk0MSw3IEBAIFRoZSBmb2xsb3dpbmcgOSBtZW1vcnkgdHlwZXMgYXJlIHN1cHBvcnRlZDpcbiAgIC0gKGJpdCA2KSBodWdldGxiIHNoYXJlZCBtZW1vcnlcbiAgIC0gKGJpdCA3KSBEQVggcHJpdmF0ZSBtZW1vcnlcbiAgIC0gKGJpdCA4KSBEQVggc2hhcmVkIG1lbW9yeVxuKyAgLSAoYml0IDkpIGZkIGxpc3RcbiBcbiAgIE5vdGUgdGhhdCBNTUlPIHBhZ2VzIHN1Y2ggYXMgZnJhbWUgYnVmZmVyIGFyZSBuZXZlciBkdW1wZWQgYW5kIHZEU08gcGFnZXNcbiAgIGFyZSBhbHdheXMgZHVtcGVkIHJlZ2FyZGxlc3Mgb2YgdGhlIGJpdG1hc2sgc3RhdHVzLlxuQEAgLTE5NDgsMTMgKzE5NDksMTkgQEAgVGhlIGZvbGxvd2luZyA5IG1lbW9yeSB0eXBlcyBhcmUgc3VwcG9ydGVkOlxuICAgTm90ZSB0aGF0IGJpdHMgMC00IGRvbid0IGFmZmVjdCBodWdldGxiIG9yIERBWCBtZW1vcnkuIGh1Z2V0bGIgbWVtb3J5IGlzXG4gICBvbmx5IGFmZmVjdGVkIGJ5IGJpdCA1LTYsIGFuZCBEQVggaXMgb25seSBhZmZlY3RlZCBieSBiaXRzIDctOC5cbiBcbi1UaGUgZGVmYXVsdCB2YWx1ZSBvZiBjb3JlZHVtcF9maWx0ZXIgaXMgMHgzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeVxuLXNlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzIGFuZCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFyZSBkdW1wZWQuXG4rICBOb3RlIHRoYXQgYml0IDkgaXMgc2V0IGJ5IGRlZmF1bHQgYmVjYXVzZSB0b29scyBsaWtlIHN5c3RlbWQtY29yZWR1bXAgZ29cbisgIHRocm91Z2ggdGhlIGZkcy4gSWYgeW91IGRvIG5vdCBzZXQgYml0IDksIGZpbGVzIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkIGJ5XG4rICBhbnkgVk1BIGFyZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBTb21lIGZpbGUgcmVsZWFzZSBsb2dpYywgc3VjaCBhc1xuKyAgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWQgYnVmZmVycyBpcyBleGVjdXRlZCBtdWNoXG4rICBlYXJsaWVyLlxuK1xuK1RoZSBkZWZhdWx0IHZhbHVlIG9mIGNvcmVkdW1wX2ZpbHRlciBpcyAweDIzMzsgdGhpcyBtZWFucyBhbGwgYW5vbnltb3VzIG1lbW9yeVxuK3NlZ21lbnRzLCBFTEYgaGVhZGVyIHBhZ2VzLCBodWdldGxiIHByaXZhdGUgbWVtb3J5IGFuZCBmZCBsaXN0IGFyZSBkdW1wZWQuXG4gXG4gSWYgeW91IGRvbid0IHdhbnQgdG8gZHVtcCBhbGwgc2hhcmVkIG1lbW9yeSBzZWdtZW50cyBhdHRhY2hlZCB0byBwaWQgMTIzNCxcbi13cml0ZSAweDMxIHRvIHRoZSBwcm9jZXNzJ3MgcHJvYyBmaWxlOjpcbit3cml0ZSAweDIzMSB0byB0aGUgcHJvY2VzcydzIHByb2MgZmlsZTo6XG4gXG4tICAkIGVjaG8gMHgzMSBcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcbisgICQgZWNobyAweDIzMSBcdTAwM2UgL3Byb2MvMTIzNC9jb3JlZHVtcF9maWx0ZXJcbiBcbiBXaGVuIGEgbmV3IHByb2Nlc3MgaXMgY3JlYXRlZCwgdGhlIHByb2Nlc3MgaW5oZXJpdHMgdGhlIGJpdG1hc2sgc3RhdHVzIGZyb20gaXRzXG4gcGFyZW50LiBJdCBpcyB1c2VmdWwgdG8gc2V0IHVwIGNvcmVkdW1wX2ZpbHRlciBiZWZvcmUgdGhlIHByb2dyYW0gcnVucy5cbmRpZmYgLS1naXQgYS9mcy9jb3JlZHVtcC5jIGIvZnMvY29yZWR1bXAuY1xuaW5kZXggZTY4YTc2ZmY5MmEzOC4uZDM3OGU2OWM2MzZlMiAxMDA2NDRcbi0tLSBhL2ZzL2NvcmVkdW1wLmNcbisrKyBiL2ZzL2NvcmVkdW1wLmNcbkBAIC01MjAsNiArNTIwLDI1IEBAIHN0YXRpYyBpbnQgemFwX3RocmVhZHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssXG4gXHRyZXR1cm4gbnI7XG4gfVxuIFxuKy8qXG4rICogSWYgZG8gbm90IGR1bXAgZmQgbGlzdCwgZmlsZXMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZWQgYnkgYW55IFZNQVxuKyAqIGNhbiBiZSByZWxlYXNlZCBiZWZvcmUgZHVtcGluZyBjb3JlLiBUaGVyZWZvcmUsIHNvbWUgZmlsZSByZWxlYXNlXG4rICogbG9naWMsIHN1Y2ggYXMgZXhpdGluZyBmbG9jayBvciByZWxlYXNpbmcgcmVmZXJlbmNlcyB0byBzaGFyZWRcbisgKiBidWZmZXJzIGlzIGV4ZWN1dGVkIG11Y2ggZWFybGllci4gTm90ZSB0aGF0IGRvX2NvcmVkdW1wKCkgb2Z0ZW5cbisgKiB0YWtlcyBzZXZlcmFsIHNlY29uZHMgb3IgZXZlbiBsb25nZXIgdG8gZXhlY3V0ZS5cbisgKi9cbitzdGF0aWMgdm9pZCBjb3JlZHVtcF9wcmVfZXhpdCh2b2lkKVxuK3tcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudCwgKnQ7XG4rXG4rXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfRFVNUF9GRF9MSVNULCB0c2stXHUwMDNlbW0pKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3JfZWFjaF90aHJlYWQodHNrLCB0KSB7XG4rXHRcdGV4aXRfZmlsZXModCk7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgY29yZWR1bXBfd2FpdChpbnQgZXhpdF9jb2RlLCBzdHJ1Y3QgY29yZV9zdGF0ZSAqY29yZV9zdGF0ZSlcbiB7XG4gXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7XG5AQCAtMTEyMyw2ICsxMTQyLDggQEAgc3RhdGljIHZvaWQgZG9fY29yZWR1bXAoc3RydWN0IGNvcmVfbmFtZSAqY24sIHN0cnVjdCBjb3JlZHVtcF9wYXJhbXMgKmNwcm0sXG4gXHRpZiAoY24tXHUwMDNlbWFzayBcdTAwMjYgQ09SRURVTVBfUkVKRUNUKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRjb3JlZHVtcF9wcmVfZXhpdCgpO1xuK1xuIFx0LyogZ2V0IHVzIGFuIHVuc2hhcmVkIGRlc2NyaXB0b3IgdGFibGU7IGFsbW9zdCBhbHdheXMgYSBuby1vcCAqL1xuIFx0LyogVGhlIGNlbGwgc3B1ZnMgY29yZWR1bXAgY29kZSByZWFkcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlcyAqL1xuIFx0aWYgKHVuc2hhcmVfZmlsZXMoKSlcbmRpZmYgLS1naXQgYS9mcy9maWxlX3RhYmxlLmMgYi9mcy9maWxlX3RhYmxlLmNcbmluZGV4IGM2OGI4YzBhNDA5N2EuLjAyZWU0ZThiMWNmZTggMTAwNjQ0XG4tLS0gYS9mcy9maWxlX3RhYmxlLmNcbisrKyBiL2ZzL2ZpbGVfdGFibGUuY1xuQEAgLTU2OCw3ICs1NjgsMTIgQEAgc3RhdGljIHZvaWQgX19mcHV0X2RlZmVycmVkKHN0cnVjdCBmaWxlICpmaWxlKVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRpZiAobGlrZWx5KCFpbl9pbnRlcnJ1cHQoKSBcdTAwMjZcdTAwMjYgISh0YXNrLVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSkpIHtcbitcdC8qXG4rXHQgKiBjb3JlZHVtcF9wcmVfZXhpdCgpIG1heSByZWxlYXNlIGZpbGVzIGJlZm9yZSBkdW1waW5nIGNvcmUuXG4rXHQgKiBDYW5ub3QgdXNlIHRhc2tfd29yayBpbiB0aGUgY2FzZSwgbmVlZHMgdG8gcmVsZWFzZSBmaWxlc1xuK1x0ICogZWFybGllci5cbitcdCAqL1xuK1x0aWYgKGxpa2VseSghaW5faW50ZXJydXB0KCkgXHUwMDI2XHUwMDI2ICEodGFzay1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0tUSFJFQUQgfCBQRl9EVU1QQ09SRSkpKSkge1xuIFx0XHRpbml0X3Rhc2tfd29yayhcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBfX19fZnB1dCk7XG4gXHRcdGlmICghdGFza193b3JrX2FkZCh0YXNrLCBcdTAwMjZmaWxlLVx1MDAzZWZfdGFza193b3JrLCBUV0FfUkVTVU1FKSlcbiBcdFx0XHRyZXR1cm47XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG5pbmRleCBlYmYwZDkxMmJlN2RiLi5mMzU1ODU4YmZiNjJiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmhcbkBAIC0xOTQ3LDE0ICsxOTQ3LDE2IEBAIGVudW0ge1xuICNkZWZpbmUgTU1GX0RVTVBfSFVHRVRMQl9TSEFSRUQgIDhcbiAjZGVmaW5lIE1NRl9EVU1QX0RBWF9QUklWQVRFXHQ5XG4gI2RlZmluZSBNTUZfRFVNUF9EQVhfU0hBUkVEXHQxMFxuKyNkZWZpbmUgTU1GX0RVTVBfRkRfTElTVFx0MTFcbiBcbiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9TSElGVFx0TU1GX0RVTVBBQkxFX0JJVFNcbi0jZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9CSVRTXHQ5XG4rI2RlZmluZSBNTUZfRFVNUF9GSUxURVJfQklUU1x0MTBcbiAjZGVmaW5lIE1NRl9EVU1QX0ZJTFRFUl9NQVNLIFxcXG4gXHQoKEJJVChNTUZfRFVNUF9GSUxURVJfQklUUykgLSAxKSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfRklMVEVSX1NISUZUKVxuICNkZWZpbmUgTU1GX0RVTVBfRklMVEVSX0RFRkFVTFQgXFxcbiBcdChCSVQoTU1GX0RVTVBfQU5PTl9QUklWQVRFKSB8IEJJVChNTUZfRFVNUF9BTk9OX1NIQVJFRCkgfCBcXFxuLVx0IEJJVChNTUZfRFVNUF9IVUdFVExCX1BSSVZBVEUpIHwgTU1GX0RVTVBfTUFTS19ERUZBVUxUX0VMRilcbitcdCAoMSBcdTAwM2NcdTAwM2MgTU1GX0RVTVBfSFVHRVRMQl9QUklWQVRFKSB8IE1NRl9EVU1QX01BU0tfREVGQVVMVF9FTEYgfFxcXG4rXHQgKDEgXHUwMDNjXHUwMDNjIE1NRl9EVU1QX0ZEX0xJU1QpKVxuIFxuICNpZmRlZiBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlNcbiAjIGRlZmluZSBNTUZfRFVNUF9NQVNLX0RFRkFVTFRfRUxGXHRCSVQoTU1GX0RVTVBfRUxGX0hFQURFUlMpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOFQwNTo1OToxOS4yNDcyMTg5NDNaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyOTIzMTQ1NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvcmVkdW1wIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0d2Vha2luZyB0aGUgTGludXggY29yZWR1bXAgbWVjaGFuaXNtLiBJIHNlZSBpdCBpbnRyb2R1Y2VzIGEgbmV3IG1lbW9yeSBmaWx0ZXIgdHlwZSwgYE1NRl9EVU1QX0ZEX0xJU1RgLiBJbnRlcmVzdGluZy4gSWYgdGhhdCBiaXQgKmlzbid0KiBzZXQsIGBjb3JlZHVtcF9wcmVfZXhpdCgpYCBnZXRzIGNhbGxlZCB3aXRoaW4gYGRvX2NvcmVkdW1wKClgLCBhbmQgdGhhdCdzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLiBJdCBpdGVyYXRlcyB0aHJvdWdoIHRoZSB0aHJlYWRzIGFuZCBjYWxscyBgZXhpdF9maWxlcyh0KWAgb24gZWFjaCBvbmUuIFRoYXQncyBhIGtleSBjaGFuZ2Ug4oCTIHB1c2hpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBjbGVhbnVwIGVhcmxpZXIgaW4gdGhlIHByb2Nlc3MuIEkgYWxzbyBub3RpY2UgYSBtb2RpZmljYXRpb24gdG8gYF9fZnB1dF9kZWZlcnJlZCgpYCwgc2tpcHBpbmcgdGhlIGB0YXNrX3dvcmtgIG1lY2hhbmlzbSBpZiBgUEZfRFVNUENPUkVgIGlzIHNldCwgcHJlc3VtYWJseSB0byBhdm9pZCBpc3N1ZXMgd2l0aCBkZWZlcnJlZCBjbGVhbnVwIGR1cmluZyBhIGNvcmVkdW1wLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhbGwgYWJvdXQgZmlsZSBkZXNjcmlwdG9yIGxpZmVjeWNsZSB3aXRoaW4gYSBjb3JlZHVtcCBzY2VuYXJpby4gTm8gbmV3IHN0cnVjdHVyZXMgYXJlIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIGFuZCB0aGVyZSdzIG5vIG5ldyBidWZmZXIgYWxsb2NhdGlvbiBvciBtYW5pcHVsYXRpb24gdGhhdCBzY3JlYW1zIFwicG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uLlwiIENydWNpYWxseSwgbm8gY2hhbmdlcyB0byBib3VuZHMgY2hlY2tpbmcgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyBlaXRoZXIuIFRoZSBjb3JlIGNoYW5nZSBpcyB0aGUgY29udHJvbCBmbG93OiBjYWxsaW5nIGBleGl0X2ZpbGVzYCBlYXJsaWVyIGFuZCBjaXJjdW12ZW50aW5nIGB0YXNrX3dvcmtgIGR1cmluZyBjb3JlZHVtcC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHVzZS1hZnRlci1mcmVlIGJ1Z3MgYXJlIHRoZSBwcmltYXJ5IHJpc2sgaGVyZS4gU3BlY2lmaWNhbGx5LCBpZiBhIGZpbGUgaXMgYWNjZXNzZWQgYWZ0ZXIgYmVpbmcgY2xvc2VkIGJ5IHRoZSBzeW5jaHJvbm91cyBgZXhpdF9maWxlcygpYCBjYWxsLCB0aGF0J3MgYSBjbGFzc2ljIFVBRiBzY2VuYXJpby4gQWxzbywgdGhlcmUgY291bGQgYmUgbG9ja2luZyBpc3N1ZXMgd2l0aCB0aGUgc3luY2hyb25vdXMgYGZwdXRgLiBCdXQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIEtBU0FOIGFuZCBMT0NLREVQIHNob3VsZCBiZSBwcmV0dHkgZWZmZWN0aXZlIGF0IGNhdGNoaW5nIHRob3NlLlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2vigKYgbm8sIEkgZG9uJ3Qgc2VlIGFueSBjaGFuZ2VzIHdpdGhpbiBgZXhpdF9maWxlcygpYCBvciBgX19mcHV0X2RlZmVycmVkKClgIHRoYXQgd291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIHJlYWxseSBqdXN0IGNsb3NpbmcgZmlsZXMuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBmYWxzZS5cblxuTGV0J3Mgc3VtbWFyaXplIHRoaXMgY2xlYXJseTogdGhlIHBhdGNoIHNwZWVkcyB1cCBmaWxlIGRlc2NyaXB0b3IgY2xlYW51cCBkdXJpbmcgY29yZWR1bXBzIHdoZW4gdGhlIG5ldyBmaWx0ZXIgYml0IGlzbid0IHVzZWQsIGJ5IGFkZGluZyBhIG5ldyBwcmUtZXhpdCBwaGFzZSBhbmQgYXZvaWRpbmcgdGhlIHVzdWFsIGRlZmVycmVkIGNsZWFudXAuIFdoaWxlIGl0IGludHJvZHVjZXMgdGhlIHJpc2sgb2YgVUFGIGJ1Z3MgYW5kIGxvY2tpbmcgaXNzdWVzIGR1ZSB0byBjaGFuZ2VkIHRpbWluZywgdGhlc2UgYXJlIHJpc2tzIGVmZmVjdGl2ZWx5IGFkZHJlc3NlZCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGhlIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgYW55IHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mb3JtYXRpb24gbGVha3MuIE5vIG5lZWQgZm9yIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cblxuSSdtIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM2MzQsIk91dHB1dFRva2VucyI6MjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDhUMDU6NTk6MzEuNTM5NTM3ODIyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZWR1bXAgbG9naWMgdG8gYWxsb3cgcmVsZWFzaW5nIGZpbGUgZGVzY3JpcHRvcnMgZWFybGllciBkdXJpbmcgYSBjb3JlZHVtcCBpZiB0aGUgYE1NRl9EVU1QX0ZEX0xJU1RgIGZpbHRlciBiaXQgaXMgbm90IHNldC4gSXQgaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgY29yZWR1bXBfcHJlX2V4aXQoKWAgd2hpY2ggY2FsbHMgYGV4aXRfZmlsZXMoKWAgb24gYWxsIHRocmVhZHMsIGFuZCBtb2RpZmllcyBgX19mcHV0X2RlZmVycmVkKClgIHRvIGJ5cGFzcyBgdGFza193b3JrYCB3aGVuIGBQRl9EVU1QQ09SRWAgaXMgc2V0LlxcblRoZXNlIGNoYW5nZXMgYWx0ZXIgdGhlIGxpZmVjeWNsZSBhbmQgY2xlYW51cCB0aW1pbmcgb2YgZmlsZSBkZXNjcmlwdG9ycyBkdXJpbmcgYSBjb3JlZHVtcC4gVGhlIHByaW1hcnkgcmlza3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIGFyZSB1c2UtYWZ0ZXItZnJlZSAoaWYgYSBmaWxlIGlzIGFjY2Vzc2VkIGFmdGVyIGJlaW5nIHJlbGVhc2VkKSBvciBsb2NraW5nIGlzc3VlcyAoZHVlIHRvIHN5bmNocm9ub3VzIGBmcHV0YCBpbnN0ZWFkIG9mIGRlZmVycmVkKS4gVGhlc2UgdHlwZXMgb2YgYnVncyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuXFxuVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWxsb2NhdGUgb3IgbWFuaXB1bGF0ZSBidWZmZXJzIGluIGEgd2F5IHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmVkdW1wIGxvZ2ljIHRvIGFsbG93IHJlbGVhc2luZyBmaWxlIGRlc2NyaXB0b3JzIGVhcmxpZXIgZHVyaW5nIGEgY29yZWR1bXAgaWYgdGhlIGBNTUZfRFVNUF9GRF9MSVNUYCBmaWx0ZXIgYml0IGlzIG5vdCBzZXQuIEl0IGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYGNvcmVkdW1wX3ByZV9leGl0KClgIHdoaWNoIGNhbGxzIGBleGl0X2ZpbGVzKClgIG9uIGFsbCB0aHJlYWRzLCBhbmQgbW9kaWZpZXMgYF9fZnB1dF9kZWZlcnJlZCgpYCB0byBieXBhc3MgYHRhc2tfd29ya2Agd2hlbiBgUEZfRFVNUENPUkVgIGlzIHNldC5cXG5UaGVzZSBjaGFuZ2VzIGFsdGVyIHRoZSBsaWZlY3ljbGUgYW5kIGNsZWFudXAgdGltaW5nIG9mIGZpbGUgZGVzY3JpcHRvcnMgZHVyaW5nIGEgY29yZWR1bXAuIFRoZSBwcmltYXJ5IHJpc2tzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyBhcmUgdXNlLWFmdGVyLWZyZWUgKGlmIGEgZmlsZSBpcyBhY2Nlc3NlZCBhZnRlciBiZWluZyByZWxlYXNlZCkgb3IgbG9ja2luZyBpc3N1ZXMgKGR1ZSB0byBzeW5jaHJvbm91cyBgZnB1dGAgaW5zdGVhZCBvZiBkZWZlcnJlZCkuIFRoZXNlIHR5cGVzIG9mIGJ1Z3MgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLlxcblRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFsbG9jYXRlIG9yIG1hbmlwdWxhdGUgYnVmZmVycyBpbiBhIHdheSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgbmVjZXNzYXJ5LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowntcqp[1] Phase: Succeeded StartedAt: 2026-08-08 05:59:42 +0000 UTC FinishedAt: 2026-08-08 05:59:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-08 05:59:42 +0000 UTC FinishedAt: 2026-08-08 05:59:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2] Phase: Succeeded StartedAt: 2026-08-08 05:59:42 +0000 UTC FinishedAt: 2026-08-08 09:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 05:59:42 +0000 UTC FinishedAt: 2026-08-08 09:41:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 05:59:42 +0000 UTC FinishedAt: 2026-08-08 05:59:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 05:59:42 +0000 UTC FinishedAt: 2026-08-08 05:59:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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-workflowntcqp/series-workflowntcqp-convert-artifact-1120950668/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 05:59:52 +0000 UTC FinishedAt: 2026-08-08 06:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 05:59:52 +0000 UTC FinishedAt: 2026-08-08 06:16:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*1a531c24-26a1-4e8a-8b50-d209630d2c4d,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-workflowntcqp/series-workflowntcqp-convert-artifact-1120950668/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": "fc650ff6-1c32-400e-b517-a343f5262eb4", "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-workflowntcqp/series-workflowntcqp-build-action-1500454842/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 05:59:52 +0000 UTC FinishedAt: 2026-08-08 06:16:45 +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:*1a531c24-26a1-4e8a-8b50-d209630d2c4d,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-workflowntcqp/series-workflowntcqp-convert-artifact-1120950668/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": "fc650ff6-1c32-400e-b517-a343f5262eb4", "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-workflowntcqp/series-workflowntcqp-build-action-1500454842/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:16:55 +0000 UTC FinishedAt: 2026-08-08 06:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:16:55 +0000 UTC FinishedAt: 2026-08-08 06:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:16:55 +0000 UTC FinishedAt: 2026-08-08 06:17:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:16:55 +0000 UTC FinishedAt: 2026-08-08 06:16:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-workflowntcqp/series-workflowntcqp-convert-artifact-1959825355/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:17:05 +0000 UTC FinishedAt: 2026-08-08 06:19:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:17:05 +0000 UTC FinishedAt: 2026-08-08 06:18:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fc650ff6-1c32-400e-b517-a343f5262eb4,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-workflowntcqp/series-workflowntcqp-build-action-1500454842/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-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:19:07 +0000 UTC FinishedAt: 2026-08-08 06:19:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:19:07 +0000 UTC FinishedAt: 2026-08-08 06:19:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:19:07 +0000 UTC FinishedAt: 2026-08-08 06:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:19:07 +0000 UTC FinishedAt: 2026-08-08 06:36:00 +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:*1a531c24-26a1-4e8a-8b50-d209630d2c4d,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-workflowntcqp/series-workflowntcqp-convert-artifact-1959825355/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": "9fa2f03a-b4a2-4eb3-87f3-7f1bd8eeac56", "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-workflowntcqp/series-workflowntcqp-build-action-542028911/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:19:07 +0000 UTC FinishedAt: 2026-08-08 06:35:50 +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:*1a531c24-26a1-4e8a-8b50-d209630d2c4d,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-workflowntcqp/series-workflowntcqp-convert-artifact-1959825355/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": "9fa2f03a-b4a2-4eb3-87f3-7f1bd8eeac56", "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-workflowntcqp/series-workflowntcqp-build-action-542028911/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:36:00 +0000 UTC FinishedAt: 2026-08-08 06:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:36:00 +0000 UTC FinishedAt: 2026-08-08 06:36:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:36:00 +0000 UTC FinishedAt: 2026-08-08 06:38:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:36:00 +0000 UTC FinishedAt: 2026-08-08 06:37:50 +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:*9fa2f03a-b4a2-4eb3-87f3-7f1bd8eeac56,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-workflowntcqp/series-workflowntcqp-build-action-542028911/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-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:38:00 +0000 UTC FinishedAt: 2026-08-08 09:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:38:00 +0000 UTC FinishedAt: 2026-08-08 09:41:17 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"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:*fc650ff6-1c32-400e-b517-a343f5262eb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9fa2f03a-b4a2-4eb3-87f3-7f1bd8eeac56,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-workflowntcqp/series-workflowntcqp-build-action-1500454842/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-workflowntcqp/series-workflowntcqp-build-action-542028911/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:38:00 +0000 UTC FinishedAt: 2026-08-08 06:38:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:38:00 +0000 UTC FinishedAt: 2026-08-08 06:38:04 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"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-workflowntcqp/series-workflowntcqp-convert-artifact-720382308/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:38:00 +0000 UTC FinishedAt: 2026-08-08 06:38:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:38:00 +0000 UTC FinishedAt: 2026-08-08 06:38:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:38:00 +0000 UTC FinishedAt: 2026-08-08 06:38:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:38:10 +0000 UTC FinishedAt: 2026-08-08 09:41:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowntcqp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["vfs_coredump"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8086604be9733378461a5534c39cb72635226b23","config_name":"upstream-apparmor-kasan.config","enable_configs":["COREDUMP","ELF_CORE","PROC_FS"],"series_id":"b863090f-2e0a-41c6-b2a7-bce731c056b9","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-08-08 06:38:10 +0000 UTC FinishedAt: 2026-08-08 09:41:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fc650ff6-1c32-400e-b517-a343f5262eb4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9fa2f03a-b4a2-4eb3-87f3-7f1bd8eeac56,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-workflowntcqp/series-workflowntcqp-build-action-1500454842/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-workflowntcqp/series-workflowntcqp-build-action-542028911/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-workflowntcqp/series-workflowntcqp-convert-artifact-720382308/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,}