Name: series-workflowrnz4b Phase: Succeeded StartedAt: 2026-08-23 18:15:44 +0000 UTC FinishedAt: 2026-08-23 22:00:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[0] Phase: Succeeded StartedAt: 2026-08-23 18:15:44 +0000 UTC FinishedAt: 2026-08-23 18:19:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 18:15:44 +0000 UTC FinishedAt: 2026-08-23 18:19:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VMWARE_VMCI_VSOCKETS", "VSOCKETS_LOOPBACK", "VIRTIO", "VMWARE_VMCI", "PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VMWARE_VMCI_VSOCKETS", "VSOCKETS_LOOPBACK", "VIRTIO", "VMWARE_VMCI", "PCI" ], "series_id": "ded4f3fb-c437-42c7-b438-dd701c7de146" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "virtio_transport_recv_pkt", "vmci_transport_recv_stream_cb", "vmci_transport_recv_pkt_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWTVdBUkVfVk1DSV9WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LAogICAgJiMzNDtWSVJUSU8mIzM0OywKICAgICYjMzQ7Vk1XQVJFX1ZNQ0kmIzM0OywKICAgICYjMzQ7UENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCYjMzQ7LAogICAgJiMzNDt2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYiYjMzQ7LAogICAgJiMzNDt2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvZ2ljIGZpeCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIGFkZHJlc3Mgb2YgaW5jb21pbmcgdnNvY2sgcGFja2V0cyBhZ2FpbnN0IHRoZSBleHBlY3RlZCBwZWVyIGFkZHJlc3MgZm9yIGNvbm5lY3RlZCBzb2NrZXRzIChgdnNvY2tfY2hlY2tfc291cmNlYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGRhdGEgbGVha3MgdG8gdXNlcnNwYWNlLiBBbGwgc3RydWN0dXJlcyBpbnZvbHZlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgYW5kIHRoZSBjaGFuZ2VzIG1lcmVseSBhZGQgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIGV4aXN0aW5nIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSwgYW5kIHN0YW5kYXJkIHRlc3RpbmcvS0FTQU4gaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgdnNvY2tfY2hlY2tfc291cmNlYCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIG9mIGluY29taW5nIHBhY2tldHMgYWdhaW5zdCB0aGUgc29ja2V0IHBlZXIuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AgdG8gZHJvcCBwYWNrZXRzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzb3VyY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2c29jayBsb2dpYyBhbmQgaXRzIHRyYW5zcG9ydHMgKHZpcnRpbyBhbmQgdm1jaSkgdGhhdCBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjgzOGRhNDkwZDY5Y2YzZjYwM2E5ZTM3Nzk0N2E0NmIwOWZhNjA5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE4OjE3OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oXG5pbmRleCAzMzU3ZWU2MmQxMGJmLi41NTQ5Mjk4YzFlYzZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuQEAgLTIyOSw2ICYjNDM7MjI5LDkgQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfYm91bmRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsXG4gc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHNvY2thZGRyX3ZtICpkc3QsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldCAqbmV0KTtcbiYjNDM7Ym9vbCB2c29ja19jaGVja19zb3VyY2UoY29uc3Qgc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyk7XG4gdm9pZCB2c29ja19yZW1vdmVfc29jayhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKTtcbiB2b2lkIHZzb2NrX2Zvcl9lYWNoX2Nvbm5lY3RlZF9zb2NrZXQoc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuIFx0XHRcdFx0ICAgICB2b2lkICgqZm4pKHN0cnVjdCBzb2NrICpzaykpO1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuaW5kZXggYTMzYjJhMmQzODFkYy4uZjg0MDQ5OGI1OGFmYiAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5AQCAtNDM4LDYgJiM0Mzs0MzgsMzggQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHZzb2NrX2NoZWNrX3NvdXJjZSAtIHZhbGlkYXRlIGEgcGFja2V0IHNvdXJjZSBhZ2FpbnN0IGEgc29ja2V0IHBlZXJcbiYjNDM7ICogQHZzazogc29ja2V0IHJlY2VpdmluZyB0aGUgcGFja2V0XG4mIzQzOyAqIEB0cmFuc3BvcnQ6IHRyYW5zcG9ydCByZWNlaXZpbmcgdGhlIHBhY2tldFxuJiM0MzsgKiBAc3JjOiBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBwYWNrZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWNrZXQgYXJyaXZlZCBvbiB0aGUgc29ja2V0JiMzOTtzIGFzc2lnbmVkIHRyYW5zcG9ydCBhbmRcbiYjNDM7ICogaXRzIHNvdXJjZSBtYXRjaGVzIHRoZSBzdG9yZWQgcGVlci4gTG9vcGJhY2sgcGFja2V0cyBhcmUgZ2VuZXJhdGVkXG4mIzQzOyAqIGludGVybmFsbHkgYW5kIGFsd2F5cyB1c2UgdGhlIGxvY2FsIENJRCBhcyB0aGVpciBzb3VyY2UsIGluY2x1ZGluZ1xuJiM0MzsgKiBjb25uZWN0aW9ucyB1c2luZyBhIHZhbGlkIENJRCBhbGlhcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHNvY2tldCBsb2NrIGFuZCBtdXN0IG5vdCBjYWxsIHRoaXMgZm9yIGxpc3RlbmluZ1xuJiM0MzsgKiBzb2NrZXRzLCB3aGljaCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBzb3VyY2UgYW5kIGhhdmUgbm8gYXNzaWduZWRcbiYjNDM7ICogdHJhbnNwb3J0LlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCB2c29ja19jaGVja19zb3VyY2UoY29uc3Qgc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYylcbiYjNDM7e1xuJiM0MztcdGlmICh2c2stXHUwMDNldHJhbnNwb3J0ICE9IHRyYW5zcG9ydClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNyYy1cdTAwM2Vzdm1fcG9ydCAhPSB2c2stXHUwMDNlcmVtb3RlX2FkZHIuc3ZtX3BvcnQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChzcmMtXHUwMDNlc3ZtX2NpZCA9PSB2c2stXHUwMDNlcmVtb3RlX2FkZHIuc3ZtX2NpZClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJhbnNwb3J0LVx1MDAzZWdldF9sb2NhbF9jaWQoKSA9PSBWTUFERFJfQ0lEX0xPQ0FMO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2NoZWNrX3NvdXJjZSk7XG4mIzQzO1xuIHZvaWQgdnNvY2tfcmVtb3ZlX3NvY2soc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcbiB7XG4gXHQvKiBUcmFuc3BvcnQgcmVhc3NpZ25tZW50IG11c3Qgbm90IHJlbW92ZSB0aGUgYmluZGluZy4gKi9cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbmluZGV4IGU0ZWJhYTcwZjZjMjMuLjYzMDFjMTA4YTRmMTAgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuQEAgLTE4MjMsNyAmIzQzOzE4MjMsOCBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXG4gXHQgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KVxuIFx0ICovXG4gXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8XG4tXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2IHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQpKSB7XG4mIzQzO1x0ICAgIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c2ssIFx1MDAyNnQtXHUwMDNldHJhbnNwb3J0LCBcdTAwMjZzcmMpKSkge1xuIFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRzb2NrX3B1dChzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jIGIvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jXG5pbmRleCAxYzRlZTAzOWMxNjYyLi5iNjEyYTk4OTM4NTZhIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmNcbkBAIC02ODAsMTEgJiM0Mzs2ODAsMTMgQEAgc3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpXG4gXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7XG4gXHRzdHJ1Y3QgdnNvY2tfc29jayAqdnNrO1xuIFx0Ym9vbCBiaF9wcm9jZXNzX3BrdDtcbiYjNDM7XHRib29sIGRyb3BfcGt0O1xuIFx0aW50IGVycjtcbiBcbiBcdHNrID0gTlVMTDtcbiBcdGVyciA9IFZNQ0lfU1VDQ0VTUztcbiBcdGJoX3Byb2Nlc3NfcGt0ID0gZmFsc2U7XG4mIzQzO1x0ZHJvcF9wa3QgPSBmYWxzZTtcbiBcbiBcdC8qIElnbm9yZSBpbmNvbWluZyBwYWNrZXRzIGZyb20gcmVzb3VyY2VzIHRoYXQgYXJlbiYjMzk7dCB2c29ja1xuIFx0ICogaW1wbGVtZW50YXRpb25zLlxuQEAgLTc2NSwxNyAmIzQzOzc2NywyNiBAQCBzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZylcbiBcdGJoX2xvY2tfc29jayhzayk7XG4gXG4gXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHtcbi1cdFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXG4tXHRcdHZzay1cdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDtcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICF2c29ja19jaGVja19zb3VyY2UodnNrLCBcdTAwMjZ2bWNpX3RyYW5zcG9ydCwgXHUwMDI2c3JjKSkge1xuJiM0MztcdFx0XHRkcm9wX3BrdCA9IHRydWU7XG4mIzQzO1x0XHRcdGVyciA9IFZNQ0lfRVJST1JfTk9fQUNDRVNTO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXG4mIzQzO1x0XHRcdHZzay1cdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDtcbiBcbi1cdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcbi1cdFx0XHR2bWNpX3RyYW5zKHZzayktXHUwMDNlbm90aWZ5X29wcy1cdTAwM2VoYW5kbGVfbm90aWZ5X3BrdChcbi1cdFx0XHRcdFx0c2ssIHBrdCwgdHJ1ZSwgXHUwMDI2ZHN0LCBcdTAwMjZzcmMsXG4tXHRcdFx0XHRcdFx1MDAyNmJoX3Byb2Nlc3NfcGt0KTtcbiYjNDM7XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcbiYjNDM7XHRcdFx0XHR2bWNpX3RyYW5zKHZzayktXHUwMDNlbm90aWZ5X29wcy1cdTAwM2VoYW5kbGVfbm90aWZ5X3BrdChzaywgcGt0LCB0cnVlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZHN0LCBcdTAwMjZzcmMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZiaF9wcm9jZXNzX3BrdCk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRiaF91bmxvY2tfc29jayhzayk7XG4gXG4mIzQzO1x0aWYgKGRyb3BfcGt0KVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0aWYgKCFiaF9wcm9jZXNzX3BrdCkge1xuIFx0XHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbztcbiBcbkBAIC05MDAsNiAmIzQzOzkxMSw3IEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF9pbmZvICpyZWN2X3BrdF9pbmZvO1xuIFx0c3RydWN0IHZtY2lfdHJhbnNwb3J0X3BhY2tldCAqcGt0O1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl92bSBzcmM7XG4gXHRzdHJ1Y3Qgc29jayAqc2s7XG4gXG4gXHRyZWN2X3BrdF9pbmZvID1cbkBAIC05MDgsNiAmIzQzOzkyMCwxMCBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHBrdCA9IFx1MDAyNnJlY3ZfcGt0X2luZm8tXHUwMDNlcGt0O1xuIFxuIFx0bG9ja19zb2NrKHNrKTtcbiYjNDM7XHR2c29ja19hZGRyX2luaXQoXHUwMDI2c3JjLCBwa3QtXHUwMDNlZGcuc3JjLmNvbnRleHQsIHBrdC1cdTAwM2VzcmNfcG9ydCk7XG4mIzQzO1x0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF2c29ja19jaGVja19zb3VyY2UodnNvY2tfc2soc2spLCBcdTAwMjZ2bWNpX3RyYW5zcG9ydCwgXHUwMDI2c3JjKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFxuIFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLiAqL1xuIFx0dnNvY2tfc2soc2spLVx1MDAzZWxvY2FsX2FkZHIuc3ZtX2NpZCA9IHBrdC1cdTAwM2VkZy5kc3QuY29udGV4dDtcbkBAIC05MzcsNiAmIzQzOzk1Myw3IEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcbiYjNDM7b3V0OlxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdGtmcmVlKHJlY3ZfcGt0X2luZm8pO1xuIFx0LyogUmVsZWFzZSByZWZlcmVuY2Ugb2J0YWluZWQgaW4gdGhlIHN0cmVhbSBjYWxsYmFjayB3aGVuIHdlIGZldGNoZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VklSVElPX1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZNV0FSRV9WTUNJX1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDssCiAgICAmIzM0O1ZJUlRJTyYjMzQ7LAogICAgJiMzNDtWTVdBUkVfVk1DSSYjMzQ7LAogICAgJiMzNDtQQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0JiMzNDssCiAgICAmIzM0O3ZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiJiMzNDssCiAgICAmIzM0O3ZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgdnNvY2tfY2hlY2tfc291cmNlYCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIG9mIGluY29taW5nIHBhY2tldHMgYWdhaW5zdCB0aGUgc29ja2V0IHBlZXIuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AgdG8gZHJvcCBwYWNrZXRzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzb3VyY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2c29jayBsb2dpYyBhbmQgaXRzIHRyYW5zcG9ydHMgKHZpcnRpbyBhbmQgdm1jaSkgdGhhdCBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjgzOGRhNDkwZDY5Y2YzZjYwM2E5ZTM3Nzk0N2E0NmIwOWZhNjA5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE4OjE3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaCBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKaW5kZXggMzM1N2VlNjJkMTBiZi4uNTU0OTI5OGMxZWM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9hZl92c29jay5oCkBAIC0yMjksNiAmIzQzOzIyOSw5IEBAIHN0cnVjdCBzb2NrICp2c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLAogc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsCiAJCQkJCSAgICAgc3RydWN0IHNvY2thZGRyX3ZtICpkc3QsCiAJCQkJCSAgICAgc3RydWN0IG5ldCAqbmV0KTsKJiM0Mztib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAomIzQzOwkJCWNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKJiM0MzsJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyk7CiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spOwogdm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKIAkJCQkgICAgIHZvaWQgKCpmbikoc3RydWN0IHNvY2sgKnNrKSk7CmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKaW5kZXggYTMzYjJhMmQzODFkYy4uZjg0MDQ5OGI1OGFmYiAxMDA2NDQKLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwpAQCAtNDM4LDYgJiM0Mzs0MzgsMzggQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYywKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldCk7CiAKJiM0MzsvKioKJiM0MzsgKiB2c29ja19jaGVja19zb3VyY2UgLSB2YWxpZGF0ZSBhIHBhY2tldCBzb3VyY2UgYWdhaW5zdCBhIHNvY2tldCBwZWVyCiYjNDM7ICogQHZzazogc29ja2V0IHJlY2VpdmluZyB0aGUgcGFja2V0CiYjNDM7ICogQHRyYW5zcG9ydDogdHJhbnNwb3J0IHJlY2VpdmluZyB0aGUgcGFja2V0CiYjNDM7ICogQHNyYzogc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgcGFja2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBhY2tldCBhcnJpdmVkIG9uIHRoZSBzb2NrZXQmIzM5O3MgYXNzaWduZWQgdHJhbnNwb3J0IGFuZAomIzQzOyAqIGl0cyBzb3VyY2UgbWF0Y2hlcyB0aGUgc3RvcmVkIHBlZXIuIExvb3BiYWNrIHBhY2tldHMgYXJlIGdlbmVyYXRlZAomIzQzOyAqIGludGVybmFsbHkgYW5kIGFsd2F5cyB1c2UgdGhlIGxvY2FsIENJRCBhcyB0aGVpciBzb3VyY2UsIGluY2x1ZGluZwomIzQzOyAqIGNvbm5lY3Rpb25zIHVzaW5nIGEgdmFsaWQgQ0lEIGFsaWFzLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHNvY2tldCBsb2NrIGFuZCBtdXN0IG5vdCBjYWxsIHRoaXMgZm9yIGxpc3RlbmluZwomIzQzOyAqIHNvY2tldHMsIHdoaWNoIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHNvdXJjZSBhbmQgaGF2ZSBubyBhc3NpZ25lZAomIzQzOyAqIHRyYW5zcG9ydC4KJiM0MzsgKi8KJiM0Mztib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAomIzQzOwkJCWNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKJiM0MzsJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYykKJiM0Mzt7CiYjNDM7CWlmICh2c2stJmd0O3RyYW5zcG9ydCAhPSB0cmFuc3BvcnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzcmMtJmd0O3N2bV9wb3J0ICE9IHZzay0mZ3Q7cmVtb3RlX2FkZHIuc3ZtX3BvcnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzcmMtJmd0O3N2bV9jaWQgPT0gdnNrLSZndDtyZW1vdGVfYWRkci5zdm1fY2lkKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiB0cmFuc3BvcnQtJmd0O2dldF9sb2NhbF9jaWQoKSA9PSBWTUFERFJfQ0lEX0xPQ0FMOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jaGVja19zb3VyY2UpOwomIzQzOwogdm9pZCB2c29ja19yZW1vdmVfc29jayhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKQogewogCS8qIFRyYW5zcG9ydCByZWFzc2lnbm1lbnQgbXVzdCBub3QgcmVtb3ZlIHRoZSBiaW5kaW5nLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jCmluZGV4IGU0ZWJhYTcwZjZjMjMuLjYzMDFjMTA4YTRmMTAgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKQEAgLTE4MjMsNyAmIzQzOzE4MjMsOCBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsCiAJICogbG9ja19zb2NrIChub3RlOiBsaXN0ZW5lciBzb2NrZXRzIGFyZSBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydCkKIAkgKi8KIAlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8Ci0JICAgIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7IHZzay0mZ3Q7dHJhbnNwb3J0ICE9ICZhbXA7dC0mZ3Q7dHJhbnNwb3J0KSkgewomIzQzOwkgICAgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOICZhbXA7JmFtcDsKJiM0MzsJICAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzaywgJmFtcDt0LSZndDt0cmFuc3BvcnQsICZhbXA7c3JjKSkpIHsKIAkJKHZvaWQpdmlydGlvX3RyYW5zcG9ydF9yZXNldF9ub19zb2NrKHQsIHNrYiwgbmV0KTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJc29ja19wdXQoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jIGIvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jCmluZGV4IDFjNGVlMDM5YzE2NjIuLmI2MTJhOTg5Mzg1NmEgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMKQEAgLTY4MCwxMSAmIzQzOzY4MCwxMyBAQCBzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZykKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7CiAJc3RydWN0IHZzb2NrX3NvY2sgKnZzazsKIAlib29sIGJoX3Byb2Nlc3NfcGt0OwomIzQzOwlib29sIGRyb3BfcGt0OwogCWludCBlcnI7CiAKIAlzayA9IE5VTEw7CiAJZXJyID0gVk1DSV9TVUNDRVNTOwogCWJoX3Byb2Nlc3NfcGt0ID0gZmFsc2U7CiYjNDM7CWRyb3BfcGt0ID0gZmFsc2U7CiAKIAkvKiBJZ25vcmUgaW5jb21pbmcgcGFja2V0cyBmcm9tIHJlc291cmNlcyB0aGF0IGFyZW4mIzM5O3QgdnNvY2sKIAkgKiBpbXBsZW1lbnRhdGlvbnMuCkBAIC03NjUsMTcgJiM0Mzs3NjcsMjYgQEAgc3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpCiAJYmhfbG9ja19zb2NrKHNrKTsKIAogCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkgewotCQkvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUsIHVwZGF0ZSBpdC4gKi8KLQkJdnNrLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDsKJiM0MzsJCWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c2ssICZhbXA7dm1jaV90cmFuc3BvcnQsICZhbXA7c3JjKSkgewomIzQzOwkJCWRyb3BfcGt0ID0gdHJ1ZTsKJiM0MzsJCQllcnIgPSBWTUNJX0VSUk9SX05PX0FDQ0VTUzsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovCiYjNDM7CQkJdnNrLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDsKIAotCQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCkKLQkJCXZtY2lfdHJhbnModnNrKS0mZ3Q7bm90aWZ5X29wcy0mZ3Q7aGFuZGxlX25vdGlmeV9wa3QoCi0JCQkJCXNrLCBwa3QsIHRydWUsICZhbXA7ZHN0LCAmYW1wO3NyYywKLQkJCQkJJmFtcDtiaF9wcm9jZXNzX3BrdCk7CiYjNDM7CQkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpCiYjNDM7CQkJCXZtY2lfdHJhbnModnNrKS0mZ3Q7bm90aWZ5X29wcy0mZ3Q7aGFuZGxlX25vdGlmeV9wa3Qoc2ssIHBrdCwgdHJ1ZSwKJiM0MzsJCQkJCQkJCQkgICAgICAgJmFtcDtkc3QsICZhbXA7c3JjLAomIzQzOwkJCQkJCQkJCSAgICAgICAmYW1wO2JoX3Byb2Nlc3NfcGt0KTsKJiM0MzsJCX0KIAl9CiAKIAliaF91bmxvY2tfc29jayhzayk7CiAKJiM0MzsJaWYgKGRyb3BfcGt0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaWYgKCFiaF9wcm9jZXNzX3BrdCkgewogCQlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbzsKIApAQCAtOTAwLDYgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbzsKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl92bSBzcmM7CiAJc3RydWN0IHNvY2sgKnNrOwogCiAJcmVjdl9wa3RfaW5mbyA9CkBAIC05MDgsNiAmIzQzOzkyMCwxMCBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlwa3QgPSAmYW1wO3JlY3ZfcGt0X2luZm8tJmd0O3BrdDsKIAogCWxvY2tfc29jayhzayk7CiYjNDM7CXZzb2NrX2FkZHJfaW5pdCgmYW1wO3NyYywgcGt0LSZndDtkZy5zcmMuY29udGV4dCwgcGt0LSZndDtzcmNfcG9ydCk7CiYjNDM7CWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CSAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzb2NrX3NrKHNrKSwgJmFtcDt2bWNpX3RyYW5zcG9ydCwgJmFtcDtzcmMpKQomIzQzOwkJZ290byBvdXQ7CiAKIAkvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUuICovCiAJdnNvY2tfc2soc2spLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBwa3QtJmd0O2RnLmRzdC5jb250ZXh0OwpAQCAtOTM3LDYgJiM0Mzs5NTMsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJYnJlYWs7CiAJfQogCiYjNDM7b3V0OgogCXJlbGVhc2Vfc29jayhzayk7CiAJa2ZyZWUocmVjdl9wa3RfaW5mbyk7CiAJLyogUmVsZWFzZSByZWZlcmVuY2Ugb2J0YWluZWQgaW4gdGhlIHN0cmVhbSBjYWxsYmFjayB3aGVuIHdlIGZldGNoZWQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB2c29jayBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IHRoYXQgbmVlZHMgdG8gYmUgZnV6emVkLiBGcm9tIGEgY3Vyc29yeSBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgaXQgZG9lcy4gVGhlIGtleSBpcyB0aGlzIG5ldyBgdnNvY2tfY2hlY2tfc291cmNlYCBmdW5jdGlvbiBiZWluZyBhZGRlZCB0byBgbmV0L3Ztd192c29jay9hZl92c29jay5jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBiZWluZyB1c2VkIGluIGJvdGggYHZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgIGFuZCBwb3RlbnRpYWxseSBgdm1jaV90cmFuc3BvcnQuY2Agc3Ryb25nbHkgc3VnZ2VzdHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB2c29jayBsb2dpYy4gSXQgc2VlbXMgdG8gYmUgaW1wbGVtZW50aW5nIHNvdXJjZSB2YWxpZGF0aW9uIGZvciBpbmNvbWluZyBwYWNrZXRzLCB3aGljaCBtZWFucyBob3cgcGFja2V0cyBhcmUgYWNjZXB0ZWQgb3IgZHJvcHBlZCBpcyBub3cgZGlmZmVyZW50LCBhbmQgdGhhdCYjMzk7cyBhIGNsZWFyIHRyaWdnZXIgZm9yIGZ1enppbmcuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIGNoYW5nZS4KCk5vdywgbGV0JiMzOTtzIHNlZSBhYm91dCBtYWtpbmcgdGhpcyBmdXp6YWJsZS4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIGltcG9ydGFudCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBJJiMzOTttIHNlZWluZyBgQ09ORklHX1ZTT0NLRVRTYCwgYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNgLCBhbmQgYENPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUU2AgYXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMuIE1ha2VzIHNlbnNlLiBUaGVuIHRoZXJlIGFyZSB0aGUgc3ltYm9scyB0byBsb29rIGF0LiBgdnNvY2tfY2hlY2tfc291cmNlYCBpcyBkZWZpbml0ZWx5IGEga2V5IG5ldyBmdW5jdGlvbiwgZXZlbiBpZiBpdCYjMzk7cyBhIGhlbHBlciBhbmQgbm90IHRoZSBpZGVhbCBlbnRyeSBwb2ludC4gSXQmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIEkgbmVlZCB0byBsb29rIGF0IGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCBhbmQgYHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtgIGFzIG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50cy4KCkkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdnNvY2sgY29uZmlndXJhdGlvbnMgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBidXQgc28gZmFyLCB0aGlzIGlzIGxvb2tpbmcgbGlrZSBhIGhpZ2gtcHJpb3JpdHkgZnV6emluZyB0YXJnZXQgZHVlIHRvIHRoZSBzb3VyY2UgdmFsaWRhdGlvbiBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSVJUSU9fVlNPQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWc9NDE9Y29uZmlnIFZNV0FSRV9WTUNJX1ZTT0NLRVRTXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTUyLVxubmV0L3Ztd192c29jay9LY29uZmlnOjUzOmNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy01NC1cdHRyaXN0YXRlIFwmIzM0O3ZpcnRpbyB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1wmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy02NS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2Njpjb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxubmV0L3Ztd192c29jay9LY29uZmlnLTY3LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZ3JhbnVsYXIuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCBkZXBsb3lpbmcgdGhlc2UgY29uZmlncywgSSBuZWVkIHRvIHBlcmZvcm0gYSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhbG1vc3Qgc2Vjb25kIG5hdHVyZSB0byBtZTsgZW5zdXJpbmcgY29tcGF0aWJpbGl0eSBhbmQgYXZvaWRpbmcgZG93bnN0cmVhbSBmYWlsdXJlcyBpcyBwYXJhbW91bnQuIEkmIzM5O20gZXNzZW50aWFsbHkgcnVubmluZyBhIG1lbnRhbCBjaGVja2xpc3QsIGJ1dCBpdCYjMzk7cyBhIGNyaXRpY2FsIG9uZS4gV2hhdCBvdGhlciBzeXN0ZW1zIG9yIHNlcnZpY2VzIGFyZSB0aGVzZSBjb25maWdzIHRvdWNoaW5nPyBBcmUgdGhvc2UgY29tcG9uZW50cyB1cC10by1kYXRlPyBBcmUgdGhlIEFQSSB2ZXJzaW9ucyBjb21wYXRpYmxlPyBIYXZlIEkgYWNjb3VudGVkIGZvciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBicmVha2luZyBjaGFuZ2VzPyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IG1hcCBvdXQgdGhlICYjMzQ7d2hvIHRhbGtzIHRvIHdob20mIzM0OyByZWxhdGlvbnNoaXBzIGFuZCBhc3Nlc3MgdGhlIHJpcHBsZSBlZmZlY3RzIG9mIGFueSBtb2RpZmljYXRpb25zLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGF2b2lkaW5nIGEgc2VydmljZSBvdXRhZ2UsIGl0JiMzOTtzIGFib3V0IG1pbmltaXppbmcgdGhlIHJpc2sgb2Ygc3VidGxlLCBoYXJkLXRvLWRpYWdub3NlIGVycm9ycyB0aGF0IGNvdWxkIGRlZ3JhZGUgcGVyZm9ybWFuY2Ugb3IsIHdvcnNlLCBjb21wcm9taXNlIGRhdGEgaW50ZWdyaXR5IGRvd24gdGhlIGxpbmUuIEEgcHJvYWN0aXZlIGRlcGVuZGVuY3kgYXVkaXQgbm93IHNhdmVzIG1lIGEgd29ybGQgb2YgaGVhZGFjaGUgbGF0ZXIuIFRpbWUgdG8gZGlnIGluLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVnNvY2sgcHJvdG9jb2xcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFZTT0NLRVRTXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBWaXJ0dWFsIFNvY2tldCBQcm90b2NvbCBpcyBhIHNvY2tldCBwcm90b2NvbCBzaW1pbGFyIHRvIFRDUC9JUFxuICAxMDpcdFx0ICBhbGxvd2luZyBjb21tdW5pY2F0aW9uIGJldHdlZW4gVmlydHVhbCBNYWNoaW5lcyBhbmQgaHlwZXJ2aXNvclxuICAxMTpcdFx0ICBvciBob3N0LlxuICAxMjpcdFxuICAxMzpcdFx0ICBZb3Ugc2hvdWxkIGFsc28gc2VsZWN0IG9uZSBvciBtb3JlIGh5cGVydmlzb3Itc3BlY2lmaWMgdHJhbnNwb3J0c1xuICAxNDpcdFx0ICBiZWxvdy5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAxNzpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2c29jay4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgVlNPQ0tFVFNfRElBR1xuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTXG4gIDIyOlx0XHRkZWZhdWx0IHlcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgU3VwcG9ydCBmb3IgUEZfVlNPQ0sgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxuICAyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAyNjpcdFxuICAyNzpcdFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgc28gdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBjYW4gcXVlcnkgb3BlbiBzb2NrZXRzLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xuICAzMjpcdFx0ZGVmYXVsdCB5XG4gIDMzOlx0XHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxuICAzNDpcdFx0aGVscFxuICAzNTpcdFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgbG9vcGJhY2sgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMsXG4gIDM2Olx0XHQgIHVzaW5nIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5cbiAgMzc6XHRcbiAgMzg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzOTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2c29ja19sb29wYmFjay4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgNDA6XHRcbiAgNDE6XHRjb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcbiAgNDI6XHRcdHRyaXN0YXRlIFwmIzM0O1ZNd2FyZSBWTUNJIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG4gIDQzOlx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWTVdBUkVfVk1DSVxuICA0NDpcdFx0aGVscFxuICA0NTpcdFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgVk1DSSB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0cy5cbiAgNDY6XHRcbiAgNDc6XHRcdCAgRW5hYmxlIHRoaXMgdHJhbnNwb3J0IGlmIHlvdXIgVmlydHVhbCBNYWNoaW5lIHJ1bnMgb24gYSBWTXdhcmVcbiAgNDg6XHRcdCAgaHlwZXJ2aXNvci5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA1MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2bXdfdnNvY2tfdm1jaV90cmFuc3BvcnQuIElmIHVuc3VyZSwgc2F5IE4uXG4gIDUyOlx0XG4gIDUzOlx0Y29uZmlnIFZJUlRJT19WU09DS0VUU1xuICA1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7dmlydGlvIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG4gIDU1Olx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWSVJUSU9cbiAgNTY6XHRcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHQgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSB2aXJ0aW8gdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMuXG4gIDU5Olx0XG4gIDYwOlx0XHQgIEVuYWJsZSB0aGlzIHRyYW5zcG9ydCBpZiB5b3VyIFZpcnR1YWwgTWFjaGluZSBob3N0IHN1cHBvcnRzIFZpcnR1YWxcbiAgNjE6XHRcdCAgU29ja2V0cyBvdmVyIHZpcnRpby5cbiAgNjI6XHRcbiAgNjM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDY0Olx0XHQgIGNhbGxlZCB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxuICA2NzpcdFx0dHJpc3RhdGVcbiAgNjg6XHRcdGhlbHBcbiAgNjk6XHRcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBuZWVkcyB0byBhY2Nlc3NcbiAgNzA6XHRcdCAgdGhlIHZpcnRpb192c29jay4gIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgNzE6XHRcdCAgdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLlxuICA3MjpcdFxuICA3MzpcdGNvbmZpZyBIWVBFUlZfVlNPQ0tFVFNcbiAgNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O0h5cGVyLVYgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcJiMzNDtcbiAgNzU6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEhZUEVSVl9WTUJVU1xuICA3NjpcdFx0aGVscFxuICA3NzpcdFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgSHlwZXItViB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0cy5cbiAgNzg6XHRcbiAgNzk6XHRcdCAgRW5hYmxlIHRoaXMgdHJhbnNwb3J0IGlmIHlvdXIgVmlydHVhbCBNYWNoaW5lIGhvc3Qgc3VwcG9ydHMgVmlydHVhbFxuICA4MDpcdFx0ICBTb2NrZXRzIG92ZXIgSHlwZXItViBWTUJ1cy5cbiAgODE6XHRcbiAgODI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDgzOlx0XHQgIGNhbGxlZCBodl9zb2NrLiBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRoaXMgdlNvY2tldCBpbXBsZW1lbnRhdGlvbiB1cCBhbmQgcnVubmluZy4gRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gcHJldHR5IHN1cmUgSSBuZWVkIGBWU09DS0VUU2AsIG9idmlvdXNseSwgYW5kIHRoZW4gdGhlIGZvdW5kYXRpb25hbCBgVklSVElPYCBsYXllci4gU2luY2Ugd2UgYXJlIHVzaW5nIHZTb2NrZXRzIG9uIFZpcnRJTywgdGhlIHNwZWNpZmljIGBWSVJUSU9fVlNPQ0tFVFNgIG9wdGlvbiBzZWVtcyBsaWtlIGEgZ2l2ZW4uIE5vdywgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIFZNd2FyZSBlbnZpcm9ubWVudCwgc28gYFZNV0FSRV9WTUNJYCBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgbmVjZXNzYXJ5LiBGaW5hbGx5LCB0byBlbmFibGUgdGhlIHZTb2NrZXQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFZNQ0kgZnJhbWV3b3JrLCBJJiMzOTtsbCBuZWVkIGBWTVdBUkVfVk1DSV9WU09DS0VUU2AuIEdvdCBpdC4KCk5vdywgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBWTVdBUkVfVk1DSWAsIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgY2hlY2sgaXRzIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIG9uZSBsb2NhdGVkIGluIGBkcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZXRhaWxzIGFyb3VuZCB0aGF0IG1vZHVsZS4gVGhpcyBpcyBqdXN0IGR1ZSBkaWxpZ2VuY2UuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZyBlc3NlbnRpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZNV0FSRV9WTUNJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9taXNjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZy01LVxuZHJpdmVycy9taXNjL3Ztd192bWNpL0tjb25maWc6Njpjb25maWcgVk1XQVJFX1ZNQ0lcbmRyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgVk1DSSBEcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTU0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBWTVdBUkVfVk1DSSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIHRoZSBhZ2VuZGEgaXMgYSBkZWVwIGRpdmUgaW50byB0aGUgYFZNV0FSRV9WTUNJYCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3JpdGljYWwgY29tcG9uZW50cyB0aGF0IHJlbHkgb24gdGhpcyBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBpZiBpdCYjMzk7cyBhbHRlcmVkLCB1cGRhdGVkLCBvciByZW1vdmVkLiBJ4oCZbSB0aGlua2luZyBpbiB0ZXJtcyBvZiB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSwgdGhlIGh5cGVydmlzb3ImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZ3Vlc3QgT1MsIGFuZCBvZiBjb3Vyc2UsIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGFueSBoaWdoZXItbGV2ZWwgc2VydmljZXMgYnVpbHQgdXBvbiB0aGUgVk1DSS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGJlIHRoaW5raW5nIGFib3V0OgoKKiAgICoqS2VybmVsIG1vZHVsZXM6KiogV2hhdCBtb2R1bGVzIGFyZSB0aWdodGx5IGNvdXBsZWQsIGFuZCB3aGF0JiMzOTtzIHRoZSB2ZXJzaW9uIGNvbXBhdGliaWxpdHkgbGlrZT8gQW55IGtub3duIGNvbmZsaWN0cz8KKiAgICoqVXNlci1zcGFjZSBsaWJyYXJpZXM6KiogQXJlIHRoZXJlIGFueSBzaGFyZWQgb2JqZWN0IGRlcGVuZGVuY2llcywgYW5kIGlmIHNvLCBkbyB0aGV5IGFsaWduIHdpdGggdGhlIGV4cGVjdGVkIHZlcnNpb25zPwoqICAgKipWaXJ0dWFsIG1hY2hpbmUgY29uZmlndXJhdGlvbjoqKiBIb3cgZGVlcGx5IGlzIFZNQ0kgaW50ZWdyYXRlZCBpbnRvIHRoZSBWTSB0ZW1wbGF0ZT8gSXMgaXQgc2FmZSB0byBhbHRlciBpdD8KKiAgICoqUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zOioqIEFueSBrbm93biBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciByZXNvdXJjZSBjb250ZW50aW9uIGlzc3VlcyB3aGVuIFZNQ0kgaXMgYWN0aXZlPwoqICAgKipTZWN1cml0eSB2dWxuZXJhYmlsaXRpZXM6KiogQXJlIHRoZXJlIGFueSBrbm93biBleHBsb2l0cyBvciBhdHRhY2sgdmVjdG9ycyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQ/CgpJJiMzOTttIGVzc2VudGlhbGx5IHRyeWluZyB0byBidWlsZCBhIHF1aWNrIGRlcGVuZGVuY3kgdHJlZSBpbiBteSBoZWFkIGFuZCBhc3Nlc3MgdGhlIGJsYXN0IHJhZGl1cyBvZiBhbnkgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgbGVnYWN5IGNvZGUgb3Igd29ya2Fyb3VuZHMgdGhhdCBtYXkgYmUgaW1wYWN0aW5nIHRoZSBjb2RlLWJhc2UuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVk13YXJlIFZNQ0kgZGV2aWNlXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBWTVdBUkVfVk1DSVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7Vk13YXJlIFZNQ0kgRHJpdmVyXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIChYODYgfHwgQVJNNjQpIFx1MDAyNlx1MDAyNiAhQ1BVX0JJR19FTkRJQU4gXHUwMDI2XHUwMDI2IFBDSVxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGlzIGlzIFZNd2FyZSYjMzk7cyBWaXJ0dWFsIE1hY2hpbmUgQ29tbXVuaWNhdGlvbiBJbnRlcmZhY2UuICBJdCBlbmFibGVzXG4gIDExOlx0XHQgIGhpZ2gtc3BlZWQgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGhvc3QgYW5kIGd1ZXN0IGluIGEgdmlydHVhbFxuICAxMjpcdFx0ICBlbnZpcm9ubWVudCB2aWEgdGhlIFZNQ0kgdmlydHVhbCBkZXZpY2UuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdm13X3ZtY2kuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVk1XQVJFX1ZNQ0kgYW5kIFBhY2tldCBSZWNlcHRpb24qKgoKT2theSwgc28gYFZNV0FSRV9WTUNJYCByZWxpZXMgb24gYFBDSWAsIHdoaWNoIG1ha2VzIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBzdHJhaWdodGZvcndhcmQuIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIGhlcmU6IGBWU09DS0VUU2AsIGBWSVJUSU9gLCBgVklSVElPX1ZTT0NLRVRTYCwgYFBDSWAsIGBWTVdBUkVfVk1DSWAsIGFuZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2Ygd2hlcmUgdG8gZm9jdXMgb3VyIGFuYWx5c2lzLiBJJiMzOTt2ZSBnb3QgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byBjb25zaWRlcjogYHZzb2NrX2NoZWNrX3NvdXJjZWAsIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCwgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYC4gVGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBvbmUocykgYXJlIHRoZSBtb3N0IHN0cmF0ZWdpY2FsbHkgdmFsdWFibGUgZm9yIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWwgZnV6emluZz8KCmB2c29ja19jaGVja19zb3VyY2VgICpzZWVtcyogaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBleHBvcnRlZCwgYnV0LCBvbiBzZWNvbmQgdGhvdWdodCwgaXQmIzM5O3MganVzdCBhIGhlbHBlci4gVGhvc2Ugb3RoZXIgdGhyZWUgYXJlIGVudHJ5IHBvaW50cy4gVGhlIG90aGVyIHRocmVlIGZ1bmN0aW9ucyBjYWxsIGl0LiBGdXp6aW5nIHRoZSBlbnRyeSBwb2ludHMgc2VlbXMgbXVjaCBtb3JlIHByb21pc2luZyBiZWNhdXNlIHRoZXkmIzM5O3JlIHdoZXJlIHRoZSBwYWNrZXRzIGFyZSBhY3R1YWxseSByZWNlaXZlZC4gVGhhdCYjMzk7cyB3aGVyZSB3ZSBzaG91bGQgY29uY2VudHJhdGUgb3VyIGVmZm9ydHMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCBhcyBhIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NjMyPXN0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNjg3LVx0XHRcdCAqL1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6Njg4Olx0XHRcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXHUwMDI2dmlydGlvX3RyYW5zcG9ydCwgc2tiLCBOVUxMKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTY4OS1cdFx0fVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xNzU4PXN0YXRpYyBib29sIHZpcnRpb190cmFuc3BvcnRfdmFsaWRfdHlwZSh1MTYgdHlwZSlcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc2Ni0gKi9cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzY3OnZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzY4LVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODAtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc4MTpcdHRyYWNlX3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3JjLnN2bV9jaWQsIHNyYy5zdm1fcG9ydCxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzgyLVx0XHRcdFx0XHRkc3Quc3ZtX2NpZCwgZHN0LnN2bV9wb3J0LFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODc1LX1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxODc2OkVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QpO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE4NzctXG4tLVxubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jPTEyMz1zdGF0aWMgdm9pZCB2c29ja19sb29wYmFja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2xvb3BiYWNrLmMtMTQxLVx0XHR2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpO1xubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jOjE0MjpcdFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChcdTAwMjZsb29wYmFja190cmFuc3BvcnQsIHNrYixcbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYy0xNDMtXHRcdFx0XHRcdCAgc29ja19uZXQoc2tiLVx1MDAzZXNrKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyOTUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRm9jdXNpbmcgSW4gb24gUGFja2V0IFJlY2VwdGlvbiBNZWNoYW5pc21zKioKCk9rYXksIHNvIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGRpc3NlY3QuIEl0JiMzOTtzIGV4cGxpY2l0bHkgZXhwb3J0ZWQgYW5kIGdldHMgY2FsbGVkIGZyb20gYm90aCBgdmlydGlvX3RyYW5zcG9ydF9yeF93b3JrYCBhbmQgYHZzb2NrX2xvb3BiYWNrX3dvcmtgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBwYWNrZXQgcmVjZXB0aW9uIHdpdGhpbiB0aGUgVmlydElPIHRyYW5zcG9ydCBsYXllci4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBwb2ludHMgb2YgY29udGVudGlvbiB0aGVyZS4KClNpbmNlIEkmIzM5O20gbG9va2luZyBhdCB0cmFuc3BvcnQgbGF5ZXJzLCBpdCBtYWtlcyBzZW5zZSB0byB0aGVuIHBpdm90IGFuZCBjaGVjayBvdXQgdGhlIFZNQ0kgZXF1aXZhbGVudHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb25jZXB0cyB0cmFuc2xhdGUgb3IgZGlmZmVyLiBTbywgSSBuZWVkIHRvIGxvb2sgYXQgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCBhbmQgYHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtgIHRvIHNlZSB3aGF0IEkgY2FuIGxlYXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0zMj1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3ZfZGdyYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKTtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzozMzpzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZyk7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMzQtc3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcGVlcl9kZXRhY2hfY2IodTMyIHN1Yl9pZCxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9NjQ5PXN0YXRpYyBib29sIHZtY2lfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkLFxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy02NzQtXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6Njc1OnN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTY3Ni17XG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTkxMD1zdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtOTQ2LVx0XHQvKiBCZWNhdXNlIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcnVuIGluIHRoZSBzYW1lIGNvbnRleHQgYXNcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzo5NDc6XHRcdCAqIHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtOTQ4LVx0XHQgKiBzb2NrZXQgaGFzIGNsb3NlZC4gV2UgbmVlZCB0byBsZXQgdGhlIG90aGVyIHNpZGUga25vdyBvciBpdFxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0yMTEzPXN0YXRpYyBpbnQgX19pbml0IHZtY2lfdHJhbnNwb3J0X2luaXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMjEyMS1cdFx0XHRcdFx0XHQgVk1DSV9GTEFHX0FOWUNJRF9ER19ITkQsXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MjEyMjpcdFx0XHRcdFx0XHQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2IsXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMjEyMy1cdFx0XHRcdFx0XHQgTlVMTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBWTUNJIFRyYW5zcG9ydCBSZWNlaXZlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhpcyBjYWxsYmFjayBpcyByZWdpc3RlcmVkIHdoZW4gYSBkYXRhZ3JhbSBoYW5kbGUgaXMgY3JlYXRlZCB3aXRoIGB2bWNpX2RhdGFncmFtX2NyZWF0ZV9oYW5kbGVfcHJpdmAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhIGRlZmluaXRlIGZvY3VzIHN5bWJvbCB0byBkaWcgaW50by4gTm93LCBJIG5lZWQgdG8gc2VlICpob3cqIHRoaXMgY2FsbGJhY2sgaXMgYWN0dWFsbHkgdXNlZC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGV4YW1pbmUgYHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB3aGVyZSB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCBvciBhdCBsZWFzdCBpbnRlZ3JhdGVkIGludG8gdGhlIHJlY2VpdmUgcHJvY2Vzc2luZyBmbG93LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTM0PXN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3BlZXJfZGV0YWNoX2NiKHUzMiBzdWJfaWQsXG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTM2LVx0XHRcdFx0XHQgIHZvaWQgKmNsaWVudF9kYXRhKTtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzozNzpzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMzgtc3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfY2xlYW51cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz02NzU9c3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpXG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTgwMy1cdFx0bWVtY3B5KFx1MDAyNnJlY3ZfcGt0X2luZm8tXHUwMDNlcGt0LCBwa3QsIHNpemVvZihyZWN2X3BrdF9pbmZvLVx1MDAzZXBrdCkpO1xubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjgwNDpcdFx0SU5JVF9XT1JLKFx1MDAyNnJlY3ZfcGt0X2luZm8tXHUwMDNld29yaywgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29yayk7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtODA1LVxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz05MDI9c3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcXBfcmVzdW1lZF9jYih1MzIgc3ViX2lkLFxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy05MDktXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6OTEwOnN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTkxMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MjgKCQkJCQkJCW91dHB1dDogMjMwCgkJCQkJCQl0aG91Z2h0czogNjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWc29jayBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AganVtcHMgb3V0IGFzIGEgZ29vZCBmb2NhbCBwb2ludC4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgdG91Y2hlZCBoZXJlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgIGFuZCBgdm1jaV90cmFuc3BvcnQuY2AsIHNvIGl0JiMzOTtzIGxpa2VseSBhIHRyYW5zcG9ydC1sZXZlbCBjb25jZXJuLgoKRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gSSBzZWUgYFZTT0NLRVRTYCwgYFZJUlRJT19WU09DS0VUU2AsIGFuZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgLiBXYWl0LCBhIG1vbWVudCEgYFZJUlRJT19WU09DS0VUU2AgZGVwZW5kcyBvbiBib3RoIGBWU09DS0VUU2AgKmFuZCogYFZJUlRJT2AsIGFuZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgIGFsc28gZGVwZW5kcyBvbiBgVlNPQ0tFVFNgIGFuZCBgVk1XQVJFX1ZNQ0lgLiBTbywgdGhlIGVuYWJsaW5nIGNvbmZpZ3MgSSBuZWVkIGFyZToKCiogICBgVlNPQ0tFVFNgCiogICBgVklSVElPX1ZTT0NLRVRTYAoqICAgYFZNV0FSRV9WTUNJX1ZTT0NLRVRTYAoqICAgYFZJUlRJT2AKKiAgIGBWTVdBUkVfVk1DSWAKCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgVklSVElPX1ZTT0NLRVRTX0NPTU1PTmAgaXMgbmVlZGVkLiBMb29rcyBsaWtlIGl0JiMzOTtzIHNlbGVjdGVkIGJ5IGBWSVJUSU9fVlNPQ0tFVFNgIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLCBzbyBubyBleHBsaWNpdCBhZGRpdGlvbiBpcyBuZWVkZWQuIFdoYXQgYWJvdXQgYFZTT0NLRVRTX0xPT1BCQUNLYD8gVGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgYHZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgLCB3aGljaCBpcyBhbHNvIHVzZWQgYnkgYFZTT0NLRVRTX0xPT1BCQUNLYC4gU28gdGhhdCYjMzk7cyBhIGRlZmluaXRlIGFkZC4KCk15IGN1cnJlbnQgbGlzdCBvZiBlbmFibGluZyBjb25maWdzIGlzIG5vdzoKCiogICBgVlNPQ0tFVFNgCiogICBgVklSVElPX1ZTT0NLRVRTYAoqICAgYFZNV0FSRV9WTUNJX1ZTT0NLRVRTYAoqICAgYFZTT0NLRVRTX0xPT1BCQUNLYAoqICAgYFZJUlRJT2AKKiAgIGBWTVdBUkVfVk1DSWAKCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scyBiYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG86CgoqICAgYHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RgCiogICBgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2JgCiogICBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AKClJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgcmVhc29uaW5nIGhvbGRzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgdnNvY2tfY2hlY2tfc291cmNlYCB3aGljaCB2YWxpZGF0ZXMgdGhlIHNvdXJjZS4gVGhpcyBhZmZlY3RzICphbGwqIG9mIHRoZSBmb2N1cyBzeW1ib2xzIGJlY2F1c2Ugb2YgcGFja2V0IHZhbGlkYXRpb24sIGFuZCB0aGUgc291cmNlIHBhY2tldCBjaGVjay4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZzb2NrIGxvZ2ljIHdoaWNoIHRvdWNoZXMgYm90aCB2aXJ0aW8gYW5kIHZtY2kgdHJhbnNwb3J0cy4gRGVmaW5pdGVseSBmdXp6ZXIgd29ydGh5LgoKT25lIGxhc3QgdGhpbmcsIGxldCBtZSBkb3VibGUtY2hlY2sgYFZNV0FSRV9WTUNJYCYjMzk7cyBkZXBlbmRlbmNpZXMuIEl0IGRlcGVuZHMgb24gYChYODYgfHwgQVJNNjQpICZhbXA7JmFtcDsgIUNQVV9CSUdfRU5ESUFOICZhbXA7JmFtcDsgUENJYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZXhwbGljaXRseSBhZGQgYFBDSWAuCgpNeSBmaW5hbCBjb25maWd1cmF0aW9uIGxpc3QgaXM6CgoqICAgYFZTT0NLRVRTYAoqICAgYFZJUlRJT19WU09DS0VUU2AKKiAgIGBWTVdBUkVfVk1DSV9WU09DS0VUU2AKKiAgIGBWU09DS0VUU19MT09QQkFDS2AKKiAgIGBWSVJUSU9gCiogICBgVk1XQVJFX1ZNQ0lgCiogICBgUENJYAoKQWxyaWdodCwgbGV0JiMzOTtzIGNhbGwgdGhhdCBnb29kLiBUaW1lIHRvIHNldCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VklSVElPX1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZNV0FSRV9WTUNJX1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDssCiAgICAmIzM0O1ZJUlRJTyYjMzQ7LAogICAgJiMzNDtWTVdBUkVfVk1DSSYjMzQ7LAogICAgJiMzNDtQQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0JiMzNDssCiAgICAmIzM0O3ZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiJiMzNDssCiAgICAmIzM0O3ZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgdnNvY2tfY2hlY2tfc291cmNlYCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIG9mIGluY29taW5nIHBhY2tldHMgYWdhaW5zdCB0aGUgc29ja2V0IHBlZXIuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AgdG8gZHJvcCBwYWNrZXRzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzb3VyY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2c29jayBsb2dpYyBhbmQgaXRzIHRyYW5zcG9ydHMgKHZpcnRpbyBhbmQgdm1jaSkgdGhhdCBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7Vk1XQVJFX1ZNQ0lfVlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFNfTE9PUEJBQ0smIzM0OywKICAgICYjMzQ7VklSVElPJiMzNDssCiAgICAmIzM0O1ZNV0FSRV9WTUNJJiMzNDssCiAgICAmIzM0O1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QmIzM0OywKICAgICYjMzQ7dm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2ImIzM0OywKICAgICYjMzQ7dm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGB2c29ja19jaGVja19zb3VyY2VgIHRvIHZhbGlkYXRlIHRoZSBzb3VyY2Ugb2YgaW5jb21pbmcgcGFja2V0cyBhZ2FpbnN0IHRoZSBzb2NrZXQgcGVlci4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCwgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYCB0byBkcm9wIHBhY2tldHMgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHNvdXJjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZzb2NrIGxvZ2ljIGFuZCBpdHMgdHJhbnNwb3J0cyAodmlydGlvIGFuZCB2bWNpKSB0aGF0IGFmZmVjdHMgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTg6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvZ2ljIGZpeCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIGFkZHJlc3Mgb2YgaW5jb21pbmcgdnNvY2sgcGFja2V0cyBhZ2FpbnN0IHRoZSBleHBlY3RlZCBwZWVyIGFkZHJlc3MgZm9yIGNvbm5lY3RlZCBzb2NrZXRzIChgdnNvY2tfY2hlY2tfc291cmNlYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGRhdGEgbGVha3MgdG8gdXNlcnNwYWNlLiBBbGwgc3RydWN0dXJlcyBpbnZvbHZlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgYW5kIHRoZSBjaGFuZ2VzIG1lcmVseSBhZGQgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIGV4aXN0aW5nIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSwgYW5kIHN0YW5kYXJkIHRlc3RpbmcvS0FTQU4gaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjgzOGRhNDkwZDY5Y2YzZjYwM2E5ZTM3Nzk0N2E0NmIwOWZhNjA5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE4OjE3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaCBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKaW5kZXggMzM1N2VlNjJkMTBiZi4uNTU0OTI5OGMxZWM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9hZl92c29jay5oCkBAIC0yMjksNiAmIzQzOzIyOSw5IEBAIHN0cnVjdCBzb2NrICp2c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLAogc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsCiAJCQkJCSAgICAgc3RydWN0IHNvY2thZGRyX3ZtICpkc3QsCiAJCQkJCSAgICAgc3RydWN0IG5ldCAqbmV0KTsKJiM0Mztib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAomIzQzOwkJCWNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKJiM0MzsJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyk7CiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spOwogdm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKIAkJCQkgICAgIHZvaWQgKCpmbikoc3RydWN0IHNvY2sgKnNrKSk7CmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKaW5kZXggYTMzYjJhMmQzODFkYy4uZjg0MDQ5OGI1OGFmYiAxMDA2NDQKLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwpAQCAtNDM4LDYgJiM0Mzs0MzgsMzggQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYywKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldCk7CiAKJiM0MzsvKioKJiM0MzsgKiB2c29ja19jaGVja19zb3VyY2UgLSB2YWxpZGF0ZSBhIHBhY2tldCBzb3VyY2UgYWdhaW5zdCBhIHNvY2tldCBwZWVyCiYjNDM7ICogQHZzazogc29ja2V0IHJlY2VpdmluZyB0aGUgcGFja2V0CiYjNDM7ICogQHRyYW5zcG9ydDogdHJhbnNwb3J0IHJlY2VpdmluZyB0aGUgcGFja2V0CiYjNDM7ICogQHNyYzogc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgcGFja2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBhY2tldCBhcnJpdmVkIG9uIHRoZSBzb2NrZXQmIzM5O3MgYXNzaWduZWQgdHJhbnNwb3J0IGFuZAomIzQzOyAqIGl0cyBzb3VyY2UgbWF0Y2hlcyB0aGUgc3RvcmVkIHBlZXIuIExvb3BiYWNrIHBhY2tldHMgYXJlIGdlbmVyYXRlZAomIzQzOyAqIGludGVybmFsbHkgYW5kIGFsd2F5cyB1c2UgdGhlIGxvY2FsIENJRCBhcyB0aGVpciBzb3VyY2UsIGluY2x1ZGluZwomIzQzOyAqIGNvbm5lY3Rpb25zIHVzaW5nIGEgdmFsaWQgQ0lEIGFsaWFzLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHNvY2tldCBsb2NrIGFuZCBtdXN0IG5vdCBjYWxsIHRoaXMgZm9yIGxpc3RlbmluZwomIzQzOyAqIHNvY2tldHMsIHdoaWNoIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHNvdXJjZSBhbmQgaGF2ZSBubyBhc3NpZ25lZAomIzQzOyAqIHRyYW5zcG9ydC4KJiM0MzsgKi8KJiM0Mztib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAomIzQzOwkJCWNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKJiM0MzsJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYykKJiM0Mzt7CiYjNDM7CWlmICh2c2stJmd0O3RyYW5zcG9ydCAhPSB0cmFuc3BvcnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzcmMtJmd0O3N2bV9wb3J0ICE9IHZzay0mZ3Q7cmVtb3RlX2FkZHIuc3ZtX3BvcnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzcmMtJmd0O3N2bV9jaWQgPT0gdnNrLSZndDtyZW1vdGVfYWRkci5zdm1fY2lkKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiB0cmFuc3BvcnQtJmd0O2dldF9sb2NhbF9jaWQoKSA9PSBWTUFERFJfQ0lEX0xPQ0FMOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jaGVja19zb3VyY2UpOwomIzQzOwogdm9pZCB2c29ja19yZW1vdmVfc29jayhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKQogewogCS8qIFRyYW5zcG9ydCByZWFzc2lnbm1lbnQgbXVzdCBub3QgcmVtb3ZlIHRoZSBiaW5kaW5nLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jCmluZGV4IGU0ZWJhYTcwZjZjMjMuLjYzMDFjMTA4YTRmMTAgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKQEAgLTE4MjMsNyAmIzQzOzE4MjMsOCBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsCiAJICogbG9ja19zb2NrIChub3RlOiBsaXN0ZW5lciBzb2NrZXRzIGFyZSBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydCkKIAkgKi8KIAlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8Ci0JICAgIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7IHZzay0mZ3Q7dHJhbnNwb3J0ICE9ICZhbXA7dC0mZ3Q7dHJhbnNwb3J0KSkgewomIzQzOwkgICAgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOICZhbXA7JmFtcDsKJiM0MzsJICAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzaywgJmFtcDt0LSZndDt0cmFuc3BvcnQsICZhbXA7c3JjKSkpIHsKIAkJKHZvaWQpdmlydGlvX3RyYW5zcG9ydF9yZXNldF9ub19zb2NrKHQsIHNrYiwgbmV0KTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJc29ja19wdXQoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jIGIvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jCmluZGV4IDFjNGVlMDM5YzE2NjIuLmI2MTJhOTg5Mzg1NmEgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMKQEAgLTY4MCwxMSAmIzQzOzY4MCwxMyBAQCBzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZykKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7CiAJc3RydWN0IHZzb2NrX3NvY2sgKnZzazsKIAlib29sIGJoX3Byb2Nlc3NfcGt0OwomIzQzOwlib29sIGRyb3BfcGt0OwogCWludCBlcnI7CiAKIAlzayA9IE5VTEw7CiAJZXJyID0gVk1DSV9TVUNDRVNTOwogCWJoX3Byb2Nlc3NfcGt0ID0gZmFsc2U7CiYjNDM7CWRyb3BfcGt0ID0gZmFsc2U7CiAKIAkvKiBJZ25vcmUgaW5jb21pbmcgcGFja2V0cyBmcm9tIHJlc291cmNlcyB0aGF0IGFyZW4mIzM5O3QgdnNvY2sKIAkgKiBpbXBsZW1lbnRhdGlvbnMuCkBAIC03NjUsMTcgJiM0Mzs3NjcsMjYgQEAgc3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpCiAJYmhfbG9ja19zb2NrKHNrKTsKIAogCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkgewotCQkvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUsIHVwZGF0ZSBpdC4gKi8KLQkJdnNrLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDsKJiM0MzsJCWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c2ssICZhbXA7dm1jaV90cmFuc3BvcnQsICZhbXA7c3JjKSkgewomIzQzOwkJCWRyb3BfcGt0ID0gdHJ1ZTsKJiM0MzsJCQllcnIgPSBWTUNJX0VSUk9SX05PX0FDQ0VTUzsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovCiYjNDM7CQkJdnNrLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDsKIAotCQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCkKLQkJCXZtY2lfdHJhbnModnNrKS0mZ3Q7bm90aWZ5X29wcy0mZ3Q7aGFuZGxlX25vdGlmeV9wa3QoCi0JCQkJCXNrLCBwa3QsIHRydWUsICZhbXA7ZHN0LCAmYW1wO3NyYywKLQkJCQkJJmFtcDtiaF9wcm9jZXNzX3BrdCk7CiYjNDM7CQkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpCiYjNDM7CQkJCXZtY2lfdHJhbnModnNrKS0mZ3Q7bm90aWZ5X29wcy0mZ3Q7aGFuZGxlX25vdGlmeV9wa3Qoc2ssIHBrdCwgdHJ1ZSwKJiM0MzsJCQkJCQkJCQkgICAgICAgJmFtcDtkc3QsICZhbXA7c3JjLAomIzQzOwkJCQkJCQkJCSAgICAgICAmYW1wO2JoX3Byb2Nlc3NfcGt0KTsKJiM0MzsJCX0KIAl9CiAKIAliaF91bmxvY2tfc29jayhzayk7CiAKJiM0MzsJaWYgKGRyb3BfcGt0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaWYgKCFiaF9wcm9jZXNzX3BrdCkgewogCQlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbzsKIApAQCAtOTAwLDYgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbzsKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl92bSBzcmM7CiAJc3RydWN0IHNvY2sgKnNrOwogCiAJcmVjdl9wa3RfaW5mbyA9CkBAIC05MDgsNiAmIzQzOzkyMCwxMCBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlwa3QgPSAmYW1wO3JlY3ZfcGt0X2luZm8tJmd0O3BrdDsKIAogCWxvY2tfc29jayhzayk7CiYjNDM7CXZzb2NrX2FkZHJfaW5pdCgmYW1wO3NyYywgcGt0LSZndDtkZy5zcmMuY29udGV4dCwgcGt0LSZndDtzcmNfcG9ydCk7CiYjNDM7CWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CSAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzb2NrX3NrKHNrKSwgJmFtcDt2bWNpX3RyYW5zcG9ydCwgJmFtcDtzcmMpKQomIzQzOwkJZ290byBvdXQ7CiAKIAkvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUuICovCiAJdnNvY2tfc2soc2spLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBwa3QtJmd0O2RnLmRzdC5jb250ZXh0OwpAQCAtOTM3LDYgJiM0Mzs5NTMsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJYnJlYWs7CiAJfQogCiYjNDM7b3V0OgogCXJlbGVhc2Vfc29jayhzayk7CiAJa2ZyZWUocmVjdl9wa3RfaW5mbyk7CiAJLyogUmVsZWFzZSByZWZlcmVuY2Ugb2J0YWluZWQgaW4gdGhlIHN0cmVhbSBjYWxsYmFjayB3aGVuIHdlIGZldGNoZWQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTkKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogNTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiB2c29ja19jaGVja19zb3VyY2UgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0IGludHJvZHVjZXMgdGhpcyBuZXcgYHZzb2NrX2NoZWNrX3NvdXJjZWAgZnVuY3Rpb24sIHdoaWNoIGlzIGVzc2VudGlhbGx5IGEgc2FuaXR5IGNoZWNrIGZvciBpbmNvbWluZyBwYWNrZXRzIG9uIGNvbm5lY3RlZCB2c29jayBzb2NrZXRzLiBJdCB2YWxpZGF0ZXMgdGhlIHNvdXJjZSAoQ0lEIGFuZCBwb3J0KSBhZ2FpbnN0IHdoYXQgdGhlIHNvY2tldCBleHBlY3RzLiBUaGUgaW50ZW50aW9uIGlzIGNsZWFybHkgdG8gcHJldmVudCBwYWNrZXRzIGZyb20gdW5leHBlY3RlZCBzb3VyY2VzLCB3aGljaCBsaWtlbHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHNwb29maW5nIG9yIHJvdXRpbmcgaXNzdWUgaW4gdGhlIHZzb2NrIGNvbm5lY3Rpb24gbG9naWMuCgpJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBpbnZvbHZlIGludGVncmF0aW5nIHRoaXMgY2hlY2sgd2l0aGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCwgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYC4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCB0aGUgY2hlY2sgaXRzZWxmIGlzIHNpbXBsZTogY29tcGFyaW5nIHRoZSBzb3VyY2UgQ0lEIGFuZCBwb3J0IGZyb20gdGhlIHBhY2tldCBhZ2FpbnN0IHRoZSBleHBlY3RlZCB2YWx1ZXMgZm9yIHRoZSBzb2NrZXQmIzM5O3MgcmVtb3RlIGFkZHJlc3MuIEl0JiMzOTtzIHJlYWxseSBqdXN0IGEgbG9naWMgYnVnIGZpeDsgdGhlIGtpbmQgdGhhdCYjMzk7cyBlYXN5IHRvIG1pc3MgaW4gcmV2aWV3LgoKVGhlIGNvZGUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBvciBhbnl0aGluZyBwYXJ0aWN1bGFybHkgbm92ZWwsIHdoaWNoIGlzIGdvb2QuIFRoZSBrZXkgdGhpbmcgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGBzcmNgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY2hlY2suIEkgd2FzIHJpZ2h0IHRvIHJldmlldyB0aGlzLiBJbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAgYHNyY2AgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSwgYnV0IEkgbmVlZCB0byBlbnN1cmUgaXQgaXMgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gY2FsbGluZyB0aGUgY2hlY2suIEluIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYCwgYHNyY2AgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYHZzb2NrX2FkZHJfaW5pdGAsIHdoaWNoIGxvb2tzIGNvcnJlY3QuCgpTaW5jZSB0aGlzIGlzIHB1cmVseSBhIGxvZ2ljIGNoZWNrIGludm9sdmluZyBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGFuZCBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRlIGFueSBtZW1vcnkgY29ycnVwdGlvbiByaXNrLCBJIGRvbiYjMzk7dCBzZWUgYW55IG5lZWQgZm9yIEtNU0FOLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LiBUaGVyZWZvcmUsIEkmIzM5O2xsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2dpYyBmaXggdG8gdmFsaWRhdGUgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIGluY29taW5nIHZzb2NrIHBhY2tldHMgYWdhaW5zdCB0aGUgZXhwZWN0ZWQgcGVlciBhZGRyZXNzIGZvciBjb25uZWN0ZWQgc29ja2V0cyAoYHZzb2NrX2NoZWNrX3NvdXJjZWApLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBkYXRhIGxlYWtzIHRvIHVzZXJzcGFjZS4gQWxsIHN0cnVjdHVyZXMgaW52b2x2ZWQgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgY2hhbmdlcyBtZXJlbHkgYWRkIGNvbmRpdGlvbmFsIGNoZWNrcyBiYXNlZCBvbiBleGlzdGluZyBmaWVsZHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUsIGFuZCBzdGFuZGFyZCB0ZXN0aW5nL0tBU0FOIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9naWMgZml4IHRvIHZhbGlkYXRlIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBpbmNvbWluZyB2c29jayBwYWNrZXRzIGFnYWluc3QgdGhlIGV4cGVjdGVkIHBlZXIgYWRkcmVzcyBmb3IgY29ubmVjdGVkIHNvY2tldHMgKGB2c29ja19jaGVja19zb3VyY2VgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgZGF0YSBsZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBhbmQgdGhlIGNoYW5nZXMgbWVyZWx5IGFkZCBjb25kaXRpb25hbCBjaGVja3MgYmFzZWQgb24gZXhpc3RpbmcgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxODoxNzo0Ny43NjI1NzE1MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzQ4NzY4OTgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCIsXG4gICAgXCJWTVdBUkVfVk1DSV9WU09DS0VUU1wiLFxuICAgIFwiVlNPQ0tFVFNfTE9PUEJBQ0tcIixcbiAgICBcIlZJUlRJT1wiLFxuICAgIFwiVk1XQVJFX1ZNQ0lcIixcbiAgICBcIlBDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIixcbiAgICBcInZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiXCIsXG4gICAgXCJ2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9naWMgZml4IHRvIHZhbGlkYXRlIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBpbmNvbWluZyB2c29jayBwYWNrZXRzIGFnYWluc3QgdGhlIGV4cGVjdGVkIHBlZXIgYWRkcmVzcyBmb3IgY29ubmVjdGVkIHNvY2tldHMgKGB2c29ja19jaGVja19zb3VyY2VgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgZGF0YSBsZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBhbmQgdGhlIGNoYW5nZXMgbWVyZWx5IGFkZCBjb25kaXRpb25hbCBjaGVja3MgYmFzZWQgb24gZXhpc3RpbmcgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHZzb2NrX2NoZWNrX3NvdXJjZWAgdG8gdmFsaWRhdGUgdGhlIHNvdXJjZSBvZiBpbmNvbWluZyBwYWNrZXRzIGFnYWluc3QgdGhlIHNvY2tldCBwZWVyLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gYHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RgLCBgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2JgLCBhbmQgYHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtgIHRvIGRyb3AgcGFja2V0cyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgc291cmNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdnNvY2sgbG9naWMgYW5kIGl0cyB0cmFuc3BvcnRzICh2aXJ0aW8gYW5kIHZtY2kpIHRoYXQgYWZmZWN0cyBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTc6NDcuNzYyNTc5MDg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA1MDM4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODM4ZGE0OTBkNjljZjNmNjAzYTllMzc3OTQ3YTQ2YjA5ZmE2MDlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIzIDE4OjE3OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oXFxuaW5kZXggMzM1N2VlNjJkMTBiZi4uNTU0OTI5OGMxZWM2YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9hZl92c29jay5oXFxuKysrIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxcbkBAIC0yMjksNiArMjI5LDkgQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfYm91bmRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsXFxuIHN0cnVjdCBzb2NrICp2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrYWRkcl92bSAqZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXQgKm5ldCk7XFxuK2Jvb2wgdnNvY2tfY2hlY2tfc291cmNlKGNvbnN0IHN0cnVjdCB2c29ja19zb2NrICp2c2ssXFxuK1xcdFxcdFxcdGNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcXG4rXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICpzcmMpO1xcbiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spO1xcbiB2b2lkIHZzb2NrX2Zvcl9lYWNoX2Nvbm5lY3RlZF9zb2NrZXQoc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxcbiBcXHRcXHRcXHRcXHQgICAgIHZvaWQgKCpmbikoc3RydWN0IHNvY2sgKnNrKSk7XFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xcbmluZGV4IGEzM2IyYTJkMzgxZGMuLmY4NDA0OThiNThhZmIgMTAwNjQ0XFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuQEAgLTQzOCw2ICs0MzgsMzggQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXQpO1xcbiBcXG4rLyoqXFxuKyAqIHZzb2NrX2NoZWNrX3NvdXJjZSAtIHZhbGlkYXRlIGEgcGFja2V0IHNvdXJjZSBhZ2FpbnN0IGEgc29ja2V0IHBlZXJcXG4rICogQHZzazogc29ja2V0IHJlY2VpdmluZyB0aGUgcGFja2V0XFxuKyAqIEB0cmFuc3BvcnQ6IHRyYW5zcG9ydCByZWNlaXZpbmcgdGhlIHBhY2tldFxcbisgKiBAc3JjOiBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBwYWNrZXRcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWNrZXQgYXJyaXZlZCBvbiB0aGUgc29ja2V0J3MgYXNzaWduZWQgdHJhbnNwb3J0IGFuZFxcbisgKiBpdHMgc291cmNlIG1hdGNoZXMgdGhlIHN0b3JlZCBwZWVyLiBMb29wYmFjayBwYWNrZXRzIGFyZSBnZW5lcmF0ZWRcXG4rICogaW50ZXJuYWxseSBhbmQgYWx3YXlzIHVzZSB0aGUgbG9jYWwgQ0lEIGFzIHRoZWlyIHNvdXJjZSwgaW5jbHVkaW5nXFxuKyAqIGNvbm5lY3Rpb25zIHVzaW5nIGEgdmFsaWQgQ0lEIGFsaWFzLlxcbisgKlxcbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgc29ja2V0IGxvY2sgYW5kIG11c3Qgbm90IGNhbGwgdGhpcyBmb3IgbGlzdGVuaW5nXFxuKyAqIHNvY2tldHMsIHdoaWNoIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHNvdXJjZSBhbmQgaGF2ZSBubyBhc3NpZ25lZFxcbisgKiB0cmFuc3BvcnQuXFxuKyAqL1xcbitib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbitcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXFxuK1xcdFxcdFxcdGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjKVxcbit7XFxuK1xcdGlmICh2c2stXFx1MDAzZXRyYW5zcG9ydCAhPSB0cmFuc3BvcnQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChzcmMtXFx1MDAzZXN2bV9wb3J0ICE9IHZzay1cXHUwMDNlcmVtb3RlX2FkZHIuc3ZtX3BvcnQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChzcmMtXFx1MDAzZXN2bV9jaWQgPT0gdnNrLVxcdTAwM2VyZW1vdGVfYWRkci5zdm1fY2lkKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiB0cmFuc3BvcnQtXFx1MDAzZWdldF9sb2NhbF9jaWQoKSA9PSBWTUFERFJfQ0lEX0xPQ0FMO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2NoZWNrX3NvdXJjZSk7XFxuK1xcbiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxuIHtcXG4gXFx0LyogVHJhbnNwb3J0IHJlYXNzaWdubWVudCBtdXN0IG5vdCByZW1vdmUgdGhlIGJpbmRpbmcuICovXFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xcbmluZGV4IGU0ZWJhYTcwZjZjMjMuLjYzMDFjMTA4YTRmMTAgMTAwNjQ0XFxuLS0tIGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXFxuKysrIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXFxuQEAgLTE4MjMsNyArMTgyMyw4IEBAIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcXG4gXFx0ICogbG9ja19zb2NrIChub3RlOiBsaXN0ZW5lciBzb2NrZXRzIGFyZSBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydClcXG4gXFx0ICovXFxuIFxcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHxcXG4tXFx0ICAgIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNiB2c2stXFx1MDAzZXRyYW5zcG9ydCAhPSBcXHUwMDI2dC1cXHUwMDNldHJhbnNwb3J0KSkge1xcbitcXHQgICAgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c2ssIFxcdTAwMjZ0LVxcdTAwM2V0cmFuc3BvcnQsIFxcdTAwMjZzcmMpKSkge1xcbiBcXHRcXHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xcbiBcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiBcXHRcXHRzb2NrX3B1dChzayk7XFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYyBiL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuY1xcbmluZGV4IDFjNGVlMDM5YzE2NjIuLmI2MTJhOTg5Mzg1NmEgMTAwNjQ0XFxuLS0tIGEvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jXFxuKysrIGIvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jXFxuQEAgLTY4MCwxMSArNjgwLDEzIEBAIHN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxcbiBcXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7XFxuIFxcdHN0cnVjdCB2c29ja19zb2NrICp2c2s7XFxuIFxcdGJvb2wgYmhfcHJvY2Vzc19wa3Q7XFxuK1xcdGJvb2wgZHJvcF9wa3Q7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRzayA9IE5VTEw7XFxuIFxcdGVyciA9IFZNQ0lfU1VDQ0VTUztcXG4gXFx0YmhfcHJvY2Vzc19wa3QgPSBmYWxzZTtcXG4rXFx0ZHJvcF9wa3QgPSBmYWxzZTtcXG4gXFxuIFxcdC8qIElnbm9yZSBpbmNvbWluZyBwYWNrZXRzIGZyb20gcmVzb3VyY2VzIHRoYXQgYXJlbid0IHZzb2NrXFxuIFxcdCAqIGltcGxlbWVudGF0aW9ucy5cXG5AQCAtNzY1LDE3ICs3NjcsMjYgQEAgc3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpXFxuIFxcdGJoX2xvY2tfc29jayhzayk7XFxuIFxcbiBcXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHtcXG4tXFx0XFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXFxuLVxcdFxcdHZzay1cXHUwMDNlbG9jYWxfYWRkci5zdm1fY2lkID0gZHN0LnN2bV9jaWQ7XFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c2ssIFxcdTAwMjZ2bWNpX3RyYW5zcG9ydCwgXFx1MDAyNnNyYykpIHtcXG4rXFx0XFx0XFx0ZHJvcF9wa3QgPSB0cnVlO1xcbitcXHRcXHRcXHRlcnIgPSBWTUNJX0VSUk9SX05PX0FDQ0VTUztcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXFxuK1xcdFxcdFxcdHZzay1cXHUwMDNlbG9jYWxfYWRkci5zdm1fY2lkID0gZHN0LnN2bV9jaWQ7XFxuIFxcbi1cXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcXG4tXFx0XFx0XFx0dm1jaV90cmFucyh2c2spLVxcdTAwM2Vub3RpZnlfb3BzLVxcdTAwM2VoYW5kbGVfbm90aWZ5X3BrdChcXG4tXFx0XFx0XFx0XFx0XFx0c2ssIHBrdCwgdHJ1ZSwgXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmJoX3Byb2Nlc3NfcGt0KTtcXG4rXFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpXFxuK1xcdFxcdFxcdFxcdHZtY2lfdHJhbnModnNrKS1cXHUwMDNlbm90aWZ5X29wcy1cXHUwMDNlaGFuZGxlX25vdGlmeV9wa3Qoc2ssIHBrdCwgdHJ1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZkc3QsIFxcdTAwMjZzcmMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YmhfcHJvY2Vzc19wa3QpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4gXFxuK1xcdGlmIChkcm9wX3BrdClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRpZiAoIWJoX3Byb2Nlc3NfcGt0KSB7XFxuIFxcdFxcdHN0cnVjdCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF9pbmZvICpyZWN2X3BrdF9pbmZvO1xcbiBcXG5AQCAtOTAwLDYgKzkxMSw3IEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF9pbmZvICpyZWN2X3BrdF9pbmZvO1xcbiBcXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl92bSBzcmM7XFxuIFxcdHN0cnVjdCBzb2NrICpzaztcXG4gXFxuIFxcdHJlY3ZfcGt0X2luZm8gPVxcbkBAIC05MDgsNiArOTIwLDEwIEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRwa3QgPSBcXHUwMDI2cmVjdl9wa3RfaW5mby1cXHUwMDNlcGt0O1xcbiBcXG4gXFx0bG9ja19zb2NrKHNrKTtcXG4rXFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZzcmMsIHBrdC1cXHUwMDNlZGcuc3JjLmNvbnRleHQsIHBrdC1cXHUwMDNlc3JjX3BvcnQpO1xcbitcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICF2c29ja19jaGVja19zb3VyY2UodnNvY2tfc2soc2spLCBcXHUwMDI2dm1jaV90cmFuc3BvcnQsIFxcdTAwMjZzcmMpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qIFRoZSBsb2NhbCBjb250ZXh0IElEIG1heSBiZSBvdXQgb2YgZGF0ZS4gKi9cXG4gXFx0dnNvY2tfc2soc2spLVxcdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBwa3QtXFx1MDAzZWRnLmRzdC5jb250ZXh0O1xcbkBAIC05MzcsNiArOTUzLDcgQEAgc3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbitvdXQ6XFxuIFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcdGtmcmVlKHJlY3ZfcGt0X2luZm8pO1xcbiBcXHQvKiBSZWxlYXNlIHJlZmVyZW5jZSBvYnRhaW5lZCBpbiB0aGUgc3RyZWFtIGNhbGxiYWNrIHdoZW4gd2UgZmV0Y2hlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxODoxNzo0OC4yMjM5NDg2MzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1Mzk4NDQwNjAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCIsXG4gICAgXCJWTVdBUkVfVk1DSV9WU09DS0VUU1wiLFxuICAgIFwiVlNPQ0tFVFNfTE9PUEJBQ0tcIixcbiAgICBcIlZJUlRJT1wiLFxuICAgIFwiVk1XQVJFX1ZNQ0lcIixcbiAgICBcIlBDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIixcbiAgICBcInZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiXCIsXG4gICAgXCJ2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgdnNvY2tfY2hlY2tfc291cmNlYCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIG9mIGluY29taW5nIHBhY2tldHMgYWdhaW5zdCB0aGUgc29ja2V0IHBlZXIuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AgdG8gZHJvcCBwYWNrZXRzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzb3VyY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2c29jayBsb2dpYyBhbmQgaXRzIHRyYW5zcG9ydHMgKHZpcnRpbyBhbmQgdm1jaSkgdGhhdCBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmODM4ZGE0OTBkNjljZjNmNjAzYTllMzc3OTQ3YTQ2YjA5ZmE2MDlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMTg6MTc6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuaW5kZXggMzM1N2VlNjJkMTBiZi4uNTU0OTI5OGMxZWM2YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbkBAIC0yMjksNiArMjI5LDkgQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfYm91bmRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsXG4gc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHNvY2thZGRyX3ZtICpkc3QsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldCAqbmV0KTtcbitib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxuK1x0XHRcdGNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcbitcdFx0XHRjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyk7XG4gdm9pZCB2c29ja19yZW1vdmVfc29jayhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKTtcbiB2b2lkIHZzb2NrX2Zvcl9lYWNoX2Nvbm5lY3RlZF9zb2NrZXQoc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuIFx0XHRcdFx0ICAgICB2b2lkICgqZm4pKHN0cnVjdCBzb2NrICpzaykpO1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuaW5kZXggYTMzYjJhMmQzODFkYy4uZjg0MDQ5OGI1OGFmYiAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5AQCAtNDM4LDYgKzQzOCwzOCBAQCBzdHJ1Y3Qgc29jayAqdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXQpO1xuIFxuKy8qKlxuKyAqIHZzb2NrX2NoZWNrX3NvdXJjZSAtIHZhbGlkYXRlIGEgcGFja2V0IHNvdXJjZSBhZ2FpbnN0IGEgc29ja2V0IHBlZXJcbisgKiBAdnNrOiBzb2NrZXQgcmVjZWl2aW5nIHRoZSBwYWNrZXRcbisgKiBAdHJhbnNwb3J0OiB0cmFuc3BvcnQgcmVjZWl2aW5nIHRoZSBwYWNrZXRcbisgKiBAc3JjOiBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBwYWNrZXRcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFja2V0IGFycml2ZWQgb24gdGhlIHNvY2tldCdzIGFzc2lnbmVkIHRyYW5zcG9ydCBhbmRcbisgKiBpdHMgc291cmNlIG1hdGNoZXMgdGhlIHN0b3JlZCBwZWVyLiBMb29wYmFjayBwYWNrZXRzIGFyZSBnZW5lcmF0ZWRcbisgKiBpbnRlcm5hbGx5IGFuZCBhbHdheXMgdXNlIHRoZSBsb2NhbCBDSUQgYXMgdGhlaXIgc291cmNlLCBpbmNsdWRpbmdcbisgKiBjb25uZWN0aW9ucyB1c2luZyBhIHZhbGlkIENJRCBhbGlhcy5cbisgKlxuKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBzb2NrZXQgbG9jayBhbmQgbXVzdCBub3QgY2FsbCB0aGlzIGZvciBsaXN0ZW5pbmdcbisgKiBzb2NrZXRzLCB3aGljaCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBzb3VyY2UgYW5kIGhhdmUgbm8gYXNzaWduZWRcbisgKiB0cmFuc3BvcnQuXG4rICovXG4rYm9vbCB2c29ja19jaGVja19zb3VyY2UoY29uc3Qgc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbitcdFx0XHRjb25zdCBzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXG4rXHRcdFx0Y29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICpzcmMpXG4re1xuK1x0aWYgKHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gdHJhbnNwb3J0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoc3JjLVx1MDAzZXN2bV9wb3J0ICE9IHZzay1cdTAwM2VyZW1vdGVfYWRkci5zdm1fcG9ydClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHNyYy1cdTAwM2Vzdm1fY2lkID09IHZzay1cdTAwM2VyZW1vdGVfYWRkci5zdm1fY2lkKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiB0cmFuc3BvcnQtXHUwMDNlZ2V0X2xvY2FsX2NpZCgpID09IFZNQUREUl9DSURfTE9DQUw7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2NoZWNrX3NvdXJjZSk7XG4rXG4gdm9pZCB2c29ja19yZW1vdmVfc29jayhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxuIHtcbiBcdC8qIFRyYW5zcG9ydCByZWFzc2lnbm1lbnQgbXVzdCBub3QgcmVtb3ZlIHRoZSBiaW5kaW5nLiAqL1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuaW5kZXggZTRlYmFhNzBmNmMyMy4uNjMwMWMxMDhhNGYxMCAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuKysrIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXG5AQCAtMTgyMyw3ICsxODIzLDggQEAgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LFxuIFx0ICogbG9ja19zb2NrIChub3RlOiBsaXN0ZW5lciBzb2NrZXRzIGFyZSBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydClcbiBcdCAqL1xuIFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSB8fFxuLVx0ICAgIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNiB2c2stXHUwMDNldHJhbnNwb3J0ICE9IFx1MDAyNnQtXHUwMDNldHJhbnNwb3J0KSkge1xuK1x0ICAgIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzaywgXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQsIFx1MDAyNnNyYykpKSB7XG4gXHRcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdHNvY2tfcHV0KHNrKTtcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMgYi9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmNcbmluZGV4IDFjNGVlMDM5YzE2NjIuLmI2MTJhOTg5Mzg1NmEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmNcbisrKyBiL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuY1xuQEAgLTY4MCwxMSArNjgwLDEzIEBAIHN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxuIFx0c3RydWN0IHZtY2lfdHJhbnNwb3J0X3BhY2tldCAqcGt0O1xuIFx0c3RydWN0IHZzb2NrX3NvY2sgKnZzaztcbiBcdGJvb2wgYmhfcHJvY2Vzc19wa3Q7XG4rXHRib29sIGRyb3BfcGt0O1xuIFx0aW50IGVycjtcbiBcbiBcdHNrID0gTlVMTDtcbiBcdGVyciA9IFZNQ0lfU1VDQ0VTUztcbiBcdGJoX3Byb2Nlc3NfcGt0ID0gZmFsc2U7XG4rXHRkcm9wX3BrdCA9IGZhbHNlO1xuIFxuIFx0LyogSWdub3JlIGluY29taW5nIHBhY2tldHMgZnJvbSByZXNvdXJjZXMgdGhhdCBhcmVuJ3QgdnNvY2tcbiBcdCAqIGltcGxlbWVudGF0aW9ucy5cbkBAIC03NjUsMTcgKzc2NywyNiBAQCBzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZylcbiBcdGJoX2xvY2tfc29jayhzayk7XG4gXG4gXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHtcbi1cdFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXG4tXHRcdHZzay1cdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDtcbitcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzaywgXHUwMDI2dm1jaV90cmFuc3BvcnQsIFx1MDAyNnNyYykpIHtcbitcdFx0XHRkcm9wX3BrdCA9IHRydWU7XG4rXHRcdFx0ZXJyID0gVk1DSV9FUlJPUl9OT19BQ0NFU1M7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXG4rXHRcdFx0dnNrLVx1MDAzZWxvY2FsX2FkZHIuc3ZtX2NpZCA9IGRzdC5zdm1fY2lkO1xuIFxuLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEKVxuLVx0XHRcdHZtY2lfdHJhbnModnNrKS1cdTAwM2Vub3RpZnlfb3BzLVx1MDAzZWhhbmRsZV9ub3RpZnlfcGt0KFxuLVx0XHRcdFx0XHRzaywgcGt0LCB0cnVlLCBcdTAwMjZkc3QsIFx1MDAyNnNyYyxcbi1cdFx0XHRcdFx0XHUwMDI2YmhfcHJvY2Vzc19wa3QpO1xuK1x0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpXG4rXHRcdFx0XHR2bWNpX3RyYW5zKHZzayktXHUwMDNlbm90aWZ5X29wcy1cdTAwM2VoYW5kbGVfbm90aWZ5X3BrdChzaywgcGt0LCB0cnVlLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZkc3QsIFx1MDAyNnNyYyxcbitcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2YmhfcHJvY2Vzc19wa3QpO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRiaF91bmxvY2tfc29jayhzayk7XG4gXG4rXHRpZiAoZHJvcF9wa3QpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aWYgKCFiaF9wcm9jZXNzX3BrdCkge1xuIFx0XHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbztcbiBcbkBAIC05MDAsNiArOTExLDcgQEAgc3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X2luZm8gKnJlY3ZfcGt0X2luZm87XG4gXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfdm0gc3JjO1xuIFx0c3RydWN0IHNvY2sgKnNrO1xuIFxuIFx0cmVjdl9wa3RfaW5mbyA9XG5AQCAtOTA4LDYgKzkyMCwxMCBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHBrdCA9IFx1MDAyNnJlY3ZfcGt0X2luZm8tXHUwMDNlcGt0O1xuIFxuIFx0bG9ja19zb2NrKHNrKTtcbitcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZzcmMsIHBrdC1cdTAwM2VkZy5zcmMuY29udGV4dCwgcGt0LVx1MDAzZXNyY19wb3J0KTtcbitcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF2c29ja19jaGVja19zb3VyY2UodnNvY2tfc2soc2spLCBcdTAwMjZ2bWNpX3RyYW5zcG9ydCwgXHUwMDI2c3JjKSlcbitcdFx0Z290byBvdXQ7XG4gXG4gXHQvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUuICovXG4gXHR2c29ja19zayhzayktXHUwMDNlbG9jYWxfYWRkci5zdm1fY2lkID0gcGt0LVx1MDAzZWRnLmRzdC5jb250ZXh0O1xuQEAgLTkzNyw2ICs5NTMsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4rb3V0OlxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdGtmcmVlKHJlY3ZfcGt0X2luZm8pO1xuIFx0LyogUmVsZWFzZSByZWZlcmVuY2Ugb2J0YWluZWQgaW4gdGhlIHN0cmVhbSBjYWxsYmFjayB3aGVuIHdlIGZldGNoZWRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE3OjQ4LjIyMzk1MDM4NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODM4MDgwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgdnNvY2sgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQuIEZyb20gYSBjdXJzb3J5IGdsYW5jZSwgaXQgbG9va3MgbGlrZSBpdCBkb2VzLiBUaGUga2V5IGlzIHRoaXMgbmV3IGB2c29ja19jaGVja19zb3VyY2VgIGZ1bmN0aW9uIGJlaW5nIGFkZGVkIHRvIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLiBUaGUgZmFjdCB0aGF0IGl0J3MgYmVpbmcgdXNlZCBpbiBib3RoIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYCBhbmQgcG90ZW50aWFsbHkgYHZtY2lfdHJhbnNwb3J0LmNgIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgdnNvY2sgbG9naWMuIEl0IHNlZW1zIHRvIGJlIGltcGxlbWVudGluZyBzb3VyY2UgdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgcGFja2V0cywgd2hpY2ggbWVhbnMgaG93IHBhY2tldHMgYXJlIGFjY2VwdGVkIG9yIGRyb3BwZWQgaXMgbm93IGRpZmZlcmVudCwgYW5kIHRoYXQncyBhIGNsZWFyIHRyaWdnZXIgZm9yIGZ1enppbmcuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIGNoYW5nZS5cblxuTm93LCBsZXQncyBzZWUgYWJvdXQgbWFraW5nIHRoaXMgZnV6emFibGUuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBpbXBvcnRhbnQgc3ltYm9scyB0byBmb2N1cyBvbi4gSSdtIHNlZWluZyBgQ09ORklHX1ZTT0NLRVRTYCwgYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNgLCBhbmQgYENPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUU2AgYXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMuIE1ha2VzIHNlbnNlLiBUaGVuIHRoZXJlIGFyZSB0aGUgc3ltYm9scyB0byBsb29rIGF0LiBgdnNvY2tfY2hlY2tfc291cmNlYCBpcyBkZWZpbml0ZWx5IGEga2V5IG5ldyBmdW5jdGlvbiwgZXZlbiBpZiBpdCdzIGEgaGVscGVyIGFuZCBub3QgdGhlIGlkZWFsIGVudHJ5IHBvaW50LiBJdCdzIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLiBJIG5lZWQgdG8gbG9vayBhdCBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYCBhcyBvdGhlciBwb3NzaWJsZSBlbnRyeSBwb2ludHMuXG5cbkknbGwgZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciB2c29jayBjb25maWd1cmF0aW9ucyB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYnV0IHNvIGZhciwgdGhpcyBpcyBsb29raW5nIGxpa2UgYSBoaWdoLXByaW9yaXR5IGZ1enppbmcgdGFyZ2V0IGR1ZSB0byB0aGUgc291cmNlIHZhbGlkYXRpb24gY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE3OjU0LjEwNzc2MjAxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODgyNDczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVElPX1ZTT0NLRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svS2NvbmZpZz00MT1jb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy01Mi1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTM6Y29uZmlnIFZJUlRJT19WU09DS0VUU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwidmlydGlvIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTY1LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2Njpjb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy02Ny1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxODoxNzo1NC4xNzY1OTQ3NzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTU2ODQxNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGdyYW51bGFyLiBCZWZvcmUgSSBldmVuICp0aGluayogYWJvdXQgZGVwbG95aW5nIHRoZXNlIGNvbmZpZ3MsIEkgbmVlZCB0byBwZXJmb3JtIGEgdGhvcm91Z2ggY2hlY2sgb2YgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBhbG1vc3Qgc2Vjb25kIG5hdHVyZSB0byBtZTsgZW5zdXJpbmcgY29tcGF0aWJpbGl0eSBhbmQgYXZvaWRpbmcgZG93bnN0cmVhbSBmYWlsdXJlcyBpcyBwYXJhbW91bnQuIEknbSBlc3NlbnRpYWxseSBydW5uaW5nIGEgbWVudGFsIGNoZWNrbGlzdCwgYnV0IGl0J3MgYSBjcml0aWNhbCBvbmUuIFdoYXQgb3RoZXIgc3lzdGVtcyBvciBzZXJ2aWNlcyBhcmUgdGhlc2UgY29uZmlncyB0b3VjaGluZz8gQXJlIHRob3NlIGNvbXBvbmVudHMgdXAtdG8tZGF0ZT8gQXJlIHRoZSBBUEkgdmVyc2lvbnMgY29tcGF0aWJsZT8gSGF2ZSBJIGFjY291bnRlZCBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgYnJlYWtpbmcgY2hhbmdlcz8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSBtYXAgb3V0IHRoZSBcIndobyB0YWxrcyB0byB3aG9tXCIgcmVsYXRpb25zaGlwcyBhbmQgYXNzZXNzIHRoZSByaXBwbGUgZWZmZWN0cyBvZiBhbnkgbW9kaWZpY2F0aW9ucy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGF2b2lkaW5nIGEgc2VydmljZSBvdXRhZ2UsIGl0J3MgYWJvdXQgbWluaW1pemluZyB0aGUgcmlzayBvZiBzdWJ0bGUsIGhhcmQtdG8tZGlhZ25vc2UgZXJyb3JzIHRoYXQgY291bGQgZGVncmFkZSBwZXJmb3JtYW5jZSBvciwgd29yc2UsIGNvbXByb21pc2UgZGF0YSBpbnRlZ3JpdHkgZG93biB0aGUgbGluZS4gQSBwcm9hY3RpdmUgZGVwZW5kZW5jeSBhdWRpdCBub3cgc2F2ZXMgbWUgYSB3b3JsZCBvZiBoZWFkYWNoZSBsYXRlci4gVGltZSB0byBkaWcgaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjAwLjczMzQzODcyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFZzb2NrIHByb3RvY29sXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBWU09DS0VUU1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0IHByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBWaXJ0dWFsIFNvY2tldCBQcm90b2NvbCBpcyBhIHNvY2tldCBwcm90b2NvbCBzaW1pbGFyIHRvIFRDUC9JUFxcbiAgMTA6XFx0XFx0ICBhbGxvd2luZyBjb21tdW5pY2F0aW9uIGJldHdlZW4gVmlydHVhbCBNYWNoaW5lcyBhbmQgaHlwZXJ2aXNvclxcbiAgMTE6XFx0XFx0ICBvciBob3N0LlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFlvdSBzaG91bGQgYWxzbyBzZWxlY3Qgb25lIG9yIG1vcmUgaHlwZXJ2aXNvci1zcGVjaWZpYyB0cmFuc3BvcnRzXFxuICAxNDpcXHRcXHQgIGJlbG93LlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDE3OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdnNvY2suIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBWU09DS0VUU19ESUFHXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xcbiAgMjI6XFx0XFx0ZGVmYXVsdCB5XFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1ZTT0NLIHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cXG4gIDI1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgc28gdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBjYW4gcXVlcnkgb3BlbiBzb2NrZXRzLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xcbiAgMzI6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMzpcXHRcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgbG9vcGJhY2sgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMsXFxuICAzNjpcXHRcXHQgIHVzaW5nIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAzOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHZzb2NrX2xvb3BiYWNrLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcXG4gIDQyOlxcdFxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgVk1DSSB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1xcXCJcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVk1XQVJFX1ZNQ0lcXG4gIDQ0OlxcdFxcdGhlbHBcXG4gIDQ1OlxcdFxcdCAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIFZNQ0kgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdFxcdCAgRW5hYmxlIHRoaXMgdHJhbnNwb3J0IGlmIHlvdXIgVmlydHVhbCBNYWNoaW5lIHJ1bnMgb24gYSBWTXdhcmVcXG4gIDQ4OlxcdFxcdCAgaHlwZXJ2aXNvci5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA1MTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHZtd192c29ja192bWNpX3RyYW5zcG9ydC4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0Y29uZmlnIFZJUlRJT19WU09DS0VUU1xcbiAgNTQ6XFx0XFx0dHJpc3RhdGUgXFxcInZpcnRpbyB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1xcXCJcXG4gIDU1OlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVklSVElPXFxuICA1NjpcXHRcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgdmlydGlvIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzLlxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIEVuYWJsZSB0aGlzIHRyYW5zcG9ydCBpZiB5b3VyIFZpcnR1YWwgTWFjaGluZSBob3N0IHN1cHBvcnRzIFZpcnR1YWxcXG4gIDYxOlxcdFxcdCAgU29ja2V0cyBvdmVyIHZpcnRpby5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gIDY0OlxcdFxcdCAgY2FsbGVkIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRjb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgNjc6XFx0XFx0dHJpc3RhdGVcXG4gIDY4OlxcdFxcdGhlbHBcXG4gIDY5OlxcdFxcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBuZWVkcyB0byBhY2Nlc3NcXG4gIDcwOlxcdFxcdCAgdGhlIHZpcnRpb192c29jay4gIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDcxOlxcdFxcdCAgdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLlxcbiAgNzI6XFx0XFxuICA3MzpcXHRjb25maWcgSFlQRVJWX1ZTT0NLRVRTXFxuICA3NDpcXHRcXHR0cmlzdGF0ZSBcXFwiSHlwZXItViB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1xcXCJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgSFlQRVJWX1ZNQlVTXFxuICA3NjpcXHRcXHRoZWxwXFxuICA3NzpcXHRcXHQgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBIeXBlci1WIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzLlxcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHQgIEVuYWJsZSB0aGlzIHRyYW5zcG9ydCBpZiB5b3VyIFZpcnR1YWwgTWFjaGluZSBob3N0IHN1cHBvcnRzIFZpcnR1YWxcXG4gIDgwOlxcdFxcdCAgU29ja2V0cyBvdmVyIEh5cGVyLVYgVk1CdXMuXFxuICA4MTpcXHRcXG4gIDgyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA4MzpcXHRcXHQgIGNhbGxlZCBodl9zb2NrLiBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxODoxODowMC43MzM1NDkxNjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkzNTgxNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIHZTb2NrZXQgaW1wbGVtZW50YXRpb24gdXAgYW5kIHJ1bm5pbmcuIEZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBwcmV0dHkgc3VyZSBJIG5lZWQgYFZTT0NLRVRTYCwgb2J2aW91c2x5LCBhbmQgdGhlbiB0aGUgZm91bmRhdGlvbmFsIGBWSVJUSU9gIGxheWVyLiBTaW5jZSB3ZSBhcmUgdXNpbmcgdlNvY2tldHMgb24gVmlydElPLCB0aGUgc3BlY2lmaWMgYFZJUlRJT19WU09DS0VUU2Agb3B0aW9uIHNlZW1zIGxpa2UgYSBnaXZlbi4gTm93LCB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgVk13YXJlIGVudmlyb25tZW50LCBzbyBgVk1XQVJFX1ZNQ0lgIGlzIGxpa2VseSBnb2luZyB0byBiZSBuZWNlc3NhcnkuIEZpbmFsbHksIHRvIGVuYWJsZSB0aGUgdlNvY2tldCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgVk1DSSBmcmFtZXdvcmssIEknbGwgbmVlZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgLiBHb3QgaXQuXG5cbk5vdywgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBWTVdBUkVfVk1DSWAsIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgY2hlY2sgaXRzIEtjb25maWcgZmlsZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgb25lIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRldGFpbHMgYXJvdW5kIHRoYXQgbW9kdWxlLiBUaGlzIGlzIGp1c3QgZHVlIGRpbGlnZW5jZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGVzc2VudGlhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE0OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6MDQuNzI3MTM0MjI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Njc2NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWTVdBUkVfVk1DSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21pc2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnLTUtXFxuZHJpdmVycy9taXNjL3Ztd192bWNpL0tjb25maWc6Njpjb25maWcgVk1XQVJFX1ZNQ0lcXG5kcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgVk1DSSBEcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjA0Ljc4NjgxNjAxOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzgyMjExMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgVk1XQVJFX1ZNQ0kgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIHRoZSBhZ2VuZGEgaXMgYSBkZWVwIGRpdmUgaW50byB0aGUgYFZNV0FSRV9WTUNJYCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3JpdGljYWwgY29tcG9uZW50cyB0aGF0IHJlbHkgb24gdGhpcyBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBpZiBpdCdzIGFsdGVyZWQsIHVwZGF0ZWQsIG9yIHJlbW92ZWQuIEnigJltIHRoaW5raW5nIGluIHRlcm1zIG9mIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlLCB0aGUgaHlwZXJ2aXNvcidzIGludGVyYWN0aW9uIHdpdGggdGhlIGd1ZXN0IE9TLCBhbmQgb2YgY291cnNlLCB0aGUgaW1wbGljYXRpb25zIGZvciBhbnkgaGlnaGVyLWxldmVsIHNlcnZpY2VzIGJ1aWx0IHVwb24gdGhlIFZNQ0kuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGJlIHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipLZXJuZWwgbW9kdWxlczoqKiBXaGF0IG1vZHVsZXMgYXJlIHRpZ2h0bHkgY291cGxlZCwgYW5kIHdoYXQncyB0aGUgdmVyc2lvbiBjb21wYXRpYmlsaXR5IGxpa2U/IEFueSBrbm93biBjb25mbGljdHM/XG4qICAgKipVc2VyLXNwYWNlIGxpYnJhcmllczoqKiBBcmUgdGhlcmUgYW55IHNoYXJlZCBvYmplY3QgZGVwZW5kZW5jaWVzLCBhbmQgaWYgc28sIGRvIHRoZXkgYWxpZ24gd2l0aCB0aGUgZXhwZWN0ZWQgdmVyc2lvbnM/XG4qICAgKipWaXJ0dWFsIG1hY2hpbmUgY29uZmlndXJhdGlvbjoqKiBIb3cgZGVlcGx5IGlzIFZNQ0kgaW50ZWdyYXRlZCBpbnRvIHRoZSBWTSB0ZW1wbGF0ZT8gSXMgaXQgc2FmZSB0byBhbHRlciBpdD9cbiogICAqKlBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoqKiBBbnkga25vd24gcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcmVzb3VyY2UgY29udGVudGlvbiBpc3N1ZXMgd2hlbiBWTUNJIGlzIGFjdGl2ZT9cbiogICAqKlNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllczoqKiBBcmUgdGhlcmUgYW55IGtub3duIGV4cGxvaXRzIG9yIGF0dGFjayB2ZWN0b3JzIHRoYXQgY291bGQgaW1wYWN0IHRoZSB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudD9cblxuSSdtIGVzc2VudGlhbGx5IHRyeWluZyB0byBidWlsZCBhIHF1aWNrIGRlcGVuZGVuY3kgdHJlZSBpbiBteSBoZWFkIGFuZCBhc3Nlc3MgdGhlIGJsYXN0IHJhZGl1cyBvZiBhbnkgbW9kaWZpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGFueSBsZWdhY3kgY29kZSBvciB3b3JrYXJvdW5kcyB0aGF0IG1heSBiZSBpbXBhY3RpbmcgdGhlIGNvZGUtYmFzZS4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjExLjEyNTA0MDU2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBWTXdhcmUgVk1DSSBkZXZpY2VcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFZNV0FSRV9WTUNJXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVk13YXJlIFZNQ0kgRHJpdmVyXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiAoWDg2IHx8IEFSTTY0KSBcXHUwMDI2XFx1MDAyNiAhQ1BVX0JJR19FTkRJQU4gXFx1MDAyNlxcdTAwMjYgUENJXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgaXMgVk13YXJlJ3MgVmlydHVhbCBNYWNoaW5lIENvbW11bmljYXRpb24gSW50ZXJmYWNlLiAgSXQgZW5hYmxlc1xcbiAgMTE6XFx0XFx0ICBoaWdoLXNwZWVkIGNvbW11bmljYXRpb24gYmV0d2VlbiBob3N0IGFuZCBndWVzdCBpbiBhIHZpcnR1YWxcXG4gIDEyOlxcdFxcdCAgZW52aXJvbm1lbnQgdmlhIHRoZSBWTUNJIHZpcnR1YWwgZGV2aWNlLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAxNzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2bXdfdm1jaS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6MTEuMTI1MTExNDQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjg4NzU4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVk1XQVJFX1ZNQ0kgYW5kIFBhY2tldCBSZWNlcHRpb24qKlxuXG5Pa2F5LCBzbyBgVk1XQVJFX1ZNQ0lgIHJlbGllcyBvbiBgUENJYCwgd2hpY2ggbWFrZXMgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHN0cmFpZ2h0Zm9yd2FyZC4gV2UncmUgbG9va2luZyBhdCBhIHNldCBvZiBjb25maWd1cmF0aW9ucyBoZXJlOiBgVlNPQ0tFVFNgLCBgVklSVElPYCwgYFZJUlRJT19WU09DS0VUU2AsIGBQQ0lgLCBgVk1XQVJFX1ZNQ0lgLCBhbmQgYFZNV0FSRV9WTUNJX1ZTT0NLRVRTYC4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHdoZXJlIHRvIGZvY3VzIG91ciBhbmFseXNpcy4gSSd2ZSBnb3QgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byBjb25zaWRlcjogYHZzb2NrX2NoZWNrX3NvdXJjZWAsIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCwgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYC4gVGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBvbmUocykgYXJlIHRoZSBtb3N0IHN0cmF0ZWdpY2FsbHkgdmFsdWFibGUgZm9yIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWwgZnV6emluZz9cblxuYHZzb2NrX2NoZWNrX3NvdXJjZWAgKnNlZW1zKiBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgZXhwb3J0ZWQsIGJ1dCwgb24gc2Vjb25kIHRob3VnaHQsIGl0J3MganVzdCBhIGhlbHBlci4gVGhvc2Ugb3RoZXIgdGhyZWUgYXJlIGVudHJ5IHBvaW50cy4gVGhlIG90aGVyIHRocmVlIGZ1bmN0aW9ucyBjYWxsIGl0LiBGdXp6aW5nIHRoZSBlbnRyeSBwb2ludHMgc2VlbXMgbXVjaCBtb3JlIHByb21pc2luZyBiZWNhdXNlIHRoZXkncmUgd2hlcmUgdGhlIHBhY2tldHMgYXJlIGFjdHVhbGx5IHJlY2VpdmVkLiBUaGF0J3Mgd2hlcmUgd2Ugc2hvdWxkIGNvbmNlbnRyYXRlIG91ciBlZmZvcnRzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6MTYuMjkzOTkwNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4NzQ3NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NjMyPXN0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy02ODctXFx0XFx0XFx0ICovXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6Njg4OlxcdFxcdFxcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXFx1MDAyNnZpcnRpb190cmFuc3BvcnQsIHNrYiwgTlVMTCk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNjg5LVxcdFxcdH1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xNzU4PXN0YXRpYyBib29sIHZpcnRpb190cmFuc3BvcnRfdmFsaWRfdHlwZSh1MTYgdHlwZSlcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzY2LSAqL1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzY3OnZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc2OC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODAtXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3ODE6XFx0dHJhY2VfdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzcmMuc3ZtX2NpZCwgc3JjLnN2bV9wb3J0LFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzgyLVxcdFxcdFxcdFxcdFxcdGRzdC5zdm1fY2lkLCBkc3Quc3ZtX3BvcnQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg3NS19XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE4NzY6RVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE4NzctXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2xvb3BiYWNrLmM9MTIzPXN0YXRpYyB2b2lkIHZzb2NrX2xvb3BiYWNrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jLTE0MS1cXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpO1xcbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYzoxNDI6XFx0XFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChcXHUwMDI2bG9vcGJhY2tfdHJhbnNwb3J0LCBza2IsXFxubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jLTE0My1cXHRcXHRcXHRcXHRcXHQgIHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6MTYuNDkyNzQ0Mzg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDY1ODQzMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRm9jdXNpbmcgSW4gb24gUGFja2V0IFJlY2VwdGlvbiBNZWNoYW5pc21zKipcblxuT2theSwgc28gYHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZGlzc2VjdC4gSXQncyBleHBsaWNpdGx5IGV4cG9ydGVkIGFuZCBnZXRzIGNhbGxlZCBmcm9tIGJvdGggYHZpcnRpb190cmFuc3BvcnRfcnhfd29ya2AgYW5kIGB2c29ja19sb29wYmFja193b3JrYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgcGFja2V0IHJlY2VwdGlvbiB3aXRoaW4gdGhlIFZpcnRJTyB0cmFuc3BvcnQgbGF5ZXIuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBwb2ludHMgb2YgY29udGVudGlvbiB0aGVyZS5cblxuU2luY2UgSSdtIGxvb2tpbmcgYXQgdHJhbnNwb3J0IGxheWVycywgaXQgbWFrZXMgc2Vuc2UgdG8gdGhlbiBwaXZvdCBhbmQgY2hlY2sgb3V0IHRoZSBWTUNJIGVxdWl2YWxlbnRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29uY2VwdHMgdHJhbnNsYXRlIG9yIGRpZmZlci4gU28sIEkgbmVlZCB0byBsb29rIGF0IGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYCB0byBzZWUgd2hhdCBJIGNhbiBsZWFybi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI5NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjI3LjU1ODU5MDkxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1Nzk3NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTMyPXN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9kZ3JhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpO1xcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzozMzpzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZyk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTM0LXN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3BlZXJfZGV0YWNoX2NiKHUzMiBzdWJfaWQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9NjQ5PXN0YXRpYyBib29sIHZtY2lfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkLFxcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTY3NC1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6Njc1OnN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy02NzYte1xcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTkxMD1zdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy05NDYtXFx0XFx0LyogQmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJ1biBpbiB0aGUgc2FtZSBjb250ZXh0IGFzXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjk0NzpcXHRcXHQgKiB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYiBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy05NDgtXFx0XFx0ICogc29ja2V0IGhhcyBjbG9zZWQuIFdlIG5lZWQgdG8gbGV0IHRoZSBvdGhlciBzaWRlIGtub3cgb3IgaXRcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0yMTEzPXN0YXRpYyBpbnQgX19pbml0IHZtY2lfdHJhbnNwb3J0X2luaXQodm9pZClcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0yMTIxLVxcdFxcdFxcdFxcdFxcdFxcdCBWTUNJX0ZMQUdfQU5ZQ0lEX0RHX0hORCxcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MjEyMjpcXHRcXHRcXHRcXHRcXHRcXHQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2IsXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTIxMjMtXFx0XFx0XFx0XFx0XFx0XFx0IE5VTEwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjI3LjYxMDE3NTg5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODUwMzU5NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgVk1DSSBUcmFuc3BvcnQgUmVjZWl2ZSBQYXRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGlzIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQgd2hlbiBhIGRhdGFncmFtIGhhbmRsZSBpcyBjcmVhdGVkIHdpdGggYHZtY2lfZGF0YWdyYW1fY3JlYXRlX2hhbmRsZV9wcml2YC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYSBkZWZpbml0ZSBmb2N1cyBzeW1ib2wgdG8gZGlnIGludG8uIE5vdywgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGlzIGNhbGxiYWNrIGlzIGFjdHVhbGx5IHVzZWQuIE15IG5leHQgbW92ZSBpcyB0byBleGFtaW5lIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIGNhbGxiYWNrIGlzIGludm9rZWQgb3IgYXQgbGVhc3QgaW50ZWdyYXRlZCBpbnRvIHRoZSByZWNlaXZlIHByb2Nlc3NpbmcgZmxvdy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxODoxODozMS40NjA1Mzg0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5ODU4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9MzQ9c3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcGVlcl9kZXRhY2hfY2IodTMyIHN1Yl9pZCxcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0zNi1cXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmNsaWVudF9kYXRhKTtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6Mzc6c3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0zOC1zdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9jbGVhbnVwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9Njc1PXN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTgwMy1cXHRcXHRtZW1jcHkoXFx1MDAyNnJlY3ZfcGt0X2luZm8tXFx1MDAzZXBrdCwgcGt0LCBzaXplb2YocmVjdl9wa3RfaW5mby1cXHUwMDNlcGt0KSk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjgwNDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnJlY3ZfcGt0X2luZm8tXFx1MDAzZXdvcmssIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmspO1xcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy04MDUtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9OTAyPXN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3FwX3Jlc3VtZWRfY2IodTMyIHN1Yl9pZCxcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy05MDktXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjkxMDpzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtOTExLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6MzEuNTE0NTMyMTY0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjEwNzAxMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWc29jayBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AganVtcHMgb3V0IGFzIGEgZ29vZCBmb2NhbCBwb2ludC4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBtaWdodCBiZSB0b3VjaGVkIGhlcmUuIFRoZSBwYXRjaCBtb2RpZmllcyBgdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AgYW5kIGB2bWNpX3RyYW5zcG9ydC5jYCwgc28gaXQncyBsaWtlbHkgYSB0cmFuc3BvcnQtbGV2ZWwgY29uY2Vybi5cblxuRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gSSBzZWUgYFZTT0NLRVRTYCwgYFZJUlRJT19WU09DS0VUU2AsIGFuZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgLiBXYWl0LCBhIG1vbWVudCEgYFZJUlRJT19WU09DS0VUU2AgZGVwZW5kcyBvbiBib3RoIGBWU09DS0VUU2AgKmFuZCogYFZJUlRJT2AsIGFuZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgIGFsc28gZGVwZW5kcyBvbiBgVlNPQ0tFVFNgIGFuZCBgVk1XQVJFX1ZNQ0lgLiBTbywgdGhlIGVuYWJsaW5nIGNvbmZpZ3MgSSBuZWVkIGFyZTpcblxuKiAgIGBWU09DS0VUU2BcbiogICBgVklSVElPX1ZTT0NLRVRTYFxuKiAgIGBWTVdBUkVfVk1DSV9WU09DS0VUU2BcbiogICBgVklSVElPYFxuKiAgIGBWTVdBUkVfVk1DSWBcblxuTm93LCBsZXQncyBzZWUgaWYgYFZJUlRJT19WU09DS0VUU19DT01NT05gIGlzIG5lZWRlZC4gTG9va3MgbGlrZSBpdCdzIHNlbGVjdGVkIGJ5IGBWSVJUSU9fVlNPQ0tFVFNgIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLCBzbyBubyBleHBsaWNpdCBhZGRpdGlvbiBpcyBuZWVkZWQuIFdoYXQgYWJvdXQgYFZTT0NLRVRTX0xPT1BCQUNLYD8gVGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgYHZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgLCB3aGljaCBpcyBhbHNvIHVzZWQgYnkgYFZTT0NLRVRTX0xPT1BCQUNLYC4gU28gdGhhdCdzIGEgZGVmaW5pdGUgYWRkLlxuXG5NeSBjdXJyZW50IGxpc3Qgb2YgZW5hYmxpbmcgY29uZmlncyBpcyBub3c6XG5cbiogICBgVlNPQ0tFVFNgXG4qICAgYFZJUlRJT19WU09DS0VUU2BcbiogICBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgXG4qICAgYFZTT0NLRVRTX0xPT1BCQUNLYFxuKiAgIGBWSVJUSU9gXG4qICAgYFZNV0FSRV9WTUNJYFxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scyBiYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLiBJJ20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0bzpcblxuKiAgIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YFxuKiAgIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmBcbiogICBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2BcblxuUmlnaHQsIGxldCdzIG1ha2Ugc3VyZSB0aGlzIHJlYXNvbmluZyBob2xkcy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHZzb2NrX2NoZWNrX3NvdXJjZWAgd2hpY2ggdmFsaWRhdGVzIHRoZSBzb3VyY2UuIFRoaXMgYWZmZWN0cyAqYWxsKiBvZiB0aGUgZm9jdXMgc3ltYm9scyBiZWNhdXNlIG9mIHBhY2tldCB2YWxpZGF0aW9uLCBhbmQgdGhlIHNvdXJjZSBwYWNrZXQgY2hlY2suIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2c29jayBsb2dpYyB3aGljaCB0b3VjaGVzIGJvdGggdmlydGlvIGFuZCB2bWNpIHRyYW5zcG9ydHMuIERlZmluaXRlbHkgZnV6emVyIHdvcnRoeS5cblxuT25lIGxhc3QgdGhpbmcsIGxldCBtZSBkb3VibGUtY2hlY2sgYFZNV0FSRV9WTUNJYCdzIGRlcGVuZGVuY2llcy4gSXQgZGVwZW5kcyBvbiBgKFg4NiB8fCBBUk02NCkgXHUwMDI2XHUwMDI2ICFDUFVfQklHX0VORElBTiBcdTAwMjZcdTAwMjYgUENJYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZXhwbGljaXRseSBhZGQgYFBDSWAuXG5cbk15IGZpbmFsIGNvbmZpZ3VyYXRpb24gbGlzdCBpczpcblxuKiAgIGBWU09DS0VUU2BcbiogICBgVklSVElPX1ZTT0NLRVRTYFxuKiAgIGBWTVdBUkVfVk1DSV9WU09DS0VUU2BcbiogICBgVlNPQ0tFVFNfTE9PUEJBQ0tgXG4qICAgYFZJUlRJT2BcbiogICBgVk1XQVJFX1ZNQ0lgXG4qICAgYFBDSWBcblxuQWxyaWdodCwgbGV0J3MgY2FsbCB0aGF0IGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjgsIk91dHB1dFRva2VucyI6MjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjQyLjEyNTIzNTY2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTE2MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCIsXG4gICAgXCJWTVdBUkVfVk1DSV9WU09DS0VUU1wiLFxuICAgIFwiVlNPQ0tFVFNfTE9PUEJBQ0tcIixcbiAgICBcIlZJUlRJT1wiLFxuICAgIFwiVk1XQVJFX1ZNQ0lcIixcbiAgICBcIlBDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIixcbiAgICBcInZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiXCIsXG4gICAgXCJ2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgdnNvY2tfY2hlY2tfc291cmNlYCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIG9mIGluY29taW5nIHBhY2tldHMgYWdhaW5zdCB0aGUgc29ja2V0IHBlZXIuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AgdG8gZHJvcCBwYWNrZXRzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzb3VyY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2c29jayBsb2dpYyBhbmQgaXRzIHRyYW5zcG9ydHMgKHZpcnRpbyBhbmQgdm1jaSkgdGhhdCBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZNV0FSRV9WTUNJX1ZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiLFxuICAgIFwiVklSVElPXCIsXG4gICAgXCJWTVdBUkVfVk1DSVwiLFxuICAgIFwiUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdFwiLFxuICAgIFwidm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2JcIixcbiAgICBcInZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGB2c29ja19jaGVja19zb3VyY2VgIHRvIHZhbGlkYXRlIHRoZSBzb3VyY2Ugb2YgaW5jb21pbmcgcGFja2V0cyBhZ2FpbnN0IHRoZSBzb2NrZXQgcGVlci4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCwgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYCB0byBkcm9wIHBhY2tldHMgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHNvdXJjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZzb2NrIGxvZ2ljIGFuZCBpdHMgdHJhbnNwb3J0cyAodmlydGlvIGFuZCB2bWNpKSB0aGF0IGFmZmVjdHMgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjQyLjIwODM1ODY1M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0MTg5MjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjQyLjIwODk0OTIwMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDQxMjk4MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9naWMgZml4IHRvIHZhbGlkYXRlIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBpbmNvbWluZyB2c29jayBwYWNrZXRzIGFnYWluc3QgdGhlIGV4cGVjdGVkIHBlZXIgYWRkcmVzcyBmb3IgY29ubmVjdGVkIHNvY2tldHMgKGB2c29ja19jaGVja19zb3VyY2VgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgZGF0YSBsZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBhbmQgdGhlIGNoYW5nZXMgbWVyZWx5IGFkZCBjb25kaXRpb25hbCBjaGVja3MgYmFzZWQgb24gZXhpc3RpbmcgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY4MzhkYTQ5MGQ2OWNmM2Y2MDNhOWUzNzc5NDdhNDZiMDlmYTYwOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxODoxNzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oXG5pbmRleCAzMzU3ZWU2MmQxMGJmLi41NTQ5Mjk4YzFlYzZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuKysrIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuQEAgLTIyOSw2ICsyMjksOSBAQCBzdHJ1Y3Qgc29jayAqdnNvY2tfZmluZF9ib3VuZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcixcbiBzdHJ1Y3Qgc29jayAqdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmRzdCxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0ICpuZXQpO1xuK2Jvb2wgdnNvY2tfY2hlY2tfc291cmNlKGNvbnN0IHN0cnVjdCB2c29ja19zb2NrICp2c2ssXG4rXHRcdFx0Y29uc3Qgc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuK1x0XHRcdGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjKTtcbiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spO1xuIHZvaWQgdnNvY2tfZm9yX2VhY2hfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXG4gXHRcdFx0XHQgICAgIHZvaWQgKCpmbikoc3RydWN0IHNvY2sgKnNrKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCBhMzNiMmEyZDM4MWRjLi5mODQwNDk4YjU4YWZiIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC00MzgsNiArNDM4LDM4IEBAIHN0cnVjdCBzb2NrICp2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldCk7XG4gXG4rLyoqXG4rICogdnNvY2tfY2hlY2tfc291cmNlIC0gdmFsaWRhdGUgYSBwYWNrZXQgc291cmNlIGFnYWluc3QgYSBzb2NrZXQgcGVlclxuKyAqIEB2c2s6IHNvY2tldCByZWNlaXZpbmcgdGhlIHBhY2tldFxuKyAqIEB0cmFuc3BvcnQ6IHRyYW5zcG9ydCByZWNlaXZpbmcgdGhlIHBhY2tldFxuKyAqIEBzcmM6IHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIHBhY2tldFxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWNrZXQgYXJyaXZlZCBvbiB0aGUgc29ja2V0J3MgYXNzaWduZWQgdHJhbnNwb3J0IGFuZFxuKyAqIGl0cyBzb3VyY2UgbWF0Y2hlcyB0aGUgc3RvcmVkIHBlZXIuIExvb3BiYWNrIHBhY2tldHMgYXJlIGdlbmVyYXRlZFxuKyAqIGludGVybmFsbHkgYW5kIGFsd2F5cyB1c2UgdGhlIGxvY2FsIENJRCBhcyB0aGVpciBzb3VyY2UsIGluY2x1ZGluZ1xuKyAqIGNvbm5lY3Rpb25zIHVzaW5nIGEgdmFsaWQgQ0lEIGFsaWFzLlxuKyAqXG4rICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHNvY2tldCBsb2NrIGFuZCBtdXN0IG5vdCBjYWxsIHRoaXMgZm9yIGxpc3RlbmluZ1xuKyAqIHNvY2tldHMsIHdoaWNoIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHNvdXJjZSBhbmQgaGF2ZSBubyBhc3NpZ25lZFxuKyAqIHRyYW5zcG9ydC5cbisgKi9cbitib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxuK1x0XHRcdGNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcbitcdFx0XHRjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYylcbit7XG4rXHRpZiAodnNrLVx1MDAzZXRyYW5zcG9ydCAhPSB0cmFuc3BvcnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChzcmMtXHUwMDNlc3ZtX3BvcnQgIT0gdnNrLVx1MDAzZXJlbW90ZV9hZGRyLnN2bV9wb3J0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoc3JjLVx1MDAzZXN2bV9jaWQgPT0gdnNrLVx1MDAzZXJlbW90ZV9hZGRyLnN2bV9jaWQpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIHRyYW5zcG9ydC1cdTAwM2VnZXRfbG9jYWxfY2lkKCkgPT0gVk1BRERSX0NJRF9MT0NBTDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfY2hlY2tfc291cmNlKTtcbitcbiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spXG4ge1xuIFx0LyogVHJhbnNwb3J0IHJlYXNzaWdubWVudCBtdXN0IG5vdCByZW1vdmUgdGhlIGJpbmRpbmcuICovXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXG5pbmRleCBlNGViYWE3MGY2YzIzLi42MzAxYzEwOGE0ZjEwIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXG4rKysgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbkBAIC0xODIzLDcgKzE4MjMsOCBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXG4gXHQgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KVxuIFx0ICovXG4gXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8XG4tXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2IHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQpKSB7XG4rXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHQgICAgICF2c29ja19jaGVja19zb3VyY2UodnNrLCBcdTAwMjZ0LVx1MDAzZXRyYW5zcG9ydCwgXHUwMDI2c3JjKSkpIHtcbiBcdFx0KHZvaWQpdmlydGlvX3RyYW5zcG9ydF9yZXNldF9ub19zb2NrKHQsIHNrYiwgbmV0KTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0c29ja19wdXQoc2spO1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYyBiL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuY1xuaW5kZXggMWM0ZWUwMzljMTY2Mi4uYjYxMmE5ODkzODU2YSAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuY1xuKysrIGIvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jXG5AQCAtNjgwLDExICs2ODAsMTMgQEAgc3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpXG4gXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7XG4gXHRzdHJ1Y3QgdnNvY2tfc29jayAqdnNrO1xuIFx0Ym9vbCBiaF9wcm9jZXNzX3BrdDtcbitcdGJvb2wgZHJvcF9wa3Q7XG4gXHRpbnQgZXJyO1xuIFxuIFx0c2sgPSBOVUxMO1xuIFx0ZXJyID0gVk1DSV9TVUNDRVNTO1xuIFx0YmhfcHJvY2Vzc19wa3QgPSBmYWxzZTtcbitcdGRyb3BfcGt0ID0gZmFsc2U7XG4gXG4gXHQvKiBJZ25vcmUgaW5jb21pbmcgcGFja2V0cyBmcm9tIHJlc291cmNlcyB0aGF0IGFyZW4ndCB2c29ja1xuIFx0ICogaW1wbGVtZW50YXRpb25zLlxuQEAgLTc2NSwxNyArNzY3LDI2IEBAIHN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxuIFx0YmhfbG9ja19zb2NrKHNrKTtcbiBcbiBcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xuLVx0XHQvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUsIHVwZGF0ZSBpdC4gKi9cbi1cdFx0dnNrLVx1MDAzZWxvY2FsX2FkZHIuc3ZtX2NpZCA9IGRzdC5zdm1fY2lkO1xuK1x0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF2c29ja19jaGVja19zb3VyY2UodnNrLCBcdTAwMjZ2bWNpX3RyYW5zcG9ydCwgXHUwMDI2c3JjKSkge1xuK1x0XHRcdGRyb3BfcGt0ID0gdHJ1ZTtcbitcdFx0XHRlcnIgPSBWTUNJX0VSUk9SX05PX0FDQ0VTUztcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUsIHVwZGF0ZSBpdC4gKi9cbitcdFx0XHR2c2stXHUwMDNlbG9jYWxfYWRkci5zdm1fY2lkID0gZHN0LnN2bV9jaWQ7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpXG4tXHRcdFx0dm1jaV90cmFucyh2c2spLVx1MDAzZW5vdGlmeV9vcHMtXHUwMDNlaGFuZGxlX25vdGlmeV9wa3QoXG4tXHRcdFx0XHRcdHNrLCBwa3QsIHRydWUsIFx1MDAyNmRzdCwgXHUwMDI2c3JjLFxuLVx0XHRcdFx0XHRcdTAwMjZiaF9wcm9jZXNzX3BrdCk7XG4rXHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcbitcdFx0XHRcdHZtY2lfdHJhbnModnNrKS1cdTAwM2Vub3RpZnlfb3BzLVx1MDAzZWhhbmRsZV9ub3RpZnlfcGt0KHNrLCBwa3QsIHRydWUsXG4rXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmRzdCwgXHUwMDI2c3JjLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZiaF9wcm9jZXNzX3BrdCk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGJoX3VubG9ja19zb2NrKHNrKTtcbiBcbitcdGlmIChkcm9wX3BrdClcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRpZiAoIWJoX3Byb2Nlc3NfcGt0KSB7XG4gXHRcdHN0cnVjdCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF9pbmZvICpyZWN2X3BrdF9pbmZvO1xuIFxuQEAgLTkwMCw2ICs5MTEsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbztcbiBcdHN0cnVjdCB2bWNpX3RyYW5zcG9ydF9wYWNrZXQgKnBrdDtcbitcdHN0cnVjdCBzb2NrYWRkcl92bSBzcmM7XG4gXHRzdHJ1Y3Qgc29jayAqc2s7XG4gXG4gXHRyZWN2X3BrdF9pbmZvID1cbkBAIC05MDgsNiArOTIwLDEwIEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cGt0ID0gXHUwMDI2cmVjdl9wa3RfaW5mby1cdTAwM2Vwa3Q7XG4gXG4gXHRsb2NrX3NvY2soc2spO1xuK1x0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnNyYywgcGt0LVx1MDAzZWRnLnNyYy5jb250ZXh0LCBwa3QtXHUwMDNlc3JjX3BvcnQpO1xuK1x0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHQgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c29ja19zayhzayksIFx1MDAyNnZtY2lfdHJhbnNwb3J0LCBcdTAwMjZzcmMpKVxuK1x0XHRnb3RvIG91dDtcbiBcbiBcdC8qIFRoZSBsb2NhbCBjb250ZXh0IElEIG1heSBiZSBvdXQgb2YgZGF0ZS4gKi9cbiBcdHZzb2NrX3NrKHNrKS1cdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBwa3QtXHUwMDNlZGcuZHN0LmNvbnRleHQ7XG5AQCAtOTM3LDYgKzk1Myw3IEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcbitvdXQ6XG4gXHRyZWxlYXNlX3NvY2soc2spO1xuIFx0a2ZyZWUocmVjdl9wa3RfaW5mbyk7XG4gXHQvKiBSZWxlYXNlIHJlZmVyZW5jZSBvYnRhaW5lZCBpbiB0aGUgc3RyZWFtIGNhbGxiYWNrIHdoZW4gd2UgZmV0Y2hlZFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6NDIuMjA4OTUwMDgyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNDEyNzc1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IHZzb2NrX2NoZWNrX3NvdXJjZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgaW50cm9kdWNlcyB0aGlzIG5ldyBgdnNvY2tfY2hlY2tfc291cmNlYCBmdW5jdGlvbiwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBzYW5pdHkgY2hlY2sgZm9yIGluY29taW5nIHBhY2tldHMgb24gY29ubmVjdGVkIHZzb2NrIHNvY2tldHMuIEl0IHZhbGlkYXRlcyB0aGUgc291cmNlIChDSUQgYW5kIHBvcnQpIGFnYWluc3Qgd2hhdCB0aGUgc29ja2V0IGV4cGVjdHMuIFRoZSBpbnRlbnRpb24gaXMgY2xlYXJseSB0byBwcmV2ZW50IHBhY2tldHMgZnJvbSB1bmV4cGVjdGVkIHNvdXJjZXMsIHdoaWNoIGxpa2VseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgc3Bvb2Zpbmcgb3Igcm91dGluZyBpc3N1ZSBpbiB0aGUgdnNvY2sgY29ubmVjdGlvbiBsb2dpYy5cblxuSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlZ3JhdGluZyB0aGlzIGNoZWNrIHdpdGhpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AuIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgdGhlIGNoZWNrIGl0c2VsZiBpcyBzaW1wbGU6IGNvbXBhcmluZyB0aGUgc291cmNlIENJRCBhbmQgcG9ydCBmcm9tIHRoZSBwYWNrZXQgYWdhaW5zdCB0aGUgZXhwZWN0ZWQgdmFsdWVzIGZvciB0aGUgc29ja2V0J3MgcmVtb3RlIGFkZHJlc3MuIEl0J3MgcmVhbGx5IGp1c3QgYSBsb2dpYyBidWcgZml4OyB0aGUga2luZCB0aGF0J3MgZWFzeSB0byBtaXNzIGluIHJldmlldy5cblxuVGhlIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIG9yIGFueXRoaW5nIHBhcnRpY3VsYXJseSBub3ZlbCwgd2hpY2ggaXMgZ29vZC4gVGhlIGtleSB0aGluZyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgYHNyY2AgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBjaGVjay4gSSB3YXMgcmlnaHQgdG8gcmV2aWV3IHRoaXMuIEluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCBhbmQgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCBgc3JjYCBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlLCBidXQgSSBuZWVkIHRvIGVuc3VyZSBpdCBpcyBpbml0aWFsaXplZCBwcmlvciB0byBjYWxsaW5nIHRoZSBjaGVjay4gSW4gYHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtgLCBgc3JjYCBpcyBpbml0aWFsaXplZCB1c2luZyBgdnNvY2tfYWRkcl9pbml0YCwgd2hpY2ggbG9va3MgY29ycmVjdC5cblxuU2luY2UgdGhpcyBpcyBwdXJlbHkgYSBsb2dpYyBjaGVjayBpbnZvbHZpbmcgZXhpc3RpbmcsIGluaXRpYWxpemVkIGZpZWxkcyBhbmQgZG9lc24ndCB0b3VjaCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRlIGFueSBtZW1vcnkgY29ycnVwdGlvbiByaXNrLCBJIGRvbid0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4uIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoZXJlZm9yZSwgSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODk5LCJPdXRwdXRUb2tlbnMiOjExNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjUxLjI1MDIzMDU0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvZ2ljIGZpeCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIGFkZHJlc3Mgb2YgaW5jb21pbmcgdnNvY2sgcGFja2V0cyBhZ2FpbnN0IHRoZSBleHBlY3RlZCBwZWVyIGFkZHJlc3MgZm9yIGNvbm5lY3RlZCBzb2NrZXRzIChgdnNvY2tfY2hlY2tfc291cmNlYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGRhdGEgbGVha3MgdG8gdXNlcnNwYWNlLiBBbGwgc3RydWN0dXJlcyBpbnZvbHZlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgYW5kIHRoZSBjaGFuZ2VzIG1lcmVseSBhZGQgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIGV4aXN0aW5nIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSwgYW5kIHN0YW5kYXJkIHRlc3RpbmcvS0FTQU4gaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9naWMgZml4IHRvIHZhbGlkYXRlIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBpbmNvbWluZyB2c29jayBwYWNrZXRzIGFnYWluc3QgdGhlIGV4cGVjdGVkIHBlZXIgYWRkcmVzcyBmb3IgY29ubmVjdGVkIHNvY2tldHMgKGB2c29ja19jaGVja19zb3VyY2VgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgZGF0YSBsZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBhbmQgdGhlIGNoYW5nZXMgbWVyZWx5IGFkZCBjb25kaXRpb25hbCBjaGVja3MgYmFzZWQgb24gZXhpc3RpbmcgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowrnz4b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 18:15:44 +0000 UTC FinishedAt: 2026-08-23 18:18:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VMWARE_VMCI_VSOCKETS", "VSOCKETS_LOOPBACK", "VIRTIO", "VMWARE_VMCI", "PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "7cbfb180945ce529608e4d4e24a6d483699fab1e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VSOCKETS", "VIRTIO_VSOCKETS", "VMWARE_VMCI_VSOCKETS", "VSOCKETS_LOOPBACK", "VIRTIO", "VMWARE_VMCI", "PCI" ], "series_id": "ded4f3fb-c437-42c7-b438-dd701c7de146" }, "track": "KASAN", "fuzz": { "focus": [ "kvm", "net" ], "focus_symbols": [ "virtio_transport_recv_pkt", "vmci_transport_recv_stream_cb", "vmci_transport_recv_pkt_work" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZJUlRJT19WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWTVdBUkVfVk1DSV9WU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWU09DS0VUU19MT09QQkFDSyYjMzQ7LAogICAgJiMzNDtWSVJUSU8mIzM0OywKICAgICYjMzQ7Vk1XQVJFX1ZNQ0kmIzM0OywKICAgICYjMzQ7UENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCYjMzQ7LAogICAgJiMzNDt2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYiYjMzQ7LAogICAgJiMzNDt2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvZ2ljIGZpeCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIGFkZHJlc3Mgb2YgaW5jb21pbmcgdnNvY2sgcGFja2V0cyBhZ2FpbnN0IHRoZSBleHBlY3RlZCBwZWVyIGFkZHJlc3MgZm9yIGNvbm5lY3RlZCBzb2NrZXRzIChgdnNvY2tfY2hlY2tfc291cmNlYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGRhdGEgbGVha3MgdG8gdXNlcnNwYWNlLiBBbGwgc3RydWN0dXJlcyBpbnZvbHZlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgYW5kIHRoZSBjaGFuZ2VzIG1lcmVseSBhZGQgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIGV4aXN0aW5nIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSwgYW5kIHN0YW5kYXJkIHRlc3RpbmcvS0FTQU4gaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgdnNvY2tfY2hlY2tfc291cmNlYCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIG9mIGluY29taW5nIHBhY2tldHMgYWdhaW5zdCB0aGUgc29ja2V0IHBlZXIuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AgdG8gZHJvcCBwYWNrZXRzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzb3VyY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2c29jayBsb2dpYyBhbmQgaXRzIHRyYW5zcG9ydHMgKHZpcnRpbyBhbmQgdm1jaSkgdGhhdCBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjgzOGRhNDkwZDY5Y2YzZjYwM2E5ZTM3Nzk0N2E0NmIwOWZhNjA5ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDE4OjE3OjQ2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oXG5pbmRleCAzMzU3ZWU2MmQxMGJmLi41NTQ5Mjk4YzFlYzZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuQEAgLTIyOSw2ICYjNDM7MjI5LDkgQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfYm91bmRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsXG4gc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHNvY2thZGRyX3ZtICpkc3QsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldCAqbmV0KTtcbiYjNDM7Ym9vbCB2c29ja19jaGVja19zb3VyY2UoY29uc3Qgc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyk7XG4gdm9pZCB2c29ja19yZW1vdmVfc29jayhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKTtcbiB2b2lkIHZzb2NrX2Zvcl9lYWNoX2Nvbm5lY3RlZF9zb2NrZXQoc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuIFx0XHRcdFx0ICAgICB2b2lkICgqZm4pKHN0cnVjdCBzb2NrICpzaykpO1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuaW5kZXggYTMzYjJhMmQzODFkYy4uZjg0MDQ5OGI1OGFmYiAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5AQCAtNDM4LDYgJiM0Mzs0MzgsMzggQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0KTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHZzb2NrX2NoZWNrX3NvdXJjZSAtIHZhbGlkYXRlIGEgcGFja2V0IHNvdXJjZSBhZ2FpbnN0IGEgc29ja2V0IHBlZXJcbiYjNDM7ICogQHZzazogc29ja2V0IHJlY2VpdmluZyB0aGUgcGFja2V0XG4mIzQzOyAqIEB0cmFuc3BvcnQ6IHRyYW5zcG9ydCByZWNlaXZpbmcgdGhlIHBhY2tldFxuJiM0MzsgKiBAc3JjOiBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBwYWNrZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWNrZXQgYXJyaXZlZCBvbiB0aGUgc29ja2V0JiMzOTtzIGFzc2lnbmVkIHRyYW5zcG9ydCBhbmRcbiYjNDM7ICogaXRzIHNvdXJjZSBtYXRjaGVzIHRoZSBzdG9yZWQgcGVlci4gTG9vcGJhY2sgcGFja2V0cyBhcmUgZ2VuZXJhdGVkXG4mIzQzOyAqIGludGVybmFsbHkgYW5kIGFsd2F5cyB1c2UgdGhlIGxvY2FsIENJRCBhcyB0aGVpciBzb3VyY2UsIGluY2x1ZGluZ1xuJiM0MzsgKiBjb25uZWN0aW9ucyB1c2luZyBhIHZhbGlkIENJRCBhbGlhcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHNvY2tldCBsb2NrIGFuZCBtdXN0IG5vdCBjYWxsIHRoaXMgZm9yIGxpc3RlbmluZ1xuJiM0MzsgKiBzb2NrZXRzLCB3aGljaCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBzb3VyY2UgYW5kIGhhdmUgbm8gYXNzaWduZWRcbiYjNDM7ICogdHJhbnNwb3J0LlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCB2c29ja19jaGVja19zb3VyY2UoY29uc3Qgc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbiYjNDM7XHRcdFx0Y29uc3Qgc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuJiM0MztcdFx0XHRjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYylcbiYjNDM7e1xuJiM0MztcdGlmICh2c2stXHUwMDNldHJhbnNwb3J0ICE9IHRyYW5zcG9ydClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNyYy1cdTAwM2Vzdm1fcG9ydCAhPSB2c2stXHUwMDNlcmVtb3RlX2FkZHIuc3ZtX3BvcnQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChzcmMtXHUwMDNlc3ZtX2NpZCA9PSB2c2stXHUwMDNlcmVtb3RlX2FkZHIuc3ZtX2NpZClcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJhbnNwb3J0LVx1MDAzZWdldF9sb2NhbF9jaWQoKSA9PSBWTUFERFJfQ0lEX0xPQ0FMO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2NoZWNrX3NvdXJjZSk7XG4mIzQzO1xuIHZvaWQgdnNvY2tfcmVtb3ZlX3NvY2soc3RydWN0IHZzb2NrX3NvY2sgKnZzaylcbiB7XG4gXHQvKiBUcmFuc3BvcnQgcmVhc3NpZ25tZW50IG11c3Qgbm90IHJlbW92ZSB0aGUgYmluZGluZy4gKi9cbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbmluZGV4IGU0ZWJhYTcwZjZjMjMuLjYzMDFjMTA4YTRmMTAgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuQEAgLTE4MjMsNyAmIzQzOzE4MjMsOCBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXG4gXHQgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KVxuIFx0ICovXG4gXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8XG4tXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2IHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQpKSB7XG4mIzQzO1x0ICAgIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c2ssIFx1MDAyNnQtXHUwMDNldHJhbnNwb3J0LCBcdTAwMjZzcmMpKSkge1xuIFx0XHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xuIFx0XHRyZWxlYXNlX3NvY2soc2spO1xuIFx0XHRzb2NrX3B1dChzayk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jIGIvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jXG5pbmRleCAxYzRlZTAzOWMxNjYyLi5iNjEyYTk4OTM4NTZhIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmNcbkBAIC02ODAsMTEgJiM0Mzs2ODAsMTMgQEAgc3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpXG4gXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7XG4gXHRzdHJ1Y3QgdnNvY2tfc29jayAqdnNrO1xuIFx0Ym9vbCBiaF9wcm9jZXNzX3BrdDtcbiYjNDM7XHRib29sIGRyb3BfcGt0O1xuIFx0aW50IGVycjtcbiBcbiBcdHNrID0gTlVMTDtcbiBcdGVyciA9IFZNQ0lfU1VDQ0VTUztcbiBcdGJoX3Byb2Nlc3NfcGt0ID0gZmFsc2U7XG4mIzQzO1x0ZHJvcF9wa3QgPSBmYWxzZTtcbiBcbiBcdC8qIElnbm9yZSBpbmNvbWluZyBwYWNrZXRzIGZyb20gcmVzb3VyY2VzIHRoYXQgYXJlbiYjMzk7dCB2c29ja1xuIFx0ICogaW1wbGVtZW50YXRpb25zLlxuQEAgLTc2NSwxNyAmIzQzOzc2NywyNiBAQCBzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZylcbiBcdGJoX2xvY2tfc29jayhzayk7XG4gXG4gXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHtcbi1cdFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXG4tXHRcdHZzay1cdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDtcbiYjNDM7XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgICF2c29ja19jaGVja19zb3VyY2UodnNrLCBcdTAwMjZ2bWNpX3RyYW5zcG9ydCwgXHUwMDI2c3JjKSkge1xuJiM0MztcdFx0XHRkcm9wX3BrdCA9IHRydWU7XG4mIzQzO1x0XHRcdGVyciA9IFZNQ0lfRVJST1JfTk9fQUNDRVNTO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXG4mIzQzO1x0XHRcdHZzay1cdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDtcbiBcbi1cdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcbi1cdFx0XHR2bWNpX3RyYW5zKHZzayktXHUwMDNlbm90aWZ5X29wcy1cdTAwM2VoYW5kbGVfbm90aWZ5X3BrdChcbi1cdFx0XHRcdFx0c2ssIHBrdCwgdHJ1ZSwgXHUwMDI2ZHN0LCBcdTAwMjZzcmMsXG4tXHRcdFx0XHRcdFx1MDAyNmJoX3Byb2Nlc3NfcGt0KTtcbiYjNDM7XHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcbiYjNDM7XHRcdFx0XHR2bWNpX3RyYW5zKHZzayktXHUwMDNlbm90aWZ5X29wcy1cdTAwM2VoYW5kbGVfbm90aWZ5X3BrdChzaywgcGt0LCB0cnVlLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2ZHN0LCBcdTAwMjZzcmMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZiaF9wcm9jZXNzX3BrdCk7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRiaF91bmxvY2tfc29jayhzayk7XG4gXG4mIzQzO1x0aWYgKGRyb3BfcGt0KVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0aWYgKCFiaF9wcm9jZXNzX3BrdCkge1xuIFx0XHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbztcbiBcbkBAIC05MDAsNiAmIzQzOzkxMSw3IEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbiBcdHN0cnVjdCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF9pbmZvICpyZWN2X3BrdF9pbmZvO1xuIFx0c3RydWN0IHZtY2lfdHJhbnNwb3J0X3BhY2tldCAqcGt0O1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl92bSBzcmM7XG4gXHRzdHJ1Y3Qgc29jayAqc2s7XG4gXG4gXHRyZWN2X3BrdF9pbmZvID1cbkBAIC05MDgsNiAmIzQzOzkyMCwxMCBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHBrdCA9IFx1MDAyNnJlY3ZfcGt0X2luZm8tXHUwMDNlcGt0O1xuIFxuIFx0bG9ja19zb2NrKHNrKTtcbiYjNDM7XHR2c29ja19hZGRyX2luaXQoXHUwMDI2c3JjLCBwa3QtXHUwMDNlZGcuc3JjLmNvbnRleHQsIHBrdC1cdTAwM2VzcmNfcG9ydCk7XG4mIzQzO1x0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICF2c29ja19jaGVja19zb3VyY2UodnNvY2tfc2soc2spLCBcdTAwMjZ2bWNpX3RyYW5zcG9ydCwgXHUwMDI2c3JjKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuIFxuIFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLiAqL1xuIFx0dnNvY2tfc2soc2spLVx1MDAzZWxvY2FsX2FkZHIuc3ZtX2NpZCA9IHBrdC1cdTAwM2VkZy5kc3QuY29udGV4dDtcbkBAIC05MzcsNiAmIzQzOzk1Myw3IEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcbiYjNDM7b3V0OlxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdGtmcmVlKHJlY3ZfcGt0X2luZm8pO1xuIFx0LyogUmVsZWFzZSByZWZlcmVuY2Ugb2J0YWluZWQgaW4gdGhlIHN0cmVhbSBjYWxsYmFjayB3aGVuIHdlIGZldGNoZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VklSVElPX1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZNV0FSRV9WTUNJX1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDssCiAgICAmIzM0O1ZJUlRJTyYjMzQ7LAogICAgJiMzNDtWTVdBUkVfVk1DSSYjMzQ7LAogICAgJiMzNDtQQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0JiMzNDssCiAgICAmIzM0O3ZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiJiMzNDssCiAgICAmIzM0O3ZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgdnNvY2tfY2hlY2tfc291cmNlYCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIG9mIGluY29taW5nIHBhY2tldHMgYWdhaW5zdCB0aGUgc29ja2V0IHBlZXIuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AgdG8gZHJvcCBwYWNrZXRzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzb3VyY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2c29jayBsb2dpYyBhbmQgaXRzIHRyYW5zcG9ydHMgKHZpcnRpbyBhbmQgdm1jaSkgdGhhdCBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjgzOGRhNDkwZDY5Y2YzZjYwM2E5ZTM3Nzk0N2E0NmIwOWZhNjA5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE4OjE3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaCBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKaW5kZXggMzM1N2VlNjJkMTBiZi4uNTU0OTI5OGMxZWM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9hZl92c29jay5oCkBAIC0yMjksNiAmIzQzOzIyOSw5IEBAIHN0cnVjdCBzb2NrICp2c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLAogc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsCiAJCQkJCSAgICAgc3RydWN0IHNvY2thZGRyX3ZtICpkc3QsCiAJCQkJCSAgICAgc3RydWN0IG5ldCAqbmV0KTsKJiM0Mztib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAomIzQzOwkJCWNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKJiM0MzsJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyk7CiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spOwogdm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKIAkJCQkgICAgIHZvaWQgKCpmbikoc3RydWN0IHNvY2sgKnNrKSk7CmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKaW5kZXggYTMzYjJhMmQzODFkYy4uZjg0MDQ5OGI1OGFmYiAxMDA2NDQKLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwpAQCAtNDM4LDYgJiM0Mzs0MzgsMzggQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYywKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldCk7CiAKJiM0MzsvKioKJiM0MzsgKiB2c29ja19jaGVja19zb3VyY2UgLSB2YWxpZGF0ZSBhIHBhY2tldCBzb3VyY2UgYWdhaW5zdCBhIHNvY2tldCBwZWVyCiYjNDM7ICogQHZzazogc29ja2V0IHJlY2VpdmluZyB0aGUgcGFja2V0CiYjNDM7ICogQHRyYW5zcG9ydDogdHJhbnNwb3J0IHJlY2VpdmluZyB0aGUgcGFja2V0CiYjNDM7ICogQHNyYzogc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgcGFja2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBhY2tldCBhcnJpdmVkIG9uIHRoZSBzb2NrZXQmIzM5O3MgYXNzaWduZWQgdHJhbnNwb3J0IGFuZAomIzQzOyAqIGl0cyBzb3VyY2UgbWF0Y2hlcyB0aGUgc3RvcmVkIHBlZXIuIExvb3BiYWNrIHBhY2tldHMgYXJlIGdlbmVyYXRlZAomIzQzOyAqIGludGVybmFsbHkgYW5kIGFsd2F5cyB1c2UgdGhlIGxvY2FsIENJRCBhcyB0aGVpciBzb3VyY2UsIGluY2x1ZGluZwomIzQzOyAqIGNvbm5lY3Rpb25zIHVzaW5nIGEgdmFsaWQgQ0lEIGFsaWFzLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHNvY2tldCBsb2NrIGFuZCBtdXN0IG5vdCBjYWxsIHRoaXMgZm9yIGxpc3RlbmluZwomIzQzOyAqIHNvY2tldHMsIHdoaWNoIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHNvdXJjZSBhbmQgaGF2ZSBubyBhc3NpZ25lZAomIzQzOyAqIHRyYW5zcG9ydC4KJiM0MzsgKi8KJiM0Mztib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAomIzQzOwkJCWNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKJiM0MzsJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYykKJiM0Mzt7CiYjNDM7CWlmICh2c2stJmd0O3RyYW5zcG9ydCAhPSB0cmFuc3BvcnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzcmMtJmd0O3N2bV9wb3J0ICE9IHZzay0mZ3Q7cmVtb3RlX2FkZHIuc3ZtX3BvcnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzcmMtJmd0O3N2bV9jaWQgPT0gdnNrLSZndDtyZW1vdGVfYWRkci5zdm1fY2lkKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiB0cmFuc3BvcnQtJmd0O2dldF9sb2NhbF9jaWQoKSA9PSBWTUFERFJfQ0lEX0xPQ0FMOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jaGVja19zb3VyY2UpOwomIzQzOwogdm9pZCB2c29ja19yZW1vdmVfc29jayhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKQogewogCS8qIFRyYW5zcG9ydCByZWFzc2lnbm1lbnQgbXVzdCBub3QgcmVtb3ZlIHRoZSBiaW5kaW5nLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jCmluZGV4IGU0ZWJhYTcwZjZjMjMuLjYzMDFjMTA4YTRmMTAgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKQEAgLTE4MjMsNyAmIzQzOzE4MjMsOCBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsCiAJICogbG9ja19zb2NrIChub3RlOiBsaXN0ZW5lciBzb2NrZXRzIGFyZSBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydCkKIAkgKi8KIAlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8Ci0JICAgIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7IHZzay0mZ3Q7dHJhbnNwb3J0ICE9ICZhbXA7dC0mZ3Q7dHJhbnNwb3J0KSkgewomIzQzOwkgICAgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOICZhbXA7JmFtcDsKJiM0MzsJICAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzaywgJmFtcDt0LSZndDt0cmFuc3BvcnQsICZhbXA7c3JjKSkpIHsKIAkJKHZvaWQpdmlydGlvX3RyYW5zcG9ydF9yZXNldF9ub19zb2NrKHQsIHNrYiwgbmV0KTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJc29ja19wdXQoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jIGIvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jCmluZGV4IDFjNGVlMDM5YzE2NjIuLmI2MTJhOTg5Mzg1NmEgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMKQEAgLTY4MCwxMSAmIzQzOzY4MCwxMyBAQCBzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZykKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7CiAJc3RydWN0IHZzb2NrX3NvY2sgKnZzazsKIAlib29sIGJoX3Byb2Nlc3NfcGt0OwomIzQzOwlib29sIGRyb3BfcGt0OwogCWludCBlcnI7CiAKIAlzayA9IE5VTEw7CiAJZXJyID0gVk1DSV9TVUNDRVNTOwogCWJoX3Byb2Nlc3NfcGt0ID0gZmFsc2U7CiYjNDM7CWRyb3BfcGt0ID0gZmFsc2U7CiAKIAkvKiBJZ25vcmUgaW5jb21pbmcgcGFja2V0cyBmcm9tIHJlc291cmNlcyB0aGF0IGFyZW4mIzM5O3QgdnNvY2sKIAkgKiBpbXBsZW1lbnRhdGlvbnMuCkBAIC03NjUsMTcgJiM0Mzs3NjcsMjYgQEAgc3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpCiAJYmhfbG9ja19zb2NrKHNrKTsKIAogCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkgewotCQkvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUsIHVwZGF0ZSBpdC4gKi8KLQkJdnNrLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDsKJiM0MzsJCWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c2ssICZhbXA7dm1jaV90cmFuc3BvcnQsICZhbXA7c3JjKSkgewomIzQzOwkJCWRyb3BfcGt0ID0gdHJ1ZTsKJiM0MzsJCQllcnIgPSBWTUNJX0VSUk9SX05PX0FDQ0VTUzsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovCiYjNDM7CQkJdnNrLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDsKIAotCQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCkKLQkJCXZtY2lfdHJhbnModnNrKS0mZ3Q7bm90aWZ5X29wcy0mZ3Q7aGFuZGxlX25vdGlmeV9wa3QoCi0JCQkJCXNrLCBwa3QsIHRydWUsICZhbXA7ZHN0LCAmYW1wO3NyYywKLQkJCQkJJmFtcDtiaF9wcm9jZXNzX3BrdCk7CiYjNDM7CQkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpCiYjNDM7CQkJCXZtY2lfdHJhbnModnNrKS0mZ3Q7bm90aWZ5X29wcy0mZ3Q7aGFuZGxlX25vdGlmeV9wa3Qoc2ssIHBrdCwgdHJ1ZSwKJiM0MzsJCQkJCQkJCQkgICAgICAgJmFtcDtkc3QsICZhbXA7c3JjLAomIzQzOwkJCQkJCQkJCSAgICAgICAmYW1wO2JoX3Byb2Nlc3NfcGt0KTsKJiM0MzsJCX0KIAl9CiAKIAliaF91bmxvY2tfc29jayhzayk7CiAKJiM0MzsJaWYgKGRyb3BfcGt0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaWYgKCFiaF9wcm9jZXNzX3BrdCkgewogCQlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbzsKIApAQCAtOTAwLDYgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbzsKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl92bSBzcmM7CiAJc3RydWN0IHNvY2sgKnNrOwogCiAJcmVjdl9wa3RfaW5mbyA9CkBAIC05MDgsNiAmIzQzOzkyMCwxMCBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlwa3QgPSAmYW1wO3JlY3ZfcGt0X2luZm8tJmd0O3BrdDsKIAogCWxvY2tfc29jayhzayk7CiYjNDM7CXZzb2NrX2FkZHJfaW5pdCgmYW1wO3NyYywgcGt0LSZndDtkZy5zcmMuY29udGV4dCwgcGt0LSZndDtzcmNfcG9ydCk7CiYjNDM7CWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CSAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzb2NrX3NrKHNrKSwgJmFtcDt2bWNpX3RyYW5zcG9ydCwgJmFtcDtzcmMpKQomIzQzOwkJZ290byBvdXQ7CiAKIAkvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUuICovCiAJdnNvY2tfc2soc2spLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBwa3QtJmd0O2RnLmRzdC5jb250ZXh0OwpAQCAtOTM3LDYgJiM0Mzs5NTMsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJYnJlYWs7CiAJfQogCiYjNDM7b3V0OgogCXJlbGVhc2Vfc29jayhzayk7CiAJa2ZyZWUocmVjdl9wa3RfaW5mbyk7CiAJLyogUmVsZWFzZSByZWZlcmVuY2Ugb2J0YWluZWQgaW4gdGhlIHN0cmVhbSBjYWxsYmFjayB3aGVuIHdlIGZldGNoZWQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTg6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwMgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSB2c29jayBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBpdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbmFsaXR5IHRoYXQgbmVlZHMgdG8gYmUgZnV6emVkLiBGcm9tIGEgY3Vyc29yeSBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgaXQgZG9lcy4gVGhlIGtleSBpcyB0aGlzIG5ldyBgdnNvY2tfY2hlY2tfc291cmNlYCBmdW5jdGlvbiBiZWluZyBhZGRlZCB0byBgbmV0L3Ztd192c29jay9hZl92c29jay5jYC4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBiZWluZyB1c2VkIGluIGJvdGggYHZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgIGFuZCBwb3RlbnRpYWxseSBgdm1jaV90cmFuc3BvcnQuY2Agc3Ryb25nbHkgc3VnZ2VzdHMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUgY29yZSB2c29jayBsb2dpYy4gSXQgc2VlbXMgdG8gYmUgaW1wbGVtZW50aW5nIHNvdXJjZSB2YWxpZGF0aW9uIGZvciBpbmNvbWluZyBwYWNrZXRzLCB3aGljaCBtZWFucyBob3cgcGFja2V0cyBhcmUgYWNjZXB0ZWQgb3IgZHJvcHBlZCBpcyBub3cgZGlmZmVyZW50LCBhbmQgdGhhdCYjMzk7cyBhIGNsZWFyIHRyaWdnZXIgZm9yIGZ1enppbmcuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIGNoYW5nZS4KCk5vdywgbGV0JiMzOTtzIHNlZSBhYm91dCBtYWtpbmcgdGhpcyBmdXp6YWJsZS4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgYW5kIGltcG9ydGFudCBzeW1ib2xzIHRvIGZvY3VzIG9uLiBJJiMzOTttIHNlZWluZyBgQ09ORklHX1ZTT0NLRVRTYCwgYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNgLCBhbmQgYENPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUU2AgYXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMuIE1ha2VzIHNlbnNlLiBUaGVuIHRoZXJlIGFyZSB0aGUgc3ltYm9scyB0byBsb29rIGF0LiBgdnNvY2tfY2hlY2tfc291cmNlYCBpcyBkZWZpbml0ZWx5IGEga2V5IG5ldyBmdW5jdGlvbiwgZXZlbiBpZiBpdCYjMzk7cyBhIGhlbHBlciBhbmQgbm90IHRoZSBpZGVhbCBlbnRyeSBwb2ludC4gSXQmIzM5O3MgZXhwb3J0ZWQsIHdoaWNoIGlzIGdvb2QuIEkgbmVlZCB0byBsb29rIGF0IGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCBhbmQgYHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtgIGFzIG90aGVyIHBvc3NpYmxlIGVudHJ5IHBvaW50cy4KCkkmIzM5O2xsIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBmb3IgdnNvY2sgY29uZmlndXJhdGlvbnMgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBidXQgc28gZmFyLCB0aGlzIGlzIGxvb2tpbmcgbGlrZSBhIGhpZ2gtcHJpb3JpdHkgZnV6emluZyB0YXJnZXQgZHVlIHRvIHRoZSBzb3VyY2UgdmFsaWRhdGlvbiBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBWSVJUSU9fVlNPQ0tFVFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWc9NDE9Y29uZmlnIFZNV0FSRV9WTUNJX1ZTT0NLRVRTXG4tLVxubmV0L3Ztd192c29jay9LY29uZmlnLTUyLVxubmV0L3Ztd192c29jay9LY29uZmlnOjUzOmNvbmZpZyBWSVJUSU9fVlNPQ0tFVFNcbm5ldC92bXdfdnNvY2svS2NvbmZpZy01NC1cdHRyaXN0YXRlIFwmIzM0O3ZpcnRpbyB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1wmIzM0O1xuLS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZy02NS1cbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2Njpjb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxubmV0L3Ztd192c29jay9LY29uZmlnLTY3LVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzcxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgZ3JhbnVsYXIuIEJlZm9yZSBJIGV2ZW4gKnRoaW5rKiBhYm91dCBkZXBsb3lpbmcgdGhlc2UgY29uZmlncywgSSBuZWVkIHRvIHBlcmZvcm0gYSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgZGVwZW5kZW5jaWVzLiBJdCYjMzk7cyBhbG1vc3Qgc2Vjb25kIG5hdHVyZSB0byBtZTsgZW5zdXJpbmcgY29tcGF0aWJpbGl0eSBhbmQgYXZvaWRpbmcgZG93bnN0cmVhbSBmYWlsdXJlcyBpcyBwYXJhbW91bnQuIEkmIzM5O20gZXNzZW50aWFsbHkgcnVubmluZyBhIG1lbnRhbCBjaGVja2xpc3QsIGJ1dCBpdCYjMzk7cyBhIGNyaXRpY2FsIG9uZS4gV2hhdCBvdGhlciBzeXN0ZW1zIG9yIHNlcnZpY2VzIGFyZSB0aGVzZSBjb25maWdzIHRvdWNoaW5nPyBBcmUgdGhvc2UgY29tcG9uZW50cyB1cC10by1kYXRlPyBBcmUgdGhlIEFQSSB2ZXJzaW9ucyBjb21wYXRpYmxlPyBIYXZlIEkgYWNjb3VudGVkIGZvciBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBvciBicmVha2luZyBjaGFuZ2VzPyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IG1hcCBvdXQgdGhlICYjMzQ7d2hvIHRhbGtzIHRvIHdob20mIzM0OyByZWxhdGlvbnNoaXBzIGFuZCBhc3Nlc3MgdGhlIHJpcHBsZSBlZmZlY3RzIG9mIGFueSBtb2RpZmljYXRpb25zLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IGF2b2lkaW5nIGEgc2VydmljZSBvdXRhZ2UsIGl0JiMzOTtzIGFib3V0IG1pbmltaXppbmcgdGhlIHJpc2sgb2Ygc3VidGxlLCBoYXJkLXRvLWRpYWdub3NlIGVycm9ycyB0aGF0IGNvdWxkIGRlZ3JhZGUgcGVyZm9ybWFuY2Ugb3IsIHdvcnNlLCBjb21wcm9taXNlIGRhdGEgaW50ZWdyaXR5IGRvd24gdGhlIGxpbmUuIEEgcHJvYWN0aXZlIGRlcGVuZGVuY3kgYXVkaXQgbm93IHNhdmVzIG1lIGEgd29ybGQgb2YgaGVhZGFjaGUgbGF0ZXIuIFRpbWUgdG8gZGlnIGluLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvdm13X3Zzb2NrL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVnNvY2sgcHJvdG9jb2xcbiAgIDQ6XHQjXG4gICA1Olx0XG4gICA2Olx0Y29uZmlnIFZTT0NLRVRTXG4gICA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIFNvY2tldCBwcm90b2NvbFwmIzM0O1xuICAgODpcdFx0aGVscFxuICAgOTpcdFx0ICBWaXJ0dWFsIFNvY2tldCBQcm90b2NvbCBpcyBhIHNvY2tldCBwcm90b2NvbCBzaW1pbGFyIHRvIFRDUC9JUFxuICAxMDpcdFx0ICBhbGxvd2luZyBjb21tdW5pY2F0aW9uIGJldHdlZW4gVmlydHVhbCBNYWNoaW5lcyBhbmQgaHlwZXJ2aXNvclxuICAxMTpcdFx0ICBvciBob3N0LlxuICAxMjpcdFxuICAxMzpcdFx0ICBZb3Ugc2hvdWxkIGFsc28gc2VsZWN0IG9uZSBvciBtb3JlIGh5cGVydmlzb3Itc3BlY2lmaWMgdHJhbnNwb3J0c1xuICAxNDpcdFx0ICBiZWxvdy5cbiAgMTU6XHRcbiAgMTY6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAxNzpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2c29jay4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgMTg6XHRcbiAgMTk6XHRjb25maWcgVlNPQ0tFVFNfRElBR1xuICAyMDpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDIxOlx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTXG4gIDIyOlx0XHRkZWZhdWx0IHlcbiAgMjM6XHRcdGhlbHBcbiAgMjQ6XHRcdCAgU3VwcG9ydCBmb3IgUEZfVlNPQ0sgc29ja2V0cyBtb25pdG9yaW5nIGludGVyZmFjZSB1c2VkIGJ5IHRoZSBzcyB0b29sLlxuICAyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBZLlxuICAyNjpcdFxuICAyNzpcdFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgc28gdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBjYW4gcXVlcnkgb3BlbiBzb2NrZXRzLlxuICAyODpcdFxuICAyOTpcdGNvbmZpZyBWU09DS0VUU19MT09QQkFDS1xuICAzMDpcdFx0dHJpc3RhdGUgXCYjMzQ7VmlydHVhbCBTb2NrZXRzIGxvb3BiYWNrIHRyYW5zcG9ydFwmIzM0O1xuICAzMTpcdFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xuICAzMjpcdFx0ZGVmYXVsdCB5XG4gIDMzOlx0XHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxuICAzNDpcdFx0aGVscFxuICAzNTpcdFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgbG9vcGJhY2sgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMsXG4gIDM2Olx0XHQgIHVzaW5nIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5cbiAgMzc6XHRcbiAgMzg6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICAzOTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2c29ja19sb29wYmFjay4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgNDA6XHRcbiAgNDE6XHRjb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcbiAgNDI6XHRcdHRyaXN0YXRlIFwmIzM0O1ZNd2FyZSBWTUNJIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG4gIDQzOlx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWTVdBUkVfVk1DSVxuICA0NDpcdFx0aGVscFxuICA0NTpcdFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgVk1DSSB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0cy5cbiAgNDY6XHRcbiAgNDc6XHRcdCAgRW5hYmxlIHRoaXMgdHJhbnNwb3J0IGlmIHlvdXIgVmlydHVhbCBNYWNoaW5lIHJ1bnMgb24gYSBWTXdhcmVcbiAgNDg6XHRcdCAgaHlwZXJ2aXNvci5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZVxuICA1MTpcdFx0ICB3aWxsIGJlIGNhbGxlZCB2bXdfdnNvY2tfdm1jaV90cmFuc3BvcnQuIElmIHVuc3VyZSwgc2F5IE4uXG4gIDUyOlx0XG4gIDUzOlx0Y29uZmlnIFZJUlRJT19WU09DS0VUU1xuICA1NDpcdFx0dHJpc3RhdGUgXCYjMzQ7dmlydGlvIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXCYjMzQ7XG4gIDU1Olx0XHRkZXBlbmRzIG9uIFZTT0NLRVRTIFx1MDAyNlx1MDAyNiBWSVJUSU9cbiAgNTY6XHRcdHNlbGVjdCBWSVJUSU9fVlNPQ0tFVFNfQ09NTU9OXG4gIDU3Olx0XHRoZWxwXG4gIDU4Olx0XHQgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSB2aXJ0aW8gdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMuXG4gIDU5Olx0XG4gIDYwOlx0XHQgIEVuYWJsZSB0aGlzIHRyYW5zcG9ydCBpZiB5b3VyIFZpcnR1YWwgTWFjaGluZSBob3N0IHN1cHBvcnRzIFZpcnR1YWxcbiAgNjE6XHRcdCAgU29ja2V0cyBvdmVyIHZpcnRpby5cbiAgNjI6XHRcbiAgNjM6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDY0Olx0XHQgIGNhbGxlZCB2bXdfdnNvY2tfdmlydGlvX3RyYW5zcG9ydC4gSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxuICA2NzpcdFx0dHJpc3RhdGVcbiAgNjg6XHRcdGhlbHBcbiAgNjk6XHRcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBuZWVkcyB0byBhY2Nlc3NcbiAgNzA6XHRcdCAgdGhlIHZpcnRpb192c29jay4gIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiAgNzE6XHRcdCAgdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLlxuICA3MjpcdFxuICA3MzpcdGNvbmZpZyBIWVBFUlZfVlNPQ0tFVFNcbiAgNzQ6XHRcdHRyaXN0YXRlIFwmIzM0O0h5cGVyLVYgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHNcJiMzNDtcbiAgNzU6XHRcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXHUwMDI2XHUwMDI2IEhZUEVSVl9WTUJVU1xuICA3NjpcdFx0aGVscFxuICA3NzpcdFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgSHlwZXItViB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0cy5cbiAgNzg6XHRcbiAgNzk6XHRcdCAgRW5hYmxlIHRoaXMgdHJhbnNwb3J0IGlmIHlvdXIgVmlydHVhbCBNYWNoaW5lIGhvc3Qgc3VwcG9ydHMgVmlydHVhbFxuICA4MDpcdFx0ICBTb2NrZXRzIG92ZXIgSHlwZXItViBWTUJ1cy5cbiAgODE6XHRcbiAgODI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDgzOlx0XHQgIGNhbGxlZCBodl9zb2NrLiBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxNDgKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENoZWNrbGlzdCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRoaXMgdlNvY2tldCBpbXBsZW1lbnRhdGlvbiB1cCBhbmQgcnVubmluZy4gRmlyc3QsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gcHJldHR5IHN1cmUgSSBuZWVkIGBWU09DS0VUU2AsIG9idmlvdXNseSwgYW5kIHRoZW4gdGhlIGZvdW5kYXRpb25hbCBgVklSVElPYCBsYXllci4gU2luY2Ugd2UgYXJlIHVzaW5nIHZTb2NrZXRzIG9uIFZpcnRJTywgdGhlIHNwZWNpZmljIGBWSVJUSU9fVlNPQ0tFVFNgIG9wdGlvbiBzZWVtcyBsaWtlIGEgZ2l2ZW4uIE5vdywgd2UgYXJlIGRlYWxpbmcgd2l0aCBhIFZNd2FyZSBlbnZpcm9ubWVudCwgc28gYFZNV0FSRV9WTUNJYCBpcyBsaWtlbHkgZ29pbmcgdG8gYmUgbmVjZXNzYXJ5LiBGaW5hbGx5LCB0byBlbmFibGUgdGhlIHZTb2NrZXQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIFZNQ0kgZnJhbWV3b3JrLCBJJiMzOTtsbCBuZWVkIGBWTVdBUkVfVk1DSV9WU09DS0VUU2AuIEdvdCBpdC4KCk5vdywgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBWTVdBUkVfVk1DSWAsIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgY2hlY2sgaXRzIEtjb25maWcgZmlsZS4gSSYjMzk7bGwgdGFrZSBhIGxvb2sgYXQgdGhlIG9uZSBsb2NhdGVkIGluIGBkcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZ2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZXRhaWxzIGFyb3VuZCB0aGF0IG1vZHVsZS4gVGhpcyBpcyBqdXN0IGR1ZSBkaWxpZ2VuY2UuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZyBlc3NlbnRpYWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTg6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZNV0FSRV9WTUNJJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9taXNjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZy01LVxuZHJpdmVycy9taXNjL3Ztd192bWNpL0tjb25maWc6Njpjb25maWcgVk1XQVJFX1ZNQ0lcbmRyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtWTXdhcmUgVk1DSSBEcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTU0CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDaGVja2luZyBWTVdBUkVfVk1DSSBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIHRoZSBhZ2VuZGEgaXMgYSBkZWVwIGRpdmUgaW50byB0aGUgYFZNV0FSRV9WTUNJYCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3JpdGljYWwgY29tcG9uZW50cyB0aGF0IHJlbHkgb24gdGhpcyBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBpZiBpdCYjMzk7cyBhbHRlcmVkLCB1cGRhdGVkLCBvciByZW1vdmVkLiBJ4oCZbSB0aGlua2luZyBpbiB0ZXJtcyBvZiB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSwgdGhlIGh5cGVydmlzb3ImIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZ3Vlc3QgT1MsIGFuZCBvZiBjb3Vyc2UsIHRoZSBpbXBsaWNhdGlvbnMgZm9yIGFueSBoaWdoZXItbGV2ZWwgc2VydmljZXMgYnVpbHQgdXBvbiB0aGUgVk1DSS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGJlIHRoaW5raW5nIGFib3V0OgoKKiAgICoqS2VybmVsIG1vZHVsZXM6KiogV2hhdCBtb2R1bGVzIGFyZSB0aWdodGx5IGNvdXBsZWQsIGFuZCB3aGF0JiMzOTtzIHRoZSB2ZXJzaW9uIGNvbXBhdGliaWxpdHkgbGlrZT8gQW55IGtub3duIGNvbmZsaWN0cz8KKiAgICoqVXNlci1zcGFjZSBsaWJyYXJpZXM6KiogQXJlIHRoZXJlIGFueSBzaGFyZWQgb2JqZWN0IGRlcGVuZGVuY2llcywgYW5kIGlmIHNvLCBkbyB0aGV5IGFsaWduIHdpdGggdGhlIGV4cGVjdGVkIHZlcnNpb25zPwoqICAgKipWaXJ0dWFsIG1hY2hpbmUgY29uZmlndXJhdGlvbjoqKiBIb3cgZGVlcGx5IGlzIFZNQ0kgaW50ZWdyYXRlZCBpbnRvIHRoZSBWTSB0ZW1wbGF0ZT8gSXMgaXQgc2FmZSB0byBhbHRlciBpdD8KKiAgICoqUGVyZm9ybWFuY2UgaW1wbGljYXRpb25zOioqIEFueSBrbm93biBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciByZXNvdXJjZSBjb250ZW50aW9uIGlzc3VlcyB3aGVuIFZNQ0kgaXMgYWN0aXZlPwoqICAgKipTZWN1cml0eSB2dWxuZXJhYmlsaXRpZXM6KiogQXJlIHRoZXJlIGFueSBrbm93biBleHBsb2l0cyBvciBhdHRhY2sgdmVjdG9ycyB0aGF0IGNvdWxkIGltcGFjdCB0aGUgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnQ/CgpJJiMzOTttIGVzc2VudGlhbGx5IHRyeWluZyB0byBidWlsZCBhIHF1aWNrIGRlcGVuZGVuY3kgdHJlZSBpbiBteSBoZWFkIGFuZCBhc3Nlc3MgdGhlIGJsYXN0IHJhZGl1cyBvZiBhbnkgbW9kaWZpY2F0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgbGVnYWN5IGNvZGUgb3Igd29ya2Fyb3VuZHMgdGhhdCBtYXkgYmUgaW1wYWN0aW5nIHRoZSBjb2RlLWJhc2UuIExldCYjMzk7cyBzdGFydCBkaWdnaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVk13YXJlIFZNQ0kgZGV2aWNlXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBWTVdBUkVfVk1DSVxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7Vk13YXJlIFZNQ0kgRHJpdmVyXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIChYODYgfHwgQVJNNjQpIFx1MDAyNlx1MDAyNiAhQ1BVX0JJR19FTkRJQU4gXHUwMDI2XHUwMDI2IFBDSVxuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBUaGlzIGlzIFZNd2FyZSYjMzk7cyBWaXJ0dWFsIE1hY2hpbmUgQ29tbXVuaWNhdGlvbiBJbnRlcmZhY2UuICBJdCBlbmFibGVzXG4gIDExOlx0XHQgIGhpZ2gtc3BlZWQgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGhvc3QgYW5kIGd1ZXN0IGluIGEgdmlydHVhbFxuICAxMjpcdFx0ICBlbnZpcm9ubWVudCB2aWEgdGhlIFZNQ0kgdmlydHVhbCBkZXZpY2UuXG4gIDEzOlx0XG4gIDE0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDE1Olx0XG4gIDE2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuICAxNzpcdFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdm13X3ZtY2kuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNDgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVk1XQVJFX1ZNQ0kgYW5kIFBhY2tldCBSZWNlcHRpb24qKgoKT2theSwgc28gYFZNV0FSRV9WTUNJYCByZWxpZXMgb24gYFBDSWAsIHdoaWNoIG1ha2VzIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBzdHJhaWdodGZvcndhcmQuIFdlJiMzOTtyZSBsb29raW5nIGF0IGEgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIGhlcmU6IGBWU09DS0VUU2AsIGBWSVJUSU9gLCBgVklSVElPX1ZTT0NLRVRTYCwgYFBDSWAsIGBWTVdBUkVfVk1DSWAsIGFuZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2Ygd2hlcmUgdG8gZm9jdXMgb3VyIGFuYWx5c2lzLiBJJiMzOTt2ZSBnb3QgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byBjb25zaWRlcjogYHZzb2NrX2NoZWNrX3NvdXJjZWAsIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCwgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYC4gVGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBvbmUocykgYXJlIHRoZSBtb3N0IHN0cmF0ZWdpY2FsbHkgdmFsdWFibGUgZm9yIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWwgZnV6emluZz8KCmB2c29ja19jaGVja19zb3VyY2VgICpzZWVtcyogaW50ZXJlc3RpbmcgYmVjYXVzZSBpdCYjMzk7cyBleHBvcnRlZCwgYnV0LCBvbiBzZWNvbmQgdGhvdWdodCwgaXQmIzM5O3MganVzdCBhIGhlbHBlci4gVGhvc2Ugb3RoZXIgdGhyZWUgYXJlIGVudHJ5IHBvaW50cy4gVGhlIG90aGVyIHRocmVlIGZ1bmN0aW9ucyBjYWxsIGl0LiBGdXp6aW5nIHRoZSBlbnRyeSBwb2ludHMgc2VlbXMgbXVjaCBtb3JlIHByb21pc2luZyBiZWNhdXNlIHRoZXkmIzM5O3JlIHdoZXJlIHRoZSBwYWNrZXRzIGFyZSBhY3R1YWxseSByZWNlaXZlZC4gVGhhdCYjMzk7cyB3aGVyZSB3ZSBzaG91bGQgY29uY2VudHJhdGUgb3VyIGVmZm9ydHMuIEkmIzM5O2xsIHRha2UgYSBsb29rIGF0IGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCBhcyBhIHN0YXJ0aW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NjMyPXN0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNjg3LVx0XHRcdCAqL1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6Njg4Olx0XHRcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXHUwMDI2dmlydGlvX3RyYW5zcG9ydCwgc2tiLCBOVUxMKTtcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydC5jLTY4OS1cdFx0fVxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xNzU4PXN0YXRpYyBib29sIHZpcnRpb190cmFuc3BvcnRfdmFsaWRfdHlwZSh1MTYgdHlwZSlcbi0tXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc2Ni0gKi9cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzY3OnZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzY4LVx0XHRcdCAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQpXG4tLVxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODAtXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmM6MTc4MTpcdHRyYWNlX3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3JjLnN2bV9jaWQsIHNyYy5zdm1fcG9ydCxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzgyLVx0XHRcdFx0XHRkc3Quc3ZtX2NpZCwgZHN0LnN2bV9wb3J0LFxuLS1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xODc1LX1cbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxODc2OkVYUE9SVF9TWU1CT0xfR1BMKHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QpO1xubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE4NzctXG4tLVxubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jPTEyMz1zdGF0aWMgdm9pZCB2c29ja19sb29wYmFja193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2xvb3BiYWNrLmMtMTQxLVx0XHR2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpO1xubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jOjE0MjpcdFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChcdTAwMjZsb29wYmFja190cmFuc3BvcnQsIHNrYixcbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYy0xNDMtXHRcdFx0XHRcdCAgc29ja19uZXQoc2tiLVx1MDAzZXNrKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyOTUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBJIHNlZSBpdDoKCioqRm9jdXNpbmcgSW4gb24gUGFja2V0IFJlY2VwdGlvbiBNZWNoYW5pc21zKioKCk9rYXksIHNvIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIGRpc3NlY3QuIEl0JiMzOTtzIGV4cGxpY2l0bHkgZXhwb3J0ZWQgYW5kIGdldHMgY2FsbGVkIGZyb20gYm90aCBgdmlydGlvX3RyYW5zcG9ydF9yeF93b3JrYCBhbmQgYHZzb2NrX2xvb3BiYWNrX3dvcmtgLiBUaGF0IGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBwYWNrZXQgcmVjZXB0aW9uIHdpdGhpbiB0aGUgVmlydElPIHRyYW5zcG9ydCBsYXllci4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBwb2ludHMgb2YgY29udGVudGlvbiB0aGVyZS4KClNpbmNlIEkmIzM5O20gbG9va2luZyBhdCB0cmFuc3BvcnQgbGF5ZXJzLCBpdCBtYWtlcyBzZW5zZSB0byB0aGVuIHBpdm90IGFuZCBjaGVjayBvdXQgdGhlIFZNQ0kgZXF1aXZhbGVudHMuIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb25jZXB0cyB0cmFuc2xhdGUgb3IgZGlmZmVyLiBTbywgSSBuZWVkIHRvIGxvb2sgYXQgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCBhbmQgYHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtgIHRvIHNlZSB3aGF0IEkgY2FuIGxlYXJuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0zMj1zdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3ZfZGdyYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKTtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzozMzpzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZyk7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMzQtc3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcGVlcl9kZXRhY2hfY2IodTMyIHN1Yl9pZCxcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9NjQ5PXN0YXRpYyBib29sIHZtY2lfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkLFxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy02NzQtXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6Njc1OnN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTY3Ni17XG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTkxMD1zdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtOTQ2LVx0XHQvKiBCZWNhdXNlIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcnVuIGluIHRoZSBzYW1lIGNvbnRleHQgYXNcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzo5NDc6XHRcdCAqIHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtOTQ4LVx0XHQgKiBzb2NrZXQgaGFzIGNsb3NlZC4gV2UgbmVlZCB0byBsZXQgdGhlIG90aGVyIHNpZGUga25vdyBvciBpdFxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0yMTEzPXN0YXRpYyBpbnQgX19pbml0IHZtY2lfdHJhbnNwb3J0X2luaXQodm9pZClcbi0tXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMjEyMS1cdFx0XHRcdFx0XHQgVk1DSV9GTEFHX0FOWUNJRF9ER19ITkQsXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MjEyMjpcdFx0XHRcdFx0XHQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2IsXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMjEyMy1cdFx0XHRcdFx0XHQgTlVMTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTg6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBWTUNJIFRyYW5zcG9ydCBSZWNlaXZlIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2UgdGhpcyBjYWxsYmFjayBpcyByZWdpc3RlcmVkIHdoZW4gYSBkYXRhZ3JhbSBoYW5kbGUgaXMgY3JlYXRlZCB3aXRoIGB2bWNpX2RhdGFncmFtX2NyZWF0ZV9oYW5kbGVfcHJpdmAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhIGRlZmluaXRlIGZvY3VzIHN5bWJvbCB0byBkaWcgaW50by4gTm93LCBJIG5lZWQgdG8gc2VlICpob3cqIHRoaXMgY2FsbGJhY2sgaXMgYWN0dWFsbHkgdXNlZC4gTXkgbmV4dCBtb3ZlIGlzIHRvIGV4YW1pbmUgYHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB3aGVyZSB0aGUgY2FsbGJhY2sgaXMgaW52b2tlZCBvciBhdCBsZWFzdCBpbnRlZ3JhdGVkIGludG8gdGhlIHJlY2VpdmUgcHJvY2Vzc2luZyBmbG93LiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTM0PXN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3BlZXJfZGV0YWNoX2NiKHUzMiBzdWJfaWQsXG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTM2LVx0XHRcdFx0XHQgIHZvaWQgKmNsaWVudF9kYXRhKTtcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzozNzpzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtMzgtc3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfY2xlYW51cChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz02NzU9c3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpXG4tLVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTgwMy1cdFx0bWVtY3B5KFx1MDAyNnJlY3ZfcGt0X2luZm8tXHUwMDNlcGt0LCBwa3QsIHNpemVvZihyZWN2X3BrdF9pbmZvLVx1MDAzZXBrdCkpO1xubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjgwNDpcdFx0SU5JVF9XT1JLKFx1MDAyNnJlY3ZfcGt0X2luZm8tXHUwMDNld29yaywgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29yayk7XG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtODA1LVxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz05MDI9c3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcXBfcmVzdW1lZF9jYih1MzIgc3ViX2lkLFxuLS1cbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy05MDktXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6OTEwOnN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTkxMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4MjgKCQkJCQkJCW91dHB1dDogMjMwCgkJCQkJCQl0aG91Z2h0czogNjYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBWc29jayBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AganVtcHMgb3V0IGFzIGEgZ29vZCBmb2NhbCBwb2ludC4gTGV0JiMzOTtzIHNlZSB3aGF0IGVsc2UgbWlnaHQgYmUgdG91Y2hlZCBoZXJlLiBUaGUgcGF0Y2ggbW9kaWZpZXMgYHZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgIGFuZCBgdm1jaV90cmFuc3BvcnQuY2AsIHNvIGl0JiMzOTtzIGxpa2VseSBhIHRyYW5zcG9ydC1sZXZlbCBjb25jZXJuLgoKRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gSSBzZWUgYFZTT0NLRVRTYCwgYFZJUlRJT19WU09DS0VUU2AsIGFuZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgLiBXYWl0LCBhIG1vbWVudCEgYFZJUlRJT19WU09DS0VUU2AgZGVwZW5kcyBvbiBib3RoIGBWU09DS0VUU2AgKmFuZCogYFZJUlRJT2AsIGFuZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgIGFsc28gZGVwZW5kcyBvbiBgVlNPQ0tFVFNgIGFuZCBgVk1XQVJFX1ZNQ0lgLiBTbywgdGhlIGVuYWJsaW5nIGNvbmZpZ3MgSSBuZWVkIGFyZToKCiogICBgVlNPQ0tFVFNgCiogICBgVklSVElPX1ZTT0NLRVRTYAoqICAgYFZNV0FSRV9WTUNJX1ZTT0NLRVRTYAoqICAgYFZJUlRJT2AKKiAgIGBWTVdBUkVfVk1DSWAKCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgVklSVElPX1ZTT0NLRVRTX0NPTU1PTmAgaXMgbmVlZGVkLiBMb29rcyBsaWtlIGl0JiMzOTtzIHNlbGVjdGVkIGJ5IGBWSVJUSU9fVlNPQ0tFVFNgIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLCBzbyBubyBleHBsaWNpdCBhZGRpdGlvbiBpcyBuZWVkZWQuIFdoYXQgYWJvdXQgYFZTT0NLRVRTX0xPT1BCQUNLYD8gVGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgYHZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgLCB3aGljaCBpcyBhbHNvIHVzZWQgYnkgYFZTT0NLRVRTX0xPT1BCQUNLYC4gU28gdGhhdCYjMzk7cyBhIGRlZmluaXRlIGFkZC4KCk15IGN1cnJlbnQgbGlzdCBvZiBlbmFibGluZyBjb25maWdzIGlzIG5vdzoKCiogICBgVlNPQ0tFVFNgCiogICBgVklSVElPX1ZTT0NLRVRTYAoqICAgYFZNV0FSRV9WTUNJX1ZTT0NLRVRTYAoqICAgYFZTT0NLRVRTX0xPT1BCQUNLYAoqICAgYFZJUlRJT2AKKiAgIGBWTVdBUkVfVk1DSWAKCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scyBiYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG86CgoqICAgYHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RgCiogICBgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2JgCiogICBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AKClJpZ2h0LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHRoaXMgcmVhc29uaW5nIGhvbGRzLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBgdnNvY2tfY2hlY2tfc291cmNlYCB3aGljaCB2YWxpZGF0ZXMgdGhlIHNvdXJjZS4gVGhpcyBhZmZlY3RzICphbGwqIG9mIHRoZSBmb2N1cyBzeW1ib2xzIGJlY2F1c2Ugb2YgcGFja2V0IHZhbGlkYXRpb24sIGFuZCB0aGUgc291cmNlIHBhY2tldCBjaGVjay4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZzb2NrIGxvZ2ljIHdoaWNoIHRvdWNoZXMgYm90aCB2aXJ0aW8gYW5kIHZtY2kgdHJhbnNwb3J0cy4gRGVmaW5pdGVseSBmdXp6ZXIgd29ydGh5LgoKT25lIGxhc3QgdGhpbmcsIGxldCBtZSBkb3VibGUtY2hlY2sgYFZNV0FSRV9WTUNJYCYjMzk7cyBkZXBlbmRlbmNpZXMuIEl0IGRlcGVuZHMgb24gYChYODYgfHwgQVJNNjQpICZhbXA7JmFtcDsgIUNQVV9CSUdfRU5ESUFOICZhbXA7JmFtcDsgUENJYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZXhwbGljaXRseSBhZGQgYFBDSWAuCgpNeSBmaW5hbCBjb25maWd1cmF0aW9uIGxpc3QgaXM6CgoqICAgYFZTT0NLRVRTYAoqICAgYFZJUlRJT19WU09DS0VUU2AKKiAgIGBWTVdBUkVfVk1DSV9WU09DS0VUU2AKKiAgIGBWU09DS0VUU19MT09QQkFDS2AKKiAgIGBWSVJUSU9gCiogICBgVk1XQVJFX1ZNQ0lgCiogICBgUENJYAoKQWxyaWdodCwgbGV0JiMzOTtzIGNhbGwgdGhhdCBnb29kLiBUaW1lIHRvIHNldCByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAxODoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VklSVElPX1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZNV0FSRV9WTUNJX1ZTT0NLRVRTJiMzNDssCiAgICAmIzM0O1ZTT0NLRVRTX0xPT1BCQUNLJiMzNDssCiAgICAmIzM0O1ZJUlRJTyYjMzQ7LAogICAgJiMzNDtWTVdBUkVfVk1DSSYjMzQ7LAogICAgJiMzNDtQQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0JiMzNDssCiAgICAmIzM0O3ZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiJiMzNDssCiAgICAmIzM0O3ZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgdnNvY2tfY2hlY2tfc291cmNlYCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIG9mIGluY29taW5nIHBhY2tldHMgYWdhaW5zdCB0aGUgc29ja2V0IHBlZXIuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AgdG8gZHJvcCBwYWNrZXRzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzb3VyY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2c29jayBsb2dpYyBhbmQgaXRzIHRyYW5zcG9ydHMgKHZpcnRpbyBhbmQgdm1jaSkgdGhhdCBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWU09DS0VUUyYjMzQ7LAogICAgJiMzNDtWSVJUSU9fVlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7Vk1XQVJFX1ZNQ0lfVlNPQ0tFVFMmIzM0OywKICAgICYjMzQ7VlNPQ0tFVFNfTE9PUEJBQ0smIzM0OywKICAgICYjMzQ7VklSVElPJiMzNDssCiAgICAmIzM0O1ZNV0FSRV9WTUNJJiMzNDssCiAgICAmIzM0O1BDSSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QmIzM0OywKICAgICYjMzQ7dm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2ImIzM0OywKICAgICYjMzQ7dm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29yayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGB2c29ja19jaGVja19zb3VyY2VgIHRvIHZhbGlkYXRlIHRoZSBzb3VyY2Ugb2YgaW5jb21pbmcgcGFja2V0cyBhZ2FpbnN0IHRoZSBzb2NrZXQgcGVlci4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCwgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYCB0byBkcm9wIHBhY2tldHMgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHNvdXJjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZzb2NrIGxvZ2ljIGFuZCBpdHMgdHJhbnNwb3J0cyAodmlydGlvIGFuZCB2bWNpKSB0aGF0IGFmZmVjdHMgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMTg6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvZ2ljIGZpeCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIGFkZHJlc3Mgb2YgaW5jb21pbmcgdnNvY2sgcGFja2V0cyBhZ2FpbnN0IHRoZSBleHBlY3RlZCBwZWVyIGFkZHJlc3MgZm9yIGNvbm5lY3RlZCBzb2NrZXRzIChgdnNvY2tfY2hlY2tfc291cmNlYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGRhdGEgbGVha3MgdG8gdXNlcnNwYWNlLiBBbGwgc3RydWN0dXJlcyBpbnZvbHZlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgYW5kIHRoZSBjaGFuZ2VzIG1lcmVseSBhZGQgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIGV4aXN0aW5nIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSwgYW5kIHN0YW5kYXJkIHRlc3RpbmcvS0FTQU4gaXMgc3VmZmljaWVudC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjgzOGRhNDkwZDY5Y2YzZjYwM2E5ZTM3Nzk0N2E0NmIwOWZhNjA5ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDIzIDE4OjE3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaCBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmgKaW5kZXggMzM1N2VlNjJkMTBiZi4uNTU0OTI5OGMxZWM2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9hZl92c29jay5oCkBAIC0yMjksNiAmIzQzOzIyOSw5IEBAIHN0cnVjdCBzb2NrICp2c29ja19maW5kX2JvdW5kX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICphZGRyLAogc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsCiAJCQkJCSAgICAgc3RydWN0IHNvY2thZGRyX3ZtICpkc3QsCiAJCQkJCSAgICAgc3RydWN0IG5ldCAqbmV0KTsKJiM0Mztib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAomIzQzOwkJCWNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKJiM0MzsJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyk7CiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spOwogdm9pZCB2c29ja19mb3JfZWFjaF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKIAkJCQkgICAgIHZvaWQgKCpmbikoc3RydWN0IHNvY2sgKnNrKSk7CmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmMKaW5kZXggYTMzYjJhMmQzODFkYy4uZjg0MDQ5OGI1OGFmYiAxMDA2NDQKLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suYwpAQCAtNDM4LDYgJiM0Mzs0MzgsMzggQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYywKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldCk7CiAKJiM0MzsvKioKJiM0MzsgKiB2c29ja19jaGVja19zb3VyY2UgLSB2YWxpZGF0ZSBhIHBhY2tldCBzb3VyY2UgYWdhaW5zdCBhIHNvY2tldCBwZWVyCiYjNDM7ICogQHZzazogc29ja2V0IHJlY2VpdmluZyB0aGUgcGFja2V0CiYjNDM7ICogQHRyYW5zcG9ydDogdHJhbnNwb3J0IHJlY2VpdmluZyB0aGUgcGFja2V0CiYjNDM7ICogQHNyYzogc291cmNlIGFkZHJlc3MgZnJvbSB0aGUgcGFja2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIHBhY2tldCBhcnJpdmVkIG9uIHRoZSBzb2NrZXQmIzM5O3MgYXNzaWduZWQgdHJhbnNwb3J0IGFuZAomIzQzOyAqIGl0cyBzb3VyY2UgbWF0Y2hlcyB0aGUgc3RvcmVkIHBlZXIuIExvb3BiYWNrIHBhY2tldHMgYXJlIGdlbmVyYXRlZAomIzQzOyAqIGludGVybmFsbHkgYW5kIGFsd2F5cyB1c2UgdGhlIGxvY2FsIENJRCBhcyB0aGVpciBzb3VyY2UsIGluY2x1ZGluZwomIzQzOyAqIGNvbm5lY3Rpb25zIHVzaW5nIGEgdmFsaWQgQ0lEIGFsaWFzLgomIzQzOyAqCiYjNDM7ICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHNvY2tldCBsb2NrIGFuZCBtdXN0IG5vdCBjYWxsIHRoaXMgZm9yIGxpc3RlbmluZwomIzQzOyAqIHNvY2tldHMsIHdoaWNoIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHNvdXJjZSBhbmQgaGF2ZSBubyBhc3NpZ25lZAomIzQzOyAqIHRyYW5zcG9ydC4KJiM0MzsgKi8KJiM0Mztib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLAomIzQzOwkJCWNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCwKJiM0MzsJCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYykKJiM0Mzt7CiYjNDM7CWlmICh2c2stJmd0O3RyYW5zcG9ydCAhPSB0cmFuc3BvcnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzcmMtJmd0O3N2bV9wb3J0ICE9IHZzay0mZ3Q7cmVtb3RlX2FkZHIuc3ZtX3BvcnQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzcmMtJmd0O3N2bV9jaWQgPT0gdnNrLSZndDtyZW1vdGVfYWRkci5zdm1fY2lkKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXJldHVybiB0cmFuc3BvcnQtJmd0O2dldF9sb2NhbF9jaWQoKSA9PSBWTUFERFJfQ0lEX0xPQ0FMOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19jaGVja19zb3VyY2UpOwomIzQzOwogdm9pZCB2c29ja19yZW1vdmVfc29jayhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKQogewogCS8qIFRyYW5zcG9ydCByZWFzc2lnbm1lbnQgbXVzdCBub3QgcmVtb3ZlIHRoZSBiaW5kaW5nLiAqLwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jCmluZGV4IGU0ZWJhYTcwZjZjMjMuLjYzMDFjMTA4YTRmMTAgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMKQEAgLTE4MjMsNyAmIzQzOzE4MjMsOCBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsCiAJICogbG9ja19zb2NrIChub3RlOiBsaXN0ZW5lciBzb2NrZXRzIGFyZSBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydCkKIAkgKi8KIAlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8Ci0JICAgIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7IHZzay0mZ3Q7dHJhbnNwb3J0ICE9ICZhbXA7dC0mZ3Q7dHJhbnNwb3J0KSkgewomIzQzOwkgICAgKHNrLSZndDtza19zdGF0ZSAhPSBUQ1BfTElTVEVOICZhbXA7JmFtcDsKJiM0MzsJICAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzaywgJmFtcDt0LSZndDt0cmFuc3BvcnQsICZhbXA7c3JjKSkpIHsKIAkJKHZvaWQpdmlydGlvX3RyYW5zcG9ydF9yZXNldF9ub19zb2NrKHQsIHNrYiwgbmV0KTsKIAkJcmVsZWFzZV9zb2NrKHNrKTsKIAkJc29ja19wdXQoc2spOwpkaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jIGIvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jCmluZGV4IDFjNGVlMDM5YzE2NjIuLmI2MTJhOTg5Mzg1NmEgMTAwNjQ0Ci0tLSBhL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMKQEAgLTY4MCwxMSAmIzQzOzY4MCwxMyBAQCBzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZykKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7CiAJc3RydWN0IHZzb2NrX3NvY2sgKnZzazsKIAlib29sIGJoX3Byb2Nlc3NfcGt0OwomIzQzOwlib29sIGRyb3BfcGt0OwogCWludCBlcnI7CiAKIAlzayA9IE5VTEw7CiAJZXJyID0gVk1DSV9TVUNDRVNTOwogCWJoX3Byb2Nlc3NfcGt0ID0gZmFsc2U7CiYjNDM7CWRyb3BfcGt0ID0gZmFsc2U7CiAKIAkvKiBJZ25vcmUgaW5jb21pbmcgcGFja2V0cyBmcm9tIHJlc291cmNlcyB0aGF0IGFyZW4mIzM5O3QgdnNvY2sKIAkgKiBpbXBsZW1lbnRhdGlvbnMuCkBAIC03NjUsMTcgJiM0Mzs3NjcsMjYgQEAgc3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpCiAJYmhfbG9ja19zb2NrKHNrKTsKIAogCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkgewotCQkvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUsIHVwZGF0ZSBpdC4gKi8KLQkJdnNrLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDsKJiM0MzsJCWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c2ssICZhbXA7dm1jaV90cmFuc3BvcnQsICZhbXA7c3JjKSkgewomIzQzOwkJCWRyb3BfcGt0ID0gdHJ1ZTsKJiM0MzsJCQllcnIgPSBWTUNJX0VSUk9SX05PX0FDQ0VTUzsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJLyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovCiYjNDM7CQkJdnNrLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDsKIAotCQlpZiAoc2stJmd0O3NrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRCkKLQkJCXZtY2lfdHJhbnModnNrKS0mZ3Q7bm90aWZ5X29wcy0mZ3Q7aGFuZGxlX25vdGlmeV9wa3QoCi0JCQkJCXNrLCBwa3QsIHRydWUsICZhbXA7ZHN0LCAmYW1wO3NyYywKLQkJCQkJJmFtcDtiaF9wcm9jZXNzX3BrdCk7CiYjNDM7CQkJaWYgKHNrLSZndDtza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpCiYjNDM7CQkJCXZtY2lfdHJhbnModnNrKS0mZ3Q7bm90aWZ5X29wcy0mZ3Q7aGFuZGxlX25vdGlmeV9wa3Qoc2ssIHBrdCwgdHJ1ZSwKJiM0MzsJCQkJCQkJCQkgICAgICAgJmFtcDtkc3QsICZhbXA7c3JjLAomIzQzOwkJCQkJCQkJCSAgICAgICAmYW1wO2JoX3Byb2Nlc3NfcGt0KTsKJiM0MzsJCX0KIAl9CiAKIAliaF91bmxvY2tfc29jayhzayk7CiAKJiM0MzsJaWYgKGRyb3BfcGt0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJaWYgKCFiaF9wcm9jZXNzX3BrdCkgewogCQlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbzsKIApAQCAtOTAwLDYgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbzsKIAlzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl92bSBzcmM7CiAJc3RydWN0IHNvY2sgKnNrOwogCiAJcmVjdl9wa3RfaW5mbyA9CkBAIC05MDgsNiAmIzQzOzkyMCwxMCBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlwa3QgPSAmYW1wO3JlY3ZfcGt0X2luZm8tJmd0O3BrdDsKIAogCWxvY2tfc29jayhzayk7CiYjNDM7CXZzb2NrX2FkZHJfaW5pdCgmYW1wO3NyYywgcGt0LSZndDtkZy5zcmMuY29udGV4dCwgcGt0LSZndDtzcmNfcG9ydCk7CiYjNDM7CWlmIChzay0mZ3Q7c2tfc3RhdGUgIT0gVENQX0xJU1RFTiAmYW1wOyZhbXA7CiYjNDM7CSAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzb2NrX3NrKHNrKSwgJmFtcDt2bWNpX3RyYW5zcG9ydCwgJmFtcDtzcmMpKQomIzQzOwkJZ290byBvdXQ7CiAKIAkvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUuICovCiAJdnNvY2tfc2soc2spLSZndDtsb2NhbF9hZGRyLnN2bV9jaWQgPSBwa3QtJmd0O2RnLmRzdC5jb250ZXh0OwpAQCAtOTM3LDYgJiM0Mzs5NTMsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAkJYnJlYWs7CiAJfQogCiYjNDM7b3V0OgogCXJlbGVhc2Vfc29jayhzayk7CiAJa2ZyZWUocmVjdl9wa3RfaW5mbyk7CiAJLyogUmVsZWFzZSByZWZlcmVuY2Ugb2J0YWluZWQgaW4gdGhlIHN0cmVhbSBjYWxsYmFjayB3aGVuIHdlIGZldGNoZWQKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTkKCQkJCQkJCW91dHB1dDogMTE2CgkJCQkJCQl0aG91Z2h0czogNTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiB2c29ja19jaGVja19zb3VyY2UgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIEl0IGludHJvZHVjZXMgdGhpcyBuZXcgYHZzb2NrX2NoZWNrX3NvdXJjZWAgZnVuY3Rpb24sIHdoaWNoIGlzIGVzc2VudGlhbGx5IGEgc2FuaXR5IGNoZWNrIGZvciBpbmNvbWluZyBwYWNrZXRzIG9uIGNvbm5lY3RlZCB2c29jayBzb2NrZXRzLiBJdCB2YWxpZGF0ZXMgdGhlIHNvdXJjZSAoQ0lEIGFuZCBwb3J0KSBhZ2FpbnN0IHdoYXQgdGhlIHNvY2tldCBleHBlY3RzLiBUaGUgaW50ZW50aW9uIGlzIGNsZWFybHkgdG8gcHJldmVudCBwYWNrZXRzIGZyb20gdW5leHBlY3RlZCBzb3VyY2VzLCB3aGljaCBsaWtlbHkgYWRkcmVzc2VzIGEgcG90ZW50aWFsIHNwb29maW5nIG9yIHJvdXRpbmcgaXNzdWUgaW4gdGhlIHZzb2NrIGNvbm5lY3Rpb24gbG9naWMuCgpJIGNhbiBzZWUgdGhhdCB0aGUgY2hhbmdlcyBpbnZvbHZlIGludGVncmF0aW5nIHRoaXMgY2hlY2sgd2l0aGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCwgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYC4gTG9va2luZyBhdCB0aGUgY29kZSBzbmlwcGV0LCB0aGUgY2hlY2sgaXRzZWxmIGlzIHNpbXBsZTogY29tcGFyaW5nIHRoZSBzb3VyY2UgQ0lEIGFuZCBwb3J0IGZyb20gdGhlIHBhY2tldCBhZ2FpbnN0IHRoZSBleHBlY3RlZCB2YWx1ZXMgZm9yIHRoZSBzb2NrZXQmIzM5O3MgcmVtb3RlIGFkZHJlc3MuIEl0JiMzOTtzIHJlYWxseSBqdXN0IGEgbG9naWMgYnVnIGZpeDsgdGhlIGtpbmQgdGhhdCYjMzk7cyBlYXN5IHRvIG1pc3MgaW4gcmV2aWV3LgoKVGhlIGNvZGUgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzLCBvciBhbnl0aGluZyBwYXJ0aWN1bGFybHkgbm92ZWwsIHdoaWNoIGlzIGdvb2QuIFRoZSBrZXkgdGhpbmcgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGBzcmNgIGlzIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgY2hlY2suIEkgd2FzIHJpZ2h0IHRvIHJldmlldyB0aGlzLiBJbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAgYHNyY2AgaXMgcGFzc2VkIGJ5IHJlZmVyZW5jZSwgYnV0IEkgbmVlZCB0byBlbnN1cmUgaXQgaXMgaW5pdGlhbGl6ZWQgcHJpb3IgdG8gY2FsbGluZyB0aGUgY2hlY2suIEluIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYCwgYHNyY2AgaXMgaW5pdGlhbGl6ZWQgdXNpbmcgYHZzb2NrX2FkZHJfaW5pdGAsIHdoaWNoIGxvb2tzIGNvcnJlY3QuCgpTaW5jZSB0aGlzIGlzIHB1cmVseSBhIGxvZ2ljIGNoZWNrIGludm9sdmluZyBleGlzdGluZywgaW5pdGlhbGl6ZWQgZmllbGRzIGFuZCBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRlIGFueSBtZW1vcnkgY29ycnVwdGlvbiByaXNrLCBJIGRvbiYjMzk7dCBzZWUgYW55IG5lZWQgZm9yIEtNU0FOLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHNob3VsZCBiZSBzdWZmaWNpZW50LiBUaGVyZWZvcmUsIEkmIzM5O2xsIHNldCBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDE4OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBsb2dpYyBmaXggdG8gdmFsaWRhdGUgdGhlIHNvdXJjZSBhZGRyZXNzIG9mIGluY29taW5nIHZzb2NrIHBhY2tldHMgYWdhaW5zdCB0aGUgZXhwZWN0ZWQgcGVlciBhZGRyZXNzIGZvciBjb25uZWN0ZWQgc29ja2V0cyAoYHZzb2NrX2NoZWNrX3NvdXJjZWApLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCBvciBkYXRhIGxlYWtzIHRvIHVzZXJzcGFjZS4gQWxsIHN0cnVjdHVyZXMgaW52b2x2ZWQgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgY2hhbmdlcyBtZXJlbHkgYWRkIGNvbmRpdGlvbmFsIGNoZWNrcyBiYXNlZCBvbiBleGlzdGluZyBmaWVsZHMuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUsIGFuZCBzdGFuZGFyZCB0ZXN0aW5nL0tBU0FOIGlzIHN1ZmZpY2llbnQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9naWMgZml4IHRvIHZhbGlkYXRlIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBpbmNvbWluZyB2c29jayBwYWNrZXRzIGFnYWluc3QgdGhlIGV4cGVjdGVkIHBlZXIgYWRkcmVzcyBmb3IgY29ubmVjdGVkIHNvY2tldHMgKGB2c29ja19jaGVja19zb3VyY2VgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgZGF0YSBsZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBhbmQgdGhlIGNoYW5nZXMgbWVyZWx5IGFkZCBjb25kaXRpb25hbCBjaGVja3MgYmFzZWQgb24gZXhpc3RpbmcgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxODoxNzo0Ny43NjI1NzE1MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzQ4NzY4OTgxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCIsXG4gICAgXCJWTVdBUkVfVk1DSV9WU09DS0VUU1wiLFxuICAgIFwiVlNPQ0tFVFNfTE9PUEJBQ0tcIixcbiAgICBcIlZJUlRJT1wiLFxuICAgIFwiVk1XQVJFX1ZNQ0lcIixcbiAgICBcIlBDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIixcbiAgICBcInZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiXCIsXG4gICAgXCJ2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9naWMgZml4IHRvIHZhbGlkYXRlIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBpbmNvbWluZyB2c29jayBwYWNrZXRzIGFnYWluc3QgdGhlIGV4cGVjdGVkIHBlZXIgYWRkcmVzcyBmb3IgY29ubmVjdGVkIHNvY2tldHMgKGB2c29ja19jaGVja19zb3VyY2VgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgZGF0YSBsZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBhbmQgdGhlIGNoYW5nZXMgbWVyZWx5IGFkZCBjb25kaXRpb25hbCBjaGVja3MgYmFzZWQgb24gZXhpc3RpbmcgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZnVuY3Rpb24gYHZzb2NrX2NoZWNrX3NvdXJjZWAgdG8gdmFsaWRhdGUgdGhlIHNvdXJjZSBvZiBpbmNvbWluZyBwYWNrZXRzIGFnYWluc3QgdGhlIHNvY2tldCBwZWVyLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgaW4gYHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RgLCBgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2JgLCBhbmQgYHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtgIHRvIGRyb3AgcGFja2V0cyB0aGF0IGRvIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgc291cmNlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgdnNvY2sgbG9naWMgYW5kIGl0cyB0cmFuc3BvcnRzICh2aXJ0aW8gYW5kIHZtY2kpIHRoYXQgYWZmZWN0cyBwYWNrZXQgcHJvY2Vzc2luZyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTc6NDcuNzYyNTc5MDg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA1MDM4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmODM4ZGE0OTBkNjljZjNmNjAzYTllMzc3OTQ3YTQ2YjA5ZmE2MDlmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDIzIDE4OjE3OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oXFxuaW5kZXggMzM1N2VlNjJkMTBiZi4uNTU0OTI5OGMxZWM2YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9hZl92c29jay5oXFxuKysrIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxcbkBAIC0yMjksNiArMjI5LDkgQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfYm91bmRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsXFxuIHN0cnVjdCBzb2NrICp2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzb2NrYWRkcl92bSAqZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBuZXQgKm5ldCk7XFxuK2Jvb2wgdnNvY2tfY2hlY2tfc291cmNlKGNvbnN0IHN0cnVjdCB2c29ja19zb2NrICp2c2ssXFxuK1xcdFxcdFxcdGNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcXG4rXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICpzcmMpO1xcbiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spO1xcbiB2b2lkIHZzb2NrX2Zvcl9lYWNoX2Nvbm5lY3RlZF9zb2NrZXQoc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxcbiBcXHRcXHRcXHRcXHQgICAgIHZvaWQgKCpmbikoc3RydWN0IHNvY2sgKnNrKSk7XFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xcbmluZGV4IGEzM2IyYTJkMzgxZGMuLmY4NDA0OThiNThhZmIgMTAwNjQ0XFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXFxuQEAgLTQzOCw2ICs0MzgsMzggQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXQpO1xcbiBcXG4rLyoqXFxuKyAqIHZzb2NrX2NoZWNrX3NvdXJjZSAtIHZhbGlkYXRlIGEgcGFja2V0IHNvdXJjZSBhZ2FpbnN0IGEgc29ja2V0IHBlZXJcXG4rICogQHZzazogc29ja2V0IHJlY2VpdmluZyB0aGUgcGFja2V0XFxuKyAqIEB0cmFuc3BvcnQ6IHRyYW5zcG9ydCByZWNlaXZpbmcgdGhlIHBhY2tldFxcbisgKiBAc3JjOiBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBwYWNrZXRcXG4rICpcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWNrZXQgYXJyaXZlZCBvbiB0aGUgc29ja2V0J3MgYXNzaWduZWQgdHJhbnNwb3J0IGFuZFxcbisgKiBpdHMgc291cmNlIG1hdGNoZXMgdGhlIHN0b3JlZCBwZWVyLiBMb29wYmFjayBwYWNrZXRzIGFyZSBnZW5lcmF0ZWRcXG4rICogaW50ZXJuYWxseSBhbmQgYWx3YXlzIHVzZSB0aGUgbG9jYWwgQ0lEIGFzIHRoZWlyIHNvdXJjZSwgaW5jbHVkaW5nXFxuKyAqIGNvbm5lY3Rpb25zIHVzaW5nIGEgdmFsaWQgQ0lEIGFsaWFzLlxcbisgKlxcbisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgc29ja2V0IGxvY2sgYW5kIG11c3Qgbm90IGNhbGwgdGhpcyBmb3IgbGlzdGVuaW5nXFxuKyAqIHNvY2tldHMsIHdoaWNoIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHNvdXJjZSBhbmQgaGF2ZSBubyBhc3NpZ25lZFxcbisgKiB0cmFuc3BvcnQuXFxuKyAqL1xcbitib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxcbitcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXFxuK1xcdFxcdFxcdGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjKVxcbit7XFxuK1xcdGlmICh2c2stXFx1MDAzZXRyYW5zcG9ydCAhPSB0cmFuc3BvcnQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChzcmMtXFx1MDAzZXN2bV9wb3J0ICE9IHZzay1cXHUwMDNlcmVtb3RlX2FkZHIuc3ZtX3BvcnQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChzcmMtXFx1MDAzZXN2bV9jaWQgPT0gdnNrLVxcdTAwM2VyZW1vdGVfYWRkci5zdm1fY2lkKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHJldHVybiB0cmFuc3BvcnQtXFx1MDAzZWdldF9sb2NhbF9jaWQoKSA9PSBWTUFERFJfQ0lEX0xPQ0FMO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2NoZWNrX3NvdXJjZSk7XFxuK1xcbiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spXFxuIHtcXG4gXFx0LyogVHJhbnNwb3J0IHJlYXNzaWdubWVudCBtdXN0IG5vdCByZW1vdmUgdGhlIGJpbmRpbmcuICovXFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xcbmluZGV4IGU0ZWJhYTcwZjZjMjMuLjYzMDFjMTA4YTRmMTAgMTAwNjQ0XFxuLS0tIGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXFxuKysrIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXFxuQEAgLTE4MjMsNyArMTgyMyw4IEBAIHZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcXG4gXFx0ICogbG9ja19zb2NrIChub3RlOiBsaXN0ZW5lciBzb2NrZXRzIGFyZSBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydClcXG4gXFx0ICovXFxuIFxcdGlmIChzb2NrX2ZsYWcoc2ssIFNPQ0tfRE9ORSkgfHxcXG4tXFx0ICAgIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNiB2c2stXFx1MDAzZXRyYW5zcG9ydCAhPSBcXHUwMDI2dC1cXHUwMDNldHJhbnNwb3J0KSkge1xcbitcXHQgICAgKHNrLVxcdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c2ssIFxcdTAwMjZ0LVxcdTAwM2V0cmFuc3BvcnQsIFxcdTAwMjZzcmMpKSkge1xcbiBcXHRcXHQodm9pZCl2aXJ0aW9fdHJhbnNwb3J0X3Jlc2V0X25vX3NvY2sodCwgc2tiLCBuZXQpO1xcbiBcXHRcXHRyZWxlYXNlX3NvY2soc2spO1xcbiBcXHRcXHRzb2NrX3B1dChzayk7XFxuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYyBiL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuY1xcbmluZGV4IDFjNGVlMDM5YzE2NjIuLmI2MTJhOTg5Mzg1NmEgMTAwNjQ0XFxuLS0tIGEvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jXFxuKysrIGIvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jXFxuQEAgLTY4MCwxMSArNjgwLDEzIEBAIHN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxcbiBcXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7XFxuIFxcdHN0cnVjdCB2c29ja19zb2NrICp2c2s7XFxuIFxcdGJvb2wgYmhfcHJvY2Vzc19wa3Q7XFxuK1xcdGJvb2wgZHJvcF9wa3Q7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRzayA9IE5VTEw7XFxuIFxcdGVyciA9IFZNQ0lfU1VDQ0VTUztcXG4gXFx0YmhfcHJvY2Vzc19wa3QgPSBmYWxzZTtcXG4rXFx0ZHJvcF9wa3QgPSBmYWxzZTtcXG4gXFxuIFxcdC8qIElnbm9yZSBpbmNvbWluZyBwYWNrZXRzIGZyb20gcmVzb3VyY2VzIHRoYXQgYXJlbid0IHZzb2NrXFxuIFxcdCAqIGltcGxlbWVudGF0aW9ucy5cXG5AQCAtNzY1LDE3ICs3NjcsMjYgQEAgc3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpXFxuIFxcdGJoX2xvY2tfc29jayhzayk7XFxuIFxcbiBcXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHtcXG4tXFx0XFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXFxuLVxcdFxcdHZzay1cXHUwMDNlbG9jYWxfYWRkci5zdm1fY2lkID0gZHN0LnN2bV9jaWQ7XFxuK1xcdFxcdGlmIChzay1cXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c2ssIFxcdTAwMjZ2bWNpX3RyYW5zcG9ydCwgXFx1MDAyNnNyYykpIHtcXG4rXFx0XFx0XFx0ZHJvcF9wa3QgPSB0cnVlO1xcbitcXHRcXHRcXHRlcnIgPSBWTUNJX0VSUk9SX05PX0FDQ0VTUztcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXFxuK1xcdFxcdFxcdHZzay1cXHUwMDNlbG9jYWxfYWRkci5zdm1fY2lkID0gZHN0LnN2bV9jaWQ7XFxuIFxcbi1cXHRcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcXG4tXFx0XFx0XFx0dm1jaV90cmFucyh2c2spLVxcdTAwM2Vub3RpZnlfb3BzLVxcdTAwM2VoYW5kbGVfbm90aWZ5X3BrdChcXG4tXFx0XFx0XFx0XFx0XFx0c2ssIHBrdCwgdHJ1ZSwgXFx1MDAyNmRzdCwgXFx1MDAyNnNyYyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmJoX3Byb2Nlc3NfcGt0KTtcXG4rXFx0XFx0XFx0aWYgKHNrLVxcdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpXFxuK1xcdFxcdFxcdFxcdHZtY2lfdHJhbnModnNrKS1cXHUwMDNlbm90aWZ5X29wcy1cXHUwMDNlaGFuZGxlX25vdGlmeV9wa3Qoc2ssIHBrdCwgdHJ1ZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZkc3QsIFxcdTAwMjZzcmMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2YmhfcHJvY2Vzc19wa3QpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdGJoX3VubG9ja19zb2NrKHNrKTtcXG4gXFxuK1xcdGlmIChkcm9wX3BrdClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRpZiAoIWJoX3Byb2Nlc3NfcGt0KSB7XFxuIFxcdFxcdHN0cnVjdCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF9pbmZvICpyZWN2X3BrdF9pbmZvO1xcbiBcXG5AQCAtOTAwLDYgKzkxMSw3IEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF9pbmZvICpyZWN2X3BrdF9pbmZvO1xcbiBcXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl92bSBzcmM7XFxuIFxcdHN0cnVjdCBzb2NrICpzaztcXG4gXFxuIFxcdHJlY3ZfcGt0X2luZm8gPVxcbkBAIC05MDgsNiArOTIwLDEwIEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRwa3QgPSBcXHUwMDI2cmVjdl9wa3RfaW5mby1cXHUwMDNlcGt0O1xcbiBcXG4gXFx0bG9ja19zb2NrKHNrKTtcXG4rXFx0dnNvY2tfYWRkcl9pbml0KFxcdTAwMjZzcmMsIHBrdC1cXHUwMDNlZGcuc3JjLmNvbnRleHQsIHBrdC1cXHUwMDNlc3JjX3BvcnQpO1xcbitcXHRpZiAoc2stXFx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICF2c29ja19jaGVja19zb3VyY2UodnNvY2tfc2soc2spLCBcXHUwMDI2dm1jaV90cmFuc3BvcnQsIFxcdTAwMjZzcmMpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4gXFxuIFxcdC8qIFRoZSBsb2NhbCBjb250ZXh0IElEIG1heSBiZSBvdXQgb2YgZGF0ZS4gKi9cXG4gXFx0dnNvY2tfc2soc2spLVxcdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBwa3QtXFx1MDAzZWRnLmRzdC5jb250ZXh0O1xcbkBAIC05MzcsNiArOTUzLDcgQEAgc3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbitvdXQ6XFxuIFxcdHJlbGVhc2Vfc29jayhzayk7XFxuIFxcdGtmcmVlKHJlY3ZfcGt0X2luZm8pO1xcbiBcXHQvKiBSZWxlYXNlIHJlZmVyZW5jZSBvYnRhaW5lZCBpbiB0aGUgc3RyZWFtIGNhbGxiYWNrIHdoZW4gd2UgZmV0Y2hlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxODoxNzo0OC4yMjM5NDg2MzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1Mzk4NDQwNjAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCIsXG4gICAgXCJWTVdBUkVfVk1DSV9WU09DS0VUU1wiLFxuICAgIFwiVlNPQ0tFVFNfTE9PUEJBQ0tcIixcbiAgICBcIlZJUlRJT1wiLFxuICAgIFwiVk1XQVJFX1ZNQ0lcIixcbiAgICBcIlBDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIixcbiAgICBcInZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiXCIsXG4gICAgXCJ2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgdnNvY2tfY2hlY2tfc291cmNlYCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIG9mIGluY29taW5nIHBhY2tldHMgYWdhaW5zdCB0aGUgc29ja2V0IHBlZXIuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AgdG8gZHJvcCBwYWNrZXRzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzb3VyY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2c29jayBsb2dpYyBhbmQgaXRzIHRyYW5zcG9ydHMgKHZpcnRpbyBhbmQgdm1jaSkgdGhhdCBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmODM4ZGE0OTBkNjljZjNmNjAzYTllMzc3OTQ3YTQ2YjA5ZmE2MDlmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMTg6MTc6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl92c29jay5oIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuaW5kZXggMzM1N2VlNjJkMTBiZi4uNTU0OTI5OGMxZWM2YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbisrKyBiL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmhcbkBAIC0yMjksNiArMjI5LDkgQEAgc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfYm91bmRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKmFkZHIsXG4gc3RydWN0IHNvY2sgKnZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldF9uZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IHNvY2thZGRyX3ZtICpkc3QsXG4gXHRcdFx0XHRcdCAgICAgc3RydWN0IG5ldCAqbmV0KTtcbitib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxuK1x0XHRcdGNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcbitcdFx0XHRjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyk7XG4gdm9pZCB2c29ja19yZW1vdmVfc29jayhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKTtcbiB2b2lkIHZzb2NrX2Zvcl9lYWNoX2Nvbm5lY3RlZF9zb2NrZXQoc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuIFx0XHRcdFx0ICAgICB2b2lkICgqZm4pKHN0cnVjdCBzb2NrICpzaykpO1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suYyBiL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuaW5kZXggYTMzYjJhMmQzODFkYy4uZjg0MDQ5OGI1OGFmYiAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svYWZfdnNvY2suY1xuKysrIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5AQCAtNDM4LDYgKzQzOCwzOCBAQCBzdHJ1Y3Qgc29jayAqdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0KHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXQpO1xuIFxuKy8qKlxuKyAqIHZzb2NrX2NoZWNrX3NvdXJjZSAtIHZhbGlkYXRlIGEgcGFja2V0IHNvdXJjZSBhZ2FpbnN0IGEgc29ja2V0IHBlZXJcbisgKiBAdnNrOiBzb2NrZXQgcmVjZWl2aW5nIHRoZSBwYWNrZXRcbisgKiBAdHJhbnNwb3J0OiB0cmFuc3BvcnQgcmVjZWl2aW5nIHRoZSBwYWNrZXRcbisgKiBAc3JjOiBzb3VyY2UgYWRkcmVzcyBmcm9tIHRoZSBwYWNrZXRcbisgKlxuKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgcGFja2V0IGFycml2ZWQgb24gdGhlIHNvY2tldCdzIGFzc2lnbmVkIHRyYW5zcG9ydCBhbmRcbisgKiBpdHMgc291cmNlIG1hdGNoZXMgdGhlIHN0b3JlZCBwZWVyLiBMb29wYmFjayBwYWNrZXRzIGFyZSBnZW5lcmF0ZWRcbisgKiBpbnRlcm5hbGx5IGFuZCBhbHdheXMgdXNlIHRoZSBsb2NhbCBDSUQgYXMgdGhlaXIgc291cmNlLCBpbmNsdWRpbmdcbisgKiBjb25uZWN0aW9ucyB1c2luZyBhIHZhbGlkIENJRCBhbGlhcy5cbisgKlxuKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIHRoZSBzb2NrZXQgbG9jayBhbmQgbXVzdCBub3QgY2FsbCB0aGlzIGZvciBsaXN0ZW5pbmdcbisgKiBzb2NrZXRzLCB3aGljaCBhY2NlcHQgcGFja2V0cyBmcm9tIGFueSBzb3VyY2UgYW5kIGhhdmUgbm8gYXNzaWduZWRcbisgKiB0cmFuc3BvcnQuXG4rICovXG4rYm9vbCB2c29ja19jaGVja19zb3VyY2UoY29uc3Qgc3RydWN0IHZzb2NrX3NvY2sgKnZzayxcbitcdFx0XHRjb25zdCBzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXG4rXHRcdFx0Y29uc3Qgc3RydWN0IHNvY2thZGRyX3ZtICpzcmMpXG4re1xuK1x0aWYgKHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gdHJhbnNwb3J0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoc3JjLVx1MDAzZXN2bV9wb3J0ICE9IHZzay1cdTAwM2VyZW1vdGVfYWRkci5zdm1fcG9ydClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHNyYy1cdTAwM2Vzdm1fY2lkID09IHZzay1cdTAwM2VyZW1vdGVfYWRkci5zdm1fY2lkKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHJldHVybiB0cmFuc3BvcnQtXHUwMDNlZ2V0X2xvY2FsX2NpZCgpID09IFZNQUREUl9DSURfTE9DQUw7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2NoZWNrX3NvdXJjZSk7XG4rXG4gdm9pZCB2c29ja19yZW1vdmVfc29jayhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrKVxuIHtcbiBcdC8qIFRyYW5zcG9ydCByZWFzc2lnbm1lbnQgbXVzdCBub3QgcmVtb3ZlIHRoZSBiaW5kaW5nLiAqL1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYyBiL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuaW5kZXggZTRlYmFhNzBmNmMyMy4uNjMwMWMxMDhhNGYxMCAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY1xuKysrIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXG5AQCAtMTgyMyw3ICsxODIzLDggQEAgdm9pZCB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0KHN0cnVjdCB2aXJ0aW9fdHJhbnNwb3J0ICp0LFxuIFx0ICogbG9ja19zb2NrIChub3RlOiBsaXN0ZW5lciBzb2NrZXRzIGFyZSBub3QgYXNzaWduZWQgdG8gYW55IHRyYW5zcG9ydClcbiBcdCAqL1xuIFx0aWYgKHNvY2tfZmxhZyhzaywgU09DS19ET05FKSB8fFxuLVx0ICAgIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNiB2c2stXHUwMDNldHJhbnNwb3J0ICE9IFx1MDAyNnQtXHUwMDNldHJhbnNwb3J0KSkge1xuK1x0ICAgIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuK1x0ICAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzaywgXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQsIFx1MDAyNnNyYykpKSB7XG4gXHRcdCh2b2lkKXZpcnRpb190cmFuc3BvcnRfcmVzZXRfbm9fc29jayh0LCBza2IsIG5ldCk7XG4gXHRcdHJlbGVhc2Vfc29jayhzayk7XG4gXHRcdHNvY2tfcHV0KHNrKTtcbmRpZmYgLS1naXQgYS9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMgYi9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmNcbmluZGV4IDFjNGVlMDM5YzE2NjIuLmI2MTJhOTg5Mzg1NmEgMTAwNjQ0XG4tLS0gYS9uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmNcbisrKyBiL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuY1xuQEAgLTY4MCwxMSArNjgwLDEzIEBAIHN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxuIFx0c3RydWN0IHZtY2lfdHJhbnNwb3J0X3BhY2tldCAqcGt0O1xuIFx0c3RydWN0IHZzb2NrX3NvY2sgKnZzaztcbiBcdGJvb2wgYmhfcHJvY2Vzc19wa3Q7XG4rXHRib29sIGRyb3BfcGt0O1xuIFx0aW50IGVycjtcbiBcbiBcdHNrID0gTlVMTDtcbiBcdGVyciA9IFZNQ0lfU1VDQ0VTUztcbiBcdGJoX3Byb2Nlc3NfcGt0ID0gZmFsc2U7XG4rXHRkcm9wX3BrdCA9IGZhbHNlO1xuIFxuIFx0LyogSWdub3JlIGluY29taW5nIHBhY2tldHMgZnJvbSByZXNvdXJjZXMgdGhhdCBhcmVuJ3QgdnNvY2tcbiBcdCAqIGltcGxlbWVudGF0aW9ucy5cbkBAIC03NjUsMTcgKzc2NywyNiBAQCBzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZylcbiBcdGJoX2xvY2tfc29jayhzayk7XG4gXG4gXHRpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHtcbi1cdFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXG4tXHRcdHZzay1cdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBkc3Quc3ZtX2NpZDtcbitcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhdnNvY2tfY2hlY2tfc291cmNlKHZzaywgXHUwMDI2dm1jaV90cmFuc3BvcnQsIFx1MDAyNnNyYykpIHtcbitcdFx0XHRkcm9wX3BrdCA9IHRydWU7XG4rXHRcdFx0ZXJyID0gVk1DSV9FUlJPUl9OT19BQ0NFU1M7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0LyogVGhlIGxvY2FsIGNvbnRleHQgSUQgbWF5IGJlIG91dCBvZiBkYXRlLCB1cGRhdGUgaXQuICovXG4rXHRcdFx0dnNrLVx1MDAzZWxvY2FsX2FkZHIuc3ZtX2NpZCA9IGRzdC5zdm1fY2lkO1xuIFxuLVx0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgPT0gVENQX0VTVEFCTElTSEVEKVxuLVx0XHRcdHZtY2lfdHJhbnModnNrKS1cdTAwM2Vub3RpZnlfb3BzLVx1MDAzZWhhbmRsZV9ub3RpZnlfcGt0KFxuLVx0XHRcdFx0XHRzaywgcGt0LCB0cnVlLCBcdTAwMjZkc3QsIFx1MDAyNnNyYyxcbi1cdFx0XHRcdFx0XHUwMDI2YmhfcHJvY2Vzc19wa3QpO1xuK1x0XHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpXG4rXHRcdFx0XHR2bWNpX3RyYW5zKHZzayktXHUwMDNlbm90aWZ5X29wcy1cdTAwM2VoYW5kbGVfbm90aWZ5X3BrdChzaywgcGt0LCB0cnVlLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZkc3QsIFx1MDAyNnNyYyxcbitcdFx0XHRcdFx0XHRcdFx0XHQgICAgICAgXHUwMDI2YmhfcHJvY2Vzc19wa3QpO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRiaF91bmxvY2tfc29jayhzayk7XG4gXG4rXHRpZiAoZHJvcF9wa3QpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0aWYgKCFiaF9wcm9jZXNzX3BrdCkge1xuIFx0XHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbztcbiBcbkBAIC05MDAsNiArOTExLDcgQEAgc3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X2luZm8gKnJlY3ZfcGt0X2luZm87XG4gXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfdm0gc3JjO1xuIFx0c3RydWN0IHNvY2sgKnNrO1xuIFxuIFx0cmVjdl9wa3RfaW5mbyA9XG5AQCAtOTA4LDYgKzkyMCwxMCBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHBrdCA9IFx1MDAyNnJlY3ZfcGt0X2luZm8tXHUwMDNlcGt0O1xuIFxuIFx0bG9ja19zb2NrKHNrKTtcbitcdHZzb2NrX2FkZHJfaW5pdChcdTAwMjZzcmMsIHBrdC1cdTAwM2VkZy5zcmMuY29udGV4dCwgcGt0LVx1MDAzZXNyY19wb3J0KTtcbitcdGlmIChzay1cdTAwM2Vza19zdGF0ZSAhPSBUQ1BfTElTVEVOIFx1MDAyNlx1MDAyNlxuK1x0ICAgICF2c29ja19jaGVja19zb3VyY2UodnNvY2tfc2soc2spLCBcdTAwMjZ2bWNpX3RyYW5zcG9ydCwgXHUwMDI2c3JjKSlcbitcdFx0Z290byBvdXQ7XG4gXG4gXHQvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUuICovXG4gXHR2c29ja19zayhzayktXHUwMDNlbG9jYWxfYWRkci5zdm1fY2lkID0gcGt0LVx1MDAzZWRnLmRzdC5jb250ZXh0O1xuQEAgLTkzNyw2ICs5NTMsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdFx0YnJlYWs7XG4gXHR9XG4gXG4rb3V0OlxuIFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdGtmcmVlKHJlY3ZfcGt0X2luZm8pO1xuIFx0LyogUmVsZWFzZSByZWZlcmVuY2Ugb2J0YWluZWQgaW4gdGhlIHN0cmVhbSBjYWxsYmFjayB3aGVuIHdlIGZldGNoZWRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE3OjQ4LjIyMzk1MDM4NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODM4MDgwMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgdnNvY2sgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9uYWxpdHkgdGhhdCBuZWVkcyB0byBiZSBmdXp6ZWQuIEZyb20gYSBjdXJzb3J5IGdsYW5jZSwgaXQgbG9va3MgbGlrZSBpdCBkb2VzLiBUaGUga2V5IGlzIHRoaXMgbmV3IGB2c29ja19jaGVja19zb3VyY2VgIGZ1bmN0aW9uIGJlaW5nIGFkZGVkIHRvIGBuZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNgLiBUaGUgZmFjdCB0aGF0IGl0J3MgYmVpbmcgdXNlZCBpbiBib3RoIGB2aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jYCBhbmQgcG90ZW50aWFsbHkgYHZtY2lfdHJhbnNwb3J0LmNgIHN0cm9uZ2x5IHN1Z2dlc3RzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgdnNvY2sgbG9naWMuIEl0IHNlZW1zIHRvIGJlIGltcGxlbWVudGluZyBzb3VyY2UgdmFsaWRhdGlvbiBmb3IgaW5jb21pbmcgcGFja2V0cywgd2hpY2ggbWVhbnMgaG93IHBhY2tldHMgYXJlIGFjY2VwdGVkIG9yIGRyb3BwZWQgaXMgbm93IGRpZmZlcmVudCwgYW5kIHRoYXQncyBhIGNsZWFyIHRyaWdnZXIgZm9yIGZ1enppbmcuIFRoaXMgaXMgYSB2ZXJ5IGludGVyZXN0aW5nIGNoYW5nZS5cblxuTm93LCBsZXQncyBzZWUgYWJvdXQgbWFraW5nIHRoaXMgZnV6emFibGUuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFuZCBpbXBvcnRhbnQgc3ltYm9scyB0byBmb2N1cyBvbi4gSSdtIHNlZWluZyBgQ09ORklHX1ZTT0NLRVRTYCwgYENPTkZJR19WSVJUSU9fVlNPQ0tFVFNgLCBhbmQgYENPTkZJR19WTVdBUkVfVk1DSV9WU09DS0VUU2AgYXMgdGhlIGNydWNpYWwgY29uZmlndXJhdGlvbnMuIE1ha2VzIHNlbnNlLiBUaGVuIHRoZXJlIGFyZSB0aGUgc3ltYm9scyB0byBsb29rIGF0LiBgdnNvY2tfY2hlY2tfc291cmNlYCBpcyBkZWZpbml0ZWx5IGEga2V5IG5ldyBmdW5jdGlvbiwgZXZlbiBpZiBpdCdzIGEgaGVscGVyIGFuZCBub3QgdGhlIGlkZWFsIGVudHJ5IHBvaW50LiBJdCdzIGV4cG9ydGVkLCB3aGljaCBpcyBnb29kLiBJIG5lZWQgdG8gbG9vayBhdCBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYCBhcyBvdGhlciBwb3NzaWJsZSBlbnRyeSBwb2ludHMuXG5cbkknbGwgZG91YmxlIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciB2c29jayBjb25maWd1cmF0aW9ucyB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYnV0IHNvIGZhciwgdGhpcyBpcyBsb29raW5nIGxpa2UgYSBoaWdoLXByaW9yaXR5IGZ1enppbmcgdGFyZ2V0IGR1ZSB0byB0aGUgc291cmNlIHZhbGlkYXRpb24gY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE3OjU0LjEwNzc2MjAxOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODgyNDczMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgVklSVElPX1ZTT0NLRVRTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC92bXdfdnNvY2svXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC92bXdfdnNvY2svS2NvbmZpZz00MT1jb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcXG4tLVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy01Mi1cXG5uZXQvdm13X3Zzb2NrL0tjb25maWc6NTM6Y29uZmlnIFZJUlRJT19WU09DS0VUU1xcbm5ldC92bXdfdnNvY2svS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwidmlydGlvIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzXFxcIlxcbi0tXFxubmV0L3Ztd192c29jay9LY29uZmlnLTY1LVxcbm5ldC92bXdfdnNvY2svS2NvbmZpZzo2Njpjb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbm5ldC92bXdfdnNvY2svS2NvbmZpZy02Ny1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxODoxNzo1NC4xNzY1OTQ3NzJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTU2ODQxNDMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEZXBlbmRlbmN5IERlZXAgRGl2ZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGdyYW51bGFyLiBCZWZvcmUgSSBldmVuICp0aGluayogYWJvdXQgZGVwbG95aW5nIHRoZXNlIGNvbmZpZ3MsIEkgbmVlZCB0byBwZXJmb3JtIGEgdGhvcm91Z2ggY2hlY2sgb2YgdGhlIGRlcGVuZGVuY2llcy4gSXQncyBhbG1vc3Qgc2Vjb25kIG5hdHVyZSB0byBtZTsgZW5zdXJpbmcgY29tcGF0aWJpbGl0eSBhbmQgYXZvaWRpbmcgZG93bnN0cmVhbSBmYWlsdXJlcyBpcyBwYXJhbW91bnQuIEknbSBlc3NlbnRpYWxseSBydW5uaW5nIGEgbWVudGFsIGNoZWNrbGlzdCwgYnV0IGl0J3MgYSBjcml0aWNhbCBvbmUuIFdoYXQgb3RoZXIgc3lzdGVtcyBvciBzZXJ2aWNlcyBhcmUgdGhlc2UgY29uZmlncyB0b3VjaGluZz8gQXJlIHRob3NlIGNvbXBvbmVudHMgdXAtdG8tZGF0ZT8gQXJlIHRoZSBBUEkgdmVyc2lvbnMgY29tcGF0aWJsZT8gSGF2ZSBJIGFjY291bnRlZCBmb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMgb3IgYnJlYWtpbmcgY2hhbmdlcz8gSSBuZWVkIHRvIG1ldGljdWxvdXNseSBtYXAgb3V0IHRoZSBcIndobyB0YWxrcyB0byB3aG9tXCIgcmVsYXRpb25zaGlwcyBhbmQgYXNzZXNzIHRoZSByaXBwbGUgZWZmZWN0cyBvZiBhbnkgbW9kaWZpY2F0aW9ucy4gVGhpcyBpc24ndCBqdXN0IGFib3V0IGF2b2lkaW5nIGEgc2VydmljZSBvdXRhZ2UsIGl0J3MgYWJvdXQgbWluaW1pemluZyB0aGUgcmlzayBvZiBzdWJ0bGUsIGhhcmQtdG8tZGlhZ25vc2UgZXJyb3JzIHRoYXQgY291bGQgZGVncmFkZSBwZXJmb3JtYW5jZSBvciwgd29yc2UsIGNvbXByb21pc2UgZGF0YSBpbnRlZ3JpdHkgZG93biB0aGUgbGluZS4gQSBwcm9hY3RpdmUgZGVwZW5kZW5jeSBhdWRpdCBub3cgc2F2ZXMgbWUgYSB3b3JsZCBvZiBoZWFkYWNoZSBsYXRlci4gVGltZSB0byBkaWcgaW4uLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc3MSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjAwLjczMzQzODcyNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFZzb2NrIHByb3RvY29sXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBWU09DS0VUU1xcbiAgIDc6XFx0XFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgU29ja2V0IHByb3RvY29sXFxcIlxcbiAgIDg6XFx0XFx0aGVscFxcbiAgIDk6XFx0XFx0ICBWaXJ0dWFsIFNvY2tldCBQcm90b2NvbCBpcyBhIHNvY2tldCBwcm90b2NvbCBzaW1pbGFyIHRvIFRDUC9JUFxcbiAgMTA6XFx0XFx0ICBhbGxvd2luZyBjb21tdW5pY2F0aW9uIGJldHdlZW4gVmlydHVhbCBNYWNoaW5lcyBhbmQgaHlwZXJ2aXNvclxcbiAgMTE6XFx0XFx0ICBvciBob3N0LlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIFlvdSBzaG91bGQgYWxzbyBzZWxlY3Qgb25lIG9yIG1vcmUgaHlwZXJ2aXNvci1zcGVjaWZpYyB0cmFuc3BvcnRzXFxuICAxNDpcXHRcXHQgIGJlbG93LlxcbiAgMTU6XFx0XFxuICAxNjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcXG4gIDE3OlxcdFxcdCAgd2lsbCBiZSBjYWxsZWQgdnNvY2suIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxODpcXHRcXG4gIDE5OlxcdGNvbmZpZyBWU09DS0VUU19ESUFHXFxuICAyMDpcXHRcXHR0cmlzdGF0ZSBcXFwiVmlydHVhbCBTb2NrZXRzIG1vbml0b3JpbmcgaW50ZXJmYWNlXFxcIlxcbiAgMjE6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xcbiAgMjI6XFx0XFx0ZGVmYXVsdCB5XFxuICAyMzpcXHRcXHRoZWxwXFxuICAyNDpcXHRcXHQgIFN1cHBvcnQgZm9yIFBGX1ZTT0NLIHNvY2tldHMgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0aGUgc3MgdG9vbC5cXG4gIDI1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG4gIDI2OlxcdFxcbiAgMjc6XFx0XFx0ICBFbmFibGUgdGhpcyBtb2R1bGUgc28gdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBjYW4gcXVlcnkgb3BlbiBzb2NrZXRzLlxcbiAgMjg6XFx0XFxuICAyOTpcXHRjb25maWcgVlNPQ0tFVFNfTE9PUEJBQ0tcXG4gIDMwOlxcdFxcdHRyaXN0YXRlIFxcXCJWaXJ0dWFsIFNvY2tldHMgbG9vcGJhY2sgdHJhbnNwb3J0XFxcIlxcbiAgMzE6XFx0XFx0ZGVwZW5kcyBvbiBWU09DS0VUU1xcbiAgMzI6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMzpcXHRcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgMzQ6XFx0XFx0aGVscFxcbiAgMzU6XFx0XFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgbG9vcGJhY2sgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMsXFxuICAzNjpcXHRcXHQgIHVzaW5nIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICAzOTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHZzb2NrX2xvb3BiYWNrLiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNcXG4gIDQyOlxcdFxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgVk1DSSB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1xcXCJcXG4gIDQzOlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVk1XQVJFX1ZNQ0lcXG4gIDQ0OlxcdFxcdGhlbHBcXG4gIDQ1OlxcdFxcdCAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhIFZNQ0kgdHJhbnNwb3J0IGZvciBWaXJ0dWFsIFNvY2tldHMuXFxuICA0NjpcXHRcXG4gIDQ3OlxcdFxcdCAgRW5hYmxlIHRoaXMgdHJhbnNwb3J0IGlmIHlvdXIgVmlydHVhbCBNYWNoaW5lIHJ1bnMgb24gYSBWTXdhcmVcXG4gIDQ4OlxcdFxcdCAgaHlwZXJ2aXNvci5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA1MTpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIHZtd192c29ja192bWNpX3RyYW5zcG9ydC4gSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDUyOlxcdFxcbiAgNTM6XFx0Y29uZmlnIFZJUlRJT19WU09DS0VUU1xcbiAgNTQ6XFx0XFx0dHJpc3RhdGUgXFxcInZpcnRpbyB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1xcXCJcXG4gIDU1OlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgVklSVElPXFxuICA1NjpcXHRcXHRzZWxlY3QgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgNTc6XFx0XFx0aGVscFxcbiAgNTg6XFx0XFx0ICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIGEgdmlydGlvIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzLlxcbiAgNTk6XFx0XFxuICA2MDpcXHRcXHQgIEVuYWJsZSB0aGlzIHRyYW5zcG9ydCBpZiB5b3VyIFZpcnR1YWwgTWFjaGluZSBob3N0IHN1cHBvcnRzIFZpcnR1YWxcXG4gIDYxOlxcdFxcdCAgU29ja2V0cyBvdmVyIHZpcnRpby5cXG4gIDYyOlxcdFxcbiAgNjM6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmVcXG4gIDY0OlxcdFxcdCAgY2FsbGVkIHZtd192c29ja192aXJ0aW9fdHJhbnNwb3J0LiBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRjb25maWcgVklSVElPX1ZTT0NLRVRTX0NPTU1PTlxcbiAgNjc6XFx0XFx0dHJpc3RhdGVcXG4gIDY4OlxcdFxcdGhlbHBcXG4gIDY5OlxcdFxcdCAgVGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQgYnkgYW55IGRyaXZlciB3aGljaCBuZWVkcyB0byBhY2Nlc3NcXG4gIDcwOlxcdFxcdCAgdGhlIHZpcnRpb192c29jay4gIFRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcXG4gIDcxOlxcdFxcdCAgdm13X3Zzb2NrX3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLlxcbiAgNzI6XFx0XFxuICA3MzpcXHRjb25maWcgSFlQRVJWX1ZTT0NLRVRTXFxuICA3NDpcXHRcXHR0cmlzdGF0ZSBcXFwiSHlwZXItViB0cmFuc3BvcnQgZm9yIFZpcnR1YWwgU29ja2V0c1xcXCJcXG4gIDc1OlxcdFxcdGRlcGVuZHMgb24gVlNPQ0tFVFMgXFx1MDAyNlxcdTAwMjYgSFlQRVJWX1ZNQlVTXFxuICA3NjpcXHRcXHRoZWxwXFxuICA3NzpcXHRcXHQgIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBIeXBlci1WIHRyYW5zcG9ydCBmb3IgVmlydHVhbCBTb2NrZXRzLlxcbiAgNzg6XFx0XFxuICA3OTpcXHRcXHQgIEVuYWJsZSB0aGlzIHRyYW5zcG9ydCBpZiB5b3VyIFZpcnR1YWwgTWFjaGluZSBob3N0IHN1cHBvcnRzIFZpcnR1YWxcXG4gIDgwOlxcdFxcdCAgU29ja2V0cyBvdmVyIEh5cGVyLVYgVk1CdXMuXFxuICA4MTpcXHRcXG4gIDgyOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXFxuICA4MzpcXHRcXHQgIGNhbGxlZCBodl9zb2NrLiBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxODoxODowMC43MzM1NDkxNjVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTkzNTgxNDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KipcblxuT2theSwgc28gSSBuZWVkIHRvIGdldCB0aGlzIHZTb2NrZXQgaW1wbGVtZW50YXRpb24gdXAgYW5kIHJ1bm5pbmcuIEZpcnN0LCBsZXQncyBuYWlsIGRvd24gdGhlIGVzc2VudGlhbCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBwcmV0dHkgc3VyZSBJIG5lZWQgYFZTT0NLRVRTYCwgb2J2aW91c2x5LCBhbmQgdGhlbiB0aGUgZm91bmRhdGlvbmFsIGBWSVJUSU9gIGxheWVyLiBTaW5jZSB3ZSBhcmUgdXNpbmcgdlNvY2tldHMgb24gVmlydElPLCB0aGUgc3BlY2lmaWMgYFZJUlRJT19WU09DS0VUU2Agb3B0aW9uIHNlZW1zIGxpa2UgYSBnaXZlbi4gTm93LCB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgVk13YXJlIGVudmlyb25tZW50LCBzbyBgVk1XQVJFX1ZNQ0lgIGlzIGxpa2VseSBnb2luZyB0byBiZSBuZWNlc3NhcnkuIEZpbmFsbHksIHRvIGVuYWJsZSB0aGUgdlNvY2tldCBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgVk1DSSBmcmFtZXdvcmssIEknbGwgbmVlZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgLiBHb3QgaXQuXG5cbk5vdywgdG8gYmUgYWJzb2x1dGVseSBzdXJlIGFib3V0IGBWTVdBUkVfVk1DSWAsIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgY2hlY2sgaXRzIEtjb25maWcgZmlsZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgb25lIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRldGFpbHMgYXJvdW5kIHRoYXQgbW9kdWxlLiBUaGlzIGlzIGp1c3QgZHVlIGRpbGlnZW5jZS4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGVzc2VudGlhbC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjE0OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6MDQuNzI3MTM0MjI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5Njc2NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWTVdBUkVfVk1DSVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21pc2MvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWlzYy92bXdfdm1jaS9LY29uZmlnLTUtXFxuZHJpdmVycy9taXNjL3Ztd192bWNpL0tjb25maWc6Njpjb25maWcgVk1XQVJFX1ZNQ0lcXG5kcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJWTXdhcmUgVk1DSSBEcml2ZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjA0Ljc4NjgxNjAxOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMzgyMjExMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQ2hlY2tpbmcgVk1XQVJFX1ZNQ0kgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIHRoZSBhZ2VuZGEgaXMgYSBkZWVwIGRpdmUgaW50byB0aGUgYFZNV0FSRV9WTUNJYCBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiB0aGUgY3JpdGljYWwgY29tcG9uZW50cyB0aGF0IHJlbHkgb24gdGhpcyBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBpZiBpdCdzIGFsdGVyZWQsIHVwZGF0ZWQsIG9yIHJlbW92ZWQuIEnigJltIHRoaW5raW5nIGluIHRlcm1zIG9mIHRoZSB1bmRlcmx5aW5nIGluZnJhc3RydWN0dXJlLCB0aGUgaHlwZXJ2aXNvcidzIGludGVyYWN0aW9uIHdpdGggdGhlIGd1ZXN0IE9TLCBhbmQgb2YgY291cnNlLCB0aGUgaW1wbGljYXRpb25zIGZvciBhbnkgaGlnaGVyLWxldmVsIHNlcnZpY2VzIGJ1aWx0IHVwb24gdGhlIFZNQ0kuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGJlIHRoaW5raW5nIGFib3V0OlxuXG4qICAgKipLZXJuZWwgbW9kdWxlczoqKiBXaGF0IG1vZHVsZXMgYXJlIHRpZ2h0bHkgY291cGxlZCwgYW5kIHdoYXQncyB0aGUgdmVyc2lvbiBjb21wYXRpYmlsaXR5IGxpa2U/IEFueSBrbm93biBjb25mbGljdHM/XG4qICAgKipVc2VyLXNwYWNlIGxpYnJhcmllczoqKiBBcmUgdGhlcmUgYW55IHNoYXJlZCBvYmplY3QgZGVwZW5kZW5jaWVzLCBhbmQgaWYgc28sIGRvIHRoZXkgYWxpZ24gd2l0aCB0aGUgZXhwZWN0ZWQgdmVyc2lvbnM/XG4qICAgKipWaXJ0dWFsIG1hY2hpbmUgY29uZmlndXJhdGlvbjoqKiBIb3cgZGVlcGx5IGlzIFZNQ0kgaW50ZWdyYXRlZCBpbnRvIHRoZSBWTSB0ZW1wbGF0ZT8gSXMgaXQgc2FmZSB0byBhbHRlciBpdD9cbiogICAqKlBlcmZvcm1hbmNlIGltcGxpY2F0aW9uczoqKiBBbnkga25vd24gcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3IgcmVzb3VyY2UgY29udGVudGlvbiBpc3N1ZXMgd2hlbiBWTUNJIGlzIGFjdGl2ZT9cbiogICAqKlNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllczoqKiBBcmUgdGhlcmUgYW55IGtub3duIGV4cGxvaXRzIG9yIGF0dGFjayB2ZWN0b3JzIHRoYXQgY291bGQgaW1wYWN0IHRoZSB2aXJ0dWFsaXphdGlvbiBlbnZpcm9ubWVudD9cblxuSSdtIGVzc2VudGlhbGx5IHRyeWluZyB0byBidWlsZCBhIHF1aWNrIGRlcGVuZGVuY3kgdHJlZSBpbiBteSBoZWFkIGFuZCBhc3Nlc3MgdGhlIGJsYXN0IHJhZGl1cyBvZiBhbnkgbW9kaWZpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgZm9yIGFueSBsZWdhY3kgY29kZSBvciB3b3JrYXJvdW5kcyB0aGF0IG1heSBiZSBpbXBhY3RpbmcgdGhlIGNvZGUtYmFzZS4gTGV0J3Mgc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU1NCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjExLjEyNTA0MDU2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2ODg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL21pc2Mvdm13X3ZtY2kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBWTXdhcmUgVk1DSSBkZXZpY2VcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFZNV0FSRV9WTUNJXFxuICAgNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVk13YXJlIFZNQ0kgRHJpdmVyXFxcIlxcbiAgIDg6XFx0XFx0ZGVwZW5kcyBvbiAoWDg2IHx8IEFSTTY0KSBcXHUwMDI2XFx1MDAyNiAhQ1BVX0JJR19FTkRJQU4gXFx1MDAyNlxcdTAwMjYgUENJXFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIFRoaXMgaXMgVk13YXJlJ3MgVmlydHVhbCBNYWNoaW5lIENvbW11bmljYXRpb24gSW50ZXJmYWNlLiAgSXQgZW5hYmxlc1xcbiAgMTE6XFx0XFx0ICBoaWdoLXNwZWVkIGNvbW11bmljYXRpb24gYmV0d2VlbiBob3N0IGFuZCBndWVzdCBpbiBhIHZpcnR1YWxcXG4gIDEyOlxcdFxcdCAgZW52aXJvbm1lbnQgdmlhIHRoZSBWTUNJIHZpcnR1YWwgZGV2aWNlLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICAxNzpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2bXdfdm1jaS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6MTEuMTI1MTExNDQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjg4NzU4NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVk1XQVJFX1ZNQ0kgYW5kIFBhY2tldCBSZWNlcHRpb24qKlxuXG5Pa2F5LCBzbyBgVk1XQVJFX1ZNQ0lgIHJlbGllcyBvbiBgUENJYCwgd2hpY2ggbWFrZXMgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHN0cmFpZ2h0Zm9yd2FyZC4gV2UncmUgbG9va2luZyBhdCBhIHNldCBvZiBjb25maWd1cmF0aW9ucyBoZXJlOiBgVlNPQ0tFVFNgLCBgVklSVElPYCwgYFZJUlRJT19WU09DS0VUU2AsIGBQQ0lgLCBgVk1XQVJFX1ZNQ0lgLCBhbmQgYFZNV0FSRV9WTUNJX1ZTT0NLRVRTYC4gVGhhdCdzIHRoZSBiYXNlbGluZS5cblxuTm93LCBsZXQncyBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHdoZXJlIHRvIGZvY3VzIG91ciBhbmFseXNpcy4gSSd2ZSBnb3QgYSBmZXcga2V5IGZ1bmN0aW9ucyB0byBjb25zaWRlcjogYHZzb2NrX2NoZWNrX3NvdXJjZWAsIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCwgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYC4gVGhlIHF1ZXN0aW9uIGlzLCB3aGljaCBvbmUocykgYXJlIHRoZSBtb3N0IHN0cmF0ZWdpY2FsbHkgdmFsdWFibGUgZm9yIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWwgZnV6emluZz9cblxuYHZzb2NrX2NoZWNrX3NvdXJjZWAgKnNlZW1zKiBpbnRlcmVzdGluZyBiZWNhdXNlIGl0J3MgZXhwb3J0ZWQsIGJ1dCwgb24gc2Vjb25kIHRob3VnaHQsIGl0J3MganVzdCBhIGhlbHBlci4gVGhvc2Ugb3RoZXIgdGhyZWUgYXJlIGVudHJ5IHBvaW50cy4gVGhlIG90aGVyIHRocmVlIGZ1bmN0aW9ucyBjYWxsIGl0LiBGdXp6aW5nIHRoZSBlbnRyeSBwb2ludHMgc2VlbXMgbXVjaCBtb3JlIHByb21pc2luZyBiZWNhdXNlIHRoZXkncmUgd2hlcmUgdGhlIHBhY2tldHMgYXJlIGFjdHVhbGx5IHJlY2VpdmVkLiBUaGF0J3Mgd2hlcmUgd2Ugc2hvdWxkIGNvbmNlbnRyYXRlIG91ciBlZmZvcnRzLiBJJ2xsIHRha2UgYSBsb29rIGF0IGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCBhcyBhIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTQ4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6MTYuMjkzOTkwNFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk4NzQ3NDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM9NjMyPXN0YXRpYyB2b2lkIHZpcnRpb190cmFuc3BvcnRfcnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnQuYy02ODctXFx0XFx0XFx0ICovXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmM6Njg4OlxcdFxcdFxcdHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3QoXFx1MDAyNnZpcnRpb190cmFuc3BvcnQsIHNrYiwgTlVMTCk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0LmMtNjg5LVxcdFxcdH1cXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYz0xNzU4PXN0YXRpYyBib29sIHZpcnRpb190cmFuc3BvcnRfdmFsaWRfdHlwZSh1MTYgdHlwZSlcXG4tLVxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzY2LSAqL1xcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYzoxNzY3OnZvaWQgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzdHJ1Y3QgdmlydGlvX3RyYW5zcG9ydCAqdCxcXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTc2OC1cXHRcXHRcXHQgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0KVxcbi0tXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE3ODAtXFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE3ODE6XFx0dHJhY2VfdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChzcmMuc3ZtX2NpZCwgc3JjLnN2bV9wb3J0LFxcbm5ldC92bXdfdnNvY2svdmlydGlvX3RyYW5zcG9ydF9jb21tb24uYy0xNzgyLVxcdFxcdFxcdFxcdFxcdGRzdC5zdm1fY2lkLCBkc3Quc3ZtX3BvcnQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmMtMTg3NS19XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jOjE4NzY6RVhQT1JUX1NZTUJPTF9HUEwodmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdCk7XFxubmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jLTE4NzctXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3Zzb2NrX2xvb3BiYWNrLmM9MTIzPXN0YXRpYyB2b2lkIHZzb2NrX2xvb3BiYWNrX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jLTE0MS1cXHRcXHR2aXJ0aW9fdHJhbnNwb3J0X2RlbGl2ZXJfdGFwX3BrdChza2IpO1xcbm5ldC92bXdfdnNvY2svdnNvY2tfbG9vcGJhY2suYzoxNDI6XFx0XFx0dmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdChcXHUwMDI2bG9vcGJhY2tfdHJhbnNwb3J0LCBza2IsXFxubmV0L3Ztd192c29jay92c29ja19sb29wYmFjay5jLTE0My1cXHRcXHRcXHRcXHRcXHQgIHNvY2tfbmV0KHNrYi1cXHUwMDNlc2spKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6MTYuNDkyNzQ0Mzg5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDY1ODQzMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgSSBzZWUgaXQ6XG5cbioqRm9jdXNpbmcgSW4gb24gUGFja2V0IFJlY2VwdGlvbiBNZWNoYW5pc21zKipcblxuT2theSwgc28gYHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RgIGlzIHRoZSBrZXkgZnVuY3Rpb24gdG8gZGlzc2VjdC4gSXQncyBleHBsaWNpdGx5IGV4cG9ydGVkIGFuZCBnZXRzIGNhbGxlZCBmcm9tIGJvdGggYHZpcnRpb190cmFuc3BvcnRfcnhfd29ya2AgYW5kIGB2c29ja19sb29wYmFja193b3JrYC4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgcGFja2V0IHJlY2VwdGlvbiB3aXRoaW4gdGhlIFZpcnRJTyB0cmFuc3BvcnQgbGF5ZXIuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBwb2ludHMgb2YgY29udGVudGlvbiB0aGVyZS5cblxuU2luY2UgSSdtIGxvb2tpbmcgYXQgdHJhbnNwb3J0IGxheWVycywgaXQgbWFrZXMgc2Vuc2UgdG8gdGhlbiBwaXZvdCBhbmQgY2hlY2sgb3V0IHRoZSBWTUNJIGVxdWl2YWxlbnRzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgY29uY2VwdHMgdHJhbnNsYXRlIG9yIGRpZmZlci4gU28sIEkgbmVlZCB0byBsb29rIGF0IGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYCB0byBzZWUgd2hhdCBJIGNhbiBsZWFybi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI5NSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjI3LjU1ODU5MDkxOFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE1Nzk3NDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3Ztd192c29jay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTMyPXN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9kZ3JhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpO1xcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYzozMzpzdGF0aWMgaW50IHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiKHZvaWQgKmRhdGEsIHN0cnVjdCB2bWNpX2RhdGFncmFtICpkZyk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTM0LXN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3BlZXJfZGV0YWNoX2NiKHUzMiBzdWJfaWQsXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9NjQ5PXN0YXRpYyBib29sIHZtY2lfdHJhbnNwb3J0X3N0cmVhbV9hbGxvdyhzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLCB1MzIgY2lkLFxcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTY3NC1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6Njc1OnN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy02NzYte1xcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jPTkxMD1zdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy05NDYtXFx0XFx0LyogQmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJ1biBpbiB0aGUgc2FtZSBjb250ZXh0IGFzXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjk0NzpcXHRcXHQgKiB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYiBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy05NDgtXFx0XFx0ICogc29ja2V0IGhhcyBjbG9zZWQuIFdlIG5lZWQgdG8gbGV0IHRoZSBvdGhlciBzaWRlIGtub3cgb3IgaXRcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYz0yMTEzPXN0YXRpYyBpbnQgX19pbml0IHZtY2lfdHJhbnNwb3J0X2luaXQodm9pZClcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0yMTIxLVxcdFxcdFxcdFxcdFxcdFxcdCBWTUNJX0ZMQUdfQU5ZQ0lEX0RHX0hORCxcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6MjEyMjpcXHRcXHRcXHRcXHRcXHRcXHQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2IsXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTIxMjMtXFx0XFx0XFx0XFx0XFx0XFx0IE5VTEwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjI3LjYxMDE3NTg5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODUwMzU5NzQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgVk1DSSBUcmFuc3BvcnQgUmVjZWl2ZSBQYXRoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGlzIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQgd2hlbiBhIGRhdGFncmFtIGhhbmRsZSBpcyBjcmVhdGVkIHdpdGggYHZtY2lfZGF0YWdyYW1fY3JlYXRlX2hhbmRsZV9wcml2YC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYSBkZWZpbml0ZSBmb2N1cyBzeW1ib2wgdG8gZGlnIGludG8uIE5vdywgSSBuZWVkIHRvIHNlZSAqaG93KiB0aGlzIGNhbGxiYWNrIGlzIGFjdHVhbGx5IHVzZWQuIE15IG5leHQgbW92ZSBpcyB0byBleGFtaW5lIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgd2hlcmUgdGhlIGNhbGxiYWNrIGlzIGludm9rZWQgb3IgYXQgbGVhc3QgaW50ZWdyYXRlZCBpbnRvIHRoZSByZWNlaXZlIHByb2Nlc3NpbmcgZmxvdy4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNDQsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QxODoxODozMS40NjA1Mzg0OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM5ODU4MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvdm13X3Zzb2NrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9MzQ9c3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcGVlcl9kZXRhY2hfY2IodTMyIHN1Yl9pZCxcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0zNi1cXHRcXHRcXHRcXHRcXHQgIHZvaWQgKmNsaWVudF9kYXRhKTtcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM6Mzc6c3RhdGljIHZvaWQgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy0zOC1zdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9jbGVhbnVwKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9Njc1PXN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxcbi0tXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jLTgwMy1cXHRcXHRtZW1jcHkoXFx1MDAyNnJlY3ZfcGt0X2luZm8tXFx1MDAzZXBrdCwgcGt0LCBzaXplb2YocmVjdl9wa3RfaW5mby1cXHUwMDNlcGt0KSk7XFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjgwNDpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnJlY3ZfcGt0X2luZm8tXFx1MDAzZXdvcmssIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmspO1xcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy04MDUtXFxuLS1cXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmM9OTAyPXN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3FwX3Jlc3VtZWRfY2IodTMyIHN1Yl9pZCxcXG4tLVxcbm5ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYy05MDktXFxubmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jOjkxMDpzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5uZXQvdm13X3Zzb2NrL3ZtY2lfdHJhbnNwb3J0LmMtOTExLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6MzEuNTE0NTMyMTY0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjEwNzAxMTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBWc29jayBQYXRjaCdzIEltcGFjdCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AganVtcHMgb3V0IGFzIGEgZ29vZCBmb2NhbCBwb2ludC4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBtaWdodCBiZSB0b3VjaGVkIGhlcmUuIFRoZSBwYXRjaCBtb2RpZmllcyBgdmlydGlvX3RyYW5zcG9ydF9jb21tb24uY2AgYW5kIGB2bWNpX3RyYW5zcG9ydC5jYCwgc28gaXQncyBsaWtlbHkgYSB0cmFuc3BvcnQtbGV2ZWwgY29uY2Vybi5cblxuRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gSSBzZWUgYFZTT0NLRVRTYCwgYFZJUlRJT19WU09DS0VUU2AsIGFuZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgLiBXYWl0LCBhIG1vbWVudCEgYFZJUlRJT19WU09DS0VUU2AgZGVwZW5kcyBvbiBib3RoIGBWU09DS0VUU2AgKmFuZCogYFZJUlRJT2AsIGFuZCBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgIGFsc28gZGVwZW5kcyBvbiBgVlNPQ0tFVFNgIGFuZCBgVk1XQVJFX1ZNQ0lgLiBTbywgdGhlIGVuYWJsaW5nIGNvbmZpZ3MgSSBuZWVkIGFyZTpcblxuKiAgIGBWU09DS0VUU2BcbiogICBgVklSVElPX1ZTT0NLRVRTYFxuKiAgIGBWTVdBUkVfVk1DSV9WU09DS0VUU2BcbiogICBgVklSVElPYFxuKiAgIGBWTVdBUkVfVk1DSWBcblxuTm93LCBsZXQncyBzZWUgaWYgYFZJUlRJT19WU09DS0VUU19DT01NT05gIGlzIG5lZWRlZC4gTG9va3MgbGlrZSBpdCdzIHNlbGVjdGVkIGJ5IGBWSVJUSU9fVlNPQ0tFVFNgIGFuZCBgVlNPQ0tFVFNfTE9PUEJBQ0tgLCBzbyBubyBleHBsaWNpdCBhZGRpdGlvbiBpcyBuZWVkZWQuIFdoYXQgYWJvdXQgYFZTT0NLRVRTX0xPT1BCQUNLYD8gVGhlIHBhdGNoICpkb2VzKiBtb2RpZnkgYHZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNgLCB3aGljaCBpcyBhbHNvIHVzZWQgYnkgYFZTT0NLRVRTX0xPT1BCQUNLYC4gU28gdGhhdCdzIGEgZGVmaW5pdGUgYWRkLlxuXG5NeSBjdXJyZW50IGxpc3Qgb2YgZW5hYmxpbmcgY29uZmlncyBpcyBub3c6XG5cbiogICBgVlNPQ0tFVFNgXG4qICAgYFZJUlRJT19WU09DS0VUU2BcbiogICBgVk1XQVJFX1ZNQ0lfVlNPQ0tFVFNgXG4qICAgYFZTT0NLRVRTX0xPT1BCQUNLYFxuKiAgIGBWSVJUSU9gXG4qICAgYFZNV0FSRV9WTUNJYFxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgZm9jdXMgc3ltYm9scyBiYXNlZCBvbiB0aGUgY29kZSBjaGFuZ2VzLiBJJ20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0bzpcblxuKiAgIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YFxuKiAgIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmBcbiogICBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2BcblxuUmlnaHQsIGxldCdzIG1ha2Ugc3VyZSB0aGlzIHJlYXNvbmluZyBob2xkcy4gVGhlIHBhdGNoIGludHJvZHVjZXMgYHZzb2NrX2NoZWNrX3NvdXJjZWAgd2hpY2ggdmFsaWRhdGVzIHRoZSBzb3VyY2UuIFRoaXMgYWZmZWN0cyAqYWxsKiBvZiB0aGUgZm9jdXMgc3ltYm9scyBiZWNhdXNlIG9mIHBhY2tldCB2YWxpZGF0aW9uLCBhbmQgdGhlIHNvdXJjZSBwYWNrZXQgY2hlY2suIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2c29jayBsb2dpYyB3aGljaCB0b3VjaGVzIGJvdGggdmlydGlvIGFuZCB2bWNpIHRyYW5zcG9ydHMuIERlZmluaXRlbHkgZnV6emVyIHdvcnRoeS5cblxuT25lIGxhc3QgdGhpbmcsIGxldCBtZSBkb3VibGUtY2hlY2sgYFZNV0FSRV9WTUNJYCdzIGRlcGVuZGVuY2llcy4gSXQgZGVwZW5kcyBvbiBgKFg4NiB8fCBBUk02NCkgXHUwMDI2XHUwMDI2ICFDUFVfQklHX0VORElBTiBcdTAwMjZcdTAwMjYgUENJYC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gZXhwbGljaXRseSBhZGQgYFBDSWAuXG5cbk15IGZpbmFsIGNvbmZpZ3VyYXRpb24gbGlzdCBpczpcblxuKiAgIGBWU09DS0VUU2BcbiogICBgVklSVElPX1ZTT0NLRVRTYFxuKiAgIGBWTVdBUkVfVk1DSV9WU09DS0VUU2BcbiogICBgVlNPQ0tFVFNfTE9PUEJBQ0tgXG4qICAgYFZJUlRJT2BcbiogICBgVk1XQVJFX1ZNQ0lgXG4qICAgYFBDSWBcblxuQWxyaWdodCwgbGV0J3MgY2FsbCB0aGF0IGdvb2QuIFRpbWUgdG8gc2V0IHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4MjgsIk91dHB1dFRva2VucyI6MjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjQyLjEyNTIzNTY2MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzMTE2MzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWU09DS0VUU1wiLFxuICAgIFwiVklSVElPX1ZTT0NLRVRTXCIsXG4gICAgXCJWTVdBUkVfVk1DSV9WU09DS0VUU1wiLFxuICAgIFwiVlNPQ0tFVFNfTE9PUEJBQ0tcIixcbiAgICBcIlZJUlRJT1wiLFxuICAgIFwiVk1XQVJFX1ZNQ0lcIixcbiAgICBcIlBDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3RcIixcbiAgICBcInZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiXCIsXG4gICAgXCJ2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmdW5jdGlvbiBgdnNvY2tfY2hlY2tfc291cmNlYCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIG9mIGluY29taW5nIHBhY2tldHMgYWdhaW5zdCB0aGUgc29ja2V0IHBlZXIuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AgdG8gZHJvcCBwYWNrZXRzIHRoYXQgZG8gbm90IG1hdGNoIHRoZSBleHBlY3RlZCBzb3VyY2UuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB2c29jayBsb2dpYyBhbmQgaXRzIHRyYW5zcG9ydHMgKHZpcnRpbyBhbmQgdm1jaSkgdGhhdCBhZmZlY3RzIHBhY2tldCBwcm9jZXNzaW5nIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZTT0NLRVRTXCIsXG4gICAgXCJWSVJUSU9fVlNPQ0tFVFNcIixcbiAgICBcIlZNV0FSRV9WTUNJX1ZTT0NLRVRTXCIsXG4gICAgXCJWU09DS0VUU19MT09QQkFDS1wiLFxuICAgIFwiVklSVElPXCIsXG4gICAgXCJWTVdBUkVfVk1DSVwiLFxuICAgIFwiUENJXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdFwiLFxuICAgIFwidm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2JcIixcbiAgICBcInZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZ1bmN0aW9uIGB2c29ja19jaGVja19zb3VyY2VgIHRvIHZhbGlkYXRlIHRoZSBzb3VyY2Ugb2YgaW5jb21pbmcgcGFja2V0cyBhZ2FpbnN0IHRoZSBzb2NrZXQgcGVlci4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCwgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCwgYW5kIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrYCB0byBkcm9wIHBhY2tldHMgdGhhdCBkbyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHNvdXJjZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHZzb2NrIGxvZ2ljIGFuZCBpdHMgdHJhbnNwb3J0cyAodmlydGlvIGFuZCB2bWNpKSB0aGF0IGFmZmVjdHMgcGFja2V0IHByb2Nlc3NpbmcgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjQyLjIwODM1ODY1M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA0MTg5MjYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjQyLjIwODk0OTIwMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDQxMjk4MDAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9naWMgZml4IHRvIHZhbGlkYXRlIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBpbmNvbWluZyB2c29jayBwYWNrZXRzIGFnYWluc3QgdGhlIGV4cGVjdGVkIHBlZXIgYWRkcmVzcyBmb3IgY29ubmVjdGVkIHNvY2tldHMgKGB2c29ja19jaGVja19zb3VyY2VgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgZGF0YSBsZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBhbmQgdGhlIGNoYW5nZXMgbWVyZWx5IGFkZCBjb25kaXRpb25hbCBjaGVja3MgYmFzZWQgb24gZXhpc3RpbmcgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY4MzhkYTQ5MGQ2OWNmM2Y2MDNhOWUzNzc5NDdhNDZiMDlmYTYwOWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyAyMyAxODoxNzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3Zzb2NrLmggYi9pbmNsdWRlL25ldC9hZl92c29jay5oXG5pbmRleCAzMzU3ZWU2MmQxMGJmLi41NTQ5Mjk4YzFlYzZiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuKysrIGIvaW5jbHVkZS9uZXQvYWZfdnNvY2suaFxuQEAgLTIyOSw2ICsyMjksOSBAQCBzdHJ1Y3Qgc29jayAqdnNvY2tfZmluZF9ib3VuZF9zb2NrZXRfbmV0KHN0cnVjdCBzb2NrYWRkcl92bSAqYWRkcixcbiBzdHJ1Y3Qgc29jayAqdnNvY2tfZmluZF9jb25uZWN0ZWRfc29ja2V0X25ldChzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYyxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3Qgc29ja2FkZHJfdm0gKmRzdCxcbiBcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0ICpuZXQpO1xuK2Jvb2wgdnNvY2tfY2hlY2tfc291cmNlKGNvbnN0IHN0cnVjdCB2c29ja19zb2NrICp2c2ssXG4rXHRcdFx0Y29uc3Qgc3RydWN0IHZzb2NrX3RyYW5zcG9ydCAqdHJhbnNwb3J0LFxuK1x0XHRcdGNvbnN0IHN0cnVjdCBzb2NrYWRkcl92bSAqc3JjKTtcbiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spO1xuIHZvaWQgdnNvY2tfZm9yX2VhY2hfY29ubmVjdGVkX3NvY2tldChzdHJ1Y3QgdnNvY2tfdHJhbnNwb3J0ICp0cmFuc3BvcnQsXG4gXHRcdFx0XHQgICAgIHZvaWQgKCpmbikoc3RydWN0IHNvY2sgKnNrKSk7XG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay9hZl92c29jay5jIGIvbmV0L3Ztd192c29jay9hZl92c29jay5jXG5pbmRleCBhMzNiMmEyZDM4MWRjLi5mODQwNDk4YjU4YWZiIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay9hZl92c29jay5jXG4rKysgYi9uZXQvdm13X3Zzb2NrL2FmX3Zzb2NrLmNcbkBAIC00MzgsNiArNDM4LDM4IEBAIHN0cnVjdCBzb2NrICp2c29ja19maW5kX2Nvbm5lY3RlZF9zb2NrZXQoc3RydWN0IHNvY2thZGRyX3ZtICpzcmMsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKHZzb2NrX2ZpbmRfY29ubmVjdGVkX3NvY2tldCk7XG4gXG4rLyoqXG4rICogdnNvY2tfY2hlY2tfc291cmNlIC0gdmFsaWRhdGUgYSBwYWNrZXQgc291cmNlIGFnYWluc3QgYSBzb2NrZXQgcGVlclxuKyAqIEB2c2s6IHNvY2tldCByZWNlaXZpbmcgdGhlIHBhY2tldFxuKyAqIEB0cmFuc3BvcnQ6IHRyYW5zcG9ydCByZWNlaXZpbmcgdGhlIHBhY2tldFxuKyAqIEBzcmM6IHNvdXJjZSBhZGRyZXNzIGZyb20gdGhlIHBhY2tldFxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBwYWNrZXQgYXJyaXZlZCBvbiB0aGUgc29ja2V0J3MgYXNzaWduZWQgdHJhbnNwb3J0IGFuZFxuKyAqIGl0cyBzb3VyY2UgbWF0Y2hlcyB0aGUgc3RvcmVkIHBlZXIuIExvb3BiYWNrIHBhY2tldHMgYXJlIGdlbmVyYXRlZFxuKyAqIGludGVybmFsbHkgYW5kIGFsd2F5cyB1c2UgdGhlIGxvY2FsIENJRCBhcyB0aGVpciBzb3VyY2UsIGluY2x1ZGluZ1xuKyAqIGNvbm5lY3Rpb25zIHVzaW5nIGEgdmFsaWQgQ0lEIGFsaWFzLlxuKyAqXG4rICogVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIHNvY2tldCBsb2NrIGFuZCBtdXN0IG5vdCBjYWxsIHRoaXMgZm9yIGxpc3RlbmluZ1xuKyAqIHNvY2tldHMsIHdoaWNoIGFjY2VwdCBwYWNrZXRzIGZyb20gYW55IHNvdXJjZSBhbmQgaGF2ZSBubyBhc3NpZ25lZFxuKyAqIHRyYW5zcG9ydC5cbisgKi9cbitib29sIHZzb2NrX2NoZWNrX3NvdXJjZShjb25zdCBzdHJ1Y3QgdnNvY2tfc29jayAqdnNrLFxuK1x0XHRcdGNvbnN0IHN0cnVjdCB2c29ja190cmFuc3BvcnQgKnRyYW5zcG9ydCxcbitcdFx0XHRjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfdm0gKnNyYylcbit7XG4rXHRpZiAodnNrLVx1MDAzZXRyYW5zcG9ydCAhPSB0cmFuc3BvcnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmIChzcmMtXHUwMDNlc3ZtX3BvcnQgIT0gdnNrLVx1MDAzZXJlbW90ZV9hZGRyLnN2bV9wb3J0KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoc3JjLVx1MDAzZXN2bV9jaWQgPT0gdnNrLVx1MDAzZXJlbW90ZV9hZGRyLnN2bV9jaWQpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuK1x0cmV0dXJuIHRyYW5zcG9ydC1cdTAwM2VnZXRfbG9jYWxfY2lkKCkgPT0gVk1BRERSX0NJRF9MT0NBTDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwodnNvY2tfY2hlY2tfc291cmNlKTtcbitcbiB2b2lkIHZzb2NrX3JlbW92ZV9zb2NrKHN0cnVjdCB2c29ja19zb2NrICp2c2spXG4ge1xuIFx0LyogVHJhbnNwb3J0IHJlYXNzaWdubWVudCBtdXN0IG5vdCByZW1vdmUgdGhlIGJpbmRpbmcuICovXG5kaWZmIC0tZ2l0IGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jIGIvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXG5pbmRleCBlNGViYWE3MGY2YzIzLi42MzAxYzEwOGE0ZjEwIDEwMDY0NFxuLS0tIGEvbmV0L3Ztd192c29jay92aXJ0aW9fdHJhbnNwb3J0X2NvbW1vbi5jXG4rKysgYi9uZXQvdm13X3Zzb2NrL3ZpcnRpb190cmFuc3BvcnRfY29tbW9uLmNcbkBAIC0xODIzLDcgKzE4MjMsOCBAQCB2b2lkIHZpcnRpb190cmFuc3BvcnRfcmVjdl9wa3Qoc3RydWN0IHZpcnRpb190cmFuc3BvcnQgKnQsXG4gXHQgKiBsb2NrX3NvY2sgKG5vdGU6IGxpc3RlbmVyIHNvY2tldHMgYXJlIG5vdCBhc3NpZ25lZCB0byBhbnkgdHJhbnNwb3J0KVxuIFx0ICovXG4gXHRpZiAoc29ja19mbGFnKHNrLCBTT0NLX0RPTkUpIHx8XG4tXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2IHZzay1cdTAwM2V0cmFuc3BvcnQgIT0gXHUwMDI2dC1cdTAwM2V0cmFuc3BvcnQpKSB7XG4rXHQgICAgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHQgICAgICF2c29ja19jaGVja19zb3VyY2UodnNrLCBcdTAwMjZ0LVx1MDAzZXRyYW5zcG9ydCwgXHUwMDI2c3JjKSkpIHtcbiBcdFx0KHZvaWQpdmlydGlvX3RyYW5zcG9ydF9yZXNldF9ub19zb2NrKHQsIHNrYiwgbmV0KTtcbiBcdFx0cmVsZWFzZV9zb2NrKHNrKTtcbiBcdFx0c29ja19wdXQoc2spO1xuZGlmZiAtLWdpdCBhL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuYyBiL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuY1xuaW5kZXggMWM0ZWUwMzljMTY2Mi4uYjYxMmE5ODkzODU2YSAxMDA2NDRcbi0tLSBhL25ldC92bXdfdnNvY2svdm1jaV90cmFuc3BvcnQuY1xuKysrIGIvbmV0L3Ztd192c29jay92bWNpX3RyYW5zcG9ydC5jXG5AQCAtNjgwLDExICs2ODAsMTMgQEAgc3RhdGljIGludCB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYih2b2lkICpkYXRhLCBzdHJ1Y3Qgdm1jaV9kYXRhZ3JhbSAqZGcpXG4gXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcGFja2V0ICpwa3Q7XG4gXHRzdHJ1Y3QgdnNvY2tfc29jayAqdnNrO1xuIFx0Ym9vbCBiaF9wcm9jZXNzX3BrdDtcbitcdGJvb2wgZHJvcF9wa3Q7XG4gXHRpbnQgZXJyO1xuIFxuIFx0c2sgPSBOVUxMO1xuIFx0ZXJyID0gVk1DSV9TVUNDRVNTO1xuIFx0YmhfcHJvY2Vzc19wa3QgPSBmYWxzZTtcbitcdGRyb3BfcGt0ID0gZmFsc2U7XG4gXG4gXHQvKiBJZ25vcmUgaW5jb21pbmcgcGFja2V0cyBmcm9tIHJlc291cmNlcyB0aGF0IGFyZW4ndCB2c29ja1xuIFx0ICogaW1wbGVtZW50YXRpb25zLlxuQEAgLTc2NSwxNyArNzY3LDI2IEBAIHN0YXRpYyBpbnQgdm1jaV90cmFuc3BvcnRfcmVjdl9zdHJlYW1fY2Iodm9pZCAqZGF0YSwgc3RydWN0IHZtY2lfZGF0YWdyYW0gKmRnKVxuIFx0YmhfbG9ja19zb2NrKHNrKTtcbiBcbiBcdGlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkge1xuLVx0XHQvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUsIHVwZGF0ZSBpdC4gKi9cbi1cdFx0dnNrLVx1MDAzZWxvY2FsX2FkZHIuc3ZtX2NpZCA9IGRzdC5zdm1fY2lkO1xuK1x0XHRpZiAoc2stXHUwMDNlc2tfc3RhdGUgIT0gVENQX0xJU1RFTiBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICF2c29ja19jaGVja19zb3VyY2UodnNrLCBcdTAwMjZ2bWNpX3RyYW5zcG9ydCwgXHUwMDI2c3JjKSkge1xuK1x0XHRcdGRyb3BfcGt0ID0gdHJ1ZTtcbitcdFx0XHRlcnIgPSBWTUNJX0VSUk9SX05PX0FDQ0VTUztcbitcdFx0fSBlbHNlIHtcbitcdFx0XHQvKiBUaGUgbG9jYWwgY29udGV4dCBJRCBtYXkgYmUgb3V0IG9mIGRhdGUsIHVwZGF0ZSBpdC4gKi9cbitcdFx0XHR2c2stXHUwMDNlbG9jYWxfYWRkci5zdm1fY2lkID0gZHN0LnN2bV9jaWQ7XG4gXG4tXHRcdGlmIChzay1cdTAwM2Vza19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQpXG4tXHRcdFx0dm1jaV90cmFucyh2c2spLVx1MDAzZW5vdGlmeV9vcHMtXHUwMDNlaGFuZGxlX25vdGlmeV9wa3QoXG4tXHRcdFx0XHRcdHNrLCBwa3QsIHRydWUsIFx1MDAyNmRzdCwgXHUwMDI2c3JjLFxuLVx0XHRcdFx0XHRcdTAwMjZiaF9wcm9jZXNzX3BrdCk7XG4rXHRcdFx0aWYgKHNrLVx1MDAzZXNrX3N0YXRlID09IFRDUF9FU1RBQkxJU0hFRClcbitcdFx0XHRcdHZtY2lfdHJhbnModnNrKS1cdTAwM2Vub3RpZnlfb3BzLVx1MDAzZWhhbmRsZV9ub3RpZnlfcGt0KHNrLCBwa3QsIHRydWUsXG4rXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmRzdCwgXHUwMDI2c3JjLFxuK1x0XHRcdFx0XHRcdFx0XHRcdCAgICAgICBcdTAwMjZiaF9wcm9jZXNzX3BrdCk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGJoX3VubG9ja19zb2NrKHNrKTtcbiBcbitcdGlmIChkcm9wX3BrdClcbitcdFx0Z290byBvdXQ7XG4rXG4gXHRpZiAoIWJoX3Byb2Nlc3NfcGt0KSB7XG4gXHRcdHN0cnVjdCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF9pbmZvICpyZWN2X3BrdF9pbmZvO1xuIFxuQEAgLTkwMCw2ICs5MTEsNyBAQCBzdGF0aWMgdm9pZCB2bWNpX3RyYW5zcG9ydF9yZWN2X3BrdF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3Qgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3RfaW5mbyAqcmVjdl9wa3RfaW5mbztcbiBcdHN0cnVjdCB2bWNpX3RyYW5zcG9ydF9wYWNrZXQgKnBrdDtcbitcdHN0cnVjdCBzb2NrYWRkcl92bSBzcmM7XG4gXHRzdHJ1Y3Qgc29jayAqc2s7XG4gXG4gXHRyZWN2X3BrdF9pbmZvID1cbkBAIC05MDgsNiArOTIwLDEwIEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cGt0ID0gXHUwMDI2cmVjdl9wa3RfaW5mby1cdTAwM2Vwa3Q7XG4gXG4gXHRsb2NrX3NvY2soc2spO1xuK1x0dnNvY2tfYWRkcl9pbml0KFx1MDAyNnNyYywgcGt0LVx1MDAzZWRnLnNyYy5jb250ZXh0LCBwa3QtXHUwMDNlc3JjX3BvcnQpO1xuK1x0aWYgKHNrLVx1MDAzZXNrX3N0YXRlICE9IFRDUF9MSVNURU4gXHUwMDI2XHUwMDI2XG4rXHQgICAgIXZzb2NrX2NoZWNrX3NvdXJjZSh2c29ja19zayhzayksIFx1MDAyNnZtY2lfdHJhbnNwb3J0LCBcdTAwMjZzcmMpKVxuK1x0XHRnb3RvIG91dDtcbiBcbiBcdC8qIFRoZSBsb2NhbCBjb250ZXh0IElEIG1heSBiZSBvdXQgb2YgZGF0ZS4gKi9cbiBcdHZzb2NrX3NrKHNrKS1cdTAwM2Vsb2NhbF9hZGRyLnN2bV9jaWQgPSBwa3QtXHUwMDNlZGcuZHN0LmNvbnRleHQ7XG5AQCAtOTM3LDYgKzk1Myw3IEBAIHN0YXRpYyB2b2lkIHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRicmVhaztcbiBcdH1cbiBcbitvdXQ6XG4gXHRyZWxlYXNlX3NvY2soc2spO1xuIFx0a2ZyZWUocmVjdl9wa3RfaW5mbyk7XG4gXHQvKiBSZWxlYXNlIHJlZmVyZW5jZSBvYnRhaW5lZCBpbiB0aGUgc3RyZWFtIGNhbGxiYWNrIHdoZW4gd2UgZmV0Y2hlZFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMTg6MTg6NDIuMjA4OTUwMDgyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwNDEyNzc1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUGF0Y2ggQW5hbHlzaXM6IHZzb2NrX2NoZWNrX3NvdXJjZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSXQgaW50cm9kdWNlcyB0aGlzIG5ldyBgdnNvY2tfY2hlY2tfc291cmNlYCBmdW5jdGlvbiwgd2hpY2ggaXMgZXNzZW50aWFsbHkgYSBzYW5pdHkgY2hlY2sgZm9yIGluY29taW5nIHBhY2tldHMgb24gY29ubmVjdGVkIHZzb2NrIHNvY2tldHMuIEl0IHZhbGlkYXRlcyB0aGUgc291cmNlIChDSUQgYW5kIHBvcnQpIGFnYWluc3Qgd2hhdCB0aGUgc29ja2V0IGV4cGVjdHMuIFRoZSBpbnRlbnRpb24gaXMgY2xlYXJseSB0byBwcmV2ZW50IHBhY2tldHMgZnJvbSB1bmV4cGVjdGVkIHNvdXJjZXMsIHdoaWNoIGxpa2VseSBhZGRyZXNzZXMgYSBwb3RlbnRpYWwgc3Bvb2Zpbmcgb3Igcm91dGluZyBpc3N1ZSBpbiB0aGUgdnNvY2sgY29ubmVjdGlvbiBsb2dpYy5cblxuSSBjYW4gc2VlIHRoYXQgdGhlIGNoYW5nZXMgaW52b2x2ZSBpbnRlZ3JhdGluZyB0aGlzIGNoZWNrIHdpdGhpbiBgdmlydGlvX3RyYW5zcG9ydF9yZWN2X3BrdGAsIGB2bWNpX3RyYW5zcG9ydF9yZWN2X3N0cmVhbV9jYmAsIGFuZCBgdm1jaV90cmFuc3BvcnRfcmVjdl9wa3Rfd29ya2AuIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgdGhlIGNoZWNrIGl0c2VsZiBpcyBzaW1wbGU6IGNvbXBhcmluZyB0aGUgc291cmNlIENJRCBhbmQgcG9ydCBmcm9tIHRoZSBwYWNrZXQgYWdhaW5zdCB0aGUgZXhwZWN0ZWQgdmFsdWVzIGZvciB0aGUgc29ja2V0J3MgcmVtb3RlIGFkZHJlc3MuIEl0J3MgcmVhbGx5IGp1c3QgYSBsb2dpYyBidWcgZml4OyB0aGUga2luZCB0aGF0J3MgZWFzeSB0byBtaXNzIGluIHJldmlldy5cblxuVGhlIGNvZGUgZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMsIG9yIGFueXRoaW5nIHBhcnRpY3VsYXJseSBub3ZlbCwgd2hpY2ggaXMgZ29vZC4gVGhlIGtleSB0aGluZyBpcyB0byBlbnN1cmUgdGhhdCB0aGUgYHNyY2AgaXMgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBjaGVjay4gSSB3YXMgcmlnaHQgdG8gcmV2aWV3IHRoaXMuIEluIGB2aXJ0aW9fdHJhbnNwb3J0X3JlY3ZfcGt0YCBhbmQgYHZtY2lfdHJhbnNwb3J0X3JlY3Zfc3RyZWFtX2NiYCBgc3JjYCBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlLCBidXQgSSBuZWVkIHRvIGVuc3VyZSBpdCBpcyBpbml0aWFsaXplZCBwcmlvciB0byBjYWxsaW5nIHRoZSBjaGVjay4gSW4gYHZtY2lfdHJhbnNwb3J0X3JlY3ZfcGt0X3dvcmtgLCBgc3JjYCBpcyBpbml0aWFsaXplZCB1c2luZyBgdnNvY2tfYWRkcl9pbml0YCwgd2hpY2ggbG9va3MgY29ycmVjdC5cblxuU2luY2UgdGhpcyBpcyBwdXJlbHkgYSBsb2dpYyBjaGVjayBpbnZvbHZpbmcgZXhpc3RpbmcsIGluaXRpYWxpemVkIGZpZWxkcyBhbmQgZG9lc24ndCB0b3VjaCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgY3JlYXRlIGFueSBtZW1vcnkgY29ycnVwdGlvbiByaXNrLCBJIGRvbid0IHNlZSBhbnkgbmVlZCBmb3IgS01TQU4uIFN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgc2hvdWxkIGJlIHN1ZmZpY2llbnQuIFRoZXJlZm9yZSwgSSdsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODk5LCJPdXRwdXRUb2tlbnMiOjExNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDE4OjE4OjUxLjI1MDIzMDU0M1oiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGxvZ2ljIGZpeCB0byB2YWxpZGF0ZSB0aGUgc291cmNlIGFkZHJlc3Mgb2YgaW5jb21pbmcgdnNvY2sgcGFja2V0cyBhZ2FpbnN0IHRoZSBleHBlY3RlZCBwZWVyIGFkZHJlc3MgZm9yIGNvbm5lY3RlZCBzb2NrZXRzIChgdnNvY2tfY2hlY2tfc291cmNlYCkuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIG9yIGRhdGEgbGVha3MgdG8gdXNlcnNwYWNlLiBBbGwgc3RydWN0dXJlcyBpbnZvbHZlZCBhcmUgYWxyZWFkeSBpbml0aWFsaXplZCwgYW5kIHRoZSBjaGFuZ2VzIG1lcmVseSBhZGQgY29uZGl0aW9uYWwgY2hlY2tzIGJhc2VkIG9uIGV4aXN0aW5nIGZpZWxkcy4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSwgYW5kIHN0YW5kYXJkIHRlc3RpbmcvS0FTQU4gaXMgc3VmZmljaWVudC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbG9naWMgZml4IHRvIHZhbGlkYXRlIHRoZSBzb3VyY2UgYWRkcmVzcyBvZiBpbmNvbWluZyB2c29jayBwYWNrZXRzIGFnYWluc3QgdGhlIGV4cGVjdGVkIHBlZXIgYWRkcmVzcyBmb3IgY29ubmVjdGVkIHNvY2tldHMgKGB2c29ja19jaGVja19zb3VyY2VgKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSwgb3IgZGF0YSBsZWFrcyB0byB1c2Vyc3BhY2UuIEFsbCBzdHJ1Y3R1cmVzIGludm9sdmVkIGFyZSBhbHJlYWR5IGluaXRpYWxpemVkLCBhbmQgdGhlIGNoYW5nZXMgbWVyZWx5IGFkZCBjb25kaXRpb25hbCBjaGVja3MgYmFzZWQgb24gZXhpc3RpbmcgZmllbGRzLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLCBhbmQgc3RhbmRhcmQgdGVzdGluZy9LQVNBTiBpcyBzdWZmaWNpZW50LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowrnz4b[1] Phase: Succeeded StartedAt: 2026-08-23 18:19:02 +0000 UTC FinishedAt: 2026-08-23 18:19:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 18:19:02 +0000 UTC FinishedAt: 2026-08-23 18:19:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2] Phase: Succeeded StartedAt: 2026-08-23 18:19:02 +0000 UTC FinishedAt: 2026-08-23 22:00:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-23 18:19:02 +0000 UTC FinishedAt: 2026-08-23 22:00:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-23 18:19:02 +0000 UTC FinishedAt: 2026-08-23 18:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-23 18:19:02 +0000 UTC FinishedAt: 2026-08-23 18:19:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowrnz4b/series-workflowrnz4b-convert-artifact-2842823038/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-23 18:19:12 +0000 UTC FinishedAt: 2026-08-23 18:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-23 18:19:12 +0000 UTC FinishedAt: 2026-08-23 18:36:38 +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:*3f8108eb-b54e-4558-99b2-248c07db2470,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-workflowrnz4b/series-workflowrnz4b-convert-artifact-2842823038/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": "3716c9d4-6f7c-42f8-8f81-1bb6b8930fff", "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-workflowrnz4b/series-workflowrnz4b-build-action-2111893860/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-23 18:19:12 +0000 UTC FinishedAt: 2026-08-23 18:36:28 +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:*3f8108eb-b54e-4558-99b2-248c07db2470,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-workflowrnz4b/series-workflowrnz4b-convert-artifact-2842823038/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": "3716c9d4-6f7c-42f8-8f81-1bb6b8930fff", "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-workflowrnz4b/series-workflowrnz4b-build-action-2111893860/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-23 18:36:38 +0000 UTC FinishedAt: 2026-08-23 18:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-23 18:36:38 +0000 UTC FinishedAt: 2026-08-23 18:36:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-23 18:36:38 +0000 UTC FinishedAt: 2026-08-23 18:36:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-23 18:36:38 +0000 UTC FinishedAt: 2026-08-23 18:36:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflowrnz4b/series-workflowrnz4b-convert-artifact-742101937/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-23 18:36:48 +0000 UTC FinishedAt: 2026-08-23 18:38:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-23 18:36:48 +0000 UTC FinishedAt: 2026-08-23 18:38:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3716c9d4-6f7c-42f8-8f81-1bb6b8930fff,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-workflowrnz4b/series-workflowrnz4b-build-action-2111893860/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-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-23 18:38:53 +0000 UTC FinishedAt: 2026-08-23 18:38:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-23 18:38:53 +0000 UTC FinishedAt: 2026-08-23 18:38:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-23 18:38:53 +0000 UTC FinishedAt: 2026-08-23 18:55:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-23 18:38:53 +0000 UTC FinishedAt: 2026-08-23 18:55:59 +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:*3f8108eb-b54e-4558-99b2-248c07db2470,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-workflowrnz4b/series-workflowrnz4b-convert-artifact-742101937/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": "2ec08038-1134-4f50-a10e-d44d7878197f", "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-workflowrnz4b/series-workflowrnz4b-build-action-2877215101/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-23 18:38:53 +0000 UTC FinishedAt: 2026-08-23 18:55:49 +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:*3f8108eb-b54e-4558-99b2-248c07db2470,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-workflowrnz4b/series-workflowrnz4b-convert-artifact-742101937/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": "2ec08038-1134-4f50-a10e-d44d7878197f", "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-workflowrnz4b/series-workflowrnz4b-build-action-2877215101/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-23 18:55:59 +0000 UTC FinishedAt: 2026-08-23 18:55:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-23 18:55:59 +0000 UTC FinishedAt: 2026-08-23 18:55:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-23 18:55:59 +0000 UTC FinishedAt: 2026-08-23 18:58:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-23 18:55:59 +0000 UTC FinishedAt: 2026-08-23 18:57:54 +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:*2ec08038-1134-4f50-a10e-d44d7878197f,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-workflowrnz4b/series-workflowrnz4b-build-action-2877215101/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-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-23 18:58:04 +0000 UTC FinishedAt: 2026-08-23 22:00:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-23 18:58:04 +0000 UTC FinishedAt: 2026-08-23 22:00:37 +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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*3716c9d4-6f7c-42f8-8f81-1bb6b8930fff,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2ec08038-1134-4f50-a10e-d44d7878197f,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-workflowrnz4b/series-workflowrnz4b-build-action-2111893860/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-workflowrnz4b/series-workflowrnz4b-build-action-2877215101/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-23 18:58:04 +0000 UTC FinishedAt: 2026-08-23 18:58:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-23 18:58:04 +0000 UTC FinishedAt: 2026-08-23 18:58:09 +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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrnz4b/series-workflowrnz4b-convert-artifact-4198658918/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-23 18:58:04 +0000 UTC FinishedAt: 2026-08-23 18:58:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-23 18:58:04 +0000 UTC FinishedAt: 2026-08-23 18:58:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-23 18:58:04 +0000 UTC FinishedAt: 2026-08-23 18:58:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-23 18:58:14 +0000 UTC FinishedAt: 2026-08-23 22:00:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrnz4b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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/ci-upstream-net-kasan-gce-corpus.db"],"focus":["kvm","net"],"focus_symbols":["virtio_transport_recv_pkt","vmci_transport_recv_stream_cb","vmci_transport_recv_pkt_work"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"7cbfb180945ce529608e4d4e24a6d483699fab1e","config_name":"upstream-apparmor-kasan.config","enable_configs":["VSOCKETS","VIRTIO_VSOCKETS","VMWARE_VMCI_VSOCKETS","VSOCKETS_LOOPBACK","VIRTIO","VMWARE_VMCI","PCI"],"series_id":"ded4f3fb-c437-42c7-b438-dd701c7de146","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-23 18:58:14 +0000 UTC FinishedAt: 2026-08-23 22:00:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3716c9d4-6f7c-42f8-8f81-1bb6b8930fff,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2ec08038-1134-4f50-a10e-d44d7878197f,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-workflowrnz4b/series-workflowrnz4b-build-action-2111893860/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-workflowrnz4b/series-workflowrnz4b-build-action-2877215101/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-workflowrnz4b/series-workflowrnz4b-convert-artifact-4198658918/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,}