Name: series-workflowb8kp7 Phase: Succeeded StartedAt: 2026-09-06 20:29:20 +0000 UTC FinishedAt: 2026-09-07 00:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[0] Phase: Succeeded StartedAt: 2026-09-06 20:29:20 +0000 UTC FinishedAt: 2026-09-06 21:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[0].run-triage Phase: Succeeded StartedAt: 2026-09-06 20:29:20 +0000 UTC FinishedAt: 2026-09-06 21:02:05 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "1b8ad8e5-713a-4733-91c8-113f2b2a66de" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tbl_mask_array_realloc", "tbl_mask_array_add_mask", "tbl_mask_array_del_mask", "ovs_flow_tbl_insert", "ovs_flow_tbl_remove" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGJsX21hc2tfYXJyYXlfcmVhbGxvYyYjMzQ7LAogICAgJiMzNDt0YmxfbWFza19hcnJheV9hZGRfbWFzayYjMzQ7LAogICAgJiMzNDt0YmxfbWFza19hcnJheV9kZWxfbWFzayYjMzQ7LAogICAgJiMzNDtvdnNfZmxvd190YmxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O292c19mbG93X3RibF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb3JyZWN0cyB0aGUgUkNVIHBvaW50ZXIgcHVibGlzaGluZyBzZXF1ZW5jZSBpbiB0YmxfbWFza19hcnJheV9yZWFsbG9jKCkgYnkgbW92aW5nIGNhbGxfcmN1KCkgYWZ0ZXIgcmN1X2Fzc2lnbl9wb2ludGVyKCksIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBjb25kaXRpb24gd2hlcmUgb2xkIG1hc2sgYXJyYXkgc3RydWN0dXJlcyBjb3VsZCBiZSByZWNsYWltZWQgd2hpbGUgc3RpbGwgcmVmZXJlbmNlZC4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBtYXNrX2FycmF5IGFyZSBwZXJmb3JtZWQgd2l0aCBremFsbG9jKCkgYW5kIF9fYWxsb2NfcGVyY3B1KCksIGVuc3VyaW5nIG1lbW9yeSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hlcywgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFJDVSBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBvcmRlcmluZyBpc3N1ZSBpbiBPcGVuIHZTd2l0Y2gmIzM5O3MgbWFzayBhcnJheSByZWFsbG9jYXRpb24gKHRibF9tYXNrX2FycmF5X3JlYWxsb2MpLCBlbnN1cmluZyBvbGQgbWFzayBhcnJheSBtZW1vcnkgaXMgc2NoZWR1bGVkIGZvciBSQ1UgcmVjbGFtYXRpb24gb25seSBhZnRlciB0aGUgbmV3IHBvaW50ZXIgaXMgcHVibGlzaGVkIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBPcGVuIHZTd2l0Y2ggbmV0bGluayBmbG93IG1hbmFnZW1lbnQgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NTA2ZWE2ZTk3MGJjZTkzZmM2OGQ0Y2IwNjNmZGQ1MGU3NmY4NDNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMTowMDo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1xuaW5kZXggNjdkNWI4YzBmZTc5Mi4uMWUwZjlkMTkzZWIwNiAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNcbkBAIC0yNTcsMTEgJiM0MzsyNTcsMTMgQEAgc3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxuIFx0XHRcdGlmIChvdnNsX2RlcmVmZXJlbmNlKG9sZC1cdTAwM2VtYXNrc1tpXSkpXG4gXHRcdFx0XHRuZXctXHUwMDNlbWFza3NbbmV3LVx1MDAzZWNvdW50JiM0MzsmIzQzO10gPSBvbGQtXHUwMDNlbWFza3NbaV07XG4gXHRcdH1cbi1cdFx0Y2FsbF9yY3UoXHUwMDI2b2xkLVx1MDAzZXJjdSwgbWFza19hcnJheV9yY3VfY2IpO1xuIFx0fVxuIFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRibC1cdTAwM2VtYXNrX2FycmF5LCBuZXcpO1xuIFxuJiM0MztcdGlmIChvbGQpXG4mIzQzO1x0XHRjYWxsX3JjdShcdTAwMjZvbGQtXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGJsX21hc2tfYXJyYXlfcmVhbGxvYyYjMzQ7LAogICAgJiMzNDt0YmxfbWFza19hcnJheV9hZGRfbWFzayYjMzQ7LAogICAgJiMzNDt0YmxfbWFza19hcnJheV9kZWxfbWFzayYjMzQ7LAogICAgJiMzNDtvdnNfZmxvd190YmxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O292c19mbG93X3RibF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBvcmRlcmluZyBpc3N1ZSBpbiBPcGVuIHZTd2l0Y2gmIzM5O3MgbWFzayBhcnJheSByZWFsbG9jYXRpb24gKHRibF9tYXNrX2FycmF5X3JlYWxsb2MpLCBlbnN1cmluZyBvbGQgbWFzayBhcnJheSBtZW1vcnkgaXMgc2NoZWR1bGVkIGZvciBSQ1UgcmVjbGFtYXRpb24gb25seSBhZnRlciB0aGUgbmV3IHBvaW50ZXIgaXMgcHVibGlzaGVkIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBPcGVuIHZTd2l0Y2ggbmV0bGluayBmbG93IG1hbmFnZW1lbnQgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NTA2ZWE2ZTk3MGJjZTkzZmM2OGQ0Y2IwNjNmZGQ1MGU3NmY4NDNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAyMTowMDo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jCmluZGV4IDY3ZDViOGMwZmU3OTIuLjFlMGY5ZDE5M2ViMDYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYwpAQCAtMjU3LDExICYjNDM7MjU3LDEzIEBAIHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSkKIAkJCWlmIChvdnNsX2RlcmVmZXJlbmNlKG9sZC0mZ3Q7bWFza3NbaV0pKQogCQkJCW5ldy0mZ3Q7bWFza3NbbmV3LSZndDtjb3VudCYjNDM7JiM0MztdID0gb2xkLSZndDttYXNrc1tpXTsKIAkJfQotCQljYWxsX3JjdSgmYW1wO29sZC0mZ3Q7cmN1LCBtYXNrX2FycmF5X3JjdV9jYik7CiAJfQogCiAJcmN1X2Fzc2lnbl9wb2ludGVyKHRibC0mZ3Q7bWFza19hcnJheSwgbmV3KTsKIAomIzQzOwlpZiAob2xkKQomIzQzOwkJY2FsbF9yY3UoJmFtcDtvbGQtJmd0O3JjdSwgbWFza19hcnJheV9yY3VfY2IpOwomIzQzOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggVHJpYWdlOiBTeXprYWxsZXIgRnV6emluZyBFdmFsdWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBsZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGluc3RydWN0aW9ucyBhbmQgYW55IHNhZmV0eSBwcmVjYXV0aW9ucy4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYSBMaW51eCBrZXJuZWwgY29tbWl0LCBhbmQgdGhleSYjMzk7cmUgYXNraW5nIGZvciBhIGZ1enppbmcgdHJpYWdlIGV2YWx1YXRpb24uIFRoaXMgaXMgc3RhbmRhcmQgc3R1ZmYg4oCTIGtlcm5lbCBtYWludGVuYW5jZSwgc29mdHdhcmUgcXVhbGl0eSBhc3N1cmFuY2UsIGRlZmVuc2l2ZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uIE5vIHJlZCBmbGFncyBoZXJlLiBSaXNrIHNldmVyaXR5PyBCZW5pZ24sIHByYWN0aWNhbGx5IG5vbmUuIFdlJiMzOTtyZSB0YWxraW5nIHNhbmRib3hlZCBkZXZlbG9wZXIgUUEgb3Iga2VybmVsIHRyaWFnZSwgc28gaXQmIzM5O3Mgc2FmZSB0byBwcm9jZWVkLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIHRoZSBjb21taXQgZGlmZi4gSXQgYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgYG5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgaXQgaW4gZGV0YWlsOiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGFuIGBpZmAgc3RhdGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBmdW5jdGlvbiB0byBjYWxsIHRoZSBgcmN1YCBjYWxsYmFjay4KCk5vdywgbGV0JiMzOTtzIHVzZSBvdXIgbW9yZSBhZHZhbmNlZCB0b29scy4gV2UgbmVlZCB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCBpZGVudGlmeSBwb3RlbnRpYWwgY2FsbGVycyBvZiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AsIGFuZCBjaGVjayByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgY29tcGxleGl0aWVzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgZnV6emluZyB0byB1bmNvdmVyIGlzc3VlcyB0aGF0IGFyZSBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNTpcdFx0fVxuIDIzNjpcdFxuIDIzNzpcdFx0bmV3LVx1MDAzZWNvdW50ID0gMDtcbiAyMzg6XHRcdG5ldy1cdTAwM2VtYXggPSBzaXplO1xuIDIzOTpcdFxuIDI0MDpcdFx0cmV0dXJuIG5ldztcbiAyNDE6XHR9XG4gMjQyOlx0XG4gMjQzOlx0c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxuIDI0NDpcdHtcbiAyNDU6XHRcdHN0cnVjdCBtYXNrX2FycmF5ICpvbGQ7XG4gMjQ2Olx0XHRzdHJ1Y3QgbWFza19hcnJheSAqbmV3O1xuIDI0NzpcdFxuIDI0ODpcdFx0bmV3ID0gdGJsX21hc2tfYXJyYXlfYWxsb2Moc2l6ZSk7XG4gMjQ5Olx0XHRpZiAoIW5ldylcbiAyNTA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjUxOlx0XG4gMjUyOlx0XHRvbGQgPSBvdnNsX2RlcmVmZXJlbmNlKHRibC1cdTAwM2VtYXNrX2FycmF5KTtcbiAyNTM6XHRcdGlmIChvbGQpIHtcbiAyNTQ6XHRcdFx0aW50IGk7XG4gMjU1Olx0XG4gMjU2Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9sZC1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KSB7XG4gMjU3Olx0XHRcdFx0aWYgKG92c2xfZGVyZWZlcmVuY2Uob2xkLVx1MDAzZW1hc2tzW2ldKSlcbiAyNTg6XHRcdFx0XHRcdG5ldy1cdTAwM2VtYXNrc1tuZXctXHUwMDNlY291bnQmIzQzOyYjNDM7XSA9IG9sZC1cdTAwM2VtYXNrc1tpXTtcbiAyNTk6XHRcdFx0fVxuIDI2MDpcdFx0fVxuIDI2MTpcdFxuIDI2MjpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRibC1cdTAwM2VtYXNrX2FycmF5LCBuZXcpO1xuIDI2MzpcdFxuIDI2NDpcdFx0aWYgKG9sZClcbiAyNjU6XHRcdFx0Y2FsbF9yY3UoXHUwMDI2b2xkLVx1MDAzZXJjdSwgbWFza19hcnJheV9yY3VfY2IpO1xuIDI2NjpcdFxuIDI2NzpcdFx0cmV0dXJuIDA7XG4gMjY4Olx0fVxuIDI2OTpcdFxuIDI3MDpcdHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfYWRkX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcbiAyNzE6XHRcdFx0XHRcdCAgIHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcbiAyNzI6XHR7XG4gMjczOlx0XHRzdHJ1Y3QgbWFza19hcnJheSAqbWEgPSBvdnNsX2RlcmVmZXJlbmNlKHRibC1cdTAwM2VtYXNrX2FycmF5KTtcbiAyNzQ6XHRcdGludCBlcnIsIG1hX2NvdW50ID0gUkVBRF9PTkNFKG1hLVx1MDAzZWNvdW50KTtcbiAyNzU6XHRcbiAyNzY6XHRcdGlmIChtYV9jb3VudCBcdTAwM2U9IG1hLVx1MDAzZW1heCkge1xuIDI3NzpcdFx0XHRlcnIgPSB0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXHUwMDNlbWF4ICYjNDM7XG4gMjc4Olx0XHRcdFx0XHRcdFx0ICBNQVNLX0FSUkFZX1NJWkVfTUlOKTtcbiAyNzk6XHRcdFx0aWYgKGVycilcbiAyODA6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDI4MTpcdFxuIDI4MjpcdFx0XHRtYSA9IG92c2xfZGVyZWZlcmVuY2UodGJsLVx1MDAzZW1hc2tfYXJyYXkpO1xuIDI4MzpcdFx0fSBlbHNlIHtcbiAyODQ6XHRcdFx0LyogT24gZXZlcnkgYWRkIG9yIGRlbGV0ZSB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjb3VudGVycyBzb1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBpbiBPcGVuIHZTd2l0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYC4gTXkgZmlyc3QgbW92ZSBpcyB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBmdW5jdGlvbi4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGRpcmVjdCBsaW5lIG9mIHNpZ2h0IGludG8gdGhlIGNyaXRpY2FsIGFyZWFzIHdoZXJlIG1lbW9yeSByZS1hbGxvY2F0aW9uIGlzIGhhcHBlbmluZy4gU2ltdWx0YW5lb3VzbHksIEkgd2FudCB0byBtYXAgdGhvc2UgY2FsbCBzaXRlcyBvbnRvIHRoZSByZWxldmFudCBPcGVuIHZTd2l0Y2ggZnVuY3Rpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbmFsIGNvbnRleHQgaXMgY3J1Y2lhbCBoZXJlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBmbG93IHRhYmxlIG9wZXJhdGlvbnM/IFBhY2tldCBwcm9jZXNzaW5nPyBTb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KCk9uY2UgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHksIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoaXMgYWN0aXZpdHkgd2l0aCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBXaGF0IGZsYWdzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHBhdGggdG8gZXZlbiBiZSBhY3RpdmU/IEFyZSB0aGVyZSBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYmFzZWQgb24gY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4KCkZpbmFsbHksIEkmIzM5O2xsIHNlYXJjaCB0aGUgYG5ldC9vcGVudnN3aXRjaGAgZGlyZWN0b3J5IGZvciBhbGwgaW5zdGFuY2VzIG9mIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBhbmQgYW55IG90aGVyIHJlbGF0ZWQgZmxvdyB0YWJsZSBmdW5jdGlvbnMuIFRoaXMgY29tcHJlaGVuc2l2ZSBzZWFyY2ggc2hvdWxkIHVuY292ZXIgYW55IG90aGVyIGhpbnRzIHRoYXQgbWF5IGNvbnRyaWJ1dGUgdG8gbXkgY29tcHJlaGVuc2lvbiBvZiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AmIzM5O3MgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGJsX21hc2tfYXJyYXlfcmVhbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTIxNj1zdGF0aWMgc3RydWN0IG1hc2tfYXJyYXkgKnRibF9tYXNrX2FycmF5X2FsbG9jKGludCBzaXplKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMjQyLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzoyNDM6c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNDQte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MjcwPXN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfYWRkX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTI3Ni1cdGlmIChtYV9jb3VudCBcdTAwM2U9IG1hLVx1MDAzZW1heCkge1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzoyNzc6XHRcdGVyciA9IHRibF9tYXNrX2FycmF5X3JlYWxsb2ModGJsLCBtYS1cdTAwM2VtYXggJiM0Mztcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMjc4LVx0XHRcdFx0XHRcdCAgTUFTS19BUlJBWV9TSVpFX01JTik7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz0yOTg9c3RhdGljIHZvaWQgdGJsX21hc2tfYXJyYXlfZGVsX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTMyMy1cdCAgICBtYV9jb3VudCBcdTAwM2M9IChtYS1cdTAwM2VtYXggLyAzKSlcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MzI0Olx0XHR0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXHUwMDNlbWF4IC8gMik7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTMyNS1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyBgbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY2AgZm9yIE1hc2sgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgdGJsX21hc2tfYXJyYXlfYWRkX21hc2tgIGFuZCBgdGJsX21hc2tfYXJyYXlfZGVsX21hc2tgLiBJJiMzOTt2ZSBnb3QgdG8gdHJhY2UgdGhlaXIgdXNhZ2Ugd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jYC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlICpjYWxsZWQgZnJvbSogd2lsbCBiZSBrZXkuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBtYXNrIG1hbmFnZW1lbnQgcm91dGluZXMgZml0IGludG8gdGhlIG92ZXJhbGwgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8sIG9yIGFyZSB0cmlnZ2VyZWQgYnksIGZsb3cgdGFibGUgb3BlcmF0aW9ucy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YmxfbWFza19hcnJheV8oYWRkfGRlbClfbWFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTI0Mz1zdGF0aWMgaW50IHRibF9tYXNrX2FycmF5X3JlYWxsb2Moc3RydWN0IGZsb3dfdGFibGUgKnRibCwgaW50IHNpemUpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNjktXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjI3MDpzdGF0aWMgaW50IHRibF9tYXNrX2FycmF5X2FkZF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTI3MS1cdFx0XHRcdCAgIHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTI5Ny1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6Mjk4OnN0YXRpYyB2b2lkIHRibF9tYXNrX2FycmF5X2RlbF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTI5OS1cdFx0XHRcdCAgICBzdHJ1Y3Qgc3dfZmxvd19tYXNrICptYXNrKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MzMxPXN0YXRpYyB2b2lkIGZsb3dfbWFza19yZW1vdmUoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3dfbWFzayAqbWFzaylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTM0MS1cdFx0aWYgKCFtYXNrLVx1MDAzZXJlZl9jb3VudClcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MzQyOlx0XHRcdHRibF9tYXNrX2FycmF5X2RlbF9tYXNrKHRibCwgbWFzayk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTM0My1cdH1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTEwMDY9c3RhdGljIGludCBmbG93X21hc2tfaW5zZXJ0KHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIHN0cnVjdCBzd19mbG93ICpmbG93LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTAyMC1cdFx0LyogQWRkIG1hc2sgdG8gbWFzay1saXN0LiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzoxMDIxOlx0XHRpZiAodGJsX21hc2tfYXJyYXlfYWRkX21hc2sodGJsLCBtYXNrKSkge1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0xMDIyLVx0XHRcdGtmcmVlKG1hc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRmxvdyBNYXNrIEluc2VydGlvbiwgUmVtb3ZhbCwgYW5kIEZsb3cgVGFibGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgcGF0aHMgcmVsYXRlZCB0byBgZmxvd19tYXNrX2luc2VydGAsIGBmbG93X21hc2tfcmVtb3ZlYCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgZmxvdyB0YWJsZSBvcGVyYXRpb25zLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgZGF0YSBwYXRoLiBJJiMzOTtsbCBsaWtlbHkgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24gY2FsbHMsIHByb2JhYmx5IHVzaW5nIGEgdG9vbCBsaWtlIGBwZXJmYCBvciBgZ2RiYCwgdG8gc2VlIGhvdyB0aGVzZSBtYXNrIG9wZXJhdGlvbnMgYXJlIHRyaWdnZXJlZCBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgdGhleSBjYWxsLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCwgcGFydGljdWxhcmx5IGxvb2tpbmcgZm9yIGFueSBsb2NraW5nIGNvbnRlbnRpb24sIGluZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlcywgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgaW4gdGhlIHByZXNlbmNlIG9mIGhpZ2ggdHJhZmZpYyB2b2x1bWUgb3IgY29tcGxleCBmbG93IHJ1bGVzLiBUaGlzIHJlcXVpcmVzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgc3VjaCBhcyB0aGUgZmxvdyB0YWJsZSYjMzk7cyBpbXBsZW1lbnRhdGlvbiAoaGFzaCB0YWJsZSwgcmFkaXggdHJlZSwgZXRjLikgYW5kIGhvdyBtYXNrcyBhcmUgdXNlZCB0byBvcHRpbWl6ZSBmbG93IGxvb2t1cHMuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgbG9va3VwIHBlcmZvcm1hbmNlIG9yIHRoZSBhdG9taWNpdHkgb2YgZmxvdyB0YWJsZSB1cGRhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X21hc2tfKGluc2VydHxyZW1vdmUpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9Mjk4PXN0YXRpYyB2b2lkIHRibF9tYXNrX2FycmF5X2RlbF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0zMzAtLyogUmVtb3ZlICYjMzk7bWFzayYjMzk7IGZyb20gdGhlIG1hc2sgbGlzdCwgaWYgaXQgaXMgbm90IG5lZWRlZCBhbnkgbW9yZS4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MzMxOnN0YXRpYyB2b2lkIGZsb3dfbWFza19yZW1vdmUoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3dfbWFzayAqbWFzaylcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMzMyLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTQ1OT1zdGF0aWMgdm9pZCB0YWJsZV9pbnN0YW5jZV9mbG93X2ZyZWUoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNDcxLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo0NzI6XHRmbG93X21hc2tfcmVtb3ZlKHRhYmxlLCBmbG93LVx1MDAzZW1hc2spO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy00NzMtfVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9OTg3PXN0YXRpYyBzdHJ1Y3Qgc3dfZmxvd19tYXNrICpmbG93X21hc2tfZmluZChjb25zdCBzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTAwNS0vKiBBZGQgJiMzOTttYXNrJiMzOTsgaW50byB0aGUgbWFzayBsaXN0LCBpZiBpdCBpcyBub3QgYWxyZWFkeSB0aGVyZS4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MTAwNjpzdGF0aWMgaW50IGZsb3dfbWFza19pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3cgKmZsb3csXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwMDctXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTEwODE9aW50IG92c19mbG93X3RibF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwODUtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjEwODY6XHRlcnIgPSBmbG93X21hc2tfaW5zZXJ0KHRhYmxlLCBmbG93LCBtYXNrKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTA4Ny1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBPcGVuIHZTd2l0Y2gqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGdvZXMgbGlrZSB0aGlzLiBNeSBicmFpbiwgbGlrZWx5IGluIHJlc3BvbnNlIHRvIGEgcHJvYmxlbSBvciB0YXNrIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoIGNvbmZpZ3VyYXRpb24sIGltbWVkaWF0ZWx5IHN1Z2dlc3RzLCAmIzM0O0xldCYjMzk7cyBkaWcgaW50byB0aGUgS2NvbmZpZy4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG5lZWQgZm9yIGl0LiBJIGtub3cgdGhhdCB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgYW5kIGFzc29jaWF0ZWQgcHJvamVjdHMuIE15IGludGVybmFsIG1vbm9sb2d1ZSBjb250aW51ZXM6IFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gbG9va2luZyB0byB1bmRlcnN0YW5kIG9yIG1vZGlmeSBzcGVjaWZpYyBidWlsZCBvcHRpb25zLCBmZWF0dXJlIHRvZ2dsZXMsIG9yIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaC4gSXQgY291bGQgYmUgZm9yIGEgY3VzdG9tIGJ1aWxkLCB0cm91Ymxlc2hvb3RpbmcgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBvciBtYXliZSBJJiMzOTttIHdvcmtpbmcgb24gYSBuZXcgZmVhdHVyZSBhbmQgbmVlZCB0byBwcm9wZXJseSBpbnRlZ3JhdGUgaXQgaW50byB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoZXJlJiMzOTtzIGFuIHVuZGVybHlpbmcgYXNzdW1wdGlvbiB0aGF0IHRoZSBLY29uZmlnIGhvbGRzIHRoZSBhbnN3ZXJzLCBhdCBsZWFzdCB0aGUgc3RhcnRpbmcgcG9pbnQsIHRvIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gYWNoaWV2ZS4gSXQgcmVwcmVzZW50cyB0aGUgY2VudHJhbCBzb3VyY2Ugb2YgdHJ1dGggZm9yIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiwgYW5kIEkgbmVlZCB0byBjb25zdWx0IGl0LiBJIGFtIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBvcHRpb25zLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBwcm9iYWJseSB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIGhlbHAgdGV4dCB0byB1bmRlcnN0YW5kIHdoYXQgaXMgYXZhaWxhYmxlIGFuZCBob3cgSSBzaG91bGQgbW9kaWZ5IGl0LCB0byBhY2hpZXZlIHRoZSBvYmplY3RpdmUgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL01ha2VmaWxlLTUtXG5uZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT1BFTlZTV0lUQ0gpICYjNDM7PSBvcGVudnN3aXRjaC5vXG5uZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGUtNy1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yODI0PXN0YXRpYyBpbnQgX19pbml0IGRwX2luaXQodm9pZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODY0LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mjg2NTpcdGRyb3BfcmVhc29uc19yZWdpc3Rlcl9zdWJzeXMoU0tCX0RST1BfUkVBU09OX1NVQlNZU19PUEVOVlNXSVRDSCxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4NjYtXHRcdFx0XHQgICAgIFx1MDAyNmRyb3BfcmVhc29uX2xpc3Rfb3ZzKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yODg3PXN0YXRpYyB2b2lkIGRwX2NsZWFudXAodm9pZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODkyLVx0dW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFx1MDAyNm92c19uZXRfb3BzKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI4OTM6XHRkcm9wX3JlYXNvbnNfdW5yZWdpc3Rlcl9zdWJzeXMoU0tCX0RST1BfUkVBU09OX1NVQlNZU19PUEVOVlNXSVRDSCk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODk0LVx0cmN1X2JhcnJpZXIoKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oLTUtXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oOjY6I2lmbmRlZiBPUEVOVlNXSVRDSF9EUk9QX0hcbm5ldC9vcGVudnN3aXRjaC9kcm9wLmg6NzojZGVmaW5lIE9QRU5WU1dJVENIX0RST1BfSFxubmV0L29wZW52c3dpdGNoL2Ryb3AuaC04LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tLVxubmV0L29wZW52c3dpdGNoL2Ryb3AuaD0yNT1lbnVtIG92c19kcm9wX3JlYXNvbiB7XG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oOjI2Olx0X19PVlNfRFJPUF9SRUFTT04gPSBTS0JfRFJPUF9SRUFTT05fU1VCU1lTX09QRU5WU1dJVENIIFx1MDAzY1x1MDAzY1xubmV0L29wZW52c3dpdGNoL2Ryb3AuaC0yNy1cdFx0XHRcdFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfU0hJRlQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Ryb3AuaD0zNj1vdnNfa2ZyZWVfc2tiX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIG92c19kcm9wX3JlYXNvbiByZWFzb24pXG4tLVxubmV0L29wZW52c3dpdGNoL2Ryb3AuaC00MC1cbm5ldC9vcGVudnN3aXRjaC9kcm9wLmg6NDE6I2VuZGlmIC8qIE9QRU5WU1dJVENIX0RST1BfSCAqL1xuLS1cbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oLTQtXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaDo1OiNpZiAhZGVmaW5lZChfVFJBQ0VfT1BFTlZTV0lUQ0hfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRClcbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oOjY6I2RlZmluZSBfVFJBQ0VfT1BFTlZTV0lUQ0hfSFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmgtNy1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaD04Mj1UUkFDRV9FVkVOVChvdnNfZHBfdXBjYWxsLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oLTE1MC1cbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oOjE1MTojZW5kaWYgLyogX1RSQUNFX09QRU5WU1dJVENIX0ggKi9cbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oLTE1Mi1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmM9OTQ9c3RhdGljIHZvaWQgZG9fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmMtMTAyLVx0bmV0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+SUZGX1RYX1NLQl9TSEFSSU5HO1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jOjEwMzpcdG5ldGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFIHwgSUZGX09QRU5WU1dJVENIIHxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1pbnRlcm5hbF9kZXYuYy0xMDQtXHRcdFx0ICAgICAgSUZGX05PX1FVRVVFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfT1BFTlZTV0lUQ0hgLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzIHdpdGggdGhlc2Uga2luZHMgb2YgdGhpbmdzLCBpcyB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkuIEluIHRoaXMgY2FzZSwgdGhhdCYjMzk7cyBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgLiBJJiMzOTtsbCBvcGVuIHRoYXQgdXAgYW5kIHRha2UgYSBsb29rLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGxvZ2ljLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMsIGFuZCBtYXliZSBldmVuIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBUaGlzIHNob3VsZCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgSSBuZWVkIHRvIGtub3cgYWJvdXQgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIG9yIHByZXNlbnQgaW4gdGhlIHN5c3RlbSBmb3IgYENPTkZJR19PUEVOVlNXSVRDSGAgdG8gYmUgYSB2YWxpZCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdG8gYnVpbGQgY29ycmVjdGx5LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXG4gIDIzOlx0XHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXG4gIDI0Olx0XHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxuICAyNTpcdFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXG4gIDI2Olx0XHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcbiAgMjc6XHRcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXG4gIDI4Olx0XHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXG4gIDI5Olx0XHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XG4gIDMyOlx0XHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXG4gIDMzOlx0XHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcbiAgMzQ6XHRcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIFNlZSBodHRwOi8vb3BlbnZzd2l0Y2gub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB1c2Vyc3BhY2VcbiAgMzc6XHRcdCAgdXRpbGl0aWVzLlxuICAzODpcdFxuICAzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDQwOlx0XHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYW4gUkNVIEJ1ZyBGaXggaW4gT3BlbiB2U3dpdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgbG9jYWxpemVkIHdpdGhpbiB0aGlzIGZpbGUuIEl0JiMzOTtzIGNhbGxlZCBieSBgdGJsX21hc2tfYXJyYXlfYWRkX21hc2tgIGFuZCBgdGJsX21hc2tfYXJyYXlfZGVsX21hc2tgLCB3aGljaCBhcmUga2V5IGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdGhlIGZsb3cgdGFibGUmIzM5O3MgbWFza3MuIFRoYXQmIzM5O3Mgb3VyIGluaXRpYWwgY29udGV4dC4KCkxvb2tpbmcgYXQgdGhlIHBhdGNoLCB0aGUgY2hhbmdlIHNlZW1zIHNpbXBsZSBvbiB0aGUgc3VyZmFjZSwgYnV0IGl0JiMzOTtzIGNyaXRpY2FsbHkgaW1wb3J0YW50LiBUaGUgYGNhbGxfcmN1YCBjYWxsLCB3aGljaCBzY2hlZHVsZXMgdGhlIG9sZCBtYXNrIGFycmF5IGZvciByZWNsYW1hdGlvbiB2aWEgUkNVLCB3YXMgKnByZXZpb3VzbHkqIHBsYWNlZCAqYmVmb3JlKiB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIFRoaXMgaXMgYSBjbGFzc2ljIFJDVSBvcmRlcmluZyBpc3N1ZS4gSXQmIzM5O3MgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgaGF6YXJkLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogQnkgc2NoZWR1bGluZyB0aGUgYG9sZGAgYXJyYXkgZm9yIFJDVSByZWNsYW1hdGlvbiAqYmVmb3JlKiB1cGRhdGluZyBgdGJsLSZndDttYXNrX2FycmF5YCB0byBwb2ludCB0byB0aGUgYG5ld2AgYXJyYXksIHRoZXJlJiMzOTtzIGEgd2luZG93IHdoZXJlIHJlYWRlcnMgb2YgYHRibC0mZ3Q7bWFza19hcnJheWAgY291bGQgcG90ZW50aWFsbHkgYWNjZXNzIHRoZSBgb2xkYCBhcnJheSBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgc3RhcnRlZCwgb3Igd29yc2UsICp3aGlsZSogaXQmIzM5O3MgYmVpbmcgZnJlZWQuIFRoYXQgaXMsIHRoZSBvbGQgYXJyYXkgY291bGQgYmUgcmVjbGFpbWVkIGJlZm9yZSByZWFkZXJzIGhhZCB0aGUgb3Bwb3J0dW5pdHkgdG8gYWNjZXNzIGl0LiBUaGlzIHdvdWxkIGJlIGEgbmFzdHkgbWVtb3J5IGNvcnJ1cHRpb24gYnVnLgoKTW92aW5nIGBjYWxsX3JjdWAgKmFmdGVyKiB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcmAgY29ycmVjdHMgdGhpcyBvcmRlcmluZy4gTm93LCB3ZSYjMzk7cmUgZ3VhcmFudGVlZCB0aGF0IGFueSByZWFkZXIgYWNjZXNzaW5nIGB0YmwtJmd0O21hc2tfYXJyYXlgIHdpbGwgc2VlIHRoZSBgbmV3YCBhcnJheSAqYmVmb3JlKiB0aGUgYG9sZGAgYXJyYXkgaXMgcmVjbGFpbWVkLiBUaGlzIGlzIHRoZSBjb3JyZWN0LCBzYWZlIHdheSB0byBoYW5kbGUgUkNVIHVwZGF0ZXMuCgpOb3csIGlzIHRoaXMgYnVnIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gT3BlbiB2U3dpdGNoIGlzIGEgY2VudHJhbCBjb21wb25lbnQsIGFuZCBpdHMgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkIHRocm91Z2ggZ2VuZXJpYyBuZXRsaW5rLiBUaGUgYE9WU19GTE9XX0NNRF8qYCBmYW1pbHkgb2YgY29tbWFuZHMsIGFsb25nIHdpdGggZnVuY3Rpb25zIGxpa2UgYG92c19mbG93X3RibF9pbnNlcnRgIGFuZCBgb3ZzX2Zsb3dfdGJsX3JlbW92ZWAsIHByb3ZpZGUgdGhlIGVudHJ5IHBvaW50cy4gQW5kLCBvZiBjb3Vyc2UsIHN5emthbGxlciBpcyBjb25zdGFudGx5IGhhbW1lcmluZyB0aGVzZSBpbnRlcmZhY2VzIHdpdGggdmFyaW91cyBmbG93IG9wZXJhdGlvbnMsIHdoaWNoIHdvdWxkIGVhc2lseSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiB0aGVyZSYjMzk7cyBhbiBleGlzdGluZyBzeXprYWxsZXIgcmVwb3J0IG9uIHRoaXMsIHRvby4KVG8gZW5zdXJlIHRoaXMgaXMgc291bmQsIEkgbmVlZCB0byBsb29rIGF0IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiBgZmxvd190YWJsZS5oYCBhbmQgYGZsb3dfdGFibGUuY2AgdG8gaWRlbnRpZnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBjb2RlIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgaGF6YXJkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2Zsb3dfdGJsXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xNjU9c3RhdGljIHZvaWQgZGVzdHJveV9kcF9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTY4LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTY5Olx0b3ZzX2Zsb3dfdGJsX2Rlc3Ryb3koXHUwMDI2ZHAtXHUwMDNldGFibGUpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTcwLVx0ZnJlZV9wZXJjcHUoZHAtXHUwMDNlc3RhdHNfcGVyY3B1KTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjYxLVx0LyogTG9vayB1cCBmbG93LiAqL1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjYyOlx0ZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfc3RhdHMoXHUwMDI2ZHAtXHUwMDNldGFibGUsIGtleSwgc2tiX2dldF9oYXNoKHNrYiksXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNjMtXHRcdFx0XHRcdCBcdTAwMjZuX21hc2tfaGl0LCBcdTAwMjZuX2NhY2hlX2hpdCk7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NzU3PXN0YXRpYyB2b2lkIGdldF9kcF9zdGF0cyhjb25zdCBzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgb3ZzX2RwX3N0YXRzICpzdGF0cyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03NjMtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo3NjQ6XHRzdGF0cy1cdTAwM2VuX2Zsb3dzID0gb3ZzX2Zsb3dfdGJsX2NvdW50KFx1MDAyNmRwLVx1MDAzZXRhYmxlKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjc2NTpcdG1lZ2Ffc3RhdHMtXHUwMDNlbl9tYXNrcyA9IG92c19mbG93X3RibF9udW1fbWFza3MoXHUwMDI2ZHAtXHUwMDNldGFibGUpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNzY2LVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEwMDA9c3RhdGljIGludCBvdnNfZmxvd19jbWRfbmV3KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA4MC1cdGlmIChvdnNfaWRlbnRpZmllcl9pc191ZmlkKFx1MDAyNm5ld19mbG93LVx1MDAzZWlkKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEwODE6XHRcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoXHUwMDI2ZHAtXHUwMDNldGFibGUsIFx1MDAyNm5ld19mbG93LVx1MDAzZWlkKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEwODItXHRpZiAoIWZsb3cpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMDgzOlx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cChcdTAwMjZkcC1cdTAwM2V0YWJsZSwga2V5KTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEwODQtXHRpZiAobGlrZWx5KCFmbG93KSkge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEwODctXHRcdC8qIFB1dCBmbG93IGluIGJ1Y2tldC4gKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEwODg6XHRcdGVycm9yID0gb3ZzX2Zsb3dfdGJsX2luc2VydChcdTAwMjZkcC1cdTAwM2V0YWJsZSwgbmV3X2Zsb3csIFx1MDAyNm1hc2spO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA4OS1cdFx0aWYgKHVubGlrZWx5KGVycm9yKSkge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTExMjEtXHRcdFx0aWYgKG92c19pZGVudGlmaWVyX2lzX2tleShcdTAwMjZmbG93LVx1MDAzZWlkKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjExMjI6XHRcdFx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChcdTAwMjZkcC1cdTAwM2V0YWJsZSxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTExMjMtXHRcdFx0XHRcdFx0XHRcdCBcdTAwMjZtYXRjaCk7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3MD1zdGF0aWMgaW50IG92c19mbG93X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzE2LVx0aWYgKHVmaWRfcHJlc2VudClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEzMTc6XHRcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoXHUwMDI2ZHAtXHUwMDNldGFibGUsIFx1MDAyNnNmaWQpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTMxOC1cdGVsc2Vcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEzMTk6XHRcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KFx1MDAyNmRwLVx1MDAzZXRhYmxlLCBcdTAwMjZtYXRjaCk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzIwLVx0aWYgKHVubGlrZWx5KCFmbG93KSkge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEzNzM9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQwOS1cdGlmICh1ZmlkX3ByZXNlbnQpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDEwOlx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF91ZmlkKFx1MDAyNmRwLVx1MDAzZXRhYmxlLCBcdTAwMjZ1ZmlkKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0MTEtXHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDEyOlx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChcdTAwMjZkcC1cdTAwM2V0YWJsZSwgXHUwMDI2bWF0Y2gpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQxMy1cdGlmICghZmxvdykge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE0MzI9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ2NC1cdGlmICh1bmxpa2VseSghYVtPVlNfRkxPV19BVFRSX0tFWV0gXHUwMDI2XHUwMDI2ICF1ZmlkX3ByZXNlbnQpKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDY1Olx0XHRlcnIgPSBvdnNfZmxvd190YmxfZmx1c2goXHUwMDI2ZHAtXHUwMDNldGFibGUpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ2Ni1cdFx0Z290byB1bmxvY2s7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ2OS1cdGlmICh1ZmlkX3ByZXNlbnQpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDcwOlx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF91ZmlkKFx1MDAyNmRwLVx1MDAzZXRhYmxlLCBcdTAwMjZ1ZmlkKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0NzEtXHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDcyOlx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChcdTAwMjZkcC1cdTAwM2V0YWJsZSwgXHUwMDI2bWF0Y2gpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ3My1cdGlmICh1bmxpa2VseSghZmxvdykpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDk3LVx0ICogdGhlIGZsb3ctXHUwMDNlbWFzayB0aGF0IGNhbiBiZSBzY2hlZHVsZWQgdG8gYmUgZnJlZWQgYnkgdGhlXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDk4Olx0ICogb3ZzX2Zsb3dfdGJsX3JlbW92ZSgpIGFuZCB3ZSYjMzk7cmUgbm90IGhvbGRpbmcgdGhlIFJDVSByZWFkIGxvY2suXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDk5LVx0ICovXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNTAwOlx0b3ZzX2Zsb3dfdGJsX3JlbW92ZShcdTAwMjZkcC1cdTAwM2V0YWJsZSwgZmxvdyk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNTAxLVx0b3ZzX3VubG9jaygpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE1MTM9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTU0MS1cdFx0b2JqID0gY2ItXHUwMDNlYXJnc1sxXTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE1NDI6XHRcdGZsb3cgPSBvdnNfZmxvd190YmxfZHVtcF9uZXh0KHRpLCBcdTAwMjZidWNrZXQsIFx1MDAyNm9iaik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNTQzLVx0XHRpZiAoIWZsb3cpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTYyND1zdGF0aWMgaW50IG92c19kcF9jbWRfZmlsbF9pbmZvKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTY1Ny1cdGlmIChubGFfcHV0X3UzMihza2IsIE9WU19EUF9BVFRSX01BU0tTX0NBQ0hFX1NJWkUsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNjU4Olx0XHRcdG92c19mbG93X3RibF9tYXNrc19jYWNoZV9zaXplKFx1MDAyNmRwLVx1MDAzZXRhYmxlKSkpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNjU5LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xNzY2PXN0YXRpYyBpbnQgb3ZzX2RwX2NoYW5nZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3QgbmxhdHRyICphW10pXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTc5MC1cdFx0Y2FjaGVfc2l6ZSA9IG5sYV9nZXRfdTMyKGFbT1ZTX0RQX0FUVFJfTUFTS1NfQ0FDSEVfU0laRV0pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTc5MTpcdFx0ZXJyID0gb3ZzX2Zsb3dfdGJsX21hc2tzX2NhY2hlX3Jlc2l6ZShcdTAwMjZkcC1cdTAwM2V0YWJsZSwgY2FjaGVfc2l6ZSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNzkyLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE4NDA9c3RhdGljIGludCBvdnNfZHBfY21kX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE4NjUtXHQvKiBBbGxvY2F0ZSB0YWJsZS4gKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE4NjY6XHRlcnIgPSBvdnNfZmxvd190YmxfaW5pdChcdTAwMjZkcC1cdTAwM2V0YWJsZSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xODY3LVx0aWYgKGVycilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xOTM2LWVycl9kZXN0cm95X3RhYmxlOlxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTkzNzpcdG92c19mbG93X3RibF9kZXN0cm95KFx1MDAyNmRwLVx1MDAzZXRhYmxlKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE5MzgtZXJyX2Rlc3Ryb3lfZHA6XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz03Mj1zdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfYWxsb2Modm9pZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwMi1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MTAzOmludCBvdnNfZmxvd190YmxfY291bnQoY29uc3Qgc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlKVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0xMDQte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MzU5PXN0YXRpYyBzdHJ1Y3QgbWFza19jYWNoZSAqdGJsX21hc2tfY2FjaGVfYWxsb2ModTMyIHNpemUpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0zODgtfVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzozODk6aW50IG92c19mbG93X3RibF9tYXNrc19jYWNoZV9yZXNpemUoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCB1MzIgc2l6ZSlcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMzkwLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTQxMC1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6NDExOmludCBvdnNfZmxvd190YmxfaW5pdChzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTQxMi17XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz01MDM9c3RhdGljIHZvaWQgdGFibGVfaW5zdGFuY2VfZGVzdHJveShzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNTEyLSAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo1MTM6dm9pZCBvdnNfZmxvd190YmxfZGVzdHJveShzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTUxNC17XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy01MjQtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjUyNTpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2R1bXBfbmV4dChzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy01MjYtXHRcdFx0XHQgICAgICAgdTMyICpidWNrZXQsIHUzMiAqbGFzdClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTYwMz1zdGF0aWMgc3RydWN0IHRhYmxlX2luc3RhbmNlICp0YWJsZV9pbnN0YW5jZV9yZWhhc2goc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTYxNi1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6NjE3OmludCBvdnNfZmxvd190YmxfZmx1c2goc3RydWN0IGZsb3dfdGFibGUgKmZsb3dfdGFibGUpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTYxOC17XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz03Mjc9c3RhdGljIHN0cnVjdCBzd19mbG93ICpmbG93X2xvb2t1cChzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNzgyLSAqICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjc4MzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cF9zdGF0cyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy03ODQtXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy04NDYtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjg0NzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cChzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy04NDgtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy04NjYtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjg2NzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy04NjgtXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9OTA4PWJvb2wgb3ZzX2Zsb3dfY21wKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtOTE2LVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo5MTc6c3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3RibF9sb29rdXBfdWZpZChzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05MTgtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19pZCAqdWZpZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTkzNS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6OTM2OmludCBvdnNfZmxvd190YmxfbnVtX21hc2tzKGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSlcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtOTM3LXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTk0MS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6OTQyOnUzMiBvdnNfZmxvd190YmxfbWFza3NfY2FjaGVfc2l6ZShjb25zdCBzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTk0My17XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz05NDk9c3RhdGljIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGFibGVfaW5zdGFuY2VfZXhwYW5kKHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGksXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05NTUtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBPVlMgbXV0ZXggaGVsZC4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6OTU2OnZvaWQgb3ZzX2Zsb3dfdGJsX3JlbW92ZShzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUsIHN0cnVjdCBzd19mbG93ICpmbG93KVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05NTcte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MTA1OT1zdGF0aWMgdm9pZCBmbG93X3VmaWRfaW5zZXJ0KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgc3RydWN0IHN3X2Zsb3cgKmZsb3cpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0xMDgwLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggT1ZTIG11dGV4IGhlbGQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjEwODE6aW50IG92c19mbG93X3RibF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTA4Mi1cdFx0XHRjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXNrICptYXNrKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg9Nzg9dm9pZCBvdnNfZmxvd19mcmVlKHN0cnVjdCBzd19mbG93ICosIGJvb2wgZGVmZXJyZWQpO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaC03OS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODA6aW50IG92c19mbG93X3RibF9pbml0KHN0cnVjdCBmbG93X3RhYmxlICopO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4MTppbnQgb3ZzX2Zsb3dfdGJsX2NvdW50KGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oOjgyOnZvaWQgb3ZzX2Zsb3dfdGJsX2Rlc3Ryb3koc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODM6aW50IG92c19mbG93X3RibF9mbHVzaChzdHJ1Y3QgZmxvd190YWJsZSAqZmxvd190YWJsZSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTg0LVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4NTppbnQgb3ZzX2Zsb3dfdGJsX2luc2VydChzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUsIHN0cnVjdCBzd19mbG93ICpmbG93LFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaC04Ni1cdFx0XHRjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXNrICptYXNrKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODc6dm9pZCBvdnNfZmxvd190YmxfcmVtb3ZlKHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgc3RydWN0IHN3X2Zsb3cgKmZsb3cpO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4ODppbnQgIG92c19mbG93X3RibF9udW1fbWFza3MoY29uc3Qgc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODk6dTMyICBvdnNfZmxvd190YmxfbWFza3NfY2FjaGVfc2l6ZShjb25zdCBzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUpO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo5MDppbnQgIG92c19mbG93X3RibF9tYXNrc19jYWNoZV9yZXNpemUoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCB1MzIgc2l6ZSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oOjkxOnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfZHVtcF9uZXh0KHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGFibGUsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTkyLVx0XHRcdFx0ICAgICAgIHUzMiAqYnVja2V0LCB1MzIgKmlkeCk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oOjkzOnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwX3N0YXRzKHN0cnVjdCBmbG93X3RhYmxlICosXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTk0LVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgtOTctXHRcdFx0XHRcdCAgdTMyICpuX2NhY2hlX2hpdCk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oOjk4OnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwKHN0cnVjdCBmbG93X3RhYmxlICosXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTk5LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6MTAwOnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTEwMS1cdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gpO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDoxMDI6c3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3RibF9sb29rdXBfdWZpZChzdHJ1Y3QgZmxvd190YWJsZSAqLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaC0xMDMtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19pZCAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MTMKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBPcGVuIHZTd2l0Y2ggUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBpc3N1ZSB3aXRoaW4gYHRibF9tYXNrX2FycmF5X3JlYWxsb2MoKWAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBmdW5jdGlvbiBhcyByZXNpZGluZyB3aXRoaW4gdGhlIGNvcmUgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdmlydHVhbCBzd2l0Y2ggZGF0YXBhdGguIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCBzbyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcyBoZXJlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcuCgpUaGUga2V5IGlzIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgYW5kIEkgYWdyZWUsIGJlY2F1c2Ugd2UgaGF2ZSBhIGNsZWFyLCBkb2N1bWVudGVkIFJDVSBvcmRlcmluZyBpc3N1ZSBpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHJlc2lkZXMgaW4gYG5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNgLCBwYXJ0IG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcsIGFuZCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMgKGBvdnNfZmxvd19jbWRfbmV3YCwgYG92c19mbG93X2NtZF9kZWxgLCBldGMuKS4gVGhhdCYjMzk7cyBhIGdvb2QgYXR0YWNrIHN1cmZhY2UuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGBGb2N1c1N5bWJvbHNgLiBXZSBoYXZlIGEgZ29vZCBsaXN0IHRvIHN0YXJ0OiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AsIGB0YmxfbWFza19hcnJheV9hZGRfbWFza2AsIGB0YmxfbWFza19hcnJheV9kZWxfbWFza2AsIGBvdnNfZmxvd190YmxfaW5zZXJ0YCwgYW5kIGBvdnNfZmxvd190YmxfcmVtb3ZlYC4gQnV0LCBJJiMzOTttIGdvaW5nIHRvIGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBpbiB0aGF0IGZpbGUsIGp1c3QgdG8gYmUgc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4KCkFscmlnaHQsIGEgcXVpY2sgbG9vayByZXZlYWxzIHdlIGFsc28gaGF2ZSBgZmxvd19tYXNrX2luc2VydGAgYW5kIGBmbG93X21hc2tfcmVtb3ZlYC4gV2hpbGUgYHRibF9tYXNrX2FycmF5X3JlYWxsb2NgIGlzIHN0YXRpYywgdGhhdCBkb2VzbiYjMzk7dCBjb25jZXJuIG1lIGFzIHRoaXMgaXMgdGhlIGFjdHVhbCBzb3VyY2Ugb2YgdGhlIGNoYW5nZSwgd2hpY2ggaXMgZ29vZC4gVGhlIG90aGVyIGxpc3RlZCBmdW5jdGlvbnMgYWxzbyBzZWVtIHJlbGV2YW50LgoKRmluYWxseSwgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0aGlzIHRvIGJlIHJlbGV2YW50LiBXZSYjMzk7cmUgbG9va2luZyBhdCBgRW5hYmxlQ29uZmlnc2AsIGFuZCB0aGUga2V5IGhlcmUgaXMgYE9QRU5WU1dJVENIYC4gVGhhdCBtYWtlcyBzZW5zZS4gSXQgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIHNvbWUgb3B0aW9uYWwgbmV0ZmlsdGVyL3BzYW1wbGUgY29uZmlncywgd2hpY2ggYXJlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zLgoKU28sIGp1c3QgdG8gc3VtbWFyaXplIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nLCB3ZSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgIGtub3dpbmcgd2UgaGF2ZToKCjEuICBgV29ydGhGdXp6aW5nYDogYHRydWVgCjIuICBgRm9jdXNTeW1ib2xzYDogQSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgZnVuY3Rpb25zCjMuICBgRW5hYmxlQ29uZmlnc2A6IGBPUEVOVlNXSVRDSGAKNC4gIEFuZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlYXNvbmluZywgYXMgZGVzY3JpYmVkIGFib3ZlLiBHb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YmxfbWFza19hcnJheV9yZWFsbG9jJiMzNDssCiAgICAmIzM0O3RibF9tYXNrX2FycmF5X2FkZF9tYXNrJiMzNDssCiAgICAmIzM0O3RibF9tYXNrX2FycmF5X2RlbF9tYXNrJiMzNDssCiAgICAmIzM0O292c19mbG93X3RibF9pbnNlcnQmIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfdGJsX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIG9yZGVyaW5nIGlzc3VlIGluIE9wZW4gdlN3aXRjaCYjMzk7cyBtYXNrIGFycmF5IHJlYWxsb2NhdGlvbiAodGJsX21hc2tfYXJyYXlfcmVhbGxvYyksIGVuc3VyaW5nIG9sZCBtYXNrIGFycmF5IG1lbW9yeSBpcyBzY2hlZHVsZWQgZm9yIFJDVSByZWNsYW1hdGlvbiBvbmx5IGFmdGVyIHRoZSBuZXcgcG9pbnRlciBpcyBwdWJsaXNoZWQgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGZsb3cgbWFuYWdlbWVudCBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YmxfbWFza19hcnJheV9yZWFsbG9jJiMzNDssCiAgICAmIzM0O3RibF9tYXNrX2FycmF5X2FkZF9tYXNrJiMzNDssCiAgICAmIzM0O3RibF9tYXNrX2FycmF5X2RlbF9tYXNrJiMzNDssCiAgICAmIzM0O292c19mbG93X3RibF9pbnNlcnQmIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfdGJsX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIG9yZGVyaW5nIGlzc3VlIGluIE9wZW4gdlN3aXRjaCYjMzk7cyBtYXNrIGFycmF5IHJlYWxsb2NhdGlvbiAodGJsX21hc2tfYXJyYXlfcmVhbGxvYyksIGVuc3VyaW5nIG9sZCBtYXNrIGFycmF5IG1lbW9yeSBpcyBzY2hlZHVsZWQgZm9yIFJDVSByZWNsYW1hdGlvbiBvbmx5IGFmdGVyIHRoZSBuZXcgcG9pbnRlciBpcyBwdWJsaXNoZWQgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGZsb3cgbWFuYWdlbWVudCBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvcnJlY3RzIHRoZSBSQ1UgcG9pbnRlciBwdWJsaXNoaW5nIHNlcXVlbmNlIGluIHRibF9tYXNrX2FycmF5X3JlYWxsb2MoKSBieSBtb3ZpbmcgY2FsbF9yY3UoKSBhZnRlciByY3VfYXNzaWduX3BvaW50ZXIoKSwgcHJldmVudGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSByYWNlIGNvbmRpdGlvbiB3aGVyZSBvbGQgbWFzayBhcnJheSBzdHJ1Y3R1cmVzIGNvdWxkIGJlIHJlY2xhaW1lZCB3aGlsZSBzdGlsbCByZWZlcmVuY2VkLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIG1hc2tfYXJyYXkgYXJlIHBlcmZvcm1lZCB3aXRoIGt6YWxsb2MoKSBhbmQgX19hbGxvY19wZXJjcHUoKSwgZW5zdXJpbmcgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gUkNVIGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjUwNmVhNmU5NzBiY2U5M2ZjNjhkNGNiMDYzZmRkNTBlNzZmODQzYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMjE6MDA6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYwppbmRleCA2N2Q1YjhjMGZlNzkyLi4xZTBmOWQxOTNlYjA2IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMKQEAgLTI1NywxMSAmIzQzOzI1NywxMyBAQCBzdGF0aWMgaW50IHRibF9tYXNrX2FycmF5X3JlYWxsb2Moc3RydWN0IGZsb3dfdGFibGUgKnRibCwgaW50IHNpemUpCiAJCQlpZiAob3ZzbF9kZXJlZmVyZW5jZShvbGQtJmd0O21hc2tzW2ldKSkKIAkJCQluZXctJmd0O21hc2tzW25ldy0mZ3Q7Y291bnQmIzQzOyYjNDM7XSA9IG9sZC0mZ3Q7bWFza3NbaV07CiAJCX0KLQkJY2FsbF9yY3UoJmFtcDtvbGQtJmd0O3JjdSwgbWFza19hcnJheV9yY3VfY2IpOwogCX0KIAogCXJjdV9hc3NpZ25fcG9pbnRlcih0YmwtJmd0O21hc2tfYXJyYXksIG5ldyk7CiAKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWNhbGxfcmN1KCZhbXA7b2xkLSZndDtyY3UsIG1hc2tfYXJyYXlfcmN1X2NiKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIFNhbml0aXplciBTdHJhdGVneSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnV6emluZyBhcHByb2FjaCBmb3IgdGhpcyBrZXJuZWwgcGF0Y2guIFRoZSBnb2FsIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIEtBU0FOL3N0YW5kYXJkIGZ1enppbmcgaXMgZW5vdWdoLCBvciBpZiB3ZSBuZWVkIHRoZSBtb3JlIGludm9sdmVkIEtNU0FOLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgc2FmZXR5IGV2YWx1YXRpb24sIGEgZGVmZW5zaXZlIHNlY3VyaXR5IG1lYXN1cmUsIHNvIHRoZSBkaXJlY3QgcmlzayBoZXJlIGlzIG5lZ2xpZ2libGUuIFdlJiMzOTtyZSBub3QgdGFsa2luZyBhYm91dCBhY3RpdmUgZXhwbG9pdGF0aW9uLCBqdXN0IGVuc3VyaW5nIG91ciB0ZXN0aW5nIGlzIHRob3JvdWdoLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSBjb2RlLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiBgbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNTcuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IG1pZ2h0IG5lY2Vzc2l0YXRlIEtNU0FOLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhcmVhcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBtaWdodCBiZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMDpcdFx0XHRcdFx0XHRcdHNpemVvZih1NjQpICogc2l6ZSxcbiAyMzE6XHRcdFx0XHRcdFx0XHRfX2FsaWdub2ZfXyh1NjQpKTtcbiAyMzI6XHRcdGlmICghbmV3LVx1MDAzZW1hc2tzX3VzYWdlX3N0YXRzKSB7XG4gMjMzOlx0XHRcdGtmcmVlKG5ldyk7XG4gMjM0Olx0XHRcdHJldHVybiBOVUxMO1xuIDIzNTpcdFx0fVxuIDIzNjpcdFxuIDIzNzpcdFx0bmV3LVx1MDAzZWNvdW50ID0gMDtcbiAyMzg6XHRcdG5ldy1cdTAwM2VtYXggPSBzaXplO1xuIDIzOTpcdFxuIDI0MDpcdFx0cmV0dXJuIG5ldztcbiAyNDE6XHR9XG4gMjQyOlx0XG4gMjQzOlx0c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxuIDI0NDpcdHtcbiAyNDU6XHRcdHN0cnVjdCBtYXNrX2FycmF5ICpvbGQ7XG4gMjQ2Olx0XHRzdHJ1Y3QgbWFza19hcnJheSAqbmV3O1xuIDI0NzpcdFxuIDI0ODpcdFx0bmV3ID0gdGJsX21hc2tfYXJyYXlfYWxsb2Moc2l6ZSk7XG4gMjQ5Olx0XHRpZiAoIW5ldylcbiAyNTA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjUxOlx0XG4gMjUyOlx0XHRvbGQgPSBvdnNsX2RlcmVmZXJlbmNlKHRibC1cdTAwM2VtYXNrX2FycmF5KTtcbiAyNTM6XHRcdGlmIChvbGQpIHtcbiAyNTQ6XHRcdFx0aW50IGk7XG4gMjU1Olx0XG4gMjU2Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9sZC1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KSB7XG4gMjU3Olx0XHRcdFx0aWYgKG92c2xfZGVyZWZlcmVuY2Uob2xkLVx1MDAzZW1hc2tzW2ldKSlcbiAyNTg6XHRcdFx0XHRcdG5ldy1cdTAwM2VtYXNrc1tuZXctXHUwMDNlY291bnQmIzQzOyYjNDM7XSA9IG9sZC1cdTAwM2VtYXNrc1tpXTtcbiAyNTk6XHRcdFx0fVxuIDI2MDpcdFx0fVxuIDI2MTpcdFxuIDI2MjpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRibC1cdTAwM2VtYXNrX2FycmF5LCBuZXcpO1xuIDI2MzpcdFxuIDI2NDpcdFx0aWYgKG9sZClcbiAyNjU6XHRcdFx0Y2FsbF9yY3UoXHUwMDI2b2xkLVx1MDAzZXJjdSwgbWFza19hcnJheV9yY3VfY2IpO1xuIDI2NjpcdFxuIDI2NzpcdFx0cmV0dXJuIDA7XG4gMjY4Olx0fVxuIDI2OTpcdFxuIDI3MDpcdHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfYWRkX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcbiAyNzE6XHRcdFx0XHRcdCAgIHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcbiAyNzI6XHR7XG4gMjczOlx0XHRzdHJ1Y3QgbWFza19hcnJheSAqbWEgPSBvdnNsX2RlcmVmZXJlbmNlKHRibC1cdTAwM2VtYXNrX2FycmF5KTtcbiAyNzQ6XHRcdGludCBlcnIsIG1hX2NvdW50ID0gUkVBRF9PTkNFKG1hLVx1MDAzZWNvdW50KTtcbiAyNzU6XHRcbiAyNzY6XHRcdGlmIChtYV9jb3VudCBcdTAwM2U9IG1hLVx1MDAzZW1heCkge1xuIDI3NzpcdFx0XHRlcnIgPSB0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXHUwMDNlbWF4ICYjNDM7XG4gMjc4Olx0XHRcdFx0XHRcdFx0ICBNQVNLX0FSUkFZX1NJWkVfTUlOKTtcbiAyNzk6XHRcdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyIGludG8gQXJyYXkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlc2UgbWFzayBhcnJheXMuIEkmIzM5O3ZlIGFscmVhZHkgZ290IGEgaGFuZGxlIG9uIHRoZSBnZW5lcmFsIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGJ1dCBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7dmUgZ290IGEgZ3Jhc3Agb24gdGhlIGZpbmVyIHBvaW50cywgcGFydGljdWxhcmx5IGhvdyB0aGVzZSBhcnJheXMgYXJlIGluaXRpYWxpemVkLiBUbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBwcm9jZXNzLCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBkZXRhaWxzIG9mIGB0YmxfbWFza19hcnJheV9hbGxvY2AgYXMgd2VsbC4gVGhhdCBmdW5jdGlvbiBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiwgYnV0IG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyAqaW5pdGlhbGl6ZWQqLiBVbmRlcnN0YW5kaW5nIHRoYXQgaW5pdGlhbGl6YXRpb24gaXMga2V5IHRvIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWxseSBkZWJ1Z2dpbmcuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgYnVncyBsdXJraW5nIGluIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFxuIDIxMTpcdFx0XHRcdG1hLVx1MDAzZW1hc2tzX3VzYWdlX3plcm9fY250cltpXSAmIzQzOz0gY291bnRlcjtcbiAyMTI6XHRcdFx0fVxuIDIxMzpcdFx0fVxuIDIxNDpcdH1cbiAyMTU6XHRcbiAyMTY6XHRzdGF0aWMgc3RydWN0IG1hc2tfYXJyYXkgKnRibF9tYXNrX2FycmF5X2FsbG9jKGludCBzaXplKVxuIDIxNzpcdHtcbiAyMTg6XHRcdHN0cnVjdCBtYXNrX2FycmF5ICpuZXc7XG4gMjE5Olx0XG4gMjIwOlx0XHRzaXplID0gbWF4KE1BU0tfQVJSQVlfU0laRV9NSU4sIHNpemUpO1xuIDIyMTpcdFx0bmV3ID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZShuZXcsIG1hc2tzLCBzaXplKSAmIzQzO1xuIDIyMjpcdFx0XHQgICAgICBzaXplb2YodTY0KSAqIHNpemUsIEdGUF9LRVJORUwpO1xuIDIyMzpcdFx0aWYgKCFuZXcpXG4gMjI0Olx0XHRcdHJldHVybiBOVUxMO1xuIDIyNTpcdFxuIDIyNjpcdFx0bmV3LVx1MDAzZW1hc2tzX3VzYWdlX3plcm9fY250ciA9ICh1NjQgKikoKHU4ICopbmV3ICYjNDM7XG4gMjI3Olx0XHRcdFx0XHRcdCAgICAgc3RydWN0X3NpemUobmV3LCBtYXNrcywgc2l6ZSkpO1xuIDIyODpcdFxuIDIyOTpcdFx0bmV3LVx1MDAzZW1hc2tzX3VzYWdlX3N0YXRzID0gX19hbGxvY19wZXJjcHUoc2l6ZW9mKHN0cnVjdCBtYXNrX2FycmF5X3N0YXRzKSAmIzQzO1xuIDIzMDpcdFx0XHRcdFx0XHRcdHNpemVvZih1NjQpICogc2l6ZSxcbiAyMzE6XHRcdFx0XHRcdFx0XHRfX2FsaWdub2ZfXyh1NjQpKTtcbiAyMzI6XHRcdGlmICghbmV3LVx1MDAzZW1hc2tzX3VzYWdlX3N0YXRzKSB7XG4gMjMzOlx0XHRcdGtmcmVlKG5ldyk7XG4gMjM0Olx0XHRcdHJldHVybiBOVUxMO1xuIDIzNTpcdFx0fVxuIDIzNjpcdFxuIDIzNzpcdFx0bmV3LVx1MDAzZWNvdW50ID0gMDtcbiAyMzg6XHRcdG5ldy1cdTAwM2VtYXggPSBzaXplO1xuIDIzOTpcdFxuIDI0MDpcdFx0cmV0dXJuIG5ldztcbiAyNDE6XHR9XG4gMjQyOlx0XG4gMjQzOlx0c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxuIDI0NDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5OQoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiA3OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb21taXQgZm9yIE1lbW9yeSBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGluIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCwgdGhlcmUmIzM5O3MgYSBjcml0aWNhbCBvcmRlcmluZyBpc3N1ZSB3aXRoIHRoZSBSQ1Ugb3BlcmF0aW9ucy4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBjYWxsX3JjdWAgd2FzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIFRoYXQmIzM5O3MgYSB0ZXh0Ym9vayB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgb3IgYSByYWNlIGNvbmRpdGlvbiBpbiBSQ1Ugc3luY2hyb25pemF0aW9uISBJdCBtZWFucyB0aGF0IHRoZSBvbGQgbWFzayBhcnJheSAoYG9sZGApIHdhcyBiZWluZyBzY2hlZHVsZWQgZm9yIGZyZWVpbmcgYmVmb3JlIHRoZSBwb2ludGVyIGluIGB0YmwtJmd0O21hc2tfYXJyYXlgIHdhcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXcgYXJyYXkgKGBuZXdgKS4gVGhpcyBsZWF2ZXMgYSB3aW5kb3cgd2hlcmUgcmVhZGVycywgb3IgZXZlbiB0aGUgb3JpZ2luYWwgdGhyZWFkLCBjb3VsZCBhY2Nlc3Mgc3RhbGUgbWVtb3J5IHRoYXQmIzM5O3MgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQuIFRoYXQmIzM5O3MgYSBjbGVhciB2dWxuZXJhYmlsaXR5LgoKVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcmVvcmRlcmluZzogdXBkYXRpbmcgdGhlIHBvaW50ZXIgKGByY3VfYXNzaWduX3BvaW50ZXJgKSAqYmVmb3JlKiBpbml0aWF0aW5nIHRoZSBSQ1UgcmVjbGFtYXRpb24gKGBjYWxsX3JjdWApLiBUaGlzIGVuc3VyZXMgdGhlIGNvcnJlY3QgUkNVIHVwZGF0ZSBvcmRlciwgcHVibGlzaGluZyB0aGUgbmV3IGRhdGEgYmVmb3JlIGZyZWVpbmcgdGhlIG9sZC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBsdXJraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUuIEZvcnR1bmF0ZWx5LCBpdCBsb29rcyBsaWtlIGB0YmxfbWFza19hcnJheV9hbGxvY2AgdXNlcyBga3phbGxvY2AgYW5kIGBfX2FsbG9jX3BlcmNwdWAgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGVzZSBmdW5jdGlvbnMgemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnkuIFdlJiMzOTtyZSBub3QgcmVhZGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhcmUgd2UgY29weWluZyBhbnkgb2YgaXQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHBhZGRpbmcgbGVha3Mgb3IgdW5pbml0aWFsaXplZCBicmFuY2hlcyBlaXRoZXIuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoZSB1c2UtYWZ0ZXItZnJlZSBhbmQgUkNVIGlzc3VlcywgYW5kIGlzIGZ1bGx5IHN1ZmZpY2llbnQuCgpUaGlzIGlzIGZ1bmRhbWVudGFsbHkgYW4gUkNVIGxpZmV0aW1lIC8gY29uY3VycmVuY3kgaXNzdWUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgbWVtb3J5IGNvcnJ1cHRpb24gYnVnLCBidXQgdGhlIG1lbW9yeSBpcyAqZnVsbHkqIGluaXRpYWxpemVkLgoKSGVyZSYjMzk7cyB0aGUga2V5OiBLQVNBTiBpcyBhbHJlYWR5IG9uIHRoZSBqb2IgaW4gc3RhbmRhcmQga2VybmVsIGJ1aWxkcy4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2VzcywgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpbGUgS01TQU4gZGV0ZWN0cyAqdW5pbml0aWFsaXplZCogbWVtb3J5IHJlYWRzLiBJbiB0aGlzIGNhc2UsIHRoZXJlJiMzOTtzIG5vIG5lZWQgZm9yIEtNU0FOLiBUaGUgZml4IGFkZHJlc3NlcyBhIFVBRiBpc3N1ZSBhcmlzaW5nIGZyb20gUkNVIHN5bmNocm9uaXphdGlvbi9vcmRlcmluZywgYW5kIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHdvcnJ5IGFib3V0LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuCgpIZXJlJiMzOTtzIHRoZSByZWFzb25pbmc6CjEuICBUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIFJDVSBjYWxsYmFjayBvcmRlciBpbiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvYygpYC4KMi4gIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIFVzZS1BZnRlci1GcmVlL1JDVSBsaWZldGltZSBidWcuCjMuICBUaGUgbWFzayBhcnJheSBtZW1vcnkgaXMgYWxsb2NhdGVkIHVzaW5nIHplcm9pbmcgZnVuY3Rpb25zLgo0LiAgTm8gdW5pbml0aWFsaXplZCBkYXRhLCBzdGFjayB2YXJpYWJsZXMsIG9yIGluZm8gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuCjUuICBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGVub3VnaCB0byBmaW5kIGJ1Z3MgaGVyZTsgS01TQU4gaXMgbm90IG5lZWRlZC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb3JyZWN0cyB0aGUgUkNVIHBvaW50ZXIgcHVibGlzaGluZyBzZXF1ZW5jZSBpbiB0YmxfbWFza19hcnJheV9yZWFsbG9jKCkgYnkgbW92aW5nIGNhbGxfcmN1KCkgYWZ0ZXIgcmN1X2Fzc2lnbl9wb2ludGVyKCksIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBjb25kaXRpb24gd2hlcmUgb2xkIG1hc2sgYXJyYXkgc3RydWN0dXJlcyBjb3VsZCBiZSByZWNsYWltZWQgd2hpbGUgc3RpbGwgcmVmZXJlbmNlZC4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBtYXNrX2FycmF5IGFyZSBwZXJmb3JtZWQgd2l0aCBremFsbG9jKCkgYW5kIF9fYWxsb2NfcGVyY3B1KCksIGVuc3VyaW5nIG1lbW9yeSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hlcywgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFJDVSBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvcnJlY3RzIHRoZSBSQ1UgcG9pbnRlciBwdWJsaXNoaW5nIHNlcXVlbmNlIGluIHRibF9tYXNrX2FycmF5X3JlYWxsb2MoKSBieSBtb3ZpbmcgY2FsbF9yY3UoKSBhZnRlciByY3VfYXNzaWduX3BvaW50ZXIoKSwgcHJldmVudGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSByYWNlIGNvbmRpdGlvbiB3aGVyZSBvbGQgbWFzayBhcnJheSBzdHJ1Y3R1cmVzIGNvdWxkIGJlIHJlY2xhaW1lZCB3aGlsZSBzdGlsbCByZWZlcmVuY2VkLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIG1hc2tfYXJyYXkgYXJlIHBlcmZvcm1lZCB3aXRoIGt6YWxsb2MoKSBhbmQgX19hbGxvY19wZXJjcHUoKSwgZW5zdXJpbmcgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gUkNVIGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMDo1OS41Mzk0NDMxMjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDMxMzQxODgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRibF9tYXNrX2FycmF5X3JlYWxsb2NcIixcbiAgICBcInRibF9tYXNrX2FycmF5X2FkZF9tYXNrXCIsXG4gICAgXCJ0YmxfbWFza19hcnJheV9kZWxfbWFza1wiLFxuICAgIFwib3ZzX2Zsb3dfdGJsX2luc2VydFwiLFxuICAgIFwib3ZzX2Zsb3dfdGJsX3JlbW92ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIFJDVSBwb2ludGVyIHB1Ymxpc2hpbmcgc2VxdWVuY2UgaW4gdGJsX21hc2tfYXJyYXlfcmVhbGxvYygpIGJ5IG1vdmluZyBjYWxsX3JjdSgpIGFmdGVyIHJjdV9hc3NpZ25fcG9pbnRlcigpLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHJhY2UgY29uZGl0aW9uIHdoZXJlIG9sZCBtYXNrIGFycmF5IHN0cnVjdHVyZXMgY291bGQgYmUgcmVjbGFpbWVkIHdoaWxlIHN0aWxsIHJlZmVyZW5jZWQuIE1lbW9yeSBhbGxvY2F0aW9ucyBmb3IgbWFza19hcnJheSBhcmUgcGVyZm9ybWVkIHdpdGgga3phbGxvYygpIGFuZCBfX2FsbG9jX3BlcmNwdSgpLCBlbnN1cmluZyBtZW1vcnkgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIHVzZXItc3BhY2UgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBSQ1UgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBvcmRlcmluZyBpc3N1ZSBpbiBPcGVuIHZTd2l0Y2gncyBtYXNrIGFycmF5IHJlYWxsb2NhdGlvbiAodGJsX21hc2tfYXJyYXlfcmVhbGxvYyksIGVuc3VyaW5nIG9sZCBtYXNrIGFycmF5IG1lbW9yeSBpcyBzY2hlZHVsZWQgZm9yIFJDVSByZWNsYW1hdGlvbiBvbmx5IGFmdGVyIHRoZSBuZXcgcG9pbnRlciBpcyBwdWJsaXNoZWQgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGZsb3cgbWFuYWdlbWVudCBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDA6NTkuNTM5NDQ3NzUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzU5Nzc4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2NTA2ZWE2ZTk3MGJjZTkzZmM2OGQ0Y2IwNjNmZGQ1MGU3NmY4NDNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMjE6MDA6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYyBiL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNcXG5pbmRleCA2N2Q1YjhjMGZlNzkyLi4xZTBmOWQxOTNlYjA2IDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jXFxuQEAgLTI1NywxMSArMjU3LDEzIEBAIHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSlcXG4gXFx0XFx0XFx0aWYgKG92c2xfZGVyZWZlcmVuY2Uob2xkLVxcdTAwM2VtYXNrc1tpXSkpXFxuIFxcdFxcdFxcdFxcdG5ldy1cXHUwMDNlbWFza3NbbmV3LVxcdTAwM2Vjb3VudCsrXSA9IG9sZC1cXHUwMDNlbWFza3NbaV07XFxuIFxcdFxcdH1cXG4tXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNm9sZC1cXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XFxuIFxcdH1cXG4gXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0YmwtXFx1MDAzZW1hc2tfYXJyYXksIG5ldyk7XFxuIFxcbitcXHRpZiAob2xkKVxcbitcXHRcXHRjYWxsX3JjdShcXHUwMDI2b2xkLVxcdTAwM2VyY3UsIG1hc2tfYXJyYXlfcmN1X2NiKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMTowMC4wNzYzOTIxNDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0NTc4MzE2OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGJsX21hc2tfYXJyYXlfcmVhbGxvY1wiLFxuICAgIFwidGJsX21hc2tfYXJyYXlfYWRkX21hc2tcIixcbiAgICBcInRibF9tYXNrX2FycmF5X2RlbF9tYXNrXCIsXG4gICAgXCJvdnNfZmxvd190YmxfaW5zZXJ0XCIsXG4gICAgXCJvdnNfZmxvd190YmxfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBvcmRlcmluZyBpc3N1ZSBpbiBPcGVuIHZTd2l0Y2gncyBtYXNrIGFycmF5IHJlYWxsb2NhdGlvbiAodGJsX21hc2tfYXJyYXlfcmVhbGxvYyksIGVuc3VyaW5nIG9sZCBtYXNrIGFycmF5IG1lbW9yeSBpcyBzY2hlZHVsZWQgZm9yIFJDVSByZWNsYW1hdGlvbiBvbmx5IGFmdGVyIHRoZSBuZXcgcG9pbnRlciBpcyBwdWJsaXNoZWQgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGZsb3cgbWFuYWdlbWVudCBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NTA2ZWE2ZTk3MGJjZTkzZmM2OGQ0Y2IwNjNmZGQ1MGU3NmY4NDNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMTowMDo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jXG5pbmRleCA2N2Q1YjhjMGZlNzkyLi4xZTBmOWQxOTNlYjA2IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1xuQEAgLTI1NywxMSArMjU3LDEzIEBAIHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSlcbiBcdFx0XHRpZiAob3ZzbF9kZXJlZmVyZW5jZShvbGQtXHUwMDNlbWFza3NbaV0pKVxuIFx0XHRcdFx0bmV3LVx1MDAzZW1hc2tzW25ldy1cdTAwM2Vjb3VudCsrXSA9IG9sZC1cdTAwM2VtYXNrc1tpXTtcbiBcdFx0fVxuLVx0XHRjYWxsX3JjdShcdTAwMjZvbGQtXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XG4gXHR9XG4gXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVx1MDAzZW1hc2tfYXJyYXksIG5ldyk7XG4gXG4rXHRpZiAob2xkKVxuK1x0XHRjYWxsX3JjdShcdTAwMjZvbGQtXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMTowMC4wNzYzOTQzMzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDg3NjQzNjM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBUcmlhZ2U6IFN5emthbGxlciBGdXp6aW5nIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBsZXQncyBxdWlja2x5IHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBhbnkgc2FmZXR5IHByZWNhdXRpb25zLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGEgTGludXgga2VybmVsIGNvbW1pdCwgYW5kIHRoZXkncmUgYXNraW5nIGZvciBhIGZ1enppbmcgdHJpYWdlIGV2YWx1YXRpb24uIFRoaXMgaXMgc3RhbmRhcmQgc3R1ZmYg4oCTIGtlcm5lbCBtYWludGVuYW5jZSwgc29mdHdhcmUgcXVhbGl0eSBhc3N1cmFuY2UsIGRlZmVuc2l2ZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uIE5vIHJlZCBmbGFncyBoZXJlLiBSaXNrIHNldmVyaXR5PyBCZW5pZ24sIHByYWN0aWNhbGx5IG5vbmUuIFdlJ3JlIHRhbGtpbmcgc2FuZGJveGVkIGRldmVsb3BlciBRQSBvciBrZXJuZWwgdHJpYWdlLCBzbyBpdCdzIHNhZmUgdG8gcHJvY2VlZC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgdGhlIGNvbW1pdCBkaWZmLiBJdCBhcHBlYXJzIHRvIGJlIG1vZGlmeWluZyBgbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY2AuIExldCdzIHRha2UgYSBsb29rIGF0IGl0IGluIGRldGFpbDogVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBhbiBgaWZgIHN0YXRlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AgZnVuY3Rpb24gdG8gY2FsbCB0aGUgYHJjdWAgY2FsbGJhY2suXG5cbk5vdywgbGV0J3MgdXNlIG91ciBtb3JlIGFkdmFuY2VkIHRvb2xzLiBXZSBuZWVkIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGlkZW50aWZ5IHBvdGVudGlhbCBjYWxsZXJzIG9mIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCwgYW5kIGNoZWNrIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGlzIHJlcXVpcmVzIGEgZGVlcGVyIGRpdmUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHN1YnRsZSBjb21wbGV4aXRpZXMgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgaXNzdWVzIHRoYXQgYXJlIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTAuOTUyODMzNjM0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdFxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0bmV3LVxcdTAwM2Vjb3VudCA9IDA7XFxuIDIzODpcXHRcXHRuZXctXFx1MDAzZW1heCA9IHNpemU7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdHJldHVybiBuZXc7XFxuIDI0MTpcXHR9XFxuIDI0MjpcXHRcXG4gMjQzOlxcdHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSlcXG4gMjQ0OlxcdHtcXG4gMjQ1OlxcdFxcdHN0cnVjdCBtYXNrX2FycmF5ICpvbGQ7XFxuIDI0NjpcXHRcXHRzdHJ1Y3QgbWFza19hcnJheSAqbmV3O1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRuZXcgPSB0YmxfbWFza19hcnJheV9hbGxvYyhzaXplKTtcXG4gMjQ5OlxcdFxcdGlmICghbmV3KVxcbiAyNTA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI1MTpcXHRcXG4gMjUyOlxcdFxcdG9sZCA9IG92c2xfZGVyZWZlcmVuY2UodGJsLVxcdTAwM2VtYXNrX2FycmF5KTtcXG4gMjUzOlxcdFxcdGlmIChvbGQpIHtcXG4gMjU0OlxcdFxcdFxcdGludCBpO1xcbiAyNTU6XFx0XFxuIDI1NjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2xkLVxcdTAwM2VtYXg7IGkrKykge1xcbiAyNTc6XFx0XFx0XFx0XFx0aWYgKG92c2xfZGVyZWZlcmVuY2Uob2xkLVxcdTAwM2VtYXNrc1tpXSkpXFxuIDI1ODpcXHRcXHRcXHRcXHRcXHRuZXctXFx1MDAzZW1hc2tzW25ldy1cXHUwMDNlY291bnQrK10gPSBvbGQtXFx1MDAzZW1hc2tzW2ldO1xcbiAyNTk6XFx0XFx0XFx0fVxcbiAyNjA6XFx0XFx0fVxcbiAyNjE6XFx0XFxuIDI2MjpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVxcdTAwM2VtYXNrX2FycmF5LCBuZXcpO1xcbiAyNjM6XFx0XFxuIDI2NDpcXHRcXHRpZiAob2xkKVxcbiAyNjU6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNm9sZC1cXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdHJldHVybiAwO1xcbiAyNjg6XFx0fVxcbiAyNjk6XFx0XFxuIDI3MDpcXHRzdGF0aWMgaW50IHRibF9tYXNrX2FycmF5X2FkZF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxuIDI3MTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc3dfZmxvd19tYXNrICpuZXcpXFxuIDI3MjpcXHR7XFxuIDI3MzpcXHRcXHRzdHJ1Y3QgbWFza19hcnJheSAqbWEgPSBvdnNsX2RlcmVmZXJlbmNlKHRibC1cXHUwMDNlbWFza19hcnJheSk7XFxuIDI3NDpcXHRcXHRpbnQgZXJyLCBtYV9jb3VudCA9IFJFQURfT05DRShtYS1cXHUwMDNlY291bnQpO1xcbiAyNzU6XFx0XFxuIDI3NjpcXHRcXHRpZiAobWFfY291bnQgXFx1MDAzZT0gbWEtXFx1MDAzZW1heCkge1xcbiAyNzc6XFx0XFx0XFx0ZXJyID0gdGJsX21hc2tfYXJyYXlfcmVhbGxvYyh0YmwsIG1hLVxcdTAwM2VtYXggK1xcbiAyNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBNQVNLX0FSUkFZX1NJWkVfTUlOKTtcXG4gMjc5OlxcdFxcdFxcdGlmIChlcnIpXFxuIDI4MDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRcXHRtYSA9IG92c2xfZGVyZWZlcmVuY2UodGJsLVxcdTAwM2VtYXNrX2FycmF5KTtcXG4gMjgzOlxcdFxcdH0gZWxzZSB7XFxuIDI4NDpcXHRcXHRcXHQvKiBPbiBldmVyeSBhZGQgb3IgZGVsZXRlIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNvdW50ZXJzIHNvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjEwLjk1Mjk1MjgzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODU0NTI5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AgaW4gT3BlbiB2U3dpdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHRibF9tYXNrX2FycmF5X3JlYWxsb2NgLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IGZ1bmN0aW9uLiBUaGF0J2xsIGdpdmUgbWUgYSBkaXJlY3QgbGluZSBvZiBzaWdodCBpbnRvIHRoZSBjcml0aWNhbCBhcmVhcyB3aGVyZSBtZW1vcnkgcmUtYWxsb2NhdGlvbiBpcyBoYXBwZW5pbmcuIFNpbXVsdGFuZW91c2x5LCBJIHdhbnQgdG8gbWFwIHRob3NlIGNhbGwgc2l0ZXMgb250byB0aGUgcmVsZXZhbnQgT3BlbiB2U3dpdGNoIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb25hbCBjb250ZXh0IGlzIGNydWNpYWwgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZmxvdyB0YWJsZSBvcGVyYXRpb25zPyBQYWNrZXQgcHJvY2Vzc2luZz8gU29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cbk9uY2UgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHksIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhpcyBhY3Rpdml0eSB3aXRoIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIFdoYXQgZmxhZ3MgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIGNvZGUgcGF0aCB0byBldmVuIGJlIGFjdGl2ZT8gQXJlIHRoZXJlIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBiYXNlZCBvbiBjb25maWd1cmF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLlxuXG5GaW5hbGx5LCBJJ2xsIHNlYXJjaCB0aGUgYG5ldC9vcGVudnN3aXRjaGAgZGlyZWN0b3J5IGZvciBhbGwgaW5zdGFuY2VzIG9mIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBhbmQgYW55IG90aGVyIHJlbGF0ZWQgZmxvdyB0YWJsZSBmdW5jdGlvbnMuIFRoaXMgY29tcHJlaGVuc2l2ZSBzZWFyY2ggc2hvdWxkIHVuY292ZXIgYW55IG90aGVyIGhpbnRzIHRoYXQgbWF5IGNvbnRyaWJ1dGUgdG8gbXkgY29tcHJlaGVuc2lvbiBvZiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AncyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM0MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTMuMzM4NDEzMzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzg4NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRibF9tYXNrX2FycmF5X3JlYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MjE2PXN0YXRpYyBzdHJ1Y3QgbWFza19hcnJheSAqdGJsX21hc2tfYXJyYXlfYWxsb2MoaW50IHNpemUpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTI0Mi1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjI0MzpzdGF0aWMgaW50IHRibF9tYXNrX2FycmF5X3JlYWxsb2Moc3RydWN0IGZsb3dfdGFibGUgKnRibCwgaW50IHNpemUpXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNDQte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz0yNzA9c3RhdGljIGludCB0YmxfbWFza19hcnJheV9hZGRfbWFzayhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNzYtXFx0aWYgKG1hX2NvdW50IFxcdTAwM2U9IG1hLVxcdTAwM2VtYXgpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjI3NzpcXHRcXHRlcnIgPSB0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXFx1MDAzZW1heCArXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNzgtXFx0XFx0XFx0XFx0XFx0XFx0ICBNQVNLX0FSUkFZX1NJWkVfTUlOKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9Mjk4PXN0YXRpYyB2b2lkIHRibF9tYXNrX2FycmF5X2RlbF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTMyMy1cXHQgICAgbWFfY291bnQgXFx1MDAzYz0gKG1hLVxcdTAwM2VtYXggLyAzKSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjMyNDpcXHRcXHR0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXFx1MDAzZW1heCAvIDIpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMzI1LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTMuNDM5ODA2ODYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4NTY4NTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBgbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY2AgZm9yIE1hc2sgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGB0YmxfbWFza19hcnJheV9hZGRfbWFza2AgYW5kIGB0YmxfbWFza19hcnJheV9kZWxfbWFza2AuIEkndmUgZ290IHRvIHRyYWNlIHRoZWlyIHVzYWdlIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY2AuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSAqY2FsbGVkIGZyb20qIHdpbGwgYmUga2V5LiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiBob3cgdGhlc2UgbWFzayBtYW5hZ2VtZW50IHJvdXRpbmVzIGZpdCBpbnRvIHRoZSBvdmVyYWxsIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvLCBvciBhcmUgdHJpZ2dlcmVkIGJ5LCBmbG93IHRhYmxlIG9wZXJhdGlvbnMuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTUuMzI1NDk1ODIxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODYyOTI1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YmxfbWFza19hcnJheV8oYWRkfGRlbClfbWFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz0yNDM9c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNjktXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzoyNzA6c3RhdGljIGludCB0YmxfbWFza19hcnJheV9hZGRfbWFzayhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMjcxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMjk3LVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6Mjk4OnN0YXRpYyB2b2lkIHRibF9tYXNrX2FycmF5X2RlbF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yOTktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzd19mbG93X21hc2sgKm1hc2spXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTMzMT1zdGF0aWMgdm9pZCBmbG93X21hc2tfcmVtb3ZlKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIHN0cnVjdCBzd19mbG93X21hc2sgKm1hc2spXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTM0MS1cXHRcXHRpZiAoIW1hc2stXFx1MDAzZXJlZl9jb3VudClcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjM0MjpcXHRcXHRcXHR0YmxfbWFza19hcnJheV9kZWxfbWFzayh0YmwsIG1hc2spO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMzQzLVxcdH1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MTAwNj1zdGF0aWMgaW50IGZsb3dfbWFza19pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwMjAtXFx0XFx0LyogQWRkIG1hc2sgdG8gbWFzay1saXN0LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MTAyMTpcXHRcXHRpZiAodGJsX21hc2tfYXJyYXlfYWRkX21hc2sodGJsLCBtYXNrKSkge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTAyMi1cXHRcXHRcXHRrZnJlZShtYXNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTUuNDM0MTMzMjU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5Njg5MTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEZsb3cgTWFzayBJbnNlcnRpb24sIFJlbW92YWwsIGFuZCBGbG93IFRhYmxlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgcGF0aHMgcmVsYXRlZCB0byBgZmxvd19tYXNrX2luc2VydGAsIGBmbG93X21hc2tfcmVtb3ZlYCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgZmxvdyB0YWJsZSBvcGVyYXRpb25zLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgZGF0YSBwYXRoLiBJJ2xsIGxpa2VseSBzdGFydCBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiBjYWxscywgcHJvYmFibHkgdXNpbmcgYSB0b29sIGxpa2UgYHBlcmZgIG9yIGBnZGJgLCB0byBzZWUgaG93IHRoZXNlIG1hc2sgb3BlcmF0aW9ucyBhcmUgdHJpZ2dlcmVkIGFuZCB3aGF0IG90aGVyIGZ1bmN0aW9ucyB0aGV5IGNhbGwuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBwYXJ0aWN1bGFybHkgbG9va2luZyBmb3IgYW55IGxvY2tpbmcgY29udGVudGlvbiwgaW5lZmZpY2llbnQgZGF0YSBzdHJ1Y3R1cmVzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyBpbiB0aGUgcHJlc2VuY2Ugb2YgaGlnaCB0cmFmZmljIHZvbHVtZSBvciBjb21wbGV4IGZsb3cgcnVsZXMuIFRoaXMgcmVxdWlyZXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBzdWNoIGFzIHRoZSBmbG93IHRhYmxlJ3MgaW1wbGVtZW50YXRpb24gKGhhc2ggdGFibGUsIHJhZGl4IHRyZWUsIGV0Yy4pIGFuZCBob3cgbWFza3MgYXJlIHVzZWQgdG8gb3B0aW1pemUgZmxvdyBsb29rdXBzLiBJJ2xsIGJlIGZvY3VzZWQgb24gYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgbG9va3VwIHBlcmZvcm1hbmNlIG9yIHRoZSBhdG9taWNpdHkgb2YgZmxvdyB0YWJsZSB1cGRhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTcuODMxMDI4MTc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA0MDc0ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd19tYXNrXyhpbnNlcnR8cmVtb3ZlKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz0yOTg9c3RhdGljIHZvaWQgdGJsX21hc2tfYXJyYXlfZGVsX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMzMwLS8qIFJlbW92ZSAnbWFzaycgZnJvbSB0aGUgbWFzayBsaXN0LCBpZiBpdCBpcyBub3QgbmVlZGVkIGFueSBtb3JlLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MzMxOnN0YXRpYyB2b2lkIGZsb3dfbWFza19yZW1vdmUoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3dfbWFzayAqbWFzaylcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTMzMi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTQ1OT1zdGF0aWMgdm9pZCB0YWJsZV9pbnN0YW5jZV9mbG93X2ZyZWUoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy00NzEtXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo0NzI6XFx0Zmxvd19tYXNrX3JlbW92ZSh0YWJsZSwgZmxvdy1cXHUwMDNlbWFzayk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy00NzMtfVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz05ODc9c3RhdGljIHN0cnVjdCBzd19mbG93X21hc2sgKmZsb3dfbWFza19maW5kKGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwMDUtLyogQWRkICdtYXNrJyBpbnRvIHRoZSBtYXNrIGxpc3QsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHRoZXJlLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MTAwNjpzdGF0aWMgaW50IGZsb3dfbWFza19pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0xMDA3LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXNrICpuZXcpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTEwODE9aW50IG92c19mbG93X3RibF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTA4NS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjEwODY6XFx0ZXJyID0gZmxvd19tYXNrX2luc2VydCh0YWJsZSwgZmxvdywgbWFzayk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0xMDg3LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjE3Ljk0MTQ0MDkzMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUyMTM5NzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBPcGVuIHZTd2l0Y2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZ29lcyBsaWtlIHRoaXMuIE15IGJyYWluLCBsaWtlbHkgaW4gcmVzcG9uc2UgdG8gYSBwcm9ibGVtIG9yIHRhc2sgcmVsYXRlZCB0byBPcGVuIHZTd2l0Y2ggY29uZmlndXJhdGlvbiwgaW1tZWRpYXRlbHkgc3VnZ2VzdHMsIFwiTGV0J3MgZGlnIGludG8gdGhlIEtjb25maWcuXCIgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG5lZWQgZm9yIGl0LiBJIGtub3cgdGhhdCB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgYW5kIGFzc29jaWF0ZWQgcHJvamVjdHMuIE15IGludGVybmFsIG1vbm9sb2d1ZSBjb250aW51ZXM6IFRoaXMgbGlrZWx5IG1lYW5zIEknbSBsb29raW5nIHRvIHVuZGVyc3RhbmQgb3IgbW9kaWZ5IHNwZWNpZmljIGJ1aWxkIG9wdGlvbnMsIGZlYXR1cmUgdG9nZ2xlcywgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLiBJdCBjb3VsZCBiZSBmb3IgYSBjdXN0b20gYnVpbGQsIHRyb3VibGVzaG9vdGluZyBhIGNvbmZpZ3VyYXRpb24gaXNzdWUsIG9yIG1heWJlIEknbSB3b3JraW5nIG9uIGEgbmV3IGZlYXR1cmUgYW5kIG5lZWQgdG8gcHJvcGVybHkgaW50ZWdyYXRlIGl0IGludG8gdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBUaGVyZSdzIGFuIHVuZGVybHlpbmcgYXNzdW1wdGlvbiB0aGF0IHRoZSBLY29uZmlnIGhvbGRzIHRoZSBhbnN3ZXJzLCBhdCBsZWFzdCB0aGUgc3RhcnRpbmcgcG9pbnQsIHRvIHdoYXQgSSdtIHRyeWluZyB0byBhY2hpZXZlLiBJdCByZXByZXNlbnRzIHRoZSBjZW50cmFsIHNvdXJjZSBvZiB0cnV0aCBmb3IgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uLCBhbmQgSSBuZWVkIHRvIGNvbnN1bHQgaXQuIEkgYW0gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIHByb2JhYmx5IHRoZSBkZWZhdWx0IHZhbHVlcyBhbmQgaGVscCB0ZXh0IHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBhdmFpbGFibGUgYW5kIGhvdyBJIHNob3VsZCBtb2RpZnkgaXQsIHRvIGFjaGlldmUgdGhlIG9iamVjdGl2ZSBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTc0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MjAuMTkzNTgzMzQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQ0ODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZS01LVxcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PUEVOVlNXSVRDSCkgKz0gb3BlbnZzd2l0Y2gub1xcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZS03LVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjgyND1zdGF0aWMgaW50IF9faW5pdCBkcF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODY0LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI4NjU6XFx0ZHJvcF9yZWFzb25zX3JlZ2lzdGVyX3N1YnN5cyhTS0JfRFJPUF9SRUFTT05fU1VCU1lTX09QRU5WU1dJVENILFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4NjYtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2ZHJvcF9yZWFzb25fbGlzdF9vdnMpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9Mjg4Nz1zdGF0aWMgdm9pZCBkcF9jbGVhbnVwKHZvaWQpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODkyLVxcdHVucmVnaXN0ZXJfcGVybmV0X2RldmljZShcXHUwMDI2b3ZzX25ldF9vcHMpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI4OTM6XFx0ZHJvcF9yZWFzb25zX3VucmVnaXN0ZXJfc3Vic3lzKFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfT1BFTlZTV0lUQ0gpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4OTQtXFx0cmN1X2JhcnJpZXIoKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kcm9wLmgtNS1cXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oOjY6I2lmbmRlZiBPUEVOVlNXSVRDSF9EUk9QX0hcXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oOjc6I2RlZmluZSBPUEVOVlNXSVRDSF9EUk9QX0hcXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oLTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Ryb3AuaD0yNT1lbnVtIG92c19kcm9wX3JlYXNvbiB7XFxubmV0L29wZW52c3dpdGNoL2Ryb3AuaDoyNjpcXHRfX09WU19EUk9QX1JFQVNPTiA9IFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfT1BFTlZTV0lUQ0ggXFx1MDAzY1xcdTAwM2NcXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oLTI3LVxcdFxcdFxcdFxcdFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfU0hJRlQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oPTM2PW92c19rZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gb3ZzX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kcm9wLmgtNDAtXFxubmV0L29wZW52c3dpdGNoL2Ryb3AuaDo0MTojZW5kaWYgLyogT1BFTlZTV0lUQ0hfRFJPUF9IICovXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaC00LVxcbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oOjU6I2lmICFkZWZpbmVkKF9UUkFDRV9PUEVOVlNXSVRDSF9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKVxcbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oOjY6I2RlZmluZSBfVFJBQ0VfT1BFTlZTV0lUQ0hfSFxcbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oLTctXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaD04Mj1UUkFDRV9FVkVOVChvdnNfZHBfdXBjYWxsLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmgtMTUwLVxcbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oOjE1MTojZW5kaWYgLyogX1RSQUNFX09QRU5WU1dJVENIX0ggKi9cXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaC0xNTItXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmM9OTQ9c3RhdGljIHZvaWQgZG9fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1pbnRlcm5hbF9kZXYuYy0xMDItXFx0bmV0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjY9IH5JRkZfVFhfU0tCX1NIQVJJTkc7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jOjEwMzpcXHRuZXRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0UgfCBJRkZfT1BFTlZTV0lUQ0ggfFxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1pbnRlcm5hbF9kZXYuYy0xMDQtXFx0XFx0XFx0ICAgICAgSUZGX05PX1FVRVVFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMToyMC4yNTkwMzU1MTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkwMjk1MTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19PUEVOVlNXSVRDSGAuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMgd2l0aCB0aGVzZSBraW5kcyBvZiB0aGluZ3MsIGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4gSW4gdGhpcyBjYXNlLCB0aGF0J3MgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYC4gSSdsbCBvcGVuIHRoYXQgdXAgYW5kIHRha2UgYSBsb29rLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgbG9naWMsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcywgYW5kIG1heWJlIGV2ZW4gc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyByZXF1aXJlbWVudHMuIFRoaXMgc2hvdWxkIHRlbGwgbWUgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgcHJlc2VudCBpbiB0aGUgc3lzdGVtIGZvciBgQ09ORklHX09QRU5WU1dJVENIYCB0byBiZSBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCB0byBidWlsZCBjb3JyZWN0bHkuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MjIuMTYxOTg5NTk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxcbiAgMjM6XFx0XFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xcbiAgMjQ6XFx0XFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcXG4gIDI1OlxcdFxcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xcbiAgMjY6XFx0XFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXFxuICAyNzpcXHRcXHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxcbiAgMjg6XFx0XFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxcbiAgMjk6XFx0XFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XFxuICAzMjpcXHRcXHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXFxuICAzMzpcXHRcXHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcXG4gIDM0OlxcdFxcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgU2VlIGh0dHA6Ly9vcGVudnN3aXRjaC5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHVzZXJzcGFjZVxcbiAgMzc6XFx0XFx0ICB1dGlsaXRpZXMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgNDA6XFx0XFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjIyLjE2MjA0ODQ3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTk3NTE3MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbiBSQ1UgQnVnIEZpeCBpbiBPcGVuIHZTd2l0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsb2NhbGl6ZWQgd2l0aGluIHRoaXMgZmlsZS4gSXQncyBjYWxsZWQgYnkgYHRibF9tYXNrX2FycmF5X2FkZF9tYXNrYCBhbmQgYHRibF9tYXNrX2FycmF5X2RlbF9tYXNrYCwgd2hpY2ggYXJlIGtleSBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRoZSBmbG93IHRhYmxlJ3MgbWFza3MuIFRoYXQncyBvdXIgaW5pdGlhbCBjb250ZXh0LlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgdGhlIGNoYW5nZSBzZWVtcyBzaW1wbGUgb24gdGhlIHN1cmZhY2UsIGJ1dCBpdCdzIGNyaXRpY2FsbHkgaW1wb3J0YW50LiBUaGUgYGNhbGxfcmN1YCBjYWxsLCB3aGljaCBzY2hlZHVsZXMgdGhlIG9sZCBtYXNrIGFycmF5IGZvciByZWNsYW1hdGlvbiB2aWEgUkNVLCB3YXMgKnByZXZpb3VzbHkqIHBsYWNlZCAqYmVmb3JlKiB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIFRoaXMgaXMgYSBjbGFzc2ljIFJDVSBvcmRlcmluZyBpc3N1ZS4gSXQncyBhIHRleHRib29rIGV4YW1wbGUgb2YgYSBoYXphcmQuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogQnkgc2NoZWR1bGluZyB0aGUgYG9sZGAgYXJyYXkgZm9yIFJDVSByZWNsYW1hdGlvbiAqYmVmb3JlKiB1cGRhdGluZyBgdGJsLVx1MDAzZW1hc2tfYXJyYXlgIHRvIHBvaW50IHRvIHRoZSBgbmV3YCBhcnJheSwgdGhlcmUncyBhIHdpbmRvdyB3aGVyZSByZWFkZXJzIG9mIGB0YmwtXHUwMDNlbWFza19hcnJheWAgY291bGQgcG90ZW50aWFsbHkgYWNjZXNzIHRoZSBgb2xkYCBhcnJheSBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgc3RhcnRlZCwgb3Igd29yc2UsICp3aGlsZSogaXQncyBiZWluZyBmcmVlZC4gVGhhdCBpcywgdGhlIG9sZCBhcnJheSBjb3VsZCBiZSByZWNsYWltZWQgYmVmb3JlIHJlYWRlcnMgaGFkIHRoZSBvcHBvcnR1bml0eSB0byBhY2Nlc3MgaXQuIFRoaXMgd291bGQgYmUgYSBuYXN0eSBtZW1vcnkgY29ycnVwdGlvbiBidWcuXG5cbk1vdmluZyBgY2FsbF9yY3VgICphZnRlciogdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIGNvcnJlY3RzIHRoaXMgb3JkZXJpbmcuIE5vdywgd2UncmUgZ3VhcmFudGVlZCB0aGF0IGFueSByZWFkZXIgYWNjZXNzaW5nIGB0YmwtXHUwMDNlbWFza19hcnJheWAgd2lsbCBzZWUgdGhlIGBuZXdgIGFycmF5ICpiZWZvcmUqIHRoZSBgb2xkYCBhcnJheSBpcyByZWNsYWltZWQuIFRoaXMgaXMgdGhlIGNvcnJlY3QsIHNhZmUgd2F5IHRvIGhhbmRsZSBSQ1UgdXBkYXRlcy5cblxuTm93LCBpcyB0aGlzIGJ1ZyByZWFjaGFibGU/IEFic29sdXRlbHkuIE9wZW4gdlN3aXRjaCBpcyBhIGNlbnRyYWwgY29tcG9uZW50LCBhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB0aHJvdWdoIGdlbmVyaWMgbmV0bGluay4gVGhlIGBPVlNfRkxPV19DTURfKmAgZmFtaWx5IG9mIGNvbW1hbmRzLCBhbG9uZyB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBvdnNfZmxvd190YmxfaW5zZXJ0YCBhbmQgYG92c19mbG93X3RibF9yZW1vdmVgLCBwcm92aWRlIHRoZSBlbnRyeSBwb2ludHMuIEFuZCwgb2YgY291cnNlLCBzeXprYWxsZXIgaXMgY29uc3RhbnRseSBoYW1tZXJpbmcgdGhlc2UgaW50ZXJmYWNlcyB3aXRoIHZhcmlvdXMgZmxvdyBvcGVyYXRpb25zLCB3aGljaCB3b3VsZCBlYXNpbHkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyBzeXprYWxsZXIgcmVwb3J0IG9uIHRoaXMsIHRvby5cblRvIGVuc3VyZSB0aGlzIGlzIHNvdW5kLCBJIG5lZWQgdG8gbG9vayBhdCBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgaW4gYGZsb3dfdGFibGUuaGAgYW5kIGBmbG93X3RhYmxlLmNgIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgaW50byB0aGUgY29kZSB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGhhemFyZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMToyOS4zNTk1Njc3NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3ODYzNjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfZmxvd190YmxfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xNjU9c3RhdGljIHZvaWQgZGVzdHJveV9kcF9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNjgtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTY5OlxcdG92c19mbG93X3RibF9kZXN0cm95KFxcdTAwMjZkcC1cXHUwMDNldGFibGUpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE3MC1cXHRmcmVlX3BlcmNwdShkcC1cXHUwMDNlc3RhdHNfcGVyY3B1KTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI0NT12b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI2MS1cXHQvKiBMb29rIHVwIGZsb3cuICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjYyOlxcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3N0YXRzKFxcdTAwMjZkcC1cXHUwMDNldGFibGUsIGtleSwgc2tiX2dldF9oYXNoKHNrYiksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjYzLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bl9tYXNrX2hpdCwgXFx1MDAyNm5fY2FjaGVfaGl0KTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTc1Nz1zdGF0aWMgdm9pZCBnZXRfZHBfc3RhdHMoY29uc3Qgc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IG92c19kcF9zdGF0cyAqc3RhdHMsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03NjMtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NzY0OlxcdHN0YXRzLVxcdTAwM2VuX2Zsb3dzID0gb3ZzX2Zsb3dfdGJsX2NvdW50KFxcdTAwMjZkcC1cXHUwMDNldGFibGUpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjc2NTpcXHRtZWdhX3N0YXRzLVxcdTAwM2VuX21hc2tzID0gb3ZzX2Zsb3dfdGJsX251bV9tYXNrcyhcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03NjYtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xMDAwPXN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA4MC1cXHRpZiAob3ZzX2lkZW50aWZpZXJfaXNfdWZpZChcXHUwMDI2bmV3X2Zsb3ctXFx1MDAzZWlkKSlcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMDgxOlxcdFxcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoXFx1MDAyNmRwLVxcdTAwM2V0YWJsZSwgXFx1MDAyNm5ld19mbG93LVxcdTAwM2VpZCk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA4Mi1cXHRpZiAoIWZsb3cpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTA4MzpcXHRcXHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cChcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlLCBrZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEwODQtXFx0aWYgKGxpa2VseSghZmxvdykpIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEwODctXFx0XFx0LyogUHV0IGZsb3cgaW4gYnVja2V0LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEwODg6XFx0XFx0ZXJyb3IgPSBvdnNfZmxvd190YmxfaW5zZXJ0KFxcdTAwMjZkcC1cXHUwMDNldGFibGUsIG5ld19mbG93LCBcXHUwMDI2bWFzayk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA4OS1cXHRcXHRpZiAodW5saWtlbHkoZXJyb3IpKSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMTIxLVxcdFxcdFxcdGlmIChvdnNfaWRlbnRpZmllcl9pc19rZXkoXFx1MDAyNmZsb3ctXFx1MDAzZWlkKSlcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMTIyOlxcdFxcdFxcdFxcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KFxcdTAwMjZkcC1cXHUwMDNldGFibGUsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTEyMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1hdGNoKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEyNzA9c3RhdGljIGludCBvdnNfZmxvd19jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzE2LVxcdGlmICh1ZmlkX3ByZXNlbnQpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTMxNzpcXHRcXHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF91ZmlkKFxcdTAwMjZkcC1cXHUwMDNldGFibGUsIFxcdTAwMjZzZmlkKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzE4LVxcdGVsc2VcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMzE5OlxcdFxcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KFxcdTAwMjZkcC1cXHUwMDNldGFibGUsIFxcdTAwMjZtYXRjaCk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTMyMC1cXHRpZiAodW5saWtlbHkoIWZsb3cpKSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xMzczPXN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQwOS1cXHRpZiAodWZpZF9wcmVzZW50KVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE0MTA6XFx0XFx0ZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfdWZpZChcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlLCBcXHUwMDI2dWZpZCk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQxMS1cXHRlbHNlXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTQxMjpcXHRcXHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlLCBcXHUwMDI2bWF0Y2gpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0MTMtXFx0aWYgKCFmbG93KSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xNDMyPXN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ2NC1cXHRpZiAodW5saWtlbHkoIWFbT1ZTX0ZMT1dfQVRUUl9LRVldIFxcdTAwMjZcXHUwMDI2ICF1ZmlkX3ByZXNlbnQpKSB7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTQ2NTpcXHRcXHRlcnIgPSBvdnNfZmxvd190YmxfZmx1c2goXFx1MDAyNmRwLVxcdTAwM2V0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ2Ni1cXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0NjktXFx0aWYgKHVmaWRfcHJlc2VudClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDcwOlxcdFxcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoXFx1MDAyNmRwLVxcdTAwM2V0YWJsZSwgXFx1MDAyNnVmaWQpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0NzEtXFx0ZWxzZVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE0NzI6XFx0XFx0ZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfZXhhY3QoXFx1MDAyNmRwLVxcdTAwM2V0YWJsZSwgXFx1MDAyNm1hdGNoKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDczLVxcdGlmICh1bmxpa2VseSghZmxvdykpIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0OTctXFx0ICogdGhlIGZsb3ctXFx1MDAzZW1hc2sgdGhhdCBjYW4gYmUgc2NoZWR1bGVkIHRvIGJlIGZyZWVkIGJ5IHRoZVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE0OTg6XFx0ICogb3ZzX2Zsb3dfdGJsX3JlbW92ZSgpIGFuZCB3ZSdyZSBub3QgaG9sZGluZyB0aGUgUkNVIHJlYWQgbG9jay5cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDk5LVxcdCAqL1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE1MDA6XFx0b3ZzX2Zsb3dfdGJsX3JlbW92ZShcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlLCBmbG93KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNTAxLVxcdG92c191bmxvY2soKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE1MTM9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNTQxLVxcdFxcdG9iaiA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE1NDI6XFx0XFx0ZmxvdyA9IG92c19mbG93X3RibF9kdW1wX25leHQodGksIFxcdTAwMjZidWNrZXQsIFxcdTAwMjZvYmopO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE1NDMtXFx0XFx0aWYgKCFmbG93KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTYyND1zdGF0aWMgaW50IG92c19kcF9jbWRfZmlsbF9pbmZvKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNjU3LVxcdGlmIChubGFfcHV0X3UzMihza2IsIE9WU19EUF9BVFRSX01BU0tTX0NBQ0hFX1NJWkUsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTY1ODpcXHRcXHRcXHRvdnNfZmxvd190YmxfbWFza3NfY2FjaGVfc2l6ZShcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlKSkpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTY1OS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE3NjY9c3RhdGljIGludCBvdnNfZHBfY2hhbmdlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBubGF0dHIgKmFbXSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE3OTAtXFx0XFx0Y2FjaGVfc2l6ZSA9IG5sYV9nZXRfdTMyKGFbT1ZTX0RQX0FUVFJfTUFTS1NfQ0FDSEVfU0laRV0pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE3OTE6XFx0XFx0ZXJyID0gb3ZzX2Zsb3dfdGJsX21hc2tzX2NhY2hlX3Jlc2l6ZShcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlLCBjYWNoZV9zaXplKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNzkyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xODQwPXN0YXRpYyBpbnQgb3ZzX2RwX2NtZF9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE4NjUtXFx0LyogQWxsb2NhdGUgdGFibGUuICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTg2NjpcXHRlcnIgPSBvdnNfZmxvd190YmxfaW5pdChcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xODY3LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xOTM2LWVycl9kZXN0cm95X3RhYmxlOlxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE5Mzc6XFx0b3ZzX2Zsb3dfdGJsX2Rlc3Ryb3koXFx1MDAyNmRwLVxcdTAwM2V0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTkzOC1lcnJfZGVzdHJveV9kcDpcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9NzI9c3RydWN0IHN3X2Zsb3cgKm92c19mbG93X2FsbG9jKHZvaWQpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwMi1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjEwMzppbnQgb3ZzX2Zsb3dfdGJsX2NvdW50KGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwNC17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTM1OT1zdGF0aWMgc3RydWN0IG1hc2tfY2FjaGUgKnRibF9tYXNrX2NhY2hlX2FsbG9jKHUzMiBzaXplKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0zODgtfVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6Mzg5OmludCBvdnNfZmxvd190YmxfbWFza3NfY2FjaGVfcmVzaXplKHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgdTMyIHNpemUpXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0zOTAte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy00MTAtXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo0MTE6aW50IG92c19mbG93X3RibF9pbml0KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTQxMi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTUwMz1zdGF0aWMgdm9pZCB0YWJsZV9pbnN0YW5jZV9kZXN0cm95KHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTUxMi0gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjUxMzp2b2lkIG92c19mbG93X3RibF9kZXN0cm95KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTUxNC17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTUyNC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjUyNTpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2R1bXBfbmV4dChzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNTI2LVxcdFxcdFxcdFxcdCAgICAgICB1MzIgKmJ1Y2tldCwgdTMyICpsYXN0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz02MDM9c3RhdGljIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGFibGVfaW5zdGFuY2VfcmVoYXNoKHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTYxNi1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjYxNzppbnQgb3ZzX2Zsb3dfdGJsX2ZsdXNoKHN0cnVjdCBmbG93X3RhYmxlICpmbG93X3RhYmxlKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNjE4LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9NzI3PXN0YXRpYyBzdHJ1Y3Qgc3dfZmxvdyAqZmxvd19sb29rdXAoc3RydWN0IGZsb3dfdGFibGUgKnRibCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNzgyLSAqICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo3ODM6c3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3RibF9sb29rdXBfc3RhdHMoc3RydWN0IGZsb3dfdGFibGUgKnRibCxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTc4NC1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy04NDYtXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo4NDc6c3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3RibF9sb29rdXAoc3RydWN0IGZsb3dfdGFibGUgKnRibCxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTg0OC1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTg2Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjg2NzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtODY4LVxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz05MDg9Ym9vbCBvdnNfZmxvd19jbXAoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTkxNi1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjkxNzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cF91ZmlkKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05MTgtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzd19mbG93X2lkICp1ZmlkKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05MzUtXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo5MzY6aW50IG92c19mbG93X3RibF9udW1fbWFza3MoY29uc3Qgc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtOTM3LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtOTQxLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6OTQyOnUzMiBvdnNfZmxvd190YmxfbWFza3NfY2FjaGVfc2l6ZShjb25zdCBzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUpXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05NDMte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz05NDk9c3RhdGljIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGFibGVfaW5zdGFuY2VfZXhwYW5kKHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTk1NS0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIE9WUyBtdXRleCBoZWxkLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6OTU2OnZvaWQgb3ZzX2Zsb3dfdGJsX3JlbW92ZShzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUsIHN0cnVjdCBzd19mbG93ICpmbG93KVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtOTU3LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MTA1OT1zdGF0aWMgdm9pZCBmbG93X3VmaWRfaW5zZXJ0KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgc3RydWN0IHN3X2Zsb3cgKmZsb3cpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwODAtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBPVlMgbXV0ZXggaGVsZC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjEwODE6aW50IG92c19mbG93X3RibF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwODItXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfbWFzayAqbWFzaylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg9Nzg9dm9pZCBvdnNfZmxvd19mcmVlKHN0cnVjdCBzd19mbG93ICosIGJvb2wgZGVmZXJyZWQpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgtNzktXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4MDppbnQgb3ZzX2Zsb3dfdGJsX2luaXQoc3RydWN0IGZsb3dfdGFibGUgKik7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4MTppbnQgb3ZzX2Zsb3dfdGJsX2NvdW50KGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4Mjp2b2lkIG92c19mbG93X3RibF9kZXN0cm95KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4MzppbnQgb3ZzX2Zsb3dfdGJsX2ZsdXNoKHN0cnVjdCBmbG93X3RhYmxlICpmbG93X3RhYmxlKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTg0LVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODU6aW50IG92c19mbG93X3RibF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTg2LVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzd19mbG93X21hc2sgKm1hc2spO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODc6dm9pZCBvdnNfZmxvd190YmxfcmVtb3ZlKHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgc3RydWN0IHN3X2Zsb3cgKmZsb3cpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODg6aW50ICBvdnNfZmxvd190YmxfbnVtX21hc2tzKGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4OTp1MzIgIG92c19mbG93X3RibF9tYXNrc19jYWNoZV9zaXplKGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo5MDppbnQgIG92c19mbG93X3RibF9tYXNrc19jYWNoZV9yZXNpemUoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCB1MzIgc2l6ZSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo5MTpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2R1bXBfbmV4dChzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRhYmxlLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgtOTItXFx0XFx0XFx0XFx0ICAgICAgIHUzMiAqYnVja2V0LCB1MzIgKmlkeCk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo5MzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cF9zdGF0cyhzdHJ1Y3QgZmxvd190YWJsZSAqLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgtOTQtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgtOTctXFx0XFx0XFx0XFx0XFx0ICB1MzIgKm5fY2FjaGVfaGl0KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oOjk4OnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwKHN0cnVjdCBmbG93X3RhYmxlICosXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaC05OS1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICopO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6MTAwOnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaC0xMDEtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6MTAyOnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoc3RydWN0IGZsb3dfdGFibGUgKixcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTEwMy1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHN3X2Zsb3dfaWQgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjI5LjczODIwNzU3N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzkwMTY0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBPcGVuIHZTd2l0Y2ggUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBpc3N1ZSB3aXRoaW4gYHRibF9tYXNrX2FycmF5X3JlYWxsb2MoKWAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBmdW5jdGlvbiBhcyByZXNpZGluZyB3aXRoaW4gdGhlIGNvcmUgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdmlydHVhbCBzd2l0Y2ggZGF0YXBhdGguIFRoYXQncyBhIGNyaXRpY2FsIGFyZWEsIHNvIGFueSBtZW1vcnkgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGhlcmUgYXJlIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZy5cblxuVGhlIGtleSBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGFuZCBJIGFncmVlLCBiZWNhdXNlIHdlIGhhdmUgYSBjbGVhciwgZG9jdW1lbnRlZCBSQ1Ugb3JkZXJpbmcgaXNzdWUgaW4gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiByZXNpZGVzIGluIGBuZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jYCwgcGFydCBvZiB0aGUgY29yZSBuZXR3b3JraW5nLCBhbmQgaW1wb3J0YW50bHksIGl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMgKGBvdnNfZmxvd19jbWRfbmV3YCwgYG92c19mbG93X2NtZF9kZWxgLCBldGMuKS4gVGhhdCdzIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGBGb2N1c1N5bWJvbHNgLiBXZSBoYXZlIGEgZ29vZCBsaXN0IHRvIHN0YXJ0OiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AsIGB0YmxfbWFza19hcnJheV9hZGRfbWFza2AsIGB0YmxfbWFza19hcnJheV9kZWxfbWFza2AsIGBvdnNfZmxvd190YmxfaW5zZXJ0YCwgYW5kIGBvdnNfZmxvd190YmxfcmVtb3ZlYC4gQnV0LCBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIGluIHRoYXQgZmlsZSwganVzdCB0byBiZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuXG5cbkFscmlnaHQsIGEgcXVpY2sgbG9vayByZXZlYWxzIHdlIGFsc28gaGF2ZSBgZmxvd19tYXNrX2luc2VydGAgYW5kIGBmbG93X21hc2tfcmVtb3ZlYC4gV2hpbGUgYHRibF9tYXNrX2FycmF5X3JlYWxsb2NgIGlzIHN0YXRpYywgdGhhdCBkb2Vzbid0IGNvbmNlcm4gbWUgYXMgdGhpcyBpcyB0aGUgYWN0dWFsIHNvdXJjZSBvZiB0aGUgY2hhbmdlLCB3aGljaCBpcyBnb29kLiBUaGUgb3RoZXIgbGlzdGVkIGZ1bmN0aW9ucyBhbHNvIHNlZW0gcmVsZXZhbnQuXG5cbkZpbmFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSByZWxldmFudC4gV2UncmUgbG9va2luZyBhdCBgRW5hYmxlQ29uZmlnc2AsIGFuZCB0aGUga2V5IGhlcmUgaXMgYE9QRU5WU1dJVENIYC4gVGhhdCBtYWtlcyBzZW5zZS4gSXQgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIHNvbWUgb3B0aW9uYWwgbmV0ZmlsdGVyL3BzYW1wbGUgY29uZmlncywgd2hpY2ggYXJlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zLlxuXG5TbywganVzdCB0byBzdW1tYXJpemUgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcsIHdlIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2Aga25vd2luZyB3ZSBoYXZlOlxuXG4xLiAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYFxuMi4gIGBGb2N1c1N5bWJvbHNgOiBBIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBmdW5jdGlvbnNcbjMuICBgRW5hYmxlQ29uZmlnc2A6IGBPUEVOVlNXSVRDSGBcbjQuICBBbmQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWFzb25pbmcsIGFzIGRlc2NyaWJlZCBhYm92ZS4gR29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTMsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjM0LjUyODM3NTUyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjMzMDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0YmxfbWFza19hcnJheV9yZWFsbG9jXCIsXG4gICAgXCJ0YmxfbWFza19hcnJheV9hZGRfbWFza1wiLFxuICAgIFwidGJsX21hc2tfYXJyYXlfZGVsX21hc2tcIixcbiAgICBcIm92c19mbG93X3RibF9pbnNlcnRcIixcbiAgICBcIm92c19mbG93X3RibF9yZW1vdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIG9yZGVyaW5nIGlzc3VlIGluIE9wZW4gdlN3aXRjaCdzIG1hc2sgYXJyYXkgcmVhbGxvY2F0aW9uICh0YmxfbWFza19hcnJheV9yZWFsbG9jKSwgZW5zdXJpbmcgb2xkIG1hc2sgYXJyYXkgbWVtb3J5IGlzIHNjaGVkdWxlZCBmb3IgUkNVIHJlY2xhbWF0aW9uIG9ubHkgYWZ0ZXIgdGhlIG5ldyBwb2ludGVyIGlzIHB1Ymxpc2hlZCB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlci4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgT3BlbiB2U3dpdGNoIG5ldGxpbmsgZmxvdyBtYW5hZ2VtZW50IGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGJsX21hc2tfYXJyYXlfcmVhbGxvY1wiLFxuICAgIFwidGJsX21hc2tfYXJyYXlfYWRkX21hc2tcIixcbiAgICBcInRibF9tYXNrX2FycmF5X2RlbF9tYXNrXCIsXG4gICAgXCJvdnNfZmxvd190YmxfaW5zZXJ0XCIsXG4gICAgXCJvdnNfZmxvd190YmxfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBvcmRlcmluZyBpc3N1ZSBpbiBPcGVuIHZTd2l0Y2gncyBtYXNrIGFycmF5IHJlYWxsb2NhdGlvbiAodGJsX21hc2tfYXJyYXlfcmVhbGxvYyksIGVuc3VyaW5nIG9sZCBtYXNrIGFycmF5IG1lbW9yeSBpcyBzY2hlZHVsZWQgZm9yIFJDVSByZWNsYW1hdGlvbiBvbmx5IGFmdGVyIHRoZSBuZXcgcG9pbnRlciBpcyBwdWJsaXNoZWQgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGZsb3cgbWFuYWdlbWVudCBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MzQuNjU0NzEzMzM5WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE5ODE0MDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjM0LjY1NTIwOTc2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5MTk3NjQwNzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb3JyZWN0cyB0aGUgUkNVIHBvaW50ZXIgcHVibGlzaGluZyBzZXF1ZW5jZSBpbiB0YmxfbWFza19hcnJheV9yZWFsbG9jKCkgYnkgbW92aW5nIGNhbGxfcmN1KCkgYWZ0ZXIgcmN1X2Fzc2lnbl9wb2ludGVyKCksIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBjb25kaXRpb24gd2hlcmUgb2xkIG1hc2sgYXJyYXkgc3RydWN0dXJlcyBjb3VsZCBiZSByZWNsYWltZWQgd2hpbGUgc3RpbGwgcmVmZXJlbmNlZC4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBtYXNrX2FycmF5IGFyZSBwZXJmb3JtZWQgd2l0aCBremFsbG9jKCkgYW5kIF9fYWxsb2NfcGVyY3B1KCksIGVuc3VyaW5nIG1lbW9yeSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hlcywgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFJDVSBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NTA2ZWE2ZTk3MGJjZTkzZmM2OGQ0Y2IwNjNmZGQ1MGU3NmY4NDNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMTowMDo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jXG5pbmRleCA2N2Q1YjhjMGZlNzkyLi4xZTBmOWQxOTNlYjA2IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1xuQEAgLTI1NywxMSArMjU3LDEzIEBAIHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSlcbiBcdFx0XHRpZiAob3ZzbF9kZXJlZmVyZW5jZShvbGQtXHUwMDNlbWFza3NbaV0pKVxuIFx0XHRcdFx0bmV3LVx1MDAzZW1hc2tzW25ldy1cdTAwM2Vjb3VudCsrXSA9IG9sZC1cdTAwM2VtYXNrc1tpXTtcbiBcdFx0fVxuLVx0XHRjYWxsX3JjdShcdTAwMjZvbGQtXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XG4gXHR9XG4gXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVx1MDAzZW1hc2tfYXJyYXksIG5ldyk7XG4gXG4rXHRpZiAob2xkKVxuK1x0XHRjYWxsX3JjdShcdTAwMjZvbGQtXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMTozNC42NTUyMTA2ODlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE1MTA1MzEzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBTYW5pdGl6ZXIgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnV6emluZyBhcHByb2FjaCBmb3IgdGhpcyBrZXJuZWwgcGF0Y2guIFRoZSBnb2FsIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIEtBU0FOL3N0YW5kYXJkIGZ1enppbmcgaXMgZW5vdWdoLCBvciBpZiB3ZSBuZWVkIHRoZSBtb3JlIGludm9sdmVkIEtNU0FOLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgc2FmZXR5IGV2YWx1YXRpb24sIGEgZGVmZW5zaXZlIHNlY3VyaXR5IG1lYXN1cmUsIHNvIHRoZSBkaXJlY3QgcmlzayBoZXJlIGlzIG5lZ2xpZ2libGUuIFdlJ3JlIG5vdCB0YWxraW5nIGFib3V0IGFjdGl2ZSBleHBsb2l0YXRpb24sIGp1c3QgZW5zdXJpbmcgb3VyIHRlc3RpbmcgaXMgdGhvcm91Z2guXG5cbkxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIGNvZGUuIEknbGwgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gYG5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjU3LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBtaWdodCBuZWNlc3NpdGF0ZSBLTVNBTi4gSSdsbCBiZSBsb29raW5nIGZvciBhcmVhcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBtaWdodCBiZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6NDYuMTY1NzQ1Mjg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2YodTY0KSAqIHNpemUsXFxuIDIzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRfX2FsaWdub2ZfXyh1NjQpKTtcXG4gMjMyOlxcdFxcdGlmICghbmV3LVxcdTAwM2VtYXNrc191c2FnZV9zdGF0cykge1xcbiAyMzM6XFx0XFx0XFx0a2ZyZWUobmV3KTtcXG4gMjM0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAyMzU6XFx0XFx0fVxcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRuZXctXFx1MDAzZWNvdW50ID0gMDtcXG4gMjM4OlxcdFxcdG5ldy1cXHUwMDNlbWF4ID0gc2l6ZTtcXG4gMjM5OlxcdFxcbiAyNDA6XFx0XFx0cmV0dXJuIG5ldztcXG4gMjQxOlxcdH1cXG4gMjQyOlxcdFxcbiAyNDM6XFx0c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxcbiAyNDQ6XFx0e1xcbiAyNDU6XFx0XFx0c3RydWN0IG1hc2tfYXJyYXkgKm9sZDtcXG4gMjQ2OlxcdFxcdHN0cnVjdCBtYXNrX2FycmF5ICpuZXc7XFxuIDI0NzpcXHRcXG4gMjQ4OlxcdFxcdG5ldyA9IHRibF9tYXNrX2FycmF5X2FsbG9jKHNpemUpO1xcbiAyNDk6XFx0XFx0aWYgKCFuZXcpXFxuIDI1MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0b2xkID0gb3ZzbF9kZXJlZmVyZW5jZSh0YmwtXFx1MDAzZW1hc2tfYXJyYXkpO1xcbiAyNTM6XFx0XFx0aWYgKG9sZCkge1xcbiAyNTQ6XFx0XFx0XFx0aW50IGk7XFxuIDI1NTpcXHRcXG4gMjU2OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvbGQtXFx1MDAzZW1heDsgaSsrKSB7XFxuIDI1NzpcXHRcXHRcXHRcXHRpZiAob3ZzbF9kZXJlZmVyZW5jZShvbGQtXFx1MDAzZW1hc2tzW2ldKSlcXG4gMjU4OlxcdFxcdFxcdFxcdFxcdG5ldy1cXHUwMDNlbWFza3NbbmV3LVxcdTAwM2Vjb3VudCsrXSA9IG9sZC1cXHUwMDNlbWFza3NbaV07XFxuIDI1OTpcXHRcXHRcXHR9XFxuIDI2MDpcXHRcXHR9XFxuIDI2MTpcXHRcXG4gMjYyOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0YmwtXFx1MDAzZW1hc2tfYXJyYXksIG5ldyk7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdGlmIChvbGQpXFxuIDI2NTpcXHRcXHRcXHRjYWxsX3JjdShcXHUwMDI2b2xkLVxcdTAwM2VyY3UsIG1hc2tfYXJyYXlfcmN1X2NiKTtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0cmV0dXJuIDA7XFxuIDI2ODpcXHR9XFxuIDI2OTpcXHRcXG4gMjcwOlxcdHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfYWRkX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcXG4gMjcxOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcXG4gMjcyOlxcdHtcXG4gMjczOlxcdFxcdHN0cnVjdCBtYXNrX2FycmF5ICptYSA9IG92c2xfZGVyZWZlcmVuY2UodGJsLVxcdTAwM2VtYXNrX2FycmF5KTtcXG4gMjc0OlxcdFxcdGludCBlcnIsIG1hX2NvdW50ID0gUkVBRF9PTkNFKG1hLVxcdTAwM2Vjb3VudCk7XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdGlmIChtYV9jb3VudCBcXHUwMDNlPSBtYS1cXHUwMDNlbWF4KSB7XFxuIDI3NzpcXHRcXHRcXHRlcnIgPSB0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXFx1MDAzZW1heCArXFxuIDI3ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIE1BU0tfQVJSQVlfU0laRV9NSU4pO1xcbiAyNzk6XFx0XFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6NDYuMTY1ODkxOTk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MzIwMDkwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBBcnJheSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlc2UgbWFzayBhcnJheXMuIEkndmUgYWxyZWFkeSBnb3QgYSBoYW5kbGUgb24gdGhlIGdlbmVyYWwgYWxsb2NhdGlvbiBzdHJhdGVneSwgYnV0IEkgd2FudCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ3ZlIGdvdCBhIGdyYXNwIG9uIHRoZSBmaW5lciBwb2ludHMsIHBhcnRpY3VsYXJseSBob3cgdGhlc2UgYXJyYXlzIGFyZSBpbml0aWFsaXplZC4gVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcHJvY2VzcywgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgZGV0YWlscyBvZiBgdGJsX21hc2tfYXJyYXlfYWxsb2NgIGFzIHdlbGwuIFRoYXQgZnVuY3Rpb24gc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgYWxsb2NhdGlvbiBpdHNlbGYsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgKmluaXRpYWxpemVkKi4gVW5kZXJzdGFuZGluZyB0aGF0IGluaXRpYWxpemF0aW9uIGlzIGtleSB0byBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsbHkgZGVidWdnaW5nLiBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgYnVncyBsdXJraW5nIGluIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjQ3Ljc5NzkwNDA1OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRcXHRcXHRtYS1cXHUwMDNlbWFza3NfdXNhZ2VfemVyb19jbnRyW2ldICs9IGNvdW50ZXI7XFxuIDIxMjpcXHRcXHRcXHR9XFxuIDIxMzpcXHRcXHR9XFxuIDIxNDpcXHR9XFxuIDIxNTpcXHRcXG4gMjE2OlxcdHN0YXRpYyBzdHJ1Y3QgbWFza19hcnJheSAqdGJsX21hc2tfYXJyYXlfYWxsb2MoaW50IHNpemUpXFxuIDIxNzpcXHR7XFxuIDIxODpcXHRcXHRzdHJ1Y3QgbWFza19hcnJheSAqbmV3O1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHRzaXplID0gbWF4KE1BU0tfQVJSQVlfU0laRV9NSU4sIHNpemUpO1xcbiAyMjE6XFx0XFx0bmV3ID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZShuZXcsIG1hc2tzLCBzaXplKSArXFxuIDIyMjpcXHRcXHRcXHQgICAgICBzaXplb2YodTY0KSAqIHNpemUsIEdGUF9LRVJORUwpO1xcbiAyMjM6XFx0XFx0aWYgKCFuZXcpXFxuIDIyNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0bmV3LVxcdTAwM2VtYXNrc191c2FnZV96ZXJvX2NudHIgPSAodTY0ICopKCh1OCAqKW5ldyArXFxuIDIyNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdF9zaXplKG5ldywgbWFza3MsIHNpemUpKTtcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0bmV3LVxcdTAwM2VtYXNrc191c2FnZV9zdGF0cyA9IF9fYWxsb2NfcGVyY3B1KHNpemVvZihzdHJ1Y3QgbWFza19hcnJheV9zdGF0cykgK1xcbiAyMzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHU2NCkgKiBzaXplLFxcbiAyMzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0X19hbGlnbm9mX18odTY0KSk7XFxuIDIzMjpcXHRcXHRpZiAoIW5ldy1cXHUwMDNlbWFza3NfdXNhZ2Vfc3RhdHMpIHtcXG4gMjMzOlxcdFxcdFxcdGtmcmVlKG5ldyk7XFxuIDIzNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjM1OlxcdFxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0bmV3LVxcdTAwM2Vjb3VudCA9IDA7XFxuIDIzODpcXHRcXHRuZXctXFx1MDAzZW1heCA9IHNpemU7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdHJldHVybiBuZXc7XFxuIDI0MTpcXHR9XFxuIDI0MjpcXHRcXG4gMjQzOlxcdHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSlcXG4gMjQ0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6NDcuNzk4NTMxMjY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNTQzMDA0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21taXQgZm9yIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSBpbiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AsIHRoZXJlJ3MgYSBjcml0aWNhbCBvcmRlcmluZyBpc3N1ZSB3aXRoIHRoZSBSQ1Ugb3BlcmF0aW9ucy4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBjYWxsX3JjdWAgd2FzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIFRoYXQncyBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBhIHJhY2UgY29uZGl0aW9uIGluIFJDVSBzeW5jaHJvbml6YXRpb24hIEl0IG1lYW5zIHRoYXQgdGhlIG9sZCBtYXNrIGFycmF5IChgb2xkYCkgd2FzIGJlaW5nIHNjaGVkdWxlZCBmb3IgZnJlZWluZyBiZWZvcmUgdGhlIHBvaW50ZXIgaW4gYHRibC1cdTAwM2VtYXNrX2FycmF5YCB3YXMgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGFycmF5IChgbmV3YCkuIFRoaXMgbGVhdmVzIGEgd2luZG93IHdoZXJlIHJlYWRlcnMsIG9yIGV2ZW4gdGhlIG9yaWdpbmFsIHRocmVhZCwgY291bGQgYWNjZXNzIHN0YWxlIG1lbW9yeSB0aGF0J3MgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQuIFRoYXQncyBhIGNsZWFyIHZ1bG5lcmFiaWxpdHkuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlb3JkZXJpbmc6IHVwZGF0aW5nIHRoZSBwb2ludGVyIChgcmN1X2Fzc2lnbl9wb2ludGVyYCkgKmJlZm9yZSogaW5pdGlhdGluZyB0aGUgUkNVIHJlY2xhbWF0aW9uIChgY2FsbF9yY3VgKS4gVGhpcyBlbnN1cmVzIHRoZSBjb3JyZWN0IFJDVSB1cGRhdGUgb3JkZXIsIHB1Ymxpc2hpbmcgdGhlIG5ldyBkYXRhIGJlZm9yZSBmcmVlaW5nIHRoZSBvbGQuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgbHVya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBoZXJlLiBGb3J0dW5hdGVseSwgaXQgbG9va3MgbGlrZSBgdGJsX21hc2tfYXJyYXlfYWxsb2NgIHVzZXMgYGt6YWxsb2NgIGFuZCBgX19hbGxvY19wZXJjcHVgIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlc2UgZnVuY3Rpb25zIHplcm8taW5pdGlhbGl6ZSB0aGUgbWVtb3J5LiBXZSdyZSBub3QgcmVhZGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhcmUgd2UgY29weWluZyBhbnkgb2YgaXQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHBhZGRpbmcgbGVha3Mgb3IgdW5pbml0aWFsaXplZCBicmFuY2hlcyBlaXRoZXIuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoZSB1c2UtYWZ0ZXItZnJlZSBhbmQgUkNVIGlzc3VlcywgYW5kIGlzIGZ1bGx5IHN1ZmZpY2llbnQuXG5cblRoaXMgaXMgZnVuZGFtZW50YWxseSBhbiBSQ1UgbGlmZXRpbWUgLyBjb25jdXJyZW5jeSBpc3N1ZS4gV2UncmUgdGFsa2luZyBhYm91dCBhIG1lbW9yeSBjb3JydXB0aW9uIGJ1ZywgYnV0IHRoZSBtZW1vcnkgaXMgKmZ1bGx5KiBpbml0aWFsaXplZC5cblxuSGVyZSdzIHRoZSBrZXk6IEtBU0FOIGlzIGFscmVhZHkgb24gdGhlIGpvYiBpbiBzdGFuZGFyZCBrZXJuZWwgYnVpbGRzLiBJdCdzIGhhbmRsaW5nIHRoZSB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWxlIEtNU0FOIGRldGVjdHMgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSByZWFkcy4gSW4gdGhpcyBjYXNlLCB0aGVyZSdzIG5vIG5lZWQgZm9yIEtNU0FOLiBUaGUgZml4IGFkZHJlc3NlcyBhIFVBRiBpc3N1ZSBhcmlzaW5nIGZyb20gUkNVIHN5bmNocm9uaXphdGlvbi9vcmRlcmluZywgYW5kIHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gd29ycnkgYWJvdXQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLlxuXG5IZXJlJ3MgdGhlIHJlYXNvbmluZzpcbjEuICBUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIFJDVSBjYWxsYmFjayBvcmRlciBpbiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvYygpYC5cbjIuICBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBVc2UtQWZ0ZXItRnJlZS9SQ1UgbGlmZXRpbWUgYnVnLlxuMy4gIFRoZSBtYXNrIGFycmF5IG1lbW9yeSBpcyBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBmdW5jdGlvbnMuXG40LiAgTm8gdW5pbml0aWFsaXplZCBkYXRhLCBzdGFjayB2YXJpYWJsZXMsIG9yIGluZm8gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG41LiAgU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBlbm91Z2ggdG8gZmluZCBidWdzIGhlcmU7IEtNU0FOIGlzIG5vdCBuZWVkZWQuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODk5LCJPdXRwdXRUb2tlbnMiOjE2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjUzLjg1MjgzMzkxN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIFJDVSBwb2ludGVyIHB1Ymxpc2hpbmcgc2VxdWVuY2UgaW4gdGJsX21hc2tfYXJyYXlfcmVhbGxvYygpIGJ5IG1vdmluZyBjYWxsX3JjdSgpIGFmdGVyIHJjdV9hc3NpZ25fcG9pbnRlcigpLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHJhY2UgY29uZGl0aW9uIHdoZXJlIG9sZCBtYXNrIGFycmF5IHN0cnVjdHVyZXMgY291bGQgYmUgcmVjbGFpbWVkIHdoaWxlIHN0aWxsIHJlZmVyZW5jZWQuIE1lbW9yeSBhbGxvY2F0aW9ucyBmb3IgbWFza19hcnJheSBhcmUgcGVyZm9ybWVkIHdpdGgga3phbGxvYygpIGFuZCBfX2FsbG9jX3BlcmNwdSgpLCBlbnN1cmluZyBtZW1vcnkgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIHVzZXItc3BhY2UgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBSQ1UgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIFJDVSBwb2ludGVyIHB1Ymxpc2hpbmcgc2VxdWVuY2UgaW4gdGJsX21hc2tfYXJyYXlfcmVhbGxvYygpIGJ5IG1vdmluZyBjYWxsX3JjdSgpIGFmdGVyIHJjdV9hc3NpZ25fcG9pbnRlcigpLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHJhY2UgY29uZGl0aW9uIHdoZXJlIG9sZCBtYXNrIGFycmF5IHN0cnVjdHVyZXMgY291bGQgYmUgcmVjbGFpbWVkIHdoaWxlIHN0aWxsIHJlZmVyZW5jZWQuIE1lbW9yeSBhbGxvY2F0aW9ucyBmb3IgbWFza19hcnJheSBhcmUgcGVyZm9ybWVkIHdpdGgga3phbGxvYygpIGFuZCBfX2FsbG9jX3BlcmNwdSgpLCBlbnN1cmluZyBtZW1vcnkgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIHVzZXItc3BhY2UgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBSQ1UgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8kp7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-06 20:29:20 +0000 UTC FinishedAt: 2026-09-06 21:01:55 +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": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "1b8ad8e5-713a-4733-91c8-113f2b2a66de" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tbl_mask_array_realloc", "tbl_mask_array_add_mask", "tbl_mask_array_del_mask", "ovs_flow_tbl_insert", "ovs_flow_tbl_remove" ], "corpus_urls": [ "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+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGJsX21hc2tfYXJyYXlfcmVhbGxvYyYjMzQ7LAogICAgJiMzNDt0YmxfbWFza19hcnJheV9hZGRfbWFzayYjMzQ7LAogICAgJiMzNDt0YmxfbWFza19hcnJheV9kZWxfbWFzayYjMzQ7LAogICAgJiMzNDtvdnNfZmxvd190YmxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O292c19mbG93X3RibF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb3JyZWN0cyB0aGUgUkNVIHBvaW50ZXIgcHVibGlzaGluZyBzZXF1ZW5jZSBpbiB0YmxfbWFza19hcnJheV9yZWFsbG9jKCkgYnkgbW92aW5nIGNhbGxfcmN1KCkgYWZ0ZXIgcmN1X2Fzc2lnbl9wb2ludGVyKCksIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBjb25kaXRpb24gd2hlcmUgb2xkIG1hc2sgYXJyYXkgc3RydWN0dXJlcyBjb3VsZCBiZSByZWNsYWltZWQgd2hpbGUgc3RpbGwgcmVmZXJlbmNlZC4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBtYXNrX2FycmF5IGFyZSBwZXJmb3JtZWQgd2l0aCBremFsbG9jKCkgYW5kIF9fYWxsb2NfcGVyY3B1KCksIGVuc3VyaW5nIG1lbW9yeSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hlcywgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFJDVSBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBvcmRlcmluZyBpc3N1ZSBpbiBPcGVuIHZTd2l0Y2gmIzM5O3MgbWFzayBhcnJheSByZWFsbG9jYXRpb24gKHRibF9tYXNrX2FycmF5X3JlYWxsb2MpLCBlbnN1cmluZyBvbGQgbWFzayBhcnJheSBtZW1vcnkgaXMgc2NoZWR1bGVkIGZvciBSQ1UgcmVjbGFtYXRpb24gb25seSBhZnRlciB0aGUgbmV3IHBvaW50ZXIgaXMgcHVibGlzaGVkIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBPcGVuIHZTd2l0Y2ggbmV0bGluayBmbG93IG1hbmFnZW1lbnQgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2NTA2ZWE2ZTk3MGJjZTkzZmM2OGQ0Y2IwNjNmZGQ1MGU3NmY4NDNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMTowMDo1OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1xuaW5kZXggNjdkNWI4YzBmZTc5Mi4uMWUwZjlkMTkzZWIwNiAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNcbkBAIC0yNTcsMTEgJiM0MzsyNTcsMTMgQEAgc3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxuIFx0XHRcdGlmIChvdnNsX2RlcmVmZXJlbmNlKG9sZC1cdTAwM2VtYXNrc1tpXSkpXG4gXHRcdFx0XHRuZXctXHUwMDNlbWFza3NbbmV3LVx1MDAzZWNvdW50JiM0MzsmIzQzO10gPSBvbGQtXHUwMDNlbWFza3NbaV07XG4gXHRcdH1cbi1cdFx0Y2FsbF9yY3UoXHUwMDI2b2xkLVx1MDAzZXJjdSwgbWFza19hcnJheV9yY3VfY2IpO1xuIFx0fVxuIFxuIFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRibC1cdTAwM2VtYXNrX2FycmF5LCBuZXcpO1xuIFxuJiM0MztcdGlmIChvbGQpXG4mIzQzO1x0XHRjYWxsX3JjdShcdTAwMjZvbGQtXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGJsX21hc2tfYXJyYXlfcmVhbGxvYyYjMzQ7LAogICAgJiMzNDt0YmxfbWFza19hcnJheV9hZGRfbWFzayYjMzQ7LAogICAgJiMzNDt0YmxfbWFza19hcnJheV9kZWxfbWFzayYjMzQ7LAogICAgJiMzNDtvdnNfZmxvd190YmxfaW5zZXJ0JiMzNDssCiAgICAmIzM0O292c19mbG93X3RibF9yZW1vdmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBvcmRlcmluZyBpc3N1ZSBpbiBPcGVuIHZTd2l0Y2gmIzM5O3MgbWFzayBhcnJheSByZWFsbG9jYXRpb24gKHRibF9tYXNrX2FycmF5X3JlYWxsb2MpLCBlbnN1cmluZyBvbGQgbWFzayBhcnJheSBtZW1vcnkgaXMgc2NoZWR1bGVkIGZvciBSQ1UgcmVjbGFtYXRpb24gb25seSBhZnRlciB0aGUgbmV3IHBvaW50ZXIgaXMgcHVibGlzaGVkIHdpdGggcmN1X2Fzc2lnbl9wb2ludGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBPcGVuIHZTd2l0Y2ggbmV0bGluayBmbG93IG1hbmFnZW1lbnQgY29tbWFuZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2NTA2ZWE2ZTk3MGJjZTkzZmM2OGQ0Y2IwNjNmZGQ1MGU3NmY4NDNiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgNiAyMTowMDo1OCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jCmluZGV4IDY3ZDViOGMwZmU3OTIuLjFlMGY5ZDE5M2ViMDYgMTAwNjQ0Ci0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYwpAQCAtMjU3LDExICYjNDM7MjU3LDEzIEBAIHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSkKIAkJCWlmIChvdnNsX2RlcmVmZXJlbmNlKG9sZC0mZ3Q7bWFza3NbaV0pKQogCQkJCW5ldy0mZ3Q7bWFza3NbbmV3LSZndDtjb3VudCYjNDM7JiM0MztdID0gb2xkLSZndDttYXNrc1tpXTsKIAkJfQotCQljYWxsX3JjdSgmYW1wO29sZC0mZ3Q7cmN1LCBtYXNrX2FycmF5X3JjdV9jYik7CiAJfQogCiAJcmN1X2Fzc2lnbl9wb2ludGVyKHRibC0mZ3Q7bWFza19hcnJheSwgbmV3KTsKIAomIzQzOwlpZiAob2xkKQomIzQzOwkJY2FsbF9yY3UoJmFtcDtvbGQtJmd0O3JjdSwgbWFza19hcnJheV9yY3VfY2IpOwomIzQzOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA0MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUGF0Y2ggVHJpYWdlOiBTeXprYWxsZXIgRnV6emluZyBFdmFsdWF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBsZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGluc3RydWN0aW9ucyBhbmQgYW55IHNhZmV0eSBwcmVjYXV0aW9ucy4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZDsgaXQmIzM5O3MgYSBMaW51eCBrZXJuZWwgY29tbWl0LCBhbmQgdGhleSYjMzk7cmUgYXNraW5nIGZvciBhIGZ1enppbmcgdHJpYWdlIGV2YWx1YXRpb24uIFRoaXMgaXMgc3RhbmRhcmQgc3R1ZmYg4oCTIGtlcm5lbCBtYWludGVuYW5jZSwgc29mdHdhcmUgcXVhbGl0eSBhc3N1cmFuY2UsIGRlZmVuc2l2ZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uIE5vIHJlZCBmbGFncyBoZXJlLiBSaXNrIHNldmVyaXR5PyBCZW5pZ24sIHByYWN0aWNhbGx5IG5vbmUuIFdlJiMzOTtyZSB0YWxraW5nIHNhbmRib3hlZCBkZXZlbG9wZXIgUUEgb3Iga2VybmVsIHRyaWFnZSwgc28gaXQmIzM5O3Mgc2FmZSB0byBwcm9jZWVkLgoKTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIHRoZSBjb21taXQgZGlmZi4gSXQgYXBwZWFycyB0byBiZSBtb2RpZnlpbmcgYG5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNgLiBMZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgaXQgaW4gZGV0YWlsOiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgYWRkaW5nIGFuIGBpZmAgc3RhdGVtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBmdW5jdGlvbiB0byBjYWxsIHRoZSBgcmN1YCBjYWxsYmFjay4KCk5vdywgbGV0JiMzOTtzIHVzZSBvdXIgbW9yZSBhZHZhbmNlZCB0b29scy4gV2UgbmVlZCB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLCBpZGVudGlmeSBwb3RlbnRpYWwgY2FsbGVycyBvZiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AsIGFuZCBjaGVjayByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyByZXF1aXJlcyBhIGRlZXBlciBkaXZlIHRvIGRldGVybWluZSBpZiB0aGlzIGNoYW5nZSBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgY29tcGxleGl0aWVzIG9yIHBvdGVudGlhbCBhcmVhcyBmb3IgZnV6emluZyB0byB1bmNvdmVyIGlzc3VlcyB0aGF0IGFyZSBub3QgaW1tZWRpYXRlbHkgb2J2aW91cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNTpcdFx0fVxuIDIzNjpcdFxuIDIzNzpcdFx0bmV3LVx1MDAzZWNvdW50ID0gMDtcbiAyMzg6XHRcdG5ldy1cdTAwM2VtYXggPSBzaXplO1xuIDIzOTpcdFxuIDI0MDpcdFx0cmV0dXJuIG5ldztcbiAyNDE6XHR9XG4gMjQyOlx0XG4gMjQzOlx0c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxuIDI0NDpcdHtcbiAyNDU6XHRcdHN0cnVjdCBtYXNrX2FycmF5ICpvbGQ7XG4gMjQ2Olx0XHRzdHJ1Y3QgbWFza19hcnJheSAqbmV3O1xuIDI0NzpcdFxuIDI0ODpcdFx0bmV3ID0gdGJsX21hc2tfYXJyYXlfYWxsb2Moc2l6ZSk7XG4gMjQ5Olx0XHRpZiAoIW5ldylcbiAyNTA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjUxOlx0XG4gMjUyOlx0XHRvbGQgPSBvdnNsX2RlcmVmZXJlbmNlKHRibC1cdTAwM2VtYXNrX2FycmF5KTtcbiAyNTM6XHRcdGlmIChvbGQpIHtcbiAyNTQ6XHRcdFx0aW50IGk7XG4gMjU1Olx0XG4gMjU2Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9sZC1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KSB7XG4gMjU3Olx0XHRcdFx0aWYgKG92c2xfZGVyZWZlcmVuY2Uob2xkLVx1MDAzZW1hc2tzW2ldKSlcbiAyNTg6XHRcdFx0XHRcdG5ldy1cdTAwM2VtYXNrc1tuZXctXHUwMDNlY291bnQmIzQzOyYjNDM7XSA9IG9sZC1cdTAwM2VtYXNrc1tpXTtcbiAyNTk6XHRcdFx0fVxuIDI2MDpcdFx0fVxuIDI2MTpcdFxuIDI2MjpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRibC1cdTAwM2VtYXNrX2FycmF5LCBuZXcpO1xuIDI2MzpcdFxuIDI2NDpcdFx0aWYgKG9sZClcbiAyNjU6XHRcdFx0Y2FsbF9yY3UoXHUwMDI2b2xkLVx1MDAzZXJjdSwgbWFza19hcnJheV9yY3VfY2IpO1xuIDI2NjpcdFxuIDI2NzpcdFx0cmV0dXJuIDA7XG4gMjY4Olx0fVxuIDI2OTpcdFxuIDI3MDpcdHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfYWRkX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcbiAyNzE6XHRcdFx0XHRcdCAgIHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcbiAyNzI6XHR7XG4gMjczOlx0XHRzdHJ1Y3QgbWFza19hcnJheSAqbWEgPSBvdnNsX2RlcmVmZXJlbmNlKHRibC1cdTAwM2VtYXNrX2FycmF5KTtcbiAyNzQ6XHRcdGludCBlcnIsIG1hX2NvdW50ID0gUkVBRF9PTkNFKG1hLVx1MDAzZWNvdW50KTtcbiAyNzU6XHRcbiAyNzY6XHRcdGlmIChtYV9jb3VudCBcdTAwM2U9IG1hLVx1MDAzZW1heCkge1xuIDI3NzpcdFx0XHRlcnIgPSB0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXHUwMDNlbWF4ICYjNDM7XG4gMjc4Olx0XHRcdFx0XHRcdFx0ICBNQVNLX0FSUkFZX1NJWkVfTUlOKTtcbiAyNzk6XHRcdFx0aWYgKGVycilcbiAyODA6XHRcdFx0XHRyZXR1cm4gZXJyO1xuIDI4MTpcdFxuIDI4MjpcdFx0XHRtYSA9IG92c2xfZGVyZWZlcmVuY2UodGJsLVx1MDAzZW1hc2tfYXJyYXkpO1xuIDI4MzpcdFx0fSBlbHNlIHtcbiAyODQ6XHRcdFx0LyogT24gZXZlcnkgYWRkIG9yIGRlbGV0ZSB3ZSBuZWVkIHRvIHJlc2V0IHRoZSBjb3VudGVycyBzb1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzNDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBpbiBPcGVuIHZTd2l0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYC4gTXkgZmlyc3QgbW92ZSBpcyB0byBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgdGhhdCBmdW5jdGlvbi4gVGhhdCYjMzk7bGwgZ2l2ZSBtZSBhIGRpcmVjdCBsaW5lIG9mIHNpZ2h0IGludG8gdGhlIGNyaXRpY2FsIGFyZWFzIHdoZXJlIG1lbW9yeSByZS1hbGxvY2F0aW9uIGlzIGhhcHBlbmluZy4gU2ltdWx0YW5lb3VzbHksIEkgd2FudCB0byBtYXAgdGhvc2UgY2FsbCBzaXRlcyBvbnRvIHRoZSByZWxldmFudCBPcGVuIHZTd2l0Y2ggZnVuY3Rpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbmFsIGNvbnRleHQgaXMgY3J1Y2lhbCBoZXJlLiBBcmUgd2UgdGFsa2luZyBhYm91dCBmbG93IHRhYmxlIG9wZXJhdGlvbnM/IFBhY2tldCBwcm9jZXNzaW5nPyBTb21ldGhpbmcgZWxzZSBlbnRpcmVseT8KCk9uY2UgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHksIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoaXMgYWN0aXZpdHkgd2l0aCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zLiBXaGF0IGZsYWdzIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgdGhpcyBjb2RlIHBhdGggdG8gZXZlbiBiZSBhY3RpdmU/IEFyZSB0aGVyZSBwZXJmb3JtYW5jZSBvciBzZWN1cml0eSBpbXBsaWNhdGlvbnMgYmFzZWQgb24gY29uZmlndXJhdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcy4KCkZpbmFsbHksIEkmIzM5O2xsIHNlYXJjaCB0aGUgYG5ldC9vcGVudnN3aXRjaGAgZGlyZWN0b3J5IGZvciBhbGwgaW5zdGFuY2VzIG9mIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBhbmQgYW55IG90aGVyIHJlbGF0ZWQgZmxvdyB0YWJsZSBmdW5jdGlvbnMuIFRoaXMgY29tcHJlaGVuc2l2ZSBzZWFyY2ggc2hvdWxkIHVuY292ZXIgYW55IG90aGVyIGhpbnRzIHRoYXQgbWF5IGNvbnRyaWJ1dGUgdG8gbXkgY29tcHJlaGVuc2lvbiBvZiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AmIzM5O3MgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGJsX21hc2tfYXJyYXlfcmVhbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTIxNj1zdGF0aWMgc3RydWN0IG1hc2tfYXJyYXkgKnRibF9tYXNrX2FycmF5X2FsbG9jKGludCBzaXplKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMjQyLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzoyNDM6c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNDQte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MjcwPXN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfYWRkX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTI3Ni1cdGlmIChtYV9jb3VudCBcdTAwM2U9IG1hLVx1MDAzZW1heCkge1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzoyNzc6XHRcdGVyciA9IHRibF9tYXNrX2FycmF5X3JlYWxsb2ModGJsLCBtYS1cdTAwM2VtYXggJiM0Mztcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMjc4LVx0XHRcdFx0XHRcdCAgTUFTS19BUlJBWV9TSVpFX01JTik7XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz0yOTg9c3RhdGljIHZvaWQgdGJsX21hc2tfYXJyYXlfZGVsX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTMyMy1cdCAgICBtYV9jb3VudCBcdTAwM2M9IChtYS1cdTAwM2VtYXggLyAzKSlcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MzI0Olx0XHR0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXHUwMDNlbWF4IC8gMik7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTMyNS1cdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDYyCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmc6CgoqKkV4YW1pbmluZyBgbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY2AgZm9yIE1hc2sgTWFuYWdlbWVudCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyBgdGJsX21hc2tfYXJyYXlfYWRkX21hc2tgIGFuZCBgdGJsX21hc2tfYXJyYXlfZGVsX21hc2tgLiBJJiMzOTt2ZSBnb3QgdG8gdHJhY2UgdGhlaXIgdXNhZ2Ugd2l0aGluIGBuZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jYC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlICpjYWxsZWQgZnJvbSogd2lsbCBiZSBrZXkuIFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBwaWN0dXJlIG9mIGhvdyB0aGVzZSBtYXNrIG1hbmFnZW1lbnQgcm91dGluZXMgZml0IGludG8gdGhlIG92ZXJhbGwgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8sIG9yIGFyZSB0cmlnZ2VyZWQgYnksIGZsb3cgdGFibGUgb3BlcmF0aW9ucy4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YmxfbWFza19hcnJheV8oYWRkfGRlbClfbWFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTI0Mz1zdGF0aWMgaW50IHRibF9tYXNrX2FycmF5X3JlYWxsb2Moc3RydWN0IGZsb3dfdGFibGUgKnRibCwgaW50IHNpemUpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNjktXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjI3MDpzdGF0aWMgaW50IHRibF9tYXNrX2FycmF5X2FkZF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTI3MS1cdFx0XHRcdCAgIHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTI5Ny1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6Mjk4OnN0YXRpYyB2b2lkIHRibF9tYXNrX2FycmF5X2RlbF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTI5OS1cdFx0XHRcdCAgICBzdHJ1Y3Qgc3dfZmxvd19tYXNrICptYXNrKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MzMxPXN0YXRpYyB2b2lkIGZsb3dfbWFza19yZW1vdmUoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3dfbWFzayAqbWFzaylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTM0MS1cdFx0aWYgKCFtYXNrLVx1MDAzZXJlZl9jb3VudClcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MzQyOlx0XHRcdHRibF9tYXNrX2FycmF5X2RlbF9tYXNrKHRibCwgbWFzayk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTM0My1cdH1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTEwMDY9c3RhdGljIGludCBmbG93X21hc2tfaW5zZXJ0KHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIHN0cnVjdCBzd19mbG93ICpmbG93LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTAyMC1cdFx0LyogQWRkIG1hc2sgdG8gbWFzay1saXN0LiAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzoxMDIxOlx0XHRpZiAodGJsX21hc2tfYXJyYXlfYWRkX21hc2sodGJsLCBtYXNrKSkge1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0xMDIyLVx0XHRcdGtmcmVlKG1hc2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgRmxvdyBNYXNrIEluc2VydGlvbiwgUmVtb3ZhbCwgYW5kIEZsb3cgVGFibGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgcGF0aHMgcmVsYXRlZCB0byBgZmxvd19tYXNrX2luc2VydGAsIGBmbG93X21hc2tfcmVtb3ZlYCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgZmxvdyB0YWJsZSBvcGVyYXRpb25zLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgZGF0YSBwYXRoLiBJJiMzOTtsbCBsaWtlbHkgc3RhcnQgYnkgdHJhY2luZyB0aGUgZnVuY3Rpb24gY2FsbHMsIHByb2JhYmx5IHVzaW5nIGEgdG9vbCBsaWtlIGBwZXJmYCBvciBgZ2RiYCwgdG8gc2VlIGhvdyB0aGVzZSBtYXNrIG9wZXJhdGlvbnMgYXJlIHRyaWdnZXJlZCBhbmQgd2hhdCBvdGhlciBmdW5jdGlvbnMgdGhleSBjYWxsLiBJIHdhbnQgdG8gYnVpbGQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBjb250ZXh0IGluIHdoaWNoIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCwgcGFydGljdWxhcmx5IGxvb2tpbmcgZm9yIGFueSBsb2NraW5nIGNvbnRlbnRpb24sIGluZWZmaWNpZW50IGRhdGEgc3RydWN0dXJlcywgb3IgdW5leHBlY3RlZCBiZWhhdmlvcnMgaW4gdGhlIHByZXNlbmNlIG9mIGhpZ2ggdHJhZmZpYyB2b2x1bWUgb3IgY29tcGxleCBmbG93IHJ1bGVzLiBUaGlzIHJlcXVpcmVzIGEgZGVlcCB1bmRlcnN0YW5kaW5nIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcywgc3VjaCBhcyB0aGUgZmxvdyB0YWJsZSYjMzk7cyBpbXBsZW1lbnRhdGlvbiAoaGFzaCB0YWJsZSwgcmFkaXggdHJlZSwgZXRjLikgYW5kIGhvdyBtYXNrcyBhcmUgdXNlZCB0byBvcHRpbWl6ZSBmbG93IGxvb2t1cHMuIEkmIzM5O2xsIGJlIGZvY3VzZWQgb24gYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgbG9va3VwIHBlcmZvcm1hbmNlIG9yIHRoZSBhdG9taWNpdHkgb2YgZmxvdyB0YWJsZSB1cGRhdGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmbG93X21hc2tfKGluc2VydHxyZW1vdmUpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9Mjk4PXN0YXRpYyB2b2lkIHRibF9tYXNrX2FycmF5X2RlbF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0zMzAtLyogUmVtb3ZlICYjMzk7bWFzayYjMzk7IGZyb20gdGhlIG1hc2sgbGlzdCwgaWYgaXQgaXMgbm90IG5lZWRlZCBhbnkgbW9yZS4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MzMxOnN0YXRpYyB2b2lkIGZsb3dfbWFza19yZW1vdmUoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3dfbWFzayAqbWFzaylcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMzMyLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTQ1OT1zdGF0aWMgdm9pZCB0YWJsZV9pbnN0YW5jZV9mbG93X2ZyZWUoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNDcxLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo0NzI6XHRmbG93X21hc2tfcmVtb3ZlKHRhYmxlLCBmbG93LVx1MDAzZW1hc2spO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy00NzMtfVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9OTg3PXN0YXRpYyBzdHJ1Y3Qgc3dfZmxvd19tYXNrICpmbG93X21hc2tfZmluZChjb25zdCBzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTAwNS0vKiBBZGQgJiMzOTttYXNrJiMzOTsgaW50byB0aGUgbWFzayBsaXN0LCBpZiBpdCBpcyBub3QgYWxyZWFkeSB0aGVyZS4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MTAwNjpzdGF0aWMgaW50IGZsb3dfbWFza19pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3cgKmZsb3csXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwMDctXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTEwODE9aW50IG92c19mbG93X3RibF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwODUtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjEwODY6XHRlcnIgPSBmbG93X21hc2tfaW5zZXJ0KHRhYmxlLCBmbG93LCBtYXNrKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTA4Ny1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA2IDIxOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NzQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBPcGVuIHZTd2l0Y2gqKgoKQWxyaWdodCwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGdvZXMgbGlrZSB0aGlzLiBNeSBicmFpbiwgbGlrZWx5IGluIHJlc3BvbnNlIHRvIGEgcHJvYmxlbSBvciB0YXNrIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoIGNvbmZpZ3VyYXRpb24sIGltbWVkaWF0ZWx5IHN1Z2dlc3RzLCAmIzM0O0xldCYjMzk7cyBkaWcgaW50byB0aGUgS2NvbmZpZy4mIzM0OyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG5lZWQgZm9yIGl0LiBJIGtub3cgdGhhdCB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgYW5kIGFzc29jaWF0ZWQgcHJvamVjdHMuIE15IGludGVybmFsIG1vbm9sb2d1ZSBjb250aW51ZXM6IFRoaXMgbGlrZWx5IG1lYW5zIEkmIzM5O20gbG9va2luZyB0byB1bmRlcnN0YW5kIG9yIG1vZGlmeSBzcGVjaWZpYyBidWlsZCBvcHRpb25zLCBmZWF0dXJlIHRvZ2dsZXMsIG9yIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaC4gSXQgY291bGQgYmUgZm9yIGEgY3VzdG9tIGJ1aWxkLCB0cm91Ymxlc2hvb3RpbmcgYSBjb25maWd1cmF0aW9uIGlzc3VlLCBvciBtYXliZSBJJiMzOTttIHdvcmtpbmcgb24gYSBuZXcgZmVhdHVyZSBhbmQgbmVlZCB0byBwcm9wZXJseSBpbnRlZ3JhdGUgaXQgaW50byB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0uIFRoZXJlJiMzOTtzIGFuIHVuZGVybHlpbmcgYXNzdW1wdGlvbiB0aGF0IHRoZSBLY29uZmlnIGhvbGRzIHRoZSBhbnN3ZXJzLCBhdCBsZWFzdCB0aGUgc3RhcnRpbmcgcG9pbnQsIHRvIHdoYXQgSSYjMzk7bSB0cnlpbmcgdG8gYWNoaWV2ZS4gSXQgcmVwcmVzZW50cyB0aGUgY2VudHJhbCBzb3VyY2Ugb2YgdHJ1dGggZm9yIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiwgYW5kIEkgbmVlZCB0byBjb25zdWx0IGl0LiBJIGFtIGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBvcHRpb25zLCB0aGVpciBkZXBlbmRlbmNpZXMsIGFuZCBwcm9iYWJseSB0aGUgZGVmYXVsdCB2YWx1ZXMgYW5kIGhlbHAgdGV4dCB0byB1bmRlcnN0YW5kIHdoYXQgaXMgYXZhaWxhYmxlIGFuZCBob3cgSSBzaG91bGQgbW9kaWZ5IGl0LCB0byBhY2hpZXZlIHRoZSBvYmplY3RpdmUgaW4gbWluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnOjY6Y29uZmlnIE9QRU5WU1dJVENIXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL01ha2VmaWxlLTUtXG5uZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfT1BFTlZTV0lUQ0gpICYjNDM7PSBvcGVudnN3aXRjaC5vXG5uZXQvb3BlbnZzd2l0Y2gvTWFrZWZpbGUtNy1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yODI0PXN0YXRpYyBpbnQgX19pbml0IGRwX2luaXQodm9pZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODY0LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6Mjg2NTpcdGRyb3BfcmVhc29uc19yZWdpc3Rlcl9zdWJzeXMoU0tCX0RST1BfUkVBU09OX1NVQlNZU19PUEVOVlNXSVRDSCxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4NjYtXHRcdFx0XHQgICAgIFx1MDAyNmRyb3BfcmVhc29uX2xpc3Rfb3ZzKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yODg3PXN0YXRpYyB2b2lkIGRwX2NsZWFudXAodm9pZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODkyLVx0dW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKFx1MDAyNm92c19uZXRfb3BzKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI4OTM6XHRkcm9wX3JlYXNvbnNfdW5yZWdpc3Rlcl9zdWJzeXMoU0tCX0RST1BfUkVBU09OX1NVQlNZU19PUEVOVlNXSVRDSCk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODk0LVx0cmN1X2JhcnJpZXIoKTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oLTUtXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oOjY6I2lmbmRlZiBPUEVOVlNXSVRDSF9EUk9QX0hcbm5ldC9vcGVudnN3aXRjaC9kcm9wLmg6NzojZGVmaW5lIE9QRU5WU1dJVENIX0RST1BfSFxubmV0L29wZW52c3dpdGNoL2Ryb3AuaC04LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tLVxubmV0L29wZW52c3dpdGNoL2Ryb3AuaD0yNT1lbnVtIG92c19kcm9wX3JlYXNvbiB7XG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oOjI2Olx0X19PVlNfRFJPUF9SRUFTT04gPSBTS0JfRFJPUF9SRUFTT05fU1VCU1lTX09QRU5WU1dJVENIIFx1MDAzY1x1MDAzY1xubmV0L29wZW52c3dpdGNoL2Ryb3AuaC0yNy1cdFx0XHRcdFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfU0hJRlQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Ryb3AuaD0zNj1vdnNfa2ZyZWVfc2tiX3JlYXNvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBlbnVtIG92c19kcm9wX3JlYXNvbiByZWFzb24pXG4tLVxubmV0L29wZW52c3dpdGNoL2Ryb3AuaC00MC1cbm5ldC9vcGVudnN3aXRjaC9kcm9wLmg6NDE6I2VuZGlmIC8qIE9QRU5WU1dJVENIX0RST1BfSCAqL1xuLS1cbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oLTQtXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaDo1OiNpZiAhZGVmaW5lZChfVFJBQ0VfT1BFTlZTV0lUQ0hfSCkgfHwgZGVmaW5lZChUUkFDRV9IRUFERVJfTVVMVElfUkVBRClcbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oOjY6I2RlZmluZSBfVFJBQ0VfT1BFTlZTV0lUQ0hfSFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmgtNy1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaD04Mj1UUkFDRV9FVkVOVChvdnNfZHBfdXBjYWxsLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oLTE1MC1cbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oOjE1MTojZW5kaWYgLyogX1RSQUNFX09QRU5WU1dJVENIX0ggKi9cbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oLTE1Mi1cbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmM9OTQ9c3RhdGljIHZvaWQgZG9fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmMtMTAyLVx0bmV0ZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2PSB+SUZGX1RYX1NLQl9TSEFSSU5HO1xubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jOjEwMzpcdG5ldGRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9MSVZFX0FERFJfQ0hBTkdFIHwgSUZGX09QRU5WU1dJVENIIHxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1pbnRlcm5hbF9kZXYuYy0xMDQtXHRcdFx0ICAgICAgSUZGX05PX1FVRVVFO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODUzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBDT05GSUdfT1BFTlZTV0lUQ0hgLiBUaGUgYmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzIHdpdGggdGhlc2Uga2luZHMgb2YgdGhpbmdzLCBpcyB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSByZWxldmFudCBkaXJlY3RvcnkuIEluIHRoaXMgY2FzZSwgdGhhdCYjMzk7cyBgbmV0L29wZW52c3dpdGNoL0tjb25maWdgLiBJJiMzOTtsbCBvcGVuIHRoYXQgdXAgYW5kIHRha2UgYSBsb29rLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGxvZ2ljLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIGZlYXR1cmVzIG9yIG1vZHVsZXMsIGFuZCBtYXliZSBldmVuIHNvbWUgcGxhdGZvcm0tc3BlY2lmaWMgcmVxdWlyZW1lbnRzLiBUaGlzIHNob3VsZCB0ZWxsIG1lIGV2ZXJ5dGhpbmcgSSBuZWVkIHRvIGtub3cgYWJvdXQgd2hhdCBuZWVkcyB0byBiZSBlbmFibGVkIG9yIHByZXNlbnQgaW4gdGhlIHN5c3RlbSBmb3IgYENPTkZJR19PUEVOVlNXSVRDSGAgdG8gYmUgYSB2YWxpZCBjb25maWd1cmF0aW9uIG9wdGlvbiBhbmQgdG8gYnVpbGQgY29ycmVjdGx5LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgT3BlbiB2U3dpdGNoXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBPUEVOVlNXSVRDSFxuICAgNzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoXCYjMzQ7XG4gICA4Olx0XHRkZXBlbmRzIG9uIElORVRcbiAgIDk6XHRcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxuICAxMDpcdFx0XHQgICAoTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiAoKCFORl9ERUZSQUdfSVBWNiB8fCBORl9ERUZSQUdfSVBWNikgXHUwMDI2XHUwMDI2IFxcXG4gIDExOlx0XHRcdFx0XHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXHUwMDI2XHUwMDI2IFxcXG4gIDEyOlx0XHRcdFx0XHQgICAgICghTkVURklMVEVSX0NPTk5DT1VOVCB8fCBORVRGSUxURVJfQ09OTkNPVU5UKSkpXG4gIDEzOlx0XHRkZXBlbmRzIG9uIFBTQU1QTEUgfHwgIVBTQU1QTEVcbiAgMTQ6XHRcdHNlbGVjdCBNUExTXG4gIDE1Olx0XHRzZWxlY3QgTkVUX0NSQzMyQ1xuICAxNjpcdFx0c2VsZWN0IE5FVF9NUExTX0dTT1xuICAxNzpcdFx0c2VsZWN0IERTVF9DQUNIRVxuICAxODpcdFx0c2VsZWN0IE5FVF9OU0hcbiAgMTk6XHRcdHNlbGVjdCBORl9DT05OVFJBQ0tfT1ZTIGlmIE5GX0NPTk5UUkFDS1xuICAyMDpcdFx0c2VsZWN0IE5GX05BVF9PVlMgaWYgTkZfTkFUXG4gIDIxOlx0XHRoZWxwXG4gIDIyOlx0XHQgIE9wZW4gdlN3aXRjaCBpcyBhIG11bHRpbGF5ZXIgRXRoZXJuZXQgc3dpdGNoIHRhcmdldGVkIGF0IHZpcnR1YWxpemVkXG4gIDIzOlx0XHQgIGVudmlyb25tZW50cy4gIEluIGFkZGl0aW9uIHRvIHN1cHBvcnRpbmcgYSB2YXJpZXR5IG9mIGZlYXR1cmVzXG4gIDI0Olx0XHQgIGV4cGVjdGVkIGluIGEgdHJhZGl0aW9uYWwgaGFyZHdhcmUgc3dpdGNoLCBpdCBlbmFibGVzIGZpbmUtZ3JhaW5lZFxuICAyNTpcdFx0ICBwcm9ncmFtbWF0aWMgZXh0ZW5zaW9uIGFuZCBmbG93LWJhc2VkIGNvbnRyb2wgb2YgdGhlIG5ldHdvcmsuICBUaGlzXG4gIDI2Olx0XHQgIGNvbnRyb2wgaXMgdXNlZnVsIGluIGEgd2lkZSB2YXJpZXR5IG9mIGFwcGxpY2F0aW9ucyBidXQgaXNcbiAgMjc6XHRcdCAgcGFydGljdWxhcmx5IGltcG9ydGFudCBpbiBtdWx0aS1zZXJ2ZXIgdmlydHVhbGl6YXRpb24gZGVwbG95bWVudHMsXG4gIDI4Olx0XHQgIHdoaWNoIGFyZSBvZnRlbiBjaGFyYWN0ZXJpemVkIGJ5IGhpZ2hseSBkeW5hbWljIGVuZHBvaW50cyBhbmQgdGhlXG4gIDI5Olx0XHQgIG5lZWQgdG8gbWFpbnRhaW4gbG9naWNhbCBhYnN0cmFjdGlvbnMgZm9yIG11bHRpcGxlIHRlbmFudHMuXG4gIDMwOlx0XG4gIDMxOlx0XHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XG4gIDMyOlx0XHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXG4gIDMzOlx0XHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcbiAgMzQ6XHRcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXG4gIDM1Olx0XG4gIDM2Olx0XHQgIFNlZSBodHRwOi8vb3BlbnZzd2l0Y2gub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB1c2Vyc3BhY2VcbiAgMzc6XHRcdCAgdXRpbGl0aWVzLlxuICAzODpcdFxuICAzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlXG4gIDQwOlx0XHQgIGNhbGxlZCBvcGVudnN3aXRjaC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODY5MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYW4gUkNVIEJ1ZyBGaXggaW4gT3BlbiB2U3dpdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgbG9jYWxpemVkIHdpdGhpbiB0aGlzIGZpbGUuIEl0JiMzOTtzIGNhbGxlZCBieSBgdGJsX21hc2tfYXJyYXlfYWRkX21hc2tgIGFuZCBgdGJsX21hc2tfYXJyYXlfZGVsX21hc2tgLCB3aGljaCBhcmUga2V5IGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdGhlIGZsb3cgdGFibGUmIzM5O3MgbWFza3MuIFRoYXQmIzM5O3Mgb3VyIGluaXRpYWwgY29udGV4dC4KCkxvb2tpbmcgYXQgdGhlIHBhdGNoLCB0aGUgY2hhbmdlIHNlZW1zIHNpbXBsZSBvbiB0aGUgc3VyZmFjZSwgYnV0IGl0JiMzOTtzIGNyaXRpY2FsbHkgaW1wb3J0YW50LiBUaGUgYGNhbGxfcmN1YCBjYWxsLCB3aGljaCBzY2hlZHVsZXMgdGhlIG9sZCBtYXNrIGFycmF5IGZvciByZWNsYW1hdGlvbiB2aWEgUkNVLCB3YXMgKnByZXZpb3VzbHkqIHBsYWNlZCAqYmVmb3JlKiB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIFRoaXMgaXMgYSBjbGFzc2ljIFJDVSBvcmRlcmluZyBpc3N1ZS4gSXQmIzM5O3MgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgaGF6YXJkLgoKSGVyZSYjMzk7cyB0aGUgcHJvYmxlbTogQnkgc2NoZWR1bGluZyB0aGUgYG9sZGAgYXJyYXkgZm9yIFJDVSByZWNsYW1hdGlvbiAqYmVmb3JlKiB1cGRhdGluZyBgdGJsLSZndDttYXNrX2FycmF5YCB0byBwb2ludCB0byB0aGUgYG5ld2AgYXJyYXksIHRoZXJlJiMzOTtzIGEgd2luZG93IHdoZXJlIHJlYWRlcnMgb2YgYHRibC0mZ3Q7bWFza19hcnJheWAgY291bGQgcG90ZW50aWFsbHkgYWNjZXNzIHRoZSBgb2xkYCBhcnJheSBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgc3RhcnRlZCwgb3Igd29yc2UsICp3aGlsZSogaXQmIzM5O3MgYmVpbmcgZnJlZWQuIFRoYXQgaXMsIHRoZSBvbGQgYXJyYXkgY291bGQgYmUgcmVjbGFpbWVkIGJlZm9yZSByZWFkZXJzIGhhZCB0aGUgb3Bwb3J0dW5pdHkgdG8gYWNjZXNzIGl0LiBUaGlzIHdvdWxkIGJlIGEgbmFzdHkgbWVtb3J5IGNvcnJ1cHRpb24gYnVnLgoKTW92aW5nIGBjYWxsX3JjdWAgKmFmdGVyKiB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcmAgY29ycmVjdHMgdGhpcyBvcmRlcmluZy4gTm93LCB3ZSYjMzk7cmUgZ3VhcmFudGVlZCB0aGF0IGFueSByZWFkZXIgYWNjZXNzaW5nIGB0YmwtJmd0O21hc2tfYXJyYXlgIHdpbGwgc2VlIHRoZSBgbmV3YCBhcnJheSAqYmVmb3JlKiB0aGUgYG9sZGAgYXJyYXkgaXMgcmVjbGFpbWVkLiBUaGlzIGlzIHRoZSBjb3JyZWN0LCBzYWZlIHdheSB0byBoYW5kbGUgUkNVIHVwZGF0ZXMuCgpOb3csIGlzIHRoaXMgYnVnIHJlYWNoYWJsZT8gQWJzb2x1dGVseS4gT3BlbiB2U3dpdGNoIGlzIGEgY2VudHJhbCBjb21wb25lbnQsIGFuZCBpdHMgZnVuY3Rpb25hbGl0eSBpcyBleHBvc2VkIHRocm91Z2ggZ2VuZXJpYyBuZXRsaW5rLiBUaGUgYE9WU19GTE9XX0NNRF8qYCBmYW1pbHkgb2YgY29tbWFuZHMsIGFsb25nIHdpdGggZnVuY3Rpb25zIGxpa2UgYG92c19mbG93X3RibF9pbnNlcnRgIGFuZCBgb3ZzX2Zsb3dfdGJsX3JlbW92ZWAsIHByb3ZpZGUgdGhlIGVudHJ5IHBvaW50cy4gQW5kLCBvZiBjb3Vyc2UsIHN5emthbGxlciBpcyBjb25zdGFudGx5IGhhbW1lcmluZyB0aGVzZSBpbnRlcmZhY2VzIHdpdGggdmFyaW91cyBmbG93IG9wZXJhdGlvbnMsIHdoaWNoIHdvdWxkIGVhc2lseSB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLiBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiB0aGVyZSYjMzk7cyBhbiBleGlzdGluZyBzeXprYWxsZXIgcmVwb3J0IG9uIHRoaXMsIHRvby4KVG8gZW5zdXJlIHRoaXMgaXMgc291bmQsIEkgbmVlZCB0byBsb29rIGF0IG90aGVyIGV4cG9ydGVkIGZ1bmN0aW9ucyBpbiBgZmxvd190YWJsZS5oYCBhbmQgYGZsb3dfdGFibGUuY2AgdG8gaWRlbnRpZnkgb3RoZXIgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBpbnRvIHRoZSBjb2RlIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgaGF6YXJkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3ZzX2Zsb3dfdGJsXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xNjU9c3RhdGljIHZvaWQgZGVzdHJveV9kcF9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTY4LVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTY5Olx0b3ZzX2Zsb3dfdGJsX2Rlc3Ryb3koXHUwMDI2ZHAtXHUwMDNldGFibGUpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTcwLVx0ZnJlZV9wZXJjcHUoZHAtXHUwMDNlc3RhdHNfcGVyY3B1KTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0yNDU9dm9pZCBvdnNfZHBfcHJvY2Vzc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjYxLVx0LyogTG9vayB1cCBmbG93LiAqL1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjYyOlx0ZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfc3RhdHMoXHUwMDI2ZHAtXHUwMDNldGFibGUsIGtleSwgc2tiX2dldF9oYXNoKHNrYiksXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yNjMtXHRcdFx0XHRcdCBcdTAwMjZuX21hc2tfaGl0LCBcdTAwMjZuX2NhY2hlX2hpdCk7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9NzU3PXN0YXRpYyB2b2lkIGdldF9kcF9zdGF0cyhjb25zdCBzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgb3ZzX2RwX3N0YXRzICpzdGF0cyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03NjMtXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzo3NjQ6XHRzdGF0cy1cdTAwM2VuX2Zsb3dzID0gb3ZzX2Zsb3dfdGJsX2NvdW50KFx1MDAyNmRwLVx1MDAzZXRhYmxlKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjc2NTpcdG1lZ2Ffc3RhdHMtXHUwMDNlbl9tYXNrcyA9IG92c19mbG93X3RibF9udW1fbWFza3MoXHUwMDI2ZHAtXHUwMDNldGFibGUpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtNzY2LVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEwMDA9c3RhdGljIGludCBvdnNfZmxvd19jbWRfbmV3KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA4MC1cdGlmIChvdnNfaWRlbnRpZmllcl9pc191ZmlkKFx1MDAyNm5ld19mbG93LVx1MDAzZWlkKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEwODE6XHRcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoXHUwMDI2ZHAtXHUwMDNldGFibGUsIFx1MDAyNm5ld19mbG93LVx1MDAzZWlkKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEwODItXHRpZiAoIWZsb3cpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMDgzOlx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cChcdTAwMjZkcC1cdTAwM2V0YWJsZSwga2V5KTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEwODQtXHRpZiAobGlrZWx5KCFmbG93KSkge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEwODctXHRcdC8qIFB1dCBmbG93IGluIGJ1Y2tldC4gKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEwODg6XHRcdGVycm9yID0gb3ZzX2Zsb3dfdGJsX2luc2VydChcdTAwMjZkcC1cdTAwM2V0YWJsZSwgbmV3X2Zsb3csIFx1MDAyNm1hc2spO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA4OS1cdFx0aWYgKHVubGlrZWx5KGVycm9yKSkge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTExMjEtXHRcdFx0aWYgKG92c19pZGVudGlmaWVyX2lzX2tleShcdTAwMjZmbG93LVx1MDAzZWlkKSlcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjExMjI6XHRcdFx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChcdTAwMjZkcC1cdTAwM2V0YWJsZSxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTExMjMtXHRcdFx0XHRcdFx0XHRcdCBcdTAwMjZtYXRjaCk7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTI3MD1zdGF0aWMgaW50IG92c19mbG93X2NtZF9zZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzE2LVx0aWYgKHVmaWRfcHJlc2VudClcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEzMTc6XHRcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoXHUwMDI2ZHAtXHUwMDNldGFibGUsIFx1MDAyNnNmaWQpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTMxOC1cdGVsc2Vcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEzMTk6XHRcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KFx1MDAyNmRwLVx1MDAzZXRhYmxlLCBcdTAwMjZtYXRjaCk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzIwLVx0aWYgKHVubGlrZWx5KCFmbG93KSkge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEzNzM9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQwOS1cdGlmICh1ZmlkX3ByZXNlbnQpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDEwOlx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF91ZmlkKFx1MDAyNmRwLVx1MDAzZXRhYmxlLCBcdTAwMjZ1ZmlkKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0MTEtXHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDEyOlx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChcdTAwMjZkcC1cdTAwM2V0YWJsZSwgXHUwMDI2bWF0Y2gpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQxMy1cdGlmICghZmxvdykge1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE0MzI9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZGVsKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ2NC1cdGlmICh1bmxpa2VseSghYVtPVlNfRkxPV19BVFRSX0tFWV0gXHUwMDI2XHUwMDI2ICF1ZmlkX3ByZXNlbnQpKSB7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDY1Olx0XHRlcnIgPSBvdnNfZmxvd190YmxfZmx1c2goXHUwMDI2ZHAtXHUwMDNldGFibGUpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ2Ni1cdFx0Z290byB1bmxvY2s7XG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ2OS1cdGlmICh1ZmlkX3ByZXNlbnQpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDcwOlx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF91ZmlkKFx1MDAyNmRwLVx1MDAzZXRhYmxlLCBcdTAwMjZ1ZmlkKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0NzEtXHRlbHNlXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDcyOlx0XHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChcdTAwMjZkcC1cdTAwM2V0YWJsZSwgXHUwMDI2bWF0Y2gpO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ3My1cdGlmICh1bmxpa2VseSghZmxvdykpIHtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDk3LVx0ICogdGhlIGZsb3ctXHUwMDNlbWFzayB0aGF0IGNhbiBiZSBzY2hlZHVsZWQgdG8gYmUgZnJlZWQgYnkgdGhlXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDk4Olx0ICogb3ZzX2Zsb3dfdGJsX3JlbW92ZSgpIGFuZCB3ZSYjMzk7cmUgbm90IGhvbGRpbmcgdGhlIFJDVSByZWFkIGxvY2suXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDk5LVx0ICovXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNTAwOlx0b3ZzX2Zsb3dfdGJsX3JlbW92ZShcdTAwMjZkcC1cdTAwM2V0YWJsZSwgZmxvdyk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNTAxLVx0b3ZzX3VubG9jaygpO1xuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE1MTM9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTU0MS1cdFx0b2JqID0gY2ItXHUwMDNlYXJnc1sxXTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE1NDI6XHRcdGZsb3cgPSBvdnNfZmxvd190YmxfZHVtcF9uZXh0KHRpLCBcdTAwMjZidWNrZXQsIFx1MDAyNm9iaik7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNTQzLVx0XHRpZiAoIWZsb3cpXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTYyND1zdGF0aWMgaW50IG92c19kcF9jbWRfZmlsbF9pbmZvKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTY1Ny1cdGlmIChubGFfcHV0X3UzMihza2IsIE9WU19EUF9BVFRSX01BU0tTX0NBQ0hFX1NJWkUsXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNjU4Olx0XHRcdG92c19mbG93X3RibF9tYXNrc19jYWNoZV9zaXplKFx1MDAyNmRwLVx1MDAzZXRhYmxlKSkpXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNjU5LVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xNzY2PXN0YXRpYyBpbnQgb3ZzX2RwX2NoYW5nZShzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3QgbmxhdHRyICphW10pXG4tLVxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTc5MC1cdFx0Y2FjaGVfc2l6ZSA9IG5sYV9nZXRfdTMyKGFbT1ZTX0RQX0FUVFJfTUFTS1NfQ0FDSEVfU0laRV0pO1xubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTc5MTpcdFx0ZXJyID0gb3ZzX2Zsb3dfdGJsX21hc2tzX2NhY2hlX3Jlc2l6ZShcdTAwMjZkcC1cdTAwM2V0YWJsZSwgY2FjaGVfc2l6ZSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNzkyLVx0XHRpZiAoZXJyKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE4NDA9c3RhdGljIGludCBvdnNfZHBfY21kX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE4NjUtXHQvKiBBbGxvY2F0ZSB0YWJsZS4gKi9cbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE4NjY6XHRlcnIgPSBvdnNfZmxvd190YmxfaW5pdChcdTAwMjZkcC1cdTAwM2V0YWJsZSk7XG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xODY3LVx0aWYgKGVycilcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xOTM2LWVycl9kZXN0cm95X3RhYmxlOlxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTkzNzpcdG92c19mbG93X3RibF9kZXN0cm95KFx1MDAyNmRwLVx1MDAzZXRhYmxlKTtcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE5MzgtZXJyX2Rlc3Ryb3lfZHA6XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz03Mj1zdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfYWxsb2Modm9pZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwMi1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MTAzOmludCBvdnNfZmxvd190YmxfY291bnQoY29uc3Qgc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlKVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0xMDQte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MzU5PXN0YXRpYyBzdHJ1Y3QgbWFza19jYWNoZSAqdGJsX21hc2tfY2FjaGVfYWxsb2ModTMyIHNpemUpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0zODgtfVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzozODk6aW50IG92c19mbG93X3RibF9tYXNrc19jYWNoZV9yZXNpemUoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCB1MzIgc2l6ZSlcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMzkwLXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTQxMC1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6NDExOmludCBvdnNfZmxvd190YmxfaW5pdChzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTQxMi17XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz01MDM9c3RhdGljIHZvaWQgdGFibGVfaW5zdGFuY2VfZGVzdHJveShzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNTEyLSAqL1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo1MTM6dm9pZCBvdnNfZmxvd190YmxfZGVzdHJveShzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTUxNC17XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy01MjQtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjUyNTpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2R1bXBfbmV4dChzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy01MjYtXHRcdFx0XHQgICAgICAgdTMyICpidWNrZXQsIHUzMiAqbGFzdClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTYwMz1zdGF0aWMgc3RydWN0IHRhYmxlX2luc3RhbmNlICp0YWJsZV9pbnN0YW5jZV9yZWhhc2goc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aSxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTYxNi1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6NjE3OmludCBvdnNfZmxvd190YmxfZmx1c2goc3RydWN0IGZsb3dfdGFibGUgKmZsb3dfdGFibGUpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTYxOC17XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz03Mjc9c3RhdGljIHN0cnVjdCBzd19mbG93ICpmbG93X2xvb2t1cChzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNzgyLSAqICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjc4MzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cF9zdGF0cyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy03ODQtXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy04NDYtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjg0NzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cChzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy04NDgtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy04NjYtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjg2NzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy04NjgtXHRcdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9OTA4PWJvb2wgb3ZzX2Zsb3dfY21wKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtOTE2LVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo5MTc6c3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3RibF9sb29rdXBfdWZpZChzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05MTgtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19pZCAqdWZpZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTkzNS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6OTM2OmludCBvdnNfZmxvd190YmxfbnVtX21hc2tzKGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSlcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtOTM3LXtcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTk0MS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6OTQyOnUzMiBvdnNfZmxvd190YmxfbWFza3NfY2FjaGVfc2l6ZShjb25zdCBzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUpXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTk0My17XG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz05NDk9c3RhdGljIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGFibGVfaW5zdGFuY2VfZXhwYW5kKHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGksXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05NTUtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBPVlMgbXV0ZXggaGVsZC4gKi9cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6OTU2OnZvaWQgb3ZzX2Zsb3dfdGJsX3JlbW92ZShzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUsIHN0cnVjdCBzd19mbG93ICpmbG93KVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05NTcte1xuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MTA1OT1zdGF0aWMgdm9pZCBmbG93X3VmaWRfaW5zZXJ0KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgc3RydWN0IHN3X2Zsb3cgKmZsb3cpXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0xMDgwLS8qIE11c3QgYmUgY2FsbGVkIHdpdGggT1ZTIG11dGV4IGhlbGQuICovXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjEwODE6aW50IG92c19mbG93X3RibF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTA4Mi1cdFx0XHRjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXNrICptYXNrKVxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg9Nzg9dm9pZCBvdnNfZmxvd19mcmVlKHN0cnVjdCBzd19mbG93ICosIGJvb2wgZGVmZXJyZWQpO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaC03OS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODA6aW50IG92c19mbG93X3RibF9pbml0KHN0cnVjdCBmbG93X3RhYmxlICopO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4MTppbnQgb3ZzX2Zsb3dfdGJsX2NvdW50KGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oOjgyOnZvaWQgb3ZzX2Zsb3dfdGJsX2Rlc3Ryb3koc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODM6aW50IG92c19mbG93X3RibF9mbHVzaChzdHJ1Y3QgZmxvd190YWJsZSAqZmxvd190YWJsZSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTg0LVxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4NTppbnQgb3ZzX2Zsb3dfdGJsX2luc2VydChzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUsIHN0cnVjdCBzd19mbG93ICpmbG93LFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaC04Ni1cdFx0XHRjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXNrICptYXNrKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODc6dm9pZCBvdnNfZmxvd190YmxfcmVtb3ZlKHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgc3RydWN0IHN3X2Zsb3cgKmZsb3cpO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4ODppbnQgIG92c19mbG93X3RibF9udW1fbWFza3MoY29uc3Qgc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODk6dTMyICBvdnNfZmxvd190YmxfbWFza3NfY2FjaGVfc2l6ZShjb25zdCBzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUpO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo5MDppbnQgIG92c19mbG93X3RibF9tYXNrc19jYWNoZV9yZXNpemUoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCB1MzIgc2l6ZSk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oOjkxOnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfZHVtcF9uZXh0KHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGFibGUsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTkyLVx0XHRcdFx0ICAgICAgIHUzMiAqYnVja2V0LCB1MzIgKmlkeCk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oOjkzOnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwX3N0YXRzKHN0cnVjdCBmbG93X3RhYmxlICosXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTk0LVx0XHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgtOTctXHRcdFx0XHRcdCAgdTMyICpuX2NhY2hlX2hpdCk7XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oOjk4OnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwKHN0cnVjdCBmbG93X3RhYmxlICosXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTk5LVx0XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqKTtcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6MTAwOnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTEwMS1cdFx0XHRcdFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gpO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDoxMDI6c3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3RibF9sb29rdXBfdWZpZChzdHJ1Y3QgZmxvd190YWJsZSAqLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaC0xMDMtXHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19pZCAqKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ0MTMKCQkJCQkJCW91dHB1dDogMTY0CgkJCQkJCQl0aG91Z2h0czogNDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBPcGVuIHZTd2l0Y2ggUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBpc3N1ZSB3aXRoaW4gYHRibF9tYXNrX2FycmF5X3JlYWxsb2MoKWAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBmdW5jdGlvbiBhcyByZXNpZGluZyB3aXRoaW4gdGhlIGNvcmUgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdmlydHVhbCBzd2l0Y2ggZGF0YXBhdGguIFRoYXQmIzM5O3MgYSBjcml0aWNhbCBhcmVhLCBzbyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgb3Igc3luY2hyb25pemF0aW9uIGlzc3VlcyBoZXJlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGludmVzdGlnYXRpbmcuCgpUaGUga2V5IGlzIHRoYXQgYFdvcnRoRnV6emluZ2AgaXMgc2V0IHRvIGB0cnVlYCwgYW5kIEkgYWdyZWUsIGJlY2F1c2Ugd2UgaGF2ZSBhIGNsZWFyLCBkb2N1bWVudGVkIFJDVSBvcmRlcmluZyBpc3N1ZSBpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBUaGlzIGZ1bmN0aW9uIHJlc2lkZXMgaW4gYG5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNgLCBwYXJ0IG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcsIGFuZCBpbXBvcnRhbnRseSwgaXQmIzM5O3MgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMgKGBvdnNfZmxvd19jbWRfbmV3YCwgYG92c19mbG93X2NtZF9kZWxgLCBldGMuKS4gVGhhdCYjMzk7cyBhIGdvb2QgYXR0YWNrIHN1cmZhY2UuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGBGb2N1c1N5bWJvbHNgLiBXZSBoYXZlIGEgZ29vZCBsaXN0IHRvIHN0YXJ0OiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AsIGB0YmxfbWFza19hcnJheV9hZGRfbWFza2AsIGB0YmxfbWFza19hcnJheV9kZWxfbWFza2AsIGBvdnNfZmxvd190YmxfaW5zZXJ0YCwgYW5kIGBvdnNfZmxvd190YmxfcmVtb3ZlYC4gQnV0LCBJJiMzOTttIGdvaW5nIHRvIGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSBpbiB0aGF0IGZpbGUsIGp1c3QgdG8gYmUgc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cy4KCkFscmlnaHQsIGEgcXVpY2sgbG9vayByZXZlYWxzIHdlIGFsc28gaGF2ZSBgZmxvd19tYXNrX2luc2VydGAgYW5kIGBmbG93X21hc2tfcmVtb3ZlYC4gV2hpbGUgYHRibF9tYXNrX2FycmF5X3JlYWxsb2NgIGlzIHN0YXRpYywgdGhhdCBkb2VzbiYjMzk7dCBjb25jZXJuIG1lIGFzIHRoaXMgaXMgdGhlIGFjdHVhbCBzb3VyY2Ugb2YgdGhlIGNoYW5nZSwgd2hpY2ggaXMgZ29vZC4gVGhlIG90aGVyIGxpc3RlZCBmdW5jdGlvbnMgYWxzbyBzZWVtIHJlbGV2YW50LgoKRmluYWxseSwgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBlbmFibGVkIGZvciB0aGlzIHRvIGJlIHJlbGV2YW50LiBXZSYjMzk7cmUgbG9va2luZyBhdCBgRW5hYmxlQ29uZmlnc2AsIGFuZCB0aGUga2V5IGhlcmUgaXMgYE9QRU5WU1dJVENIYC4gVGhhdCBtYWtlcyBzZW5zZS4gSXQgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIHNvbWUgb3B0aW9uYWwgbmV0ZmlsdGVyL3BzYW1wbGUgY29uZmlncywgd2hpY2ggYXJlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zLgoKU28sIGp1c3QgdG8gc3VtbWFyaXplIGFuZCBtYWtlIHN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nLCB3ZSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgIGtub3dpbmcgd2UgaGF2ZToKCjEuICBgV29ydGhGdXp6aW5nYDogYHRydWVgCjIuICBgRm9jdXNTeW1ib2xzYDogQSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgZnVuY3Rpb25zCjMuICBgRW5hYmxlQ29uZmlnc2A6IGBPUEVOVlNXSVRDSGAKNC4gIEFuZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlYXNvbmluZywgYXMgZGVzY3JpYmVkIGFib3ZlLiBHb29kIHRvIGdvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YmxfbWFza19hcnJheV9yZWFsbG9jJiMzNDssCiAgICAmIzM0O3RibF9tYXNrX2FycmF5X2FkZF9tYXNrJiMzNDssCiAgICAmIzM0O3RibF9tYXNrX2FycmF5X2RlbF9tYXNrJiMzNDssCiAgICAmIzM0O292c19mbG93X3RibF9pbnNlcnQmIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfdGJsX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIG9yZGVyaW5nIGlzc3VlIGluIE9wZW4gdlN3aXRjaCYjMzk7cyBtYXNrIGFycmF5IHJlYWxsb2NhdGlvbiAodGJsX21hc2tfYXJyYXlfcmVhbGxvYyksIGVuc3VyaW5nIG9sZCBtYXNrIGFycmF5IG1lbW9yeSBpcyBzY2hlZHVsZWQgZm9yIFJDVSByZWNsYW1hdGlvbiBvbmx5IGFmdGVyIHRoZSBuZXcgcG9pbnRlciBpcyBwdWJsaXNoZWQgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGZsb3cgbWFuYWdlbWVudCBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YmxfbWFza19hcnJheV9yZWFsbG9jJiMzNDssCiAgICAmIzM0O3RibF9tYXNrX2FycmF5X2FkZF9tYXNrJiMzNDssCiAgICAmIzM0O3RibF9tYXNrX2FycmF5X2RlbF9tYXNrJiMzNDssCiAgICAmIzM0O292c19mbG93X3RibF9pbnNlcnQmIzM0OywKICAgICYjMzQ7b3ZzX2Zsb3dfdGJsX3JlbW92ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIG9yZGVyaW5nIGlzc3VlIGluIE9wZW4gdlN3aXRjaCYjMzk7cyBtYXNrIGFycmF5IHJlYWxsb2NhdGlvbiAodGJsX21hc2tfYXJyYXlfcmVhbGxvYyksIGVuc3VyaW5nIG9sZCBtYXNrIGFycmF5IG1lbW9yeSBpcyBzY2hlZHVsZWQgZm9yIFJDVSByZWNsYW1hdGlvbiBvbmx5IGFmdGVyIHRoZSBuZXcgcG9pbnRlciBpcyBwdWJsaXNoZWQgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGZsb3cgbWFuYWdlbWVudCBjb21tYW5kcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvcnJlY3RzIHRoZSBSQ1UgcG9pbnRlciBwdWJsaXNoaW5nIHNlcXVlbmNlIGluIHRibF9tYXNrX2FycmF5X3JlYWxsb2MoKSBieSBtb3ZpbmcgY2FsbF9yY3UoKSBhZnRlciByY3VfYXNzaWduX3BvaW50ZXIoKSwgcHJldmVudGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSByYWNlIGNvbmRpdGlvbiB3aGVyZSBvbGQgbWFzayBhcnJheSBzdHJ1Y3R1cmVzIGNvdWxkIGJlIHJlY2xhaW1lZCB3aGlsZSBzdGlsbCByZWZlcmVuY2VkLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIG1hc2tfYXJyYXkgYXJlIHBlcmZvcm1lZCB3aXRoIGt6YWxsb2MoKSBhbmQgX19hbGxvY19wZXJjcHUoKSwgZW5zdXJpbmcgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gUkNVIGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjUwNmVhNmU5NzBiY2U5M2ZjNjhkNGNiMDYzZmRkNTBlNzZmODQzYgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDYgMjE6MDA6NTggMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYwppbmRleCA2N2Q1YjhjMGZlNzkyLi4xZTBmOWQxOTNlYjA2IDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMKQEAgLTI1NywxMSAmIzQzOzI1NywxMyBAQCBzdGF0aWMgaW50IHRibF9tYXNrX2FycmF5X3JlYWxsb2Moc3RydWN0IGZsb3dfdGFibGUgKnRibCwgaW50IHNpemUpCiAJCQlpZiAob3ZzbF9kZXJlZmVyZW5jZShvbGQtJmd0O21hc2tzW2ldKSkKIAkJCQluZXctJmd0O21hc2tzW25ldy0mZ3Q7Y291bnQmIzQzOyYjNDM7XSA9IG9sZC0mZ3Q7bWFza3NbaV07CiAJCX0KLQkJY2FsbF9yY3UoJmFtcDtvbGQtJmd0O3JjdSwgbWFza19hcnJheV9yY3VfY2IpOwogCX0KIAogCXJjdV9hc3NpZ25fcG9pbnRlcih0YmwtJmd0O21hc2tfYXJyYXksIG5ldyk7CiAKJiM0MzsJaWYgKG9sZCkKJiM0MzsJCWNhbGxfcmN1KCZhbXA7b2xkLSZndDtyY3UsIG1hc2tfYXJyYXlfcmN1X2NiKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBc3Nlc3NpbmcgdGhlIFNhbml0aXplciBTdHJhdGVneSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnV6emluZyBhcHByb2FjaCBmb3IgdGhpcyBrZXJuZWwgcGF0Y2guIFRoZSBnb2FsIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIEtBU0FOL3N0YW5kYXJkIGZ1enppbmcgaXMgZW5vdWdoLCBvciBpZiB3ZSBuZWVkIHRoZSBtb3JlIGludm9sdmVkIEtNU0FOLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgc2FmZXR5IGV2YWx1YXRpb24sIGEgZGVmZW5zaXZlIHNlY3VyaXR5IG1lYXN1cmUsIHNvIHRoZSBkaXJlY3QgcmlzayBoZXJlIGlzIG5lZ2xpZ2libGUuIFdlJiMzOTtyZSBub3QgdGFsa2luZyBhYm91dCBhY3RpdmUgZXhwbG9pdGF0aW9uLCBqdXN0IGVuc3VyaW5nIG91ciB0ZXN0aW5nIGlzIHRob3JvdWdoLgoKTGV0JiMzOTtzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IHRoZSBjb2RlLiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgdG8gemVybyBpbiBvbiBgbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNTcuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyB0aGF0IG1pZ2h0IG5lY2Vzc2l0YXRlIEtNU0FOLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhcmVhcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBtaWdodCBiZSB1c2VkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzMDpcdFx0XHRcdFx0XHRcdHNpemVvZih1NjQpICogc2l6ZSxcbiAyMzE6XHRcdFx0XHRcdFx0XHRfX2FsaWdub2ZfXyh1NjQpKTtcbiAyMzI6XHRcdGlmICghbmV3LVx1MDAzZW1hc2tzX3VzYWdlX3N0YXRzKSB7XG4gMjMzOlx0XHRcdGtmcmVlKG5ldyk7XG4gMjM0Olx0XHRcdHJldHVybiBOVUxMO1xuIDIzNTpcdFx0fVxuIDIzNjpcdFxuIDIzNzpcdFx0bmV3LVx1MDAzZWNvdW50ID0gMDtcbiAyMzg6XHRcdG5ldy1cdTAwM2VtYXggPSBzaXplO1xuIDIzOTpcdFxuIDI0MDpcdFx0cmV0dXJuIG5ldztcbiAyNDE6XHR9XG4gMjQyOlx0XG4gMjQzOlx0c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxuIDI0NDpcdHtcbiAyNDU6XHRcdHN0cnVjdCBtYXNrX2FycmF5ICpvbGQ7XG4gMjQ2Olx0XHRzdHJ1Y3QgbWFza19hcnJheSAqbmV3O1xuIDI0NzpcdFxuIDI0ODpcdFx0bmV3ID0gdGJsX21hc2tfYXJyYXlfYWxsb2Moc2l6ZSk7XG4gMjQ5Olx0XHRpZiAoIW5ldylcbiAyNTA6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gMjUxOlx0XG4gMjUyOlx0XHRvbGQgPSBvdnNsX2RlcmVmZXJlbmNlKHRibC1cdTAwM2VtYXNrX2FycmF5KTtcbiAyNTM6XHRcdGlmIChvbGQpIHtcbiAyNTQ6XHRcdFx0aW50IGk7XG4gMjU1Olx0XG4gMjU2Olx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9sZC1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KSB7XG4gMjU3Olx0XHRcdFx0aWYgKG92c2xfZGVyZWZlcmVuY2Uob2xkLVx1MDAzZW1hc2tzW2ldKSlcbiAyNTg6XHRcdFx0XHRcdG5ldy1cdTAwM2VtYXNrc1tuZXctXHUwMDNlY291bnQmIzQzOyYjNDM7XSA9IG9sZC1cdTAwM2VtYXNrc1tpXTtcbiAyNTk6XHRcdFx0fVxuIDI2MDpcdFx0fVxuIDI2MTpcdFxuIDI2MjpcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKHRibC1cdTAwM2VtYXNrX2FycmF5LCBuZXcpO1xuIDI2MzpcdFxuIDI2NDpcdFx0aWYgKG9sZClcbiAyNjU6XHRcdFx0Y2FsbF9yY3UoXHUwMDI2b2xkLVx1MDAzZXJjdSwgbWFza19hcnJheV9yY3VfY2IpO1xuIDI2NjpcdFxuIDI2NzpcdFx0cmV0dXJuIDA7XG4gMjY4Olx0fVxuIDI2OTpcdFxuIDI3MDpcdHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfYWRkX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcbiAyNzE6XHRcdFx0XHRcdCAgIHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcbiAyNzI6XHR7XG4gMjczOlx0XHRzdHJ1Y3QgbWFza19hcnJheSAqbWEgPSBvdnNsX2RlcmVmZXJlbmNlKHRibC1cdTAwM2VtYXNrX2FycmF5KTtcbiAyNzQ6XHRcdGludCBlcnIsIG1hX2NvdW50ID0gUkVBRF9PTkNFKG1hLVx1MDAzZWNvdW50KTtcbiAyNzU6XHRcbiAyNzY6XHRcdGlmIChtYV9jb3VudCBcdTAwM2U9IG1hLVx1MDAzZW1heCkge1xuIDI3NzpcdFx0XHRlcnIgPSB0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXHUwMDNlbWF4ICYjNDM7XG4gMjc4Olx0XHRcdFx0XHRcdFx0ICBNQVNLX0FSUkFZX1NJWkVfTUlOKTtcbiAyNzk6XHRcdFx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzE4NQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgRGVlcGVyIGludG8gQXJyYXkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlc2UgbWFzayBhcnJheXMuIEkmIzM5O3ZlIGFscmVhZHkgZ290IGEgaGFuZGxlIG9uIHRoZSBnZW5lcmFsIGFsbG9jYXRpb24gc3RyYXRlZ3ksIGJ1dCBJIHdhbnQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgSSYjMzk7dmUgZ290IGEgZ3Jhc3Agb24gdGhlIGZpbmVyIHBvaW50cywgcGFydGljdWxhcmx5IGhvdyB0aGVzZSBhcnJheXMgYXJlIGluaXRpYWxpemVkLiBUbyBmdWxseSB1bmRlcnN0YW5kIHRoZSBwcm9jZXNzLCBJIG5lZWQgdG8gY2hlY2sgb3V0IHRoZSBkZXRhaWxzIG9mIGB0YmxfbWFza19hcnJheV9hbGxvY2AgYXMgd2VsbC4gVGhhdCBmdW5jdGlvbiBzaG91bGQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiwgYnV0IG1vcmUgaW1wb3J0YW50bHksIGhvdyB0aGUgYWxsb2NhdGVkIG1lbW9yeSBpcyAqaW5pdGlhbGl6ZWQqLiBVbmRlcnN0YW5kaW5nIHRoYXQgaW5pdGlhbGl6YXRpb24gaXMga2V5IHRvIHBlcmZvcm1hbmNlIGFuZCBwb3RlbnRpYWxseSBkZWJ1Z2dpbmcuIEdvdHRhIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBzbmVha3kgYnVncyBsdXJraW5nIGluIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBMZXQmIzM5O3MgZ2V0IHRvIGl0IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIxMDpcdFxuIDIxMTpcdFx0XHRcdG1hLVx1MDAzZW1hc2tzX3VzYWdlX3plcm9fY250cltpXSAmIzQzOz0gY291bnRlcjtcbiAyMTI6XHRcdFx0fVxuIDIxMzpcdFx0fVxuIDIxNDpcdH1cbiAyMTU6XHRcbiAyMTY6XHRzdGF0aWMgc3RydWN0IG1hc2tfYXJyYXkgKnRibF9tYXNrX2FycmF5X2FsbG9jKGludCBzaXplKVxuIDIxNzpcdHtcbiAyMTg6XHRcdHN0cnVjdCBtYXNrX2FycmF5ICpuZXc7XG4gMjE5Olx0XG4gMjIwOlx0XHRzaXplID0gbWF4KE1BU0tfQVJSQVlfU0laRV9NSU4sIHNpemUpO1xuIDIyMTpcdFx0bmV3ID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZShuZXcsIG1hc2tzLCBzaXplKSAmIzQzO1xuIDIyMjpcdFx0XHQgICAgICBzaXplb2YodTY0KSAqIHNpemUsIEdGUF9LRVJORUwpO1xuIDIyMzpcdFx0aWYgKCFuZXcpXG4gMjI0Olx0XHRcdHJldHVybiBOVUxMO1xuIDIyNTpcdFxuIDIyNjpcdFx0bmV3LVx1MDAzZW1hc2tzX3VzYWdlX3plcm9fY250ciA9ICh1NjQgKikoKHU4ICopbmV3ICYjNDM7XG4gMjI3Olx0XHRcdFx0XHRcdCAgICAgc3RydWN0X3NpemUobmV3LCBtYXNrcywgc2l6ZSkpO1xuIDIyODpcdFxuIDIyOTpcdFx0bmV3LVx1MDAzZW1hc2tzX3VzYWdlX3N0YXRzID0gX19hbGxvY19wZXJjcHUoc2l6ZW9mKHN0cnVjdCBtYXNrX2FycmF5X3N0YXRzKSAmIzQzO1xuIDIzMDpcdFx0XHRcdFx0XHRcdHNpemVvZih1NjQpICogc2l6ZSxcbiAyMzE6XHRcdFx0XHRcdFx0XHRfX2FsaWdub2ZfXyh1NjQpKTtcbiAyMzI6XHRcdGlmICghbmV3LVx1MDAzZW1hc2tzX3VzYWdlX3N0YXRzKSB7XG4gMjMzOlx0XHRcdGtmcmVlKG5ldyk7XG4gMjM0Olx0XHRcdHJldHVybiBOVUxMO1xuIDIzNTpcdFx0fVxuIDIzNjpcdFxuIDIzNzpcdFx0bmV3LVx1MDAzZWNvdW50ID0gMDtcbiAyMzg6XHRcdG5ldy1cdTAwM2VtYXggPSBzaXplO1xuIDIzOTpcdFxuIDI0MDpcdFx0cmV0dXJuIG5ldztcbiAyNDE6XHR9XG4gMjQyOlx0XG4gMjQzOlx0c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxuIDI0NDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDYgMjE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg5OQoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiA3OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDb21taXQgZm9yIE1lbW9yeSBTYWZldHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgc2VlIGluIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCwgdGhlcmUmIzM5O3MgYSBjcml0aWNhbCBvcmRlcmluZyBpc3N1ZSB3aXRoIHRoZSBSQ1Ugb3BlcmF0aW9ucy4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBjYWxsX3JjdWAgd2FzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIFRoYXQmIzM5O3MgYSB0ZXh0Ym9vayB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgb3IgYSByYWNlIGNvbmRpdGlvbiBpbiBSQ1Ugc3luY2hyb25pemF0aW9uISBJdCBtZWFucyB0aGF0IHRoZSBvbGQgbWFzayBhcnJheSAoYG9sZGApIHdhcyBiZWluZyBzY2hlZHVsZWQgZm9yIGZyZWVpbmcgYmVmb3JlIHRoZSBwb2ludGVyIGluIGB0YmwtJmd0O21hc2tfYXJyYXlgIHdhcyB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBuZXcgYXJyYXkgKGBuZXdgKS4gVGhpcyBsZWF2ZXMgYSB3aW5kb3cgd2hlcmUgcmVhZGVycywgb3IgZXZlbiB0aGUgb3JpZ2luYWwgdGhyZWFkLCBjb3VsZCBhY2Nlc3Mgc3RhbGUgbWVtb3J5IHRoYXQmIzM5O3MgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQuIFRoYXQmIzM5O3MgYSBjbGVhciB2dWxuZXJhYmlsaXR5LgoKVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgcmVvcmRlcmluZzogdXBkYXRpbmcgdGhlIHBvaW50ZXIgKGByY3VfYXNzaWduX3BvaW50ZXJgKSAqYmVmb3JlKiBpbml0aWF0aW5nIHRoZSBSQ1UgcmVjbGFtYXRpb24gKGBjYWxsX3JjdWApLiBUaGlzIGVuc3VyZXMgdGhlIGNvcnJlY3QgUkNVIHVwZGF0ZSBvcmRlciwgcHVibGlzaGluZyB0aGUgbmV3IGRhdGEgYmVmb3JlIGZyZWVpbmcgdGhlIG9sZC4KCk5vdywgbGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBsdXJraW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGhlcmUuIEZvcnR1bmF0ZWx5LCBpdCBsb29rcyBsaWtlIGB0YmxfbWFza19hcnJheV9hbGxvY2AgdXNlcyBga3phbGxvY2AgYW5kIGBfX2FsbG9jX3BlcmNwdWAgZm9yIG1lbW9yeSBhbGxvY2F0aW9uLiBUaGVzZSBmdW5jdGlvbnMgemVyby1pbml0aWFsaXplIHRoZSBtZW1vcnkuIFdlJiMzOTtyZSBub3QgcmVhZGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhcmUgd2UgY29weWluZyBhbnkgb2YgaXQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHBhZGRpbmcgbGVha3Mgb3IgdW5pbml0aWFsaXplZCBicmFuY2hlcyBlaXRoZXIuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoZSB1c2UtYWZ0ZXItZnJlZSBhbmQgUkNVIGlzc3VlcywgYW5kIGlzIGZ1bGx5IHN1ZmZpY2llbnQuCgpUaGlzIGlzIGZ1bmRhbWVudGFsbHkgYW4gUkNVIGxpZmV0aW1lIC8gY29uY3VycmVuY3kgaXNzdWUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgbWVtb3J5IGNvcnJ1cHRpb24gYnVnLCBidXQgdGhlIG1lbW9yeSBpcyAqZnVsbHkqIGluaXRpYWxpemVkLgoKSGVyZSYjMzk7cyB0aGUga2V5OiBLQVNBTiBpcyBhbHJlYWR5IG9uIHRoZSBqb2IgaW4gc3RhbmRhcmQga2VybmVsIGJ1aWxkcy4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2VzcywgYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpbGUgS01TQU4gZGV0ZWN0cyAqdW5pbml0aWFsaXplZCogbWVtb3J5IHJlYWRzLiBJbiB0aGlzIGNhc2UsIHRoZXJlJiMzOTtzIG5vIG5lZWQgZm9yIEtNU0FOLiBUaGUgZml4IGFkZHJlc3NlcyBhIFVBRiBpc3N1ZSBhcmlzaW5nIGZyb20gUkNVIHN5bmNocm9uaXphdGlvbi9vcmRlcmluZywgYW5kIHRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIHdvcnJ5IGFib3V0LgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGl2ZWx5IGBmYWxzZWAuCgpIZXJlJiMzOTtzIHRoZSByZWFzb25pbmc6CjEuICBUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIFJDVSBjYWxsYmFjayBvcmRlciBpbiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvYygpYC4KMi4gIFRoZSBvcmlnaW5hbCBjb2RlIGhhZCBhIFVzZS1BZnRlci1GcmVlL1JDVSBsaWZldGltZSBidWcuCjMuICBUaGUgbWFzayBhcnJheSBtZW1vcnkgaXMgYWxsb2NhdGVkIHVzaW5nIHplcm9pbmcgZnVuY3Rpb25zLgo0LiAgTm8gdW5pbml0aWFsaXplZCBkYXRhLCBzdGFjayB2YXJpYWJsZXMsIG9yIGluZm8gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuCjUuICBTdGFuZGFyZCBLQVNBTiBmdXp6aW5nIGlzIGVub3VnaCB0byBmaW5kIGJ1Z3MgaGVyZTsgS01TQU4gaXMgbm90IG5lZWRlZC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNiAyMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb3JyZWN0cyB0aGUgUkNVIHBvaW50ZXIgcHVibGlzaGluZyBzZXF1ZW5jZSBpbiB0YmxfbWFza19hcnJheV9yZWFsbG9jKCkgYnkgbW92aW5nIGNhbGxfcmN1KCkgYWZ0ZXIgcmN1X2Fzc2lnbl9wb2ludGVyKCksIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBjb25kaXRpb24gd2hlcmUgb2xkIG1hc2sgYXJyYXkgc3RydWN0dXJlcyBjb3VsZCBiZSByZWNsYWltZWQgd2hpbGUgc3RpbGwgcmVmZXJlbmNlZC4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBtYXNrX2FycmF5IGFyZSBwZXJmb3JtZWQgd2l0aCBremFsbG9jKCkgYW5kIF9fYWxsb2NfcGVyY3B1KCksIGVuc3VyaW5nIG1lbW9yeSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hlcywgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFJDVSBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvcnJlY3RzIHRoZSBSQ1UgcG9pbnRlciBwdWJsaXNoaW5nIHNlcXVlbmNlIGluIHRibF9tYXNrX2FycmF5X3JlYWxsb2MoKSBieSBtb3ZpbmcgY2FsbF9yY3UoKSBhZnRlciByY3VfYXNzaWduX3BvaW50ZXIoKSwgcHJldmVudGluZyBhIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSByYWNlIGNvbmRpdGlvbiB3aGVyZSBvbGQgbWFzayBhcnJheSBzdHJ1Y3R1cmVzIGNvdWxkIGJlIHJlY2xhaW1lZCB3aGlsZSBzdGlsbCByZWZlcmVuY2VkLiBNZW1vcnkgYWxsb2NhdGlvbnMgZm9yIG1hc2tfYXJyYXkgYXJlIHBlcmZvcm1lZCB3aXRoIGt6YWxsb2MoKSBhbmQgX19hbGxvY19wZXJjcHUoKSwgZW5zdXJpbmcgbWVtb3J5IGlzIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQuIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB1bmluaXRpYWxpemVkIGNvbmRpdGlvbmFsIGJyYW5jaGVzLCBvciB1c2VyLXNwYWNlIGluZm8tbGVha3MgYXJlIGludHJvZHVjZWQgb3IgZXhwb3NlZC4gUkNVIGxpZmV0aW1lIGFuZCB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMgYXJlIGRldGVjdGFibGUgYnkgS0FTQU4sIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMDo1OS41Mzk0NDMxMjJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDMxMzQxODgzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPUEVOVlNXSVRDSFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRibF9tYXNrX2FycmF5X3JlYWxsb2NcIixcbiAgICBcInRibF9tYXNrX2FycmF5X2FkZF9tYXNrXCIsXG4gICAgXCJ0YmxfbWFza19hcnJheV9kZWxfbWFza1wiLFxuICAgIFwib3ZzX2Zsb3dfdGJsX2luc2VydFwiLFxuICAgIFwib3ZzX2Zsb3dfdGJsX3JlbW92ZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIFJDVSBwb2ludGVyIHB1Ymxpc2hpbmcgc2VxdWVuY2UgaW4gdGJsX21hc2tfYXJyYXlfcmVhbGxvYygpIGJ5IG1vdmluZyBjYWxsX3JjdSgpIGFmdGVyIHJjdV9hc3NpZ25fcG9pbnRlcigpLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHJhY2UgY29uZGl0aW9uIHdoZXJlIG9sZCBtYXNrIGFycmF5IHN0cnVjdHVyZXMgY291bGQgYmUgcmVjbGFpbWVkIHdoaWxlIHN0aWxsIHJlZmVyZW5jZWQuIE1lbW9yeSBhbGxvY2F0aW9ucyBmb3IgbWFza19hcnJheSBhcmUgcGVyZm9ybWVkIHdpdGgga3phbGxvYygpIGFuZCBfX2FsbG9jX3BlcmNwdSgpLCBlbnN1cmluZyBtZW1vcnkgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIHVzZXItc3BhY2UgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBSQ1UgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBvcmRlcmluZyBpc3N1ZSBpbiBPcGVuIHZTd2l0Y2gncyBtYXNrIGFycmF5IHJlYWxsb2NhdGlvbiAodGJsX21hc2tfYXJyYXlfcmVhbGxvYyksIGVuc3VyaW5nIG9sZCBtYXNrIGFycmF5IG1lbW9yeSBpcyBzY2hlZHVsZWQgZm9yIFJDVSByZWNsYW1hdGlvbiBvbmx5IGFmdGVyIHRoZSBuZXcgcG9pbnRlciBpcyBwdWJsaXNoZWQgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGZsb3cgbWFuYWdlbWVudCBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDA6NTkuNTM5NDQ3NzUyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzU5Nzc4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2NTA2ZWE2ZTk3MGJjZTkzZmM2OGQ0Y2IwNjNmZGQ1MGU3NmY4NDNiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDYgMjE6MDA6NTggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYyBiL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNcXG5pbmRleCA2N2Q1YjhjMGZlNzkyLi4xZTBmOWQxOTNlYjA2IDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNcXG4rKysgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jXFxuQEAgLTI1NywxMSArMjU3LDEzIEBAIHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSlcXG4gXFx0XFx0XFx0aWYgKG92c2xfZGVyZWZlcmVuY2Uob2xkLVxcdTAwM2VtYXNrc1tpXSkpXFxuIFxcdFxcdFxcdFxcdG5ldy1cXHUwMDNlbWFza3NbbmV3LVxcdTAwM2Vjb3VudCsrXSA9IG9sZC1cXHUwMDNlbWFza3NbaV07XFxuIFxcdFxcdH1cXG4tXFx0XFx0Y2FsbF9yY3UoXFx1MDAyNm9sZC1cXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XFxuIFxcdH1cXG4gXFxuIFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0YmwtXFx1MDAzZW1hc2tfYXJyYXksIG5ldyk7XFxuIFxcbitcXHRpZiAob2xkKVxcbitcXHRcXHRjYWxsX3JjdShcXHUwMDI2b2xkLVxcdTAwM2VyY3UsIG1hc2tfYXJyYXlfcmN1X2NiKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMTowMC4wNzYzOTIxNDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjM0NTc4MzE2OTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGJsX21hc2tfYXJyYXlfcmVhbGxvY1wiLFxuICAgIFwidGJsX21hc2tfYXJyYXlfYWRkX21hc2tcIixcbiAgICBcInRibF9tYXNrX2FycmF5X2RlbF9tYXNrXCIsXG4gICAgXCJvdnNfZmxvd190YmxfaW5zZXJ0XCIsXG4gICAgXCJvdnNfZmxvd190YmxfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBvcmRlcmluZyBpc3N1ZSBpbiBPcGVuIHZTd2l0Y2gncyBtYXNrIGFycmF5IHJlYWxsb2NhdGlvbiAodGJsX21hc2tfYXJyYXlfcmVhbGxvYyksIGVuc3VyaW5nIG9sZCBtYXNrIGFycmF5IG1lbW9yeSBpcyBzY2hlZHVsZWQgZm9yIFJDVSByZWNsYW1hdGlvbiBvbmx5IGFmdGVyIHRoZSBuZXcgcG9pbnRlciBpcyBwdWJsaXNoZWQgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGZsb3cgbWFuYWdlbWVudCBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NTA2ZWE2ZTk3MGJjZTkzZmM2OGQ0Y2IwNjNmZGQ1MGU3NmY4NDNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMTowMDo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jXG5pbmRleCA2N2Q1YjhjMGZlNzkyLi4xZTBmOWQxOTNlYjA2IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1xuQEAgLTI1NywxMSArMjU3LDEzIEBAIHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSlcbiBcdFx0XHRpZiAob3ZzbF9kZXJlZmVyZW5jZShvbGQtXHUwMDNlbWFza3NbaV0pKVxuIFx0XHRcdFx0bmV3LVx1MDAzZW1hc2tzW25ldy1cdTAwM2Vjb3VudCsrXSA9IG9sZC1cdTAwM2VtYXNrc1tpXTtcbiBcdFx0fVxuLVx0XHRjYWxsX3JjdShcdTAwMjZvbGQtXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XG4gXHR9XG4gXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVx1MDAzZW1hc2tfYXJyYXksIG5ldyk7XG4gXG4rXHRpZiAob2xkKVxuK1x0XHRjYWxsX3JjdShcdTAwMjZvbGQtXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMTowMC4wNzYzOTQzMzdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDg3NjQzNjM0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBUcmlhZ2U6IFN5emthbGxlciBGdXp6aW5nIEV2YWx1YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSB1c2VyIHdhbnRzIG1lIHRvIGRlY2lkZSBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuIEZpcnN0LCBsZXQncyBxdWlja2x5IHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zIGFuZCBhbnkgc2FmZXR5IHByZWNhdXRpb25zLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOyBpdCdzIGEgTGludXgga2VybmVsIGNvbW1pdCwgYW5kIHRoZXkncmUgYXNraW5nIGZvciBhIGZ1enppbmcgdHJpYWdlIGV2YWx1YXRpb24uIFRoaXMgaXMgc3RhbmRhcmQgc3R1ZmYg4oCTIGtlcm5lbCBtYWludGVuYW5jZSwgc29mdHdhcmUgcXVhbGl0eSBhc3N1cmFuY2UsIGRlZmVuc2l2ZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24uIE5vIHJlZCBmbGFncyBoZXJlLiBSaXNrIHNldmVyaXR5PyBCZW5pZ24sIHByYWN0aWNhbGx5IG5vbmUuIFdlJ3JlIHRhbGtpbmcgc2FuZGJveGVkIGRldmVsb3BlciBRQSBvciBrZXJuZWwgdHJpYWdlLCBzbyBpdCdzIHNhZmUgdG8gcHJvY2VlZC5cblxuTm93LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgdGhlIGNvbW1pdCBkaWZmLiBJdCBhcHBlYXJzIHRvIGJlIG1vZGlmeWluZyBgbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY2AuIExldCdzIHRha2UgYSBsb29rIGF0IGl0IGluIGRldGFpbDogVGhlIHBhdGNoIHNlZW1zIHRvIGJlIGFkZGluZyBhbiBgaWZgIHN0YXRlbWVudCB0byB0aGUgZW5kIG9mIHRoZSBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AgZnVuY3Rpb24gdG8gY2FsbCB0aGUgYHJjdWAgY2FsbGJhY2suXG5cbk5vdywgbGV0J3MgdXNlIG91ciBtb3JlIGFkdmFuY2VkIHRvb2xzLiBXZSBuZWVkIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGlkZW50aWZ5IHBvdGVudGlhbCBjYWxsZXJzIG9mIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCwgYW5kIGNoZWNrIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGlzIHJlcXVpcmVzIGEgZGVlcGVyIGRpdmUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgYW55IHN1YnRsZSBjb21wbGV4aXRpZXMgb3IgcG90ZW50aWFsIGFyZWFzIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgaXNzdWVzIHRoYXQgYXJlIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTIyLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTAuOTUyODMzNjM0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjM1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjM1OlxcdFxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0bmV3LVxcdTAwM2Vjb3VudCA9IDA7XFxuIDIzODpcXHRcXHRuZXctXFx1MDAzZW1heCA9IHNpemU7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdHJldHVybiBuZXc7XFxuIDI0MTpcXHR9XFxuIDI0MjpcXHRcXG4gMjQzOlxcdHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSlcXG4gMjQ0OlxcdHtcXG4gMjQ1OlxcdFxcdHN0cnVjdCBtYXNrX2FycmF5ICpvbGQ7XFxuIDI0NjpcXHRcXHRzdHJ1Y3QgbWFza19hcnJheSAqbmV3O1xcbiAyNDc6XFx0XFxuIDI0ODpcXHRcXHRuZXcgPSB0YmxfbWFza19hcnJheV9hbGxvYyhzaXplKTtcXG4gMjQ5OlxcdFxcdGlmICghbmV3KVxcbiAyNTA6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDI1MTpcXHRcXG4gMjUyOlxcdFxcdG9sZCA9IG92c2xfZGVyZWZlcmVuY2UodGJsLVxcdTAwM2VtYXNrX2FycmF5KTtcXG4gMjUzOlxcdFxcdGlmIChvbGQpIHtcXG4gMjU0OlxcdFxcdFxcdGludCBpO1xcbiAyNTU6XFx0XFxuIDI1NjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2Mgb2xkLVxcdTAwM2VtYXg7IGkrKykge1xcbiAyNTc6XFx0XFx0XFx0XFx0aWYgKG92c2xfZGVyZWZlcmVuY2Uob2xkLVxcdTAwM2VtYXNrc1tpXSkpXFxuIDI1ODpcXHRcXHRcXHRcXHRcXHRuZXctXFx1MDAzZW1hc2tzW25ldy1cXHUwMDNlY291bnQrK10gPSBvbGQtXFx1MDAzZW1hc2tzW2ldO1xcbiAyNTk6XFx0XFx0XFx0fVxcbiAyNjA6XFx0XFx0fVxcbiAyNjE6XFx0XFxuIDI2MjpcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVxcdTAwM2VtYXNrX2FycmF5LCBuZXcpO1xcbiAyNjM6XFx0XFxuIDI2NDpcXHRcXHRpZiAob2xkKVxcbiAyNjU6XFx0XFx0XFx0Y2FsbF9yY3UoXFx1MDAyNm9sZC1cXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XFxuIDI2NjpcXHRcXG4gMjY3OlxcdFxcdHJldHVybiAwO1xcbiAyNjg6XFx0fVxcbiAyNjk6XFx0XFxuIDI3MDpcXHRzdGF0aWMgaW50IHRibF9tYXNrX2FycmF5X2FkZF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxuIDI3MTpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc3dfZmxvd19tYXNrICpuZXcpXFxuIDI3MjpcXHR7XFxuIDI3MzpcXHRcXHRzdHJ1Y3QgbWFza19hcnJheSAqbWEgPSBvdnNsX2RlcmVmZXJlbmNlKHRibC1cXHUwMDNlbWFza19hcnJheSk7XFxuIDI3NDpcXHRcXHRpbnQgZXJyLCBtYV9jb3VudCA9IFJFQURfT05DRShtYS1cXHUwMDNlY291bnQpO1xcbiAyNzU6XFx0XFxuIDI3NjpcXHRcXHRpZiAobWFfY291bnQgXFx1MDAzZT0gbWEtXFx1MDAzZW1heCkge1xcbiAyNzc6XFx0XFx0XFx0ZXJyID0gdGJsX21hc2tfYXJyYXlfcmVhbGxvYyh0YmwsIG1hLVxcdTAwM2VtYXggK1xcbiAyNzg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICBNQVNLX0FSUkFZX1NJWkVfTUlOKTtcXG4gMjc5OlxcdFxcdFxcdGlmIChlcnIpXFxuIDI4MDpcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRcXHRtYSA9IG92c2xfZGVyZWZlcmVuY2UodGJsLVxcdTAwM2VtYXNrX2FycmF5KTtcXG4gMjgzOlxcdFxcdH0gZWxzZSB7XFxuIDI4NDpcXHRcXHRcXHQvKiBPbiBldmVyeSBhZGQgb3IgZGVsZXRlIHdlIG5lZWQgdG8gcmVzZXQgdGhlIGNvdW50ZXJzIHNvXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjEwLjk1Mjk1MjgzNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzODU0NTI5MTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AgaW4gT3BlbiB2U3dpdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgYHRibF9tYXNrX2FycmF5X3JlYWxsb2NgLiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiB0aGF0IGZ1bmN0aW9uLiBUaGF0J2xsIGdpdmUgbWUgYSBkaXJlY3QgbGluZSBvZiBzaWdodCBpbnRvIHRoZSBjcml0aWNhbCBhcmVhcyB3aGVyZSBtZW1vcnkgcmUtYWxsb2NhdGlvbiBpcyBoYXBwZW5pbmcuIFNpbXVsdGFuZW91c2x5LCBJIHdhbnQgdG8gbWFwIHRob3NlIGNhbGwgc2l0ZXMgb250byB0aGUgcmVsZXZhbnQgT3BlbiB2U3dpdGNoIGZ1bmN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgZnVuY3Rpb25hbCBjb250ZXh0IGlzIGNydWNpYWwgaGVyZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZmxvdyB0YWJsZSBvcGVyYXRpb25zPyBQYWNrZXQgcHJvY2Vzc2luZz8gU29tZXRoaW5nIGVsc2UgZW50aXJlbHk/XG5cbk9uY2UgSSBoYXZlIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgZnVuY3Rpb24gY2FsbCBoaWVyYXJjaHksIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhpcyBhY3Rpdml0eSB3aXRoIHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMuIFdoYXQgZmxhZ3MgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIGNvZGUgcGF0aCB0byBldmVuIGJlIGFjdGl2ZT8gQXJlIHRoZXJlIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucyBiYXNlZCBvbiBjb25maWd1cmF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLlxuXG5GaW5hbGx5LCBJJ2xsIHNlYXJjaCB0aGUgYG5ldC9vcGVudnN3aXRjaGAgZGlyZWN0b3J5IGZvciBhbGwgaW5zdGFuY2VzIG9mIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBhbmQgYW55IG90aGVyIHJlbGF0ZWQgZmxvdyB0YWJsZSBmdW5jdGlvbnMuIFRoaXMgY29tcHJlaGVuc2l2ZSBzZWFyY2ggc2hvdWxkIHVuY292ZXIgYW55IG90aGVyIGhpbnRzIHRoYXQgbWF5IGNvbnRyaWJ1dGUgdG8gbXkgY29tcHJlaGVuc2lvbiBvZiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AncyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM0MCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTMuMzM4NDEzMzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxMzg4NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRibF9tYXNrX2FycmF5X3JlYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MjE2PXN0YXRpYyBzdHJ1Y3QgbWFza19hcnJheSAqdGJsX21hc2tfYXJyYXlfYWxsb2MoaW50IHNpemUpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTI0Mi1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjI0MzpzdGF0aWMgaW50IHRibF9tYXNrX2FycmF5X3JlYWxsb2Moc3RydWN0IGZsb3dfdGFibGUgKnRibCwgaW50IHNpemUpXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNDQte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz0yNzA9c3RhdGljIGludCB0YmxfbWFza19hcnJheV9hZGRfbWFzayhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNzYtXFx0aWYgKG1hX2NvdW50IFxcdTAwM2U9IG1hLVxcdTAwM2VtYXgpIHtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjI3NzpcXHRcXHRlcnIgPSB0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXFx1MDAzZW1heCArXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNzgtXFx0XFx0XFx0XFx0XFx0XFx0ICBNQVNLX0FSUkFZX1NJWkVfTUlOKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9Mjk4PXN0YXRpYyB2b2lkIHRibF9tYXNrX2FycmF5X2RlbF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTMyMy1cXHQgICAgbWFfY291bnQgXFx1MDAzYz0gKG1hLVxcdTAwM2VtYXggLyAzKSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjMyNDpcXHRcXHR0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXFx1MDAzZW1heCAvIDIpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMzI1LVxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTMuNDM5ODA2ODYzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4NTY4NTI0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nOlxuXG4qKkV4YW1pbmluZyBgbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY2AgZm9yIE1hc2sgTWFuYWdlbWVudCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IHN1cnJvdW5kaW5nIGB0YmxfbWFza19hcnJheV9hZGRfbWFza2AgYW5kIGB0YmxfbWFza19hcnJheV9kZWxfbWFza2AuIEkndmUgZ290IHRvIHRyYWNlIHRoZWlyIHVzYWdlIHdpdGhpbiBgbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY2AuIFVuZGVyc3RhbmRpbmcgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSAqY2FsbGVkIGZyb20qIHdpbGwgYmUga2V5LiBUaGF0IHdpbGwgZ2l2ZSBtZSB0aGUgY2xlYXJlc3QgcGljdHVyZSBvZiBob3cgdGhlc2UgbWFzayBtYW5hZ2VtZW50IHJvdXRpbmVzIGZpdCBpbnRvIHRoZSBvdmVyYWxsIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvLCBvciBhcmUgdHJpZ2dlcmVkIGJ5LCBmbG93IHRhYmxlIG9wZXJhdGlvbnMuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDYyLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTUuMzI1NDk1ODIxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODYyOTI1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0YmxfbWFza19hcnJheV8oYWRkfGRlbClfbWFza1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz0yNDM9c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yNjktXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzoyNzA6c3RhdGljIGludCB0YmxfbWFza19hcnJheV9hZGRfbWFzayhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMjcxLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMjk3LVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6Mjk4OnN0YXRpYyB2b2lkIHRibF9tYXNrX2FycmF5X2RlbF9tYXNrKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0yOTktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzd19mbG93X21hc2sgKm1hc2spXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTMzMT1zdGF0aWMgdm9pZCBmbG93X21hc2tfcmVtb3ZlKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIHN0cnVjdCBzd19mbG93X21hc2sgKm1hc2spXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTM0MS1cXHRcXHRpZiAoIW1hc2stXFx1MDAzZXJlZl9jb3VudClcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjM0MjpcXHRcXHRcXHR0YmxfbWFza19hcnJheV9kZWxfbWFzayh0YmwsIG1hc2spO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMzQzLVxcdH1cXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MTAwNj1zdGF0aWMgaW50IGZsb3dfbWFza19pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwMjAtXFx0XFx0LyogQWRkIG1hc2sgdG8gbWFzay1saXN0LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MTAyMTpcXHRcXHRpZiAodGJsX21hc2tfYXJyYXlfYWRkX21hc2sodGJsLCBtYXNrKSkge1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTAyMi1cXHRcXHRcXHRrZnJlZShtYXNrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTUuNDM0MTMzMjU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM5Njg5MTI2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIEZsb3cgTWFzayBJbnNlcnRpb24sIFJlbW92YWwsIGFuZCBGbG93IFRhYmxlIE9wZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGNhbGwgcGF0aHMgcmVsYXRlZCB0byBgZmxvd19tYXNrX2luc2VydGAsIGBmbG93X21hc2tfcmVtb3ZlYCwgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggdGhlIGJyb2FkZXIgZmxvdyB0YWJsZSBvcGVyYXRpb25zLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3csIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgZGF0YSBwYXRoLiBJJ2xsIGxpa2VseSBzdGFydCBieSB0cmFjaW5nIHRoZSBmdW5jdGlvbiBjYWxscywgcHJvYmFibHkgdXNpbmcgYSB0b29sIGxpa2UgYHBlcmZgIG9yIGBnZGJgLCB0byBzZWUgaG93IHRoZXNlIG1hc2sgb3BlcmF0aW9ucyBhcmUgdHJpZ2dlcmVkIGFuZCB3aGF0IG90aGVyIGZ1bmN0aW9ucyB0aGV5IGNhbGwuIEkgd2FudCB0byBidWlsZCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkLCBwYXJ0aWN1bGFybHkgbG9va2luZyBmb3IgYW55IGxvY2tpbmcgY29udGVudGlvbiwgaW5lZmZpY2llbnQgZGF0YSBzdHJ1Y3R1cmVzLCBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycyBpbiB0aGUgcHJlc2VuY2Ugb2YgaGlnaCB0cmFmZmljIHZvbHVtZSBvciBjb21wbGV4IGZsb3cgcnVsZXMuIFRoaXMgcmVxdWlyZXMgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBzdWNoIGFzIHRoZSBmbG93IHRhYmxlJ3MgaW1wbGVtZW50YXRpb24gKGhhc2ggdGFibGUsIHJhZGl4IHRyZWUsIGV0Yy4pIGFuZCBob3cgbWFza3MgYXJlIHVzZWQgdG8gb3B0aW1pemUgZmxvdyBsb29rdXBzLiBJJ2xsIGJlIGZvY3VzZWQgb24gYW55dGhpbmcgdGhhdCBjb3VsZCBpbXBhY3QgbG9va3VwIHBlcmZvcm1hbmNlIG9yIHRoZSBhdG9taWNpdHkgb2YgZmxvdyB0YWJsZSB1cGRhdGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MTcuODMxMDI4MTc5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA0MDc0ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmxvd19tYXNrXyhpbnNlcnR8cmVtb3ZlKVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz0yOTg9c3RhdGljIHZvaWQgdGJsX21hc2tfYXJyYXlfZGVsX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMzMwLS8qIFJlbW92ZSAnbWFzaycgZnJvbSB0aGUgbWFzayBsaXN0LCBpZiBpdCBpcyBub3QgbmVlZGVkIGFueSBtb3JlLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MzMxOnN0YXRpYyB2b2lkIGZsb3dfbWFza19yZW1vdmUoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3dfbWFzayAqbWFzaylcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTMzMi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTQ1OT1zdGF0aWMgdm9pZCB0YWJsZV9pbnN0YW5jZV9mbG93X2ZyZWUoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy00NzEtXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo0NzI6XFx0Zmxvd19tYXNrX3JlbW92ZSh0YWJsZSwgZmxvdy1cXHUwMDNlbWFzayk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy00NzMtfVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz05ODc9c3RhdGljIHN0cnVjdCBzd19mbG93X21hc2sgKmZsb3dfbWFza19maW5kKGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwMDUtLyogQWRkICdtYXNrJyBpbnRvIHRoZSBtYXNrIGxpc3QsIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHRoZXJlLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6MTAwNjpzdGF0aWMgaW50IGZsb3dfbWFza19pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRibCwgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0xMDA3LVxcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXNrICpuZXcpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTEwODE9aW50IG92c19mbG93X3RibF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtMTA4NS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjEwODY6XFx0ZXJyID0gZmxvd19tYXNrX2luc2VydCh0YWJsZSwgZmxvdywgbWFzayk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0xMDg3LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjE3Ljk0MTQ0MDkzMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjUyMTM5NzA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciBPcGVuIHZTd2l0Y2gqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgZ29lcyBsaWtlIHRoaXMuIE15IGJyYWluLCBsaWtlbHkgaW4gcmVzcG9uc2UgdG8gYSBwcm9ibGVtIG9yIHRhc2sgcmVsYXRlZCB0byBPcGVuIHZTd2l0Y2ggY29uZmlndXJhdGlvbiwgaW1tZWRpYXRlbHkgc3VnZ2VzdHMsIFwiTGV0J3MgZGlnIGludG8gdGhlIEtjb25maWcuXCIgSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIG5lZWQgZm9yIGl0LiBJIGtub3cgdGhhdCB0aGUgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIGNvbmZpZ3VyYXRpb24gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwgYW5kIGFzc29jaWF0ZWQgcHJvamVjdHMuIE15IGludGVybmFsIG1vbm9sb2d1ZSBjb250aW51ZXM6IFRoaXMgbGlrZWx5IG1lYW5zIEknbSBsb29raW5nIHRvIHVuZGVyc3RhbmQgb3IgbW9kaWZ5IHNwZWNpZmljIGJ1aWxkIG9wdGlvbnMsIGZlYXR1cmUgdG9nZ2xlcywgb3IgZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gT3BlbiB2U3dpdGNoLiBJdCBjb3VsZCBiZSBmb3IgYSBjdXN0b20gYnVpbGQsIHRyb3VibGVzaG9vdGluZyBhIGNvbmZpZ3VyYXRpb24gaXNzdWUsIG9yIG1heWJlIEknbSB3b3JraW5nIG9uIGEgbmV3IGZlYXR1cmUgYW5kIG5lZWQgdG8gcHJvcGVybHkgaW50ZWdyYXRlIGl0IGludG8gdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBUaGVyZSdzIGFuIHVuZGVybHlpbmcgYXNzdW1wdGlvbiB0aGF0IHRoZSBLY29uZmlnIGhvbGRzIHRoZSBhbnN3ZXJzLCBhdCBsZWFzdCB0aGUgc3RhcnRpbmcgcG9pbnQsIHRvIHdoYXQgSSdtIHRyeWluZyB0byBhY2hpZXZlLiBJdCByZXByZXNlbnRzIHRoZSBjZW50cmFsIHNvdXJjZSBvZiB0cnV0aCBmb3IgYnVpbGQtdGltZSBjb25maWd1cmF0aW9uLCBhbmQgSSBuZWVkIHRvIGNvbnN1bHQgaXQuIEkgYW0gbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IG9wdGlvbnMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIHByb2JhYmx5IHRoZSBkZWZhdWx0IHZhbHVlcyBhbmQgaGVscCB0ZXh0IHRvIHVuZGVyc3RhbmQgd2hhdCBpcyBhdmFpbGFibGUgYW5kIGhvdyBJIHNob3VsZCBtb2RpZnkgaXQsIHRvIGFjaGlldmUgdGhlIG9iamVjdGl2ZSBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTc0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MjAuMTkzNTgzMzQ2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQ0ODM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJPUEVOVlNXSVRDSFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL0tjb25maWctNS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTctXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaFxcXCJcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZS01LVxcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19PUEVOVlNXSVRDSCkgKz0gb3BlbnZzd2l0Y2gub1xcbm5ldC9vcGVudnN3aXRjaC9NYWtlZmlsZS03LVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MjgyND1zdGF0aWMgaW50IF9faW5pdCBkcF9pbml0KHZvaWQpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODY0LVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI4NjU6XFx0ZHJvcF9yZWFzb25zX3JlZ2lzdGVyX3N1YnN5cyhTS0JfRFJPUF9SRUFTT05fU1VCU1lTX09QRU5WU1dJVENILFxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4NjYtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2ZHJvcF9yZWFzb25fbGlzdF9vdnMpO1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9Mjg4Nz1zdGF0aWMgdm9pZCBkcF9jbGVhbnVwKHZvaWQpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0yODkyLVxcdHVucmVnaXN0ZXJfcGVybmV0X2RldmljZShcXHUwMDI2b3ZzX25ldF9vcHMpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjI4OTM6XFx0ZHJvcF9yZWFzb25zX3VucmVnaXN0ZXJfc3Vic3lzKFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfT1BFTlZTV0lUQ0gpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI4OTQtXFx0cmN1X2JhcnJpZXIoKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kcm9wLmgtNS1cXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oOjY6I2lmbmRlZiBPUEVOVlNXSVRDSF9EUk9QX0hcXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oOjc6I2RlZmluZSBPUEVOVlNXSVRDSF9EUk9QX0hcXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oLTgtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Ryb3AuaD0yNT1lbnVtIG92c19kcm9wX3JlYXNvbiB7XFxubmV0L29wZW52c3dpdGNoL2Ryb3AuaDoyNjpcXHRfX09WU19EUk9QX1JFQVNPTiA9IFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfT1BFTlZTV0lUQ0ggXFx1MDAzY1xcdTAwM2NcXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oLTI3LVxcdFxcdFxcdFxcdFNLQl9EUk9QX1JFQVNPTl9TVUJTWVNfU0hJRlQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZHJvcC5oPTM2PW92c19rZnJlZV9za2JfcmVhc29uKHN0cnVjdCBza19idWZmICpza2IsIGVudW0gb3ZzX2Ryb3BfcmVhc29uIHJlYXNvbilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kcm9wLmgtNDAtXFxubmV0L29wZW52c3dpdGNoL2Ryb3AuaDo0MTojZW5kaWYgLyogT1BFTlZTV0lUQ0hfRFJPUF9IICovXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaC00LVxcbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oOjU6I2lmICFkZWZpbmVkKF9UUkFDRV9PUEVOVlNXSVRDSF9IKSB8fCBkZWZpbmVkKFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEKVxcbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oOjY6I2RlZmluZSBfVFJBQ0VfT1BFTlZTV0lUQ0hfSFxcbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oLTctXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaD04Mj1UUkFDRV9FVkVOVChvdnNfZHBfdXBjYWxsLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL29wZW52c3dpdGNoX3RyYWNlLmgtMTUwLVxcbm5ldC9vcGVudnN3aXRjaC9vcGVudnN3aXRjaF90cmFjZS5oOjE1MTojZW5kaWYgLyogX1RSQUNFX09QRU5WU1dJVENIX0ggKi9cXG5uZXQvb3BlbnZzd2l0Y2gvb3BlbnZzd2l0Y2hfdHJhY2UuaC0xNTItXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvdnBvcnQtaW50ZXJuYWxfZGV2LmM9OTQ9c3RhdGljIHZvaWQgZG9fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1pbnRlcm5hbF9kZXYuYy0xMDItXFx0bmV0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjY9IH5JRkZfVFhfU0tCX1NIQVJJTkc7XFxubmV0L29wZW52c3dpdGNoL3Zwb3J0LWludGVybmFsX2Rldi5jOjEwMzpcXHRuZXRkZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX0xJVkVfQUREUl9DSEFOR0UgfCBJRkZfT1BFTlZTV0lUQ0ggfFxcbm5ldC9vcGVudnN3aXRjaC92cG9ydC1pbnRlcm5hbF9kZXYuYy0xMDQtXFx0XFx0XFx0ICAgICAgSUZGX05PX1FVRVVFO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMToyMC4yNTkwMzU1MTFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTkwMjk1MTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBmb3IgYENPTkZJR19PUEVOVlNXSVRDSGAuIFRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMgd2l0aCB0aGVzZSBraW5kcyBvZiB0aGluZ3MsIGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yeS4gSW4gdGhpcyBjYXNlLCB0aGF0J3MgYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYC4gSSdsbCBvcGVuIHRoYXQgdXAgYW5kIHRha2UgYSBsb29rLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgbG9naWMsIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgZmVhdHVyZXMgb3IgbW9kdWxlcywgYW5kIG1heWJlIGV2ZW4gc29tZSBwbGF0Zm9ybS1zcGVjaWZpYyByZXF1aXJlbWVudHMuIFRoaXMgc2hvdWxkIHRlbGwgbWUgZXZlcnl0aGluZyBJIG5lZWQgdG8ga25vdyBhYm91dCB3aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQgb3IgcHJlc2VudCBpbiB0aGUgc3lzdGVtIGZvciBgQ09ORklHX09QRU5WU1dJVENIYCB0byBiZSBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCB0byBidWlsZCBjb3JyZWN0bHkuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQncyB3aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODUzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MjIuMTYxOTg5NTk4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE9wZW4gdlN3aXRjaFxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgT1BFTlZTV0lUQ0hcXG4gICA3OlxcdFxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA5OlxcdFxcdGRlcGVuZHMgb24gIU5GX0NPTk5UUkFDSyB8fCBcXFxcXFxuICAxMDpcXHRcXHRcXHQgICAoTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2ICgoIU5GX0RFRlJBR19JUFY2IHx8IE5GX0RFRlJBR19JUFY2KSBcXHUwMDI2XFx1MDAyNiBcXFxcXFxuICAxMTpcXHRcXHRcXHRcXHRcXHQgICAgICghTkZfTkFUIHx8IE5GX05BVCkgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMTI6XFx0XFx0XFx0XFx0XFx0ICAgICAoIU5FVEZJTFRFUl9DT05OQ09VTlQgfHwgTkVURklMVEVSX0NPTk5DT1VOVCkpKVxcbiAgMTM6XFx0XFx0ZGVwZW5kcyBvbiBQU0FNUExFIHx8ICFQU0FNUExFXFxuICAxNDpcXHRcXHRzZWxlY3QgTVBMU1xcbiAgMTU6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDE2OlxcdFxcdHNlbGVjdCBORVRfTVBMU19HU09cXG4gIDE3OlxcdFxcdHNlbGVjdCBEU1RfQ0FDSEVcXG4gIDE4OlxcdFxcdHNlbGVjdCBORVRfTlNIXFxuICAxOTpcXHRcXHRzZWxlY3QgTkZfQ09OTlRSQUNLX09WUyBpZiBORl9DT05OVFJBQ0tcXG4gIDIwOlxcdFxcdHNlbGVjdCBORl9OQVRfT1ZTIGlmIE5GX05BVFxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBPcGVuIHZTd2l0Y2ggaXMgYSBtdWx0aWxheWVyIEV0aGVybmV0IHN3aXRjaCB0YXJnZXRlZCBhdCB2aXJ0dWFsaXplZFxcbiAgMjM6XFx0XFx0ICBlbnZpcm9ubWVudHMuICBJbiBhZGRpdGlvbiB0byBzdXBwb3J0aW5nIGEgdmFyaWV0eSBvZiBmZWF0dXJlc1xcbiAgMjQ6XFx0XFx0ICBleHBlY3RlZCBpbiBhIHRyYWRpdGlvbmFsIGhhcmR3YXJlIHN3aXRjaCwgaXQgZW5hYmxlcyBmaW5lLWdyYWluZWRcXG4gIDI1OlxcdFxcdCAgcHJvZ3JhbW1hdGljIGV4dGVuc2lvbiBhbmQgZmxvdy1iYXNlZCBjb250cm9sIG9mIHRoZSBuZXR3b3JrLiAgVGhpc1xcbiAgMjY6XFx0XFx0ICBjb250cm9sIGlzIHVzZWZ1bCBpbiBhIHdpZGUgdmFyaWV0eSBvZiBhcHBsaWNhdGlvbnMgYnV0IGlzXFxuICAyNzpcXHRcXHQgIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgaW4gbXVsdGktc2VydmVyIHZpcnR1YWxpemF0aW9uIGRlcGxveW1lbnRzLFxcbiAgMjg6XFx0XFx0ICB3aGljaCBhcmUgb2Z0ZW4gY2hhcmFjdGVyaXplZCBieSBoaWdobHkgZHluYW1pYyBlbmRwb2ludHMgYW5kIHRoZVxcbiAgMjk6XFx0XFx0ICBuZWVkIHRvIG1haW50YWluIGxvZ2ljYWwgYWJzdHJhY3Rpb25zIGZvciBtdWx0aXBsZSB0ZW5hbnRzLlxcbiAgMzA6XFx0XFxuICAzMTpcXHRcXHQgIFRoZSBPcGVuIHZTd2l0Y2ggZGF0YXBhdGggcHJvdmlkZXMgYW4gaW4ta2VybmVsIGZhc3QgcGF0aCBmb3IgcGFja2V0XFxuICAzMjpcXHRcXHQgIGZvcndhcmRpbmcuICBJdCBpcyBjb21wbGVtZW50ZWQgYnkgYSB1c2Vyc3BhY2UgZGFlbW9uLCBvdnMtdnN3aXRjaGQsXFxuICAzMzpcXHRcXHQgIHdoaWNoIGlzIGFibGUgdG8gYWNjZXB0IGNvbmZpZ3VyYXRpb24gZnJvbSBhIHZhcmlldHkgb2Ygc291cmNlcyBhbmRcXG4gIDM0OlxcdFxcdCAgdHJhbnNsYXRlIGl0IGludG8gcGFja2V0IHByb2Nlc3NpbmcgcnVsZXMuXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgU2VlIGh0dHA6Ly9vcGVudnN3aXRjaC5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHVzZXJzcGFjZVxcbiAgMzc6XFx0XFx0ICB1dGlsaXRpZXMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZVxcbiAgNDA6XFx0XFx0ICBjYWxsZWQgb3BlbnZzd2l0Y2guXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjIyLjE2MjA0ODQ3OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MTk3NTE3MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhbiBSQ1UgQnVnIEZpeCBpbiBPcGVuIHZTd2l0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGB0YmxfbWFza19hcnJheV9yZWFsbG9jYCBpcyBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBsb2NhbGl6ZWQgd2l0aGluIHRoaXMgZmlsZS4gSXQncyBjYWxsZWQgYnkgYHRibF9tYXNrX2FycmF5X2FkZF9tYXNrYCBhbmQgYHRibF9tYXNrX2FycmF5X2RlbF9tYXNrYCwgd2hpY2ggYXJlIGtleSBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRoZSBmbG93IHRhYmxlJ3MgbWFza3MuIFRoYXQncyBvdXIgaW5pdGlhbCBjb250ZXh0LlxuXG5Mb29raW5nIGF0IHRoZSBwYXRjaCwgdGhlIGNoYW5nZSBzZWVtcyBzaW1wbGUgb24gdGhlIHN1cmZhY2UsIGJ1dCBpdCdzIGNyaXRpY2FsbHkgaW1wb3J0YW50LiBUaGUgYGNhbGxfcmN1YCBjYWxsLCB3aGljaCBzY2hlZHVsZXMgdGhlIG9sZCBtYXNrIGFycmF5IGZvciByZWNsYW1hdGlvbiB2aWEgUkNVLCB3YXMgKnByZXZpb3VzbHkqIHBsYWNlZCAqYmVmb3JlKiB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIFRoaXMgaXMgYSBjbGFzc2ljIFJDVSBvcmRlcmluZyBpc3N1ZS4gSXQncyBhIHRleHRib29rIGV4YW1wbGUgb2YgYSBoYXphcmQuXG5cbkhlcmUncyB0aGUgcHJvYmxlbTogQnkgc2NoZWR1bGluZyB0aGUgYG9sZGAgYXJyYXkgZm9yIFJDVSByZWNsYW1hdGlvbiAqYmVmb3JlKiB1cGRhdGluZyBgdGJsLVx1MDAzZW1hc2tfYXJyYXlgIHRvIHBvaW50IHRvIHRoZSBgbmV3YCBhcnJheSwgdGhlcmUncyBhIHdpbmRvdyB3aGVyZSByZWFkZXJzIG9mIGB0YmwtXHUwMDNlbWFza19hcnJheWAgY291bGQgcG90ZW50aWFsbHkgYWNjZXNzIHRoZSBgb2xkYCBhcnJheSBhZnRlciB0aGUgUkNVIGdyYWNlIHBlcmlvZCBoYXMgc3RhcnRlZCwgb3Igd29yc2UsICp3aGlsZSogaXQncyBiZWluZyBmcmVlZC4gVGhhdCBpcywgdGhlIG9sZCBhcnJheSBjb3VsZCBiZSByZWNsYWltZWQgYmVmb3JlIHJlYWRlcnMgaGFkIHRoZSBvcHBvcnR1bml0eSB0byBhY2Nlc3MgaXQuIFRoaXMgd291bGQgYmUgYSBuYXN0eSBtZW1vcnkgY29ycnVwdGlvbiBidWcuXG5cbk1vdmluZyBgY2FsbF9yY3VgICphZnRlciogdGhlIGByY3VfYXNzaWduX3BvaW50ZXJgIGNvcnJlY3RzIHRoaXMgb3JkZXJpbmcuIE5vdywgd2UncmUgZ3VhcmFudGVlZCB0aGF0IGFueSByZWFkZXIgYWNjZXNzaW5nIGB0YmwtXHUwMDNlbWFza19hcnJheWAgd2lsbCBzZWUgdGhlIGBuZXdgIGFycmF5ICpiZWZvcmUqIHRoZSBgb2xkYCBhcnJheSBpcyByZWNsYWltZWQuIFRoaXMgaXMgdGhlIGNvcnJlY3QsIHNhZmUgd2F5IHRvIGhhbmRsZSBSQ1UgdXBkYXRlcy5cblxuTm93LCBpcyB0aGlzIGJ1ZyByZWFjaGFibGU/IEFic29sdXRlbHkuIE9wZW4gdlN3aXRjaCBpcyBhIGNlbnRyYWwgY29tcG9uZW50LCBhbmQgaXRzIGZ1bmN0aW9uYWxpdHkgaXMgZXhwb3NlZCB0aHJvdWdoIGdlbmVyaWMgbmV0bGluay4gVGhlIGBPVlNfRkxPV19DTURfKmAgZmFtaWx5IG9mIGNvbW1hbmRzLCBhbG9uZyB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBvdnNfZmxvd190YmxfaW5zZXJ0YCBhbmQgYG92c19mbG93X3RibF9yZW1vdmVgLCBwcm92aWRlIHRoZSBlbnRyeSBwb2ludHMuIEFuZCwgb2YgY291cnNlLCBzeXprYWxsZXIgaXMgY29uc3RhbnRseSBoYW1tZXJpbmcgdGhlc2UgaW50ZXJmYWNlcyB3aXRoIHZhcmlvdXMgZmxvdyBvcGVyYXRpb25zLCB3aGljaCB3b3VsZCBlYXNpbHkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aC4gSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyBzeXprYWxsZXIgcmVwb3J0IG9uIHRoaXMsIHRvby5cblRvIGVuc3VyZSB0aGlzIGlzIHNvdW5kLCBJIG5lZWQgdG8gbG9vayBhdCBvdGhlciBleHBvcnRlZCBmdW5jdGlvbnMgaW4gYGZsb3dfdGFibGUuaGAgYW5kIGBmbG93X3RhYmxlLmNgIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgaW50byB0aGUgY29kZSB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIGhhemFyZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2OTAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMToyOS4zNTk1Njc3NjFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3ODYzNjA5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvdnNfZmxvd190YmxfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9vcGVudnN3aXRjaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xNjU9c3RhdGljIHZvaWQgZGVzdHJveV9kcF9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNjgtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTY5OlxcdG92c19mbG93X3RibF9kZXN0cm95KFxcdTAwMjZkcC1cXHUwMDNldGFibGUpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE3MC1cXHRmcmVlX3BlcmNwdShkcC1cXHUwMDNlc3RhdHNfcGVyY3B1KTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTI0NT12b2lkIG92c19kcF9wcm9jZXNzX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTI2MS1cXHQvKiBMb29rIHVwIGZsb3cuICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MjYyOlxcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3N0YXRzKFxcdTAwMjZkcC1cXHUwMDNldGFibGUsIGtleSwgc2tiX2dldF9oYXNoKHNrYiksXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMjYzLVxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2bl9tYXNrX2hpdCwgXFx1MDAyNm5fY2FjaGVfaGl0KTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTc1Nz1zdGF0aWMgdm9pZCBnZXRfZHBfc3RhdHMoY29uc3Qgc3RydWN0IGRhdGFwYXRoICpkcCwgc3RydWN0IG92c19kcF9zdGF0cyAqc3RhdHMsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03NjMtXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6NzY0OlxcdHN0YXRzLVxcdTAwM2VuX2Zsb3dzID0gb3ZzX2Zsb3dfdGJsX2NvdW50KFxcdTAwMjZkcC1cXHUwMDNldGFibGUpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjc2NTpcXHRtZWdhX3N0YXRzLVxcdTAwM2VuX21hc2tzID0gb3ZzX2Zsb3dfdGJsX251bV9tYXNrcyhcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy03NjYtXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xMDAwPXN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA4MC1cXHRpZiAob3ZzX2lkZW50aWZpZXJfaXNfdWZpZChcXHUwMDI2bmV3X2Zsb3ctXFx1MDAzZWlkKSlcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMDgxOlxcdFxcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoXFx1MDAyNmRwLVxcdTAwM2V0YWJsZSwgXFx1MDAyNm5ld19mbG93LVxcdTAwM2VpZCk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA4Mi1cXHRpZiAoIWZsb3cpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTA4MzpcXHRcXHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cChcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlLCBrZXkpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEwODQtXFx0aWYgKGxpa2VseSghZmxvdykpIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTEwODctXFx0XFx0LyogUHV0IGZsb3cgaW4gYnVja2V0LiAqL1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjEwODg6XFx0XFx0ZXJyb3IgPSBvdnNfZmxvd190YmxfaW5zZXJ0KFxcdTAwMjZkcC1cXHUwMDNldGFibGUsIG5ld19mbG93LCBcXHUwMDI2bWFzayk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTA4OS1cXHRcXHRpZiAodW5saWtlbHkoZXJyb3IpKSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMTIxLVxcdFxcdFxcdGlmIChvdnNfaWRlbnRpZmllcl9pc19rZXkoXFx1MDAyNmZsb3ctXFx1MDAzZWlkKSlcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMTIyOlxcdFxcdFxcdFxcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KFxcdTAwMjZkcC1cXHUwMDNldGFibGUsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTEyMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1hdGNoKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTEyNzA9c3RhdGljIGludCBvdnNfZmxvd19jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzE2LVxcdGlmICh1ZmlkX3ByZXNlbnQpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTMxNzpcXHRcXHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF91ZmlkKFxcdTAwMjZkcC1cXHUwMDNldGFibGUsIFxcdTAwMjZzZmlkKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xMzE4LVxcdGVsc2VcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxMzE5OlxcdFxcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KFxcdTAwMjZkcC1cXHUwMDNldGFibGUsIFxcdTAwMjZtYXRjaCk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTMyMC1cXHRpZiAodW5saWtlbHkoIWZsb3cpKSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xMzczPXN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQwOS1cXHRpZiAodWZpZF9wcmVzZW50KVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE0MTA6XFx0XFx0ZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfdWZpZChcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlLCBcXHUwMDI2dWZpZCk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQxMS1cXHRlbHNlXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTQxMjpcXHRcXHRmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlLCBcXHUwMDI2bWF0Y2gpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0MTMtXFx0aWYgKCFmbG93KSB7XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xNDMyPXN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ2NC1cXHRpZiAodW5saWtlbHkoIWFbT1ZTX0ZMT1dfQVRUUl9LRVldIFxcdTAwMjZcXHUwMDI2ICF1ZmlkX3ByZXNlbnQpKSB7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTQ2NTpcXHRcXHRlcnIgPSBvdnNfZmxvd190YmxfZmx1c2goXFx1MDAyNmRwLVxcdTAwM2V0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTQ2Ni1cXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0NjktXFx0aWYgKHVmaWRfcHJlc2VudClcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYzoxNDcwOlxcdFxcdGZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoXFx1MDAyNmRwLVxcdTAwM2V0YWJsZSwgXFx1MDAyNnVmaWQpO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0NzEtXFx0ZWxzZVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE0NzI6XFx0XFx0ZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfZXhhY3QoXFx1MDAyNmRwLVxcdTAwM2V0YWJsZSwgXFx1MDAyNm1hdGNoKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDczLVxcdGlmICh1bmxpa2VseSghZmxvdykpIHtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE0OTctXFx0ICogdGhlIGZsb3ctXFx1MDAzZW1hc2sgdGhhdCBjYW4gYmUgc2NoZWR1bGVkIHRvIGJlIGZyZWVkIGJ5IHRoZVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE0OTg6XFx0ICogb3ZzX2Zsb3dfdGJsX3JlbW92ZSgpIGFuZCB3ZSdyZSBub3QgaG9sZGluZyB0aGUgUkNVIHJlYWQgbG9jay5cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNDk5LVxcdCAqL1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE1MDA6XFx0b3ZzX2Zsb3dfdGJsX3JlbW92ZShcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlLCBmbG93KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNTAxLVxcdG92c191bmxvY2soKTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE1MTM9c3RhdGljIGludCBvdnNfZmxvd19jbWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNTQxLVxcdFxcdG9iaiA9IGNiLVxcdTAwM2VhcmdzWzFdO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE1NDI6XFx0XFx0ZmxvdyA9IG92c19mbG93X3RibF9kdW1wX25leHQodGksIFxcdTAwMjZidWNrZXQsIFxcdTAwMjZvYmopO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE1NDMtXFx0XFx0aWYgKCFmbG93KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM9MTYyND1zdGF0aWMgaW50IG92c19kcF9jbWRfZmlsbF9pbmZvKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNjU3LVxcdGlmIChubGFfcHV0X3UzMihza2IsIE9WU19EUF9BVFRSX01BU0tTX0NBQ0hFX1NJWkUsXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTY1ODpcXHRcXHRcXHRvdnNfZmxvd190YmxfbWFza3NfY2FjaGVfc2l6ZShcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlKSkpXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTY1OS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jPTE3NjY9c3RhdGljIGludCBvdnNfZHBfY2hhbmdlKHN0cnVjdCBkYXRhcGF0aCAqZHAsIHN0cnVjdCBubGF0dHIgKmFbXSlcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE3OTAtXFx0XFx0Y2FjaGVfc2l6ZSA9IG5sYV9nZXRfdTMyKGFbT1ZTX0RQX0FUVFJfTUFTS1NfQ0FDSEVfU0laRV0pO1xcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE3OTE6XFx0XFx0ZXJyID0gb3ZzX2Zsb3dfdGJsX21hc2tzX2NhY2hlX3Jlc2l6ZShcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlLCBjYWNoZV9zaXplKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xNzkyLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYz0xODQwPXN0YXRpYyBpbnQgb3ZzX2RwX2NtZF9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jLTE4NjUtXFx0LyogQWxsb2NhdGUgdGFibGUuICovXFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmM6MTg2NjpcXHRlcnIgPSBvdnNfZmxvd190YmxfaW5pdChcXHUwMDI2ZHAtXFx1MDAzZXRhYmxlKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xODY3LVxcdGlmIChlcnIpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZGF0YXBhdGguYy0xOTM2LWVycl9kZXN0cm95X3RhYmxlOlxcbm5ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jOjE5Mzc6XFx0b3ZzX2Zsb3dfdGJsX2Rlc3Ryb3koXFx1MDAyNmRwLVxcdTAwM2V0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMtMTkzOC1lcnJfZGVzdHJveV9kcDpcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9NzI9c3RydWN0IHN3X2Zsb3cgKm92c19mbG93X2FsbG9jKHZvaWQpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwMi1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjEwMzppbnQgb3ZzX2Zsb3dfdGJsX2NvdW50KGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwNC17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTM1OT1zdGF0aWMgc3RydWN0IG1hc2tfY2FjaGUgKnRibF9tYXNrX2NhY2hlX2FsbG9jKHUzMiBzaXplKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0zODgtfVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6Mzg5OmludCBvdnNfZmxvd190YmxfbWFza3NfY2FjaGVfcmVzaXplKHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgdTMyIHNpemUpXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy0zOTAte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy00MTAtXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo0MTE6aW50IG92c19mbG93X3RibF9pbml0KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTQxMi17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jPTUwMz1zdGF0aWMgdm9pZCB0YWJsZV9pbnN0YW5jZV9kZXN0cm95KHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTUxMi0gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjUxMzp2b2lkIG92c19mbG93X3RibF9kZXN0cm95KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSlcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTUxNC17XFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTUyNC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjUyNTpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2R1bXBfbmV4dChzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNTI2LVxcdFxcdFxcdFxcdCAgICAgICB1MzIgKmJ1Y2tldCwgdTMyICpsYXN0KVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz02MDM9c3RhdGljIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGFibGVfaW5zdGFuY2VfcmVoYXNoKHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTYxNi1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjYxNzppbnQgb3ZzX2Zsb3dfdGJsX2ZsdXNoKHN0cnVjdCBmbG93X3RhYmxlICpmbG93X3RhYmxlKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNjE4LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9NzI3PXN0YXRpYyBzdHJ1Y3Qgc3dfZmxvdyAqZmxvd19sb29rdXAoc3RydWN0IGZsb3dfdGFibGUgKnRibCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtNzgyLSAqICovXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo3ODM6c3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3RibF9sb29rdXBfc3RhdHMoc3RydWN0IGZsb3dfdGFibGUgKnRibCxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTc4NC1cXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy04NDYtXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo4NDc6c3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3RibF9sb29rdXAoc3RydWN0IGZsb3dfdGFibGUgKnRibCxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTg0OC1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTg2Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjg2NzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdChzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtODY4LVxcdFxcdFxcdFxcdFxcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz05MDg9Ym9vbCBvdnNfZmxvd19jbXAoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTkxNi1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjkxNzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cF91ZmlkKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05MTgtXFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzd19mbG93X2lkICp1ZmlkKVxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05MzUtXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYzo5MzY6aW50IG92c19mbG93X3RibF9udW1fbWFza3MoY29uc3Qgc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlKVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtOTM3LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtOTQxLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6OTQyOnUzMiBvdnNfZmxvd190YmxfbWFza3NfY2FjaGVfc2l6ZShjb25zdCBzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUpXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYy05NDMte1xcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYz05NDk9c3RhdGljIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGFibGVfaW5zdGFuY2VfZXhwYW5kKHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGksXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTk1NS0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIE9WUyBtdXRleCBoZWxkLiAqL1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM6OTU2OnZvaWQgb3ZzX2Zsb3dfdGJsX3JlbW92ZShzdHJ1Y3QgZmxvd190YWJsZSAqdGFibGUsIHN0cnVjdCBzd19mbG93ICpmbG93KVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMtOTU3LXtcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmM9MTA1OT1zdGF0aWMgdm9pZCBmbG93X3VmaWRfaW5zZXJ0KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgc3RydWN0IHN3X2Zsb3cgKmZsb3cpXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwODAtLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBPVlMgbXV0ZXggaGVsZC4gKi9cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jOjEwODE6aW50IG92c19mbG93X3RibF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jLTEwODItXFx0XFx0XFx0Y29uc3Qgc3RydWN0IHN3X2Zsb3dfbWFzayAqbWFzaylcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg9Nzg9dm9pZCBvdnNfZmxvd19mcmVlKHN0cnVjdCBzd19mbG93ICosIGJvb2wgZGVmZXJyZWQpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgtNzktXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4MDppbnQgb3ZzX2Zsb3dfdGJsX2luaXQoc3RydWN0IGZsb3dfdGFibGUgKik7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4MTppbnQgb3ZzX2Zsb3dfdGJsX2NvdW50KGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4Mjp2b2lkIG92c19mbG93X3RibF9kZXN0cm95KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4MzppbnQgb3ZzX2Zsb3dfdGJsX2ZsdXNoKHN0cnVjdCBmbG93X3RhYmxlICpmbG93X3RhYmxlKTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTg0LVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODU6aW50IG92c19mbG93X3RibF9pbnNlcnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTg2LVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBzd19mbG93X21hc2sgKm1hc2spO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODc6dm9pZCBvdnNfZmxvd190YmxfcmVtb3ZlKHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgc3RydWN0IHN3X2Zsb3cgKmZsb3cpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6ODg6aW50ICBvdnNfZmxvd190YmxfbnVtX21hc2tzKGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo4OTp1MzIgIG92c19mbG93X3RibF9tYXNrc19jYWNoZV9zaXplKGNvbnN0IHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo5MDppbnQgIG92c19mbG93X3RibF9tYXNrc19jYWNoZV9yZXNpemUoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCB1MzIgc2l6ZSk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo5MTpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2R1bXBfbmV4dChzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRhYmxlLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgtOTItXFx0XFx0XFx0XFx0ICAgICAgIHUzMiAqYnVja2V0LCB1MzIgKmlkeCk7XFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaDo5MzpzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cF9zdGF0cyhzdHJ1Y3QgZmxvd190YWJsZSAqLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgtOTQtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgtOTctXFx0XFx0XFx0XFx0XFx0ICB1MzIgKm5fY2FjaGVfaGl0KTtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oOjk4OnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwKHN0cnVjdCBmbG93X3RhYmxlICosXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaC05OS1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICopO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6MTAwOnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KHN0cnVjdCBmbG93X3RhYmxlICp0YmwsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaC0xMDEtXFx0XFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmg6MTAyOnN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoc3RydWN0IGZsb3dfdGFibGUgKixcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oLTEwMy1cXHRcXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHN3X2Zsb3dfaWQgKik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjI5LjczODIwNzU3N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NzkwMTY0NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBPcGVuIHZTd2l0Y2ggUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgc2VlIHdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIE9wZW4gdlN3aXRjaCwgc3BlY2lmaWNhbGx5IGFkZHJlc3NpbmcgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBpc3N1ZSB3aXRoaW4gYHRibF9tYXNrX2FycmF5X3JlYWxsb2MoKWAuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhpcyBmdW5jdGlvbiBhcyByZXNpZGluZyB3aXRoaW4gdGhlIGNvcmUgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdmlydHVhbCBzd2l0Y2ggZGF0YXBhdGguIFRoYXQncyBhIGNyaXRpY2FsIGFyZWEsIHNvIGFueSBtZW1vcnkgbWFuYWdlbWVudCBvciBzeW5jaHJvbml6YXRpb24gaXNzdWVzIGhlcmUgYXJlIGRlZmluaXRlbHkgd29ydGggaW52ZXN0aWdhdGluZy5cblxuVGhlIGtleSBpcyB0aGF0IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAsIGFuZCBJIGFncmVlLCBiZWNhdXNlIHdlIGhhdmUgYSBjbGVhciwgZG9jdW1lbnRlZCBSQ1Ugb3JkZXJpbmcgaXNzdWUgaW4gdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiByZXNpZGVzIGluIGBuZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jYCwgcGFydCBvZiB0aGUgY29yZSBuZXR3b3JraW5nLCBhbmQgaW1wb3J0YW50bHksIGl0J3MgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBzdGFuZGFyZCBnZW5lcmljIG5ldGxpbmsgY29tbWFuZHMgKGBvdnNfZmxvd19jbWRfbmV3YCwgYG92c19mbG93X2NtZF9kZWxgLCBldGMuKS4gVGhhdCdzIGEgZ29vZCBhdHRhY2sgc3VyZmFjZS5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGBGb2N1c1N5bWJvbHNgLiBXZSBoYXZlIGEgZ29vZCBsaXN0IHRvIHN0YXJ0OiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AsIGB0YmxfbWFza19hcnJheV9hZGRfbWFza2AsIGB0YmxfbWFza19hcnJheV9kZWxfbWFza2AsIGBvdnNfZmxvd190YmxfaW5zZXJ0YCwgYW5kIGBvdnNfZmxvd190YmxfcmVtb3ZlYC4gQnV0LCBJJ20gZ29pbmcgdG8gZG8gYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIGluIHRoYXQgZmlsZSwganVzdCB0byBiZSBzdXJlIHdlJ3JlIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuXG5cbkFscmlnaHQsIGEgcXVpY2sgbG9vayByZXZlYWxzIHdlIGFsc28gaGF2ZSBgZmxvd19tYXNrX2luc2VydGAgYW5kIGBmbG93X21hc2tfcmVtb3ZlYC4gV2hpbGUgYHRibF9tYXNrX2FycmF5X3JlYWxsb2NgIGlzIHN0YXRpYywgdGhhdCBkb2Vzbid0IGNvbmNlcm4gbWUgYXMgdGhpcyBpcyB0aGUgYWN0dWFsIHNvdXJjZSBvZiB0aGUgY2hhbmdlLCB3aGljaCBpcyBnb29kLiBUaGUgb3RoZXIgbGlzdGVkIGZ1bmN0aW9ucyBhbHNvIHNlZW0gcmVsZXZhbnQuXG5cbkZpbmFsbHksIHdlIG5lZWQgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZW5hYmxlZCBmb3IgdGhpcyB0byBiZSByZWxldmFudC4gV2UncmUgbG9va2luZyBhdCBgRW5hYmxlQ29uZmlnc2AsIGFuZCB0aGUga2V5IGhlcmUgaXMgYE9QRU5WU1dJVENIYC4gVGhhdCBtYWtlcyBzZW5zZS4gSXQgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIHNvbWUgb3B0aW9uYWwgbmV0ZmlsdGVyL3BzYW1wbGUgY29uZmlncywgd2hpY2ggYXJlIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zLlxuXG5TbywganVzdCB0byBzdW1tYXJpemUgYW5kIG1ha2Ugc3VyZSB3ZSBoYXZlIGV2ZXJ5dGhpbmcsIHdlIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2Aga25vd2luZyB3ZSBoYXZlOlxuXG4xLiAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYFxuMi4gIGBGb2N1c1N5bWJvbHNgOiBBIGNvbXByZWhlbnNpdmUgbGlzdCBvZiBmdW5jdGlvbnNcbjMuICBgRW5hYmxlQ29uZmlnc2A6IGBPUEVOVlNXSVRDSGBcbjQuICBBbmQgYSBzb2xpZCB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWFzb25pbmcsIGFzIGRlc2NyaWJlZCBhYm92ZS4gR29vZCB0byBnby5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MTMsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjM0LjUyODM3NTUyN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjMzMDI4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0YmxfbWFza19hcnJheV9yZWFsbG9jXCIsXG4gICAgXCJ0YmxfbWFza19hcnJheV9hZGRfbWFza1wiLFxuICAgIFwidGJsX21hc2tfYXJyYXlfZGVsX21hc2tcIixcbiAgICBcIm92c19mbG93X3RibF9pbnNlcnRcIixcbiAgICBcIm92c19mbG93X3RibF9yZW1vdmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBSQ1Ugc3luY2hyb25pemF0aW9uIG9yZGVyaW5nIGlzc3VlIGluIE9wZW4gdlN3aXRjaCdzIG1hc2sgYXJyYXkgcmVhbGxvY2F0aW9uICh0YmxfbWFza19hcnJheV9yZWFsbG9jKSwgZW5zdXJpbmcgb2xkIG1hc2sgYXJyYXkgbWVtb3J5IGlzIHNjaGVkdWxlZCBmb3IgUkNVIHJlY2xhbWF0aW9uIG9ubHkgYWZ0ZXIgdGhlIG5ldyBwb2ludGVyIGlzIHB1Ymxpc2hlZCB3aXRoIHJjdV9hc3NpZ25fcG9pbnRlci4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgT3BlbiB2U3dpdGNoIG5ldGxpbmsgZmxvdyBtYW5hZ2VtZW50IGNvbW1hbmRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGJsX21hc2tfYXJyYXlfcmVhbGxvY1wiLFxuICAgIFwidGJsX21hc2tfYXJyYXlfYWRkX21hc2tcIixcbiAgICBcInRibF9tYXNrX2FycmF5X2RlbF9tYXNrXCIsXG4gICAgXCJvdnNfZmxvd190YmxfaW5zZXJ0XCIsXG4gICAgXCJvdnNfZmxvd190YmxfcmVtb3ZlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gUkNVIHN5bmNocm9uaXphdGlvbiBvcmRlcmluZyBpc3N1ZSBpbiBPcGVuIHZTd2l0Y2gncyBtYXNrIGFycmF5IHJlYWxsb2NhdGlvbiAodGJsX21hc2tfYXJyYXlfcmVhbGxvYyksIGVuc3VyaW5nIG9sZCBtYXNrIGFycmF5IG1lbW9yeSBpcyBzY2hlZHVsZWQgZm9yIFJDVSByZWNsYW1hdGlvbiBvbmx5IGFmdGVyIHRoZSBuZXcgcG9pbnRlciBpcyBwdWJsaXNoZWQgd2l0aCByY3VfYXNzaWduX3BvaW50ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGZsb3cgbWFuYWdlbWVudCBjb21tYW5kcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6MzQuNjU0NzEzMzM5WiIsIlNlcSI6MTksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE5ODE0MDA2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjM0LjY1NTIwOTc2OVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5MTk3NjQwNzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb3JyZWN0cyB0aGUgUkNVIHBvaW50ZXIgcHVibGlzaGluZyBzZXF1ZW5jZSBpbiB0YmxfbWFza19hcnJheV9yZWFsbG9jKCkgYnkgbW92aW5nIGNhbGxfcmN1KCkgYWZ0ZXIgcmN1X2Fzc2lnbl9wb2ludGVyKCksIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgcmFjZSBjb25kaXRpb24gd2hlcmUgb2xkIG1hc2sgYXJyYXkgc3RydWN0dXJlcyBjb3VsZCBiZSByZWNsYWltZWQgd2hpbGUgc3RpbGwgcmVmZXJlbmNlZC4gTWVtb3J5IGFsbG9jYXRpb25zIGZvciBtYXNrX2FycmF5IGFyZSBwZXJmb3JtZWQgd2l0aCBremFsbG9jKCkgYW5kIF9fYWxsb2NfcGVyY3B1KCksIGVuc3VyaW5nIG1lbW9yeSBpcyBmdWxseSB6ZXJvLWluaXRpYWxpemVkLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgdW5pbml0aWFsaXplZCBjb25kaXRpb25hbCBicmFuY2hlcywgb3IgdXNlci1zcGFjZSBpbmZvLWxlYWtzIGFyZSBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQuIFJDVSBsaWZldGltZSBhbmQgdXNlLWFmdGVyLWZyZWUgaXNzdWVzIGFyZSBkZXRlY3RhYmxlIGJ5IEtBU0FOLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA2NTA2ZWE2ZTk3MGJjZTkzZmM2OGQ0Y2IwNjNmZGQ1MGU3NmY4NDNiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgNiAyMTowMDo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jXG5pbmRleCA2N2Q1YjhjMGZlNzkyLi4xZTBmOWQxOTNlYjA2IDEwMDY0NFxuLS0tIGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1xuQEAgLTI1NywxMSArMjU3LDEzIEBAIHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSlcbiBcdFx0XHRpZiAob3ZzbF9kZXJlZmVyZW5jZShvbGQtXHUwMDNlbWFza3NbaV0pKVxuIFx0XHRcdFx0bmV3LVx1MDAzZW1hc2tzW25ldy1cdTAwM2Vjb3VudCsrXSA9IG9sZC1cdTAwM2VtYXNrc1tpXTtcbiBcdFx0fVxuLVx0XHRjYWxsX3JjdShcdTAwMjZvbGQtXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XG4gXHR9XG4gXG4gXHRyY3VfYXNzaWduX3BvaW50ZXIodGJsLVx1MDAzZW1hc2tfYXJyYXksIG5ldyk7XG4gXG4rXHRpZiAob2xkKVxuK1x0XHRjYWxsX3JjdShcdTAwMjZvbGQtXHUwMDNlcmN1LCBtYXNrX2FycmF5X3JjdV9jYik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNlQyMTowMTozNC42NTUyMTA2ODlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE1MTA1MzEzMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBTYW5pdGl6ZXIgU3RyYXRlZ3kqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgZnV6emluZyBhcHByb2FjaCBmb3IgdGhpcyBrZXJuZWwgcGF0Y2guIFRoZSBnb2FsIGlzIHRvIGRldGVybWluZSB3aGV0aGVyIEtBU0FOL3N0YW5kYXJkIGZ1enppbmcgaXMgZW5vdWdoLCBvciBpZiB3ZSBuZWVkIHRoZSBtb3JlIGludm9sdmVkIEtNU0FOLiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgc2FmZXR5IGV2YWx1YXRpb24sIGEgZGVmZW5zaXZlIHNlY3VyaXR5IG1lYXN1cmUsIHNvIHRoZSBkaXJlY3QgcmlzayBoZXJlIGlzIG5lZ2xpZ2libGUuIFdlJ3JlIG5vdCB0YWxraW5nIGFib3V0IGFjdGl2ZSBleHBsb2l0YXRpb24sIGp1c3QgZW5zdXJpbmcgb3VyIHRlc3RpbmcgaXMgdGhvcm91Z2guXG5cbkxldCdzIGRpdmUgaW50byB0aGUgc3BlY2lmaWNzLiBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgdGhlIGNvZGUuIEknbGwgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gYG5ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjU3LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgdGhhdCBtaWdodCBuZWNlc3NpdGF0ZSBLTVNBTi4gSSdsbCBiZSBsb29raW5nIGZvciBhcmVhcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBtaWdodCBiZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6NDYuMTY1NzQ1Mjg0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIzMDpcXHRcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2YodTY0KSAqIHNpemUsXFxuIDIzMTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRfX2FsaWdub2ZfXyh1NjQpKTtcXG4gMjMyOlxcdFxcdGlmICghbmV3LVxcdTAwM2VtYXNrc191c2FnZV9zdGF0cykge1xcbiAyMzM6XFx0XFx0XFx0a2ZyZWUobmV3KTtcXG4gMjM0OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAyMzU6XFx0XFx0fVxcbiAyMzY6XFx0XFxuIDIzNzpcXHRcXHRuZXctXFx1MDAzZWNvdW50ID0gMDtcXG4gMjM4OlxcdFxcdG5ldy1cXHUwMDNlbWF4ID0gc2l6ZTtcXG4gMjM5OlxcdFxcbiAyNDA6XFx0XFx0cmV0dXJuIG5ldztcXG4gMjQxOlxcdH1cXG4gMjQyOlxcdFxcbiAyNDM6XFx0c3RhdGljIGludCB0YmxfbWFza19hcnJheV9yZWFsbG9jKHN0cnVjdCBmbG93X3RhYmxlICp0YmwsIGludCBzaXplKVxcbiAyNDQ6XFx0e1xcbiAyNDU6XFx0XFx0c3RydWN0IG1hc2tfYXJyYXkgKm9sZDtcXG4gMjQ2OlxcdFxcdHN0cnVjdCBtYXNrX2FycmF5ICpuZXc7XFxuIDI0NzpcXHRcXG4gMjQ4OlxcdFxcdG5ldyA9IHRibF9tYXNrX2FycmF5X2FsbG9jKHNpemUpO1xcbiAyNDk6XFx0XFx0aWYgKCFuZXcpXFxuIDI1MDpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0b2xkID0gb3ZzbF9kZXJlZmVyZW5jZSh0YmwtXFx1MDAzZW1hc2tfYXJyYXkpO1xcbiAyNTM6XFx0XFx0aWYgKG9sZCkge1xcbiAyNTQ6XFx0XFx0XFx0aW50IGk7XFxuIDI1NTpcXHRcXG4gMjU2OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvbGQtXFx1MDAzZW1heDsgaSsrKSB7XFxuIDI1NzpcXHRcXHRcXHRcXHRpZiAob3ZzbF9kZXJlZmVyZW5jZShvbGQtXFx1MDAzZW1hc2tzW2ldKSlcXG4gMjU4OlxcdFxcdFxcdFxcdFxcdG5ldy1cXHUwMDNlbWFza3NbbmV3LVxcdTAwM2Vjb3VudCsrXSA9IG9sZC1cXHUwMDNlbWFza3NbaV07XFxuIDI1OTpcXHRcXHRcXHR9XFxuIDI2MDpcXHRcXHR9XFxuIDI2MTpcXHRcXG4gMjYyOlxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcih0YmwtXFx1MDAzZW1hc2tfYXJyYXksIG5ldyk7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdGlmIChvbGQpXFxuIDI2NTpcXHRcXHRcXHRjYWxsX3JjdShcXHUwMDI2b2xkLVxcdTAwM2VyY3UsIG1hc2tfYXJyYXlfcmN1X2NiKTtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0cmV0dXJuIDA7XFxuIDI2ODpcXHR9XFxuIDI2OTpcXHRcXG4gMjcwOlxcdHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfYWRkX21hc2soc3RydWN0IGZsb3dfdGFibGUgKnRibCxcXG4gMjcxOlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBzd19mbG93X21hc2sgKm5ldylcXG4gMjcyOlxcdHtcXG4gMjczOlxcdFxcdHN0cnVjdCBtYXNrX2FycmF5ICptYSA9IG92c2xfZGVyZWZlcmVuY2UodGJsLVxcdTAwM2VtYXNrX2FycmF5KTtcXG4gMjc0OlxcdFxcdGludCBlcnIsIG1hX2NvdW50ID0gUkVBRF9PTkNFKG1hLVxcdTAwM2Vjb3VudCk7XFxuIDI3NTpcXHRcXG4gMjc2OlxcdFxcdGlmIChtYV9jb3VudCBcXHUwMDNlPSBtYS1cXHUwMDNlbWF4KSB7XFxuIDI3NzpcXHRcXHRcXHRlcnIgPSB0YmxfbWFza19hcnJheV9yZWFsbG9jKHRibCwgbWEtXFx1MDAzZW1heCArXFxuIDI3ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIE1BU0tfQVJSQVlfU0laRV9NSU4pO1xcbiAyNzk6XFx0XFx0XFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6NDYuMTY1ODkxOTk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MzIwMDkwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBBcnJheSBBbGxvY2F0aW9uKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlc2UgbWFzayBhcnJheXMuIEkndmUgYWxyZWFkeSBnb3QgYSBoYW5kbGUgb24gdGhlIGdlbmVyYWwgYWxsb2NhdGlvbiBzdHJhdGVneSwgYnV0IEkgd2FudCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSBJJ3ZlIGdvdCBhIGdyYXNwIG9uIHRoZSBmaW5lciBwb2ludHMsIHBhcnRpY3VsYXJseSBob3cgdGhlc2UgYXJyYXlzIGFyZSBpbml0aWFsaXplZC4gVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgcHJvY2VzcywgSSBuZWVkIHRvIGNoZWNrIG91dCB0aGUgZGV0YWlscyBvZiBgdGJsX21hc2tfYXJyYXlfYWxsb2NgIGFzIHdlbGwuIFRoYXQgZnVuY3Rpb24gc2hvdWxkIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgYWxsb2NhdGlvbiBpdHNlbGYsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBob3cgdGhlIGFsbG9jYXRlZCBtZW1vcnkgaXMgKmluaXRpYWxpemVkKi4gVW5kZXJzdGFuZGluZyB0aGF0IGluaXRpYWxpemF0aW9uIGlzIGtleSB0byBwZXJmb3JtYW5jZSBhbmQgcG90ZW50aWFsbHkgZGVidWdnaW5nLiBHb3R0YSBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSBzbmVha3kgYnVncyBsdXJraW5nIGluIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLiBMZXQncyBnZXQgdG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxODUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjQ3Ljc5NzkwNDA1OVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MjM3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRcXHRcXHRtYS1cXHUwMDNlbWFza3NfdXNhZ2VfemVyb19jbnRyW2ldICs9IGNvdW50ZXI7XFxuIDIxMjpcXHRcXHRcXHR9XFxuIDIxMzpcXHRcXHR9XFxuIDIxNDpcXHR9XFxuIDIxNTpcXHRcXG4gMjE2OlxcdHN0YXRpYyBzdHJ1Y3QgbWFza19hcnJheSAqdGJsX21hc2tfYXJyYXlfYWxsb2MoaW50IHNpemUpXFxuIDIxNzpcXHR7XFxuIDIxODpcXHRcXHRzdHJ1Y3QgbWFza19hcnJheSAqbmV3O1xcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHRzaXplID0gbWF4KE1BU0tfQVJSQVlfU0laRV9NSU4sIHNpemUpO1xcbiAyMjE6XFx0XFx0bmV3ID0ga3phbGxvYyhzdHJ1Y3Rfc2l6ZShuZXcsIG1hc2tzLCBzaXplKSArXFxuIDIyMjpcXHRcXHRcXHQgICAgICBzaXplb2YodTY0KSAqIHNpemUsIEdGUF9LRVJORUwpO1xcbiAyMjM6XFx0XFx0aWYgKCFuZXcpXFxuIDIyNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjI1OlxcdFxcbiAyMjY6XFx0XFx0bmV3LVxcdTAwM2VtYXNrc191c2FnZV96ZXJvX2NudHIgPSAodTY0ICopKCh1OCAqKW5ldyArXFxuIDIyNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdF9zaXplKG5ldywgbWFza3MsIHNpemUpKTtcXG4gMjI4OlxcdFxcbiAyMjk6XFx0XFx0bmV3LVxcdTAwM2VtYXNrc191c2FnZV9zdGF0cyA9IF9fYWxsb2NfcGVyY3B1KHNpemVvZihzdHJ1Y3QgbWFza19hcnJheV9zdGF0cykgK1xcbiAyMzA6XFx0XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHU2NCkgKiBzaXplLFxcbiAyMzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0X19hbGlnbm9mX18odTY0KSk7XFxuIDIzMjpcXHRcXHRpZiAoIW5ldy1cXHUwMDNlbWFza3NfdXNhZ2Vfc3RhdHMpIHtcXG4gMjMzOlxcdFxcdFxcdGtmcmVlKG5ldyk7XFxuIDIzNDpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gMjM1OlxcdFxcdH1cXG4gMjM2OlxcdFxcbiAyMzc6XFx0XFx0bmV3LVxcdTAwM2Vjb3VudCA9IDA7XFxuIDIzODpcXHRcXHRuZXctXFx1MDAzZW1heCA9IHNpemU7XFxuIDIzOTpcXHRcXG4gMjQwOlxcdFxcdHJldHVybiBuZXc7XFxuIDI0MTpcXHR9XFxuIDI0MjpcXHRcXG4gMjQzOlxcdHN0YXRpYyBpbnQgdGJsX21hc2tfYXJyYXlfcmVhbGxvYyhzdHJ1Y3QgZmxvd190YWJsZSAqdGJsLCBpbnQgc2l6ZSlcXG4gMjQ0OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDZUMjE6MDE6NDcuNzk4NTMxMjY5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYwNTQzMDA0NTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDb21taXQgZm9yIE1lbW9yeSBTYWZldHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSBpbiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvY2AsIHRoZXJlJ3MgYSBjcml0aWNhbCBvcmRlcmluZyBpc3N1ZSB3aXRoIHRoZSBSQ1Ugb3BlcmF0aW9ucy4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGBjYWxsX3JjdWAgd2FzIGhhcHBlbmluZyAqYmVmb3JlKiB0aGUgYHJjdV9hc3NpZ25fcG9pbnRlcmAuIFRoYXQncyBhIHRleHRib29rIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvLCBvciBhIHJhY2UgY29uZGl0aW9uIGluIFJDVSBzeW5jaHJvbml6YXRpb24hIEl0IG1lYW5zIHRoYXQgdGhlIG9sZCBtYXNrIGFycmF5IChgb2xkYCkgd2FzIGJlaW5nIHNjaGVkdWxlZCBmb3IgZnJlZWluZyBiZWZvcmUgdGhlIHBvaW50ZXIgaW4gYHRibC1cdTAwM2VtYXNrX2FycmF5YCB3YXMgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgbmV3IGFycmF5IChgbmV3YCkuIFRoaXMgbGVhdmVzIGEgd2luZG93IHdoZXJlIHJlYWRlcnMsIG9yIGV2ZW4gdGhlIG9yaWdpbmFsIHRocmVhZCwgY291bGQgYWNjZXNzIHN0YWxlIG1lbW9yeSB0aGF0J3MgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgZnJlZWQuIFRoYXQncyBhIGNsZWFyIHZ1bG5lcmFiaWxpdHkuXG5cblRoZSBwYXRjaCBmaXhlcyB0aGlzIGJ5IHJlb3JkZXJpbmc6IHVwZGF0aW5nIHRoZSBwb2ludGVyIChgcmN1X2Fzc2lnbl9wb2ludGVyYCkgKmJlZm9yZSogaW5pdGlhdGluZyB0aGUgUkNVIHJlY2xhbWF0aW9uIChgY2FsbF9yY3VgKS4gVGhpcyBlbnN1cmVzIHRoZSBjb3JyZWN0IFJDVSB1cGRhdGUgb3JkZXIsIHB1Ymxpc2hpbmcgdGhlIG5ldyBkYXRhIGJlZm9yZSBmcmVlaW5nIHRoZSBvbGQuXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgbHVya2luZyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBoZXJlLiBGb3J0dW5hdGVseSwgaXQgbG9va3MgbGlrZSBgdGJsX21hc2tfYXJyYXlfYWxsb2NgIHVzZXMgYGt6YWxsb2NgIGFuZCBgX19hbGxvY19wZXJjcHVgIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4gVGhlc2UgZnVuY3Rpb25zIHplcm8taW5pdGlhbGl6ZSB0aGUgbWVtb3J5LiBXZSdyZSBub3QgcmVhZGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBhcmUgd2UgY29weWluZyBhbnkgb2YgaXQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHBhZGRpbmcgbGVha3Mgb3IgdW5pbml0aWFsaXplZCBicmFuY2hlcyBlaXRoZXIuIEtBU0FOIGlzIHRoZSByaWdodCB0b29sIHRvIGNhdGNoIHRoZSB1c2UtYWZ0ZXItZnJlZSBhbmQgUkNVIGlzc3VlcywgYW5kIGlzIGZ1bGx5IHN1ZmZpY2llbnQuXG5cblRoaXMgaXMgZnVuZGFtZW50YWxseSBhbiBSQ1UgbGlmZXRpbWUgLyBjb25jdXJyZW5jeSBpc3N1ZS4gV2UncmUgdGFsa2luZyBhYm91dCBhIG1lbW9yeSBjb3JydXB0aW9uIGJ1ZywgYnV0IHRoZSBtZW1vcnkgaXMgKmZ1bGx5KiBpbml0aWFsaXplZC5cblxuSGVyZSdzIHRoZSBrZXk6IEtBU0FOIGlzIGFscmVhZHkgb24gdGhlIGpvYiBpbiBzdGFuZGFyZCBrZXJuZWwgYnVpbGRzLiBJdCdzIGhhbmRsaW5nIHRoZSB1c2UtYWZ0ZXItZnJlZSwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWxlIEtNU0FOIGRldGVjdHMgKnVuaW5pdGlhbGl6ZWQqIG1lbW9yeSByZWFkcy4gSW4gdGhpcyBjYXNlLCB0aGVyZSdzIG5vIG5lZWQgZm9yIEtNU0FOLiBUaGUgZml4IGFkZHJlc3NlcyBhIFVBRiBpc3N1ZSBhcmlzaW5nIGZyb20gUkNVIHN5bmNocm9uaXphdGlvbi9vcmRlcmluZywgYW5kIHRoZXJlJ3Mgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gd29ycnkgYWJvdXQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRpdmVseSBgZmFsc2VgLlxuXG5IZXJlJ3MgdGhlIHJlYXNvbmluZzpcbjEuICBUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIFJDVSBjYWxsYmFjayBvcmRlciBpbiBgdGJsX21hc2tfYXJyYXlfcmVhbGxvYygpYC5cbjIuICBUaGUgb3JpZ2luYWwgY29kZSBoYWQgYSBVc2UtQWZ0ZXItRnJlZS9SQ1UgbGlmZXRpbWUgYnVnLlxuMy4gIFRoZSBtYXNrIGFycmF5IG1lbW9yeSBpcyBhbGxvY2F0ZWQgdXNpbmcgemVyb2luZyBmdW5jdGlvbnMuXG40LiAgTm8gdW5pbml0aWFsaXplZCBkYXRhLCBzdGFjayB2YXJpYWJsZXMsIG9yIGluZm8gbGVha3MgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuXG41LiAgU3RhbmRhcmQgS0FTQU4gZnV6emluZyBpcyBlbm91Z2ggdG8gZmluZCBidWdzIGhlcmU7IEtNU0FOIGlzIG5vdCBuZWVkZWQuXG5cblRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODk5LCJPdXRwdXRUb2tlbnMiOjE2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA2VDIxOjAxOjUzLjg1MjgzMzkxN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIFJDVSBwb2ludGVyIHB1Ymxpc2hpbmcgc2VxdWVuY2UgaW4gdGJsX21hc2tfYXJyYXlfcmVhbGxvYygpIGJ5IG1vdmluZyBjYWxsX3JjdSgpIGFmdGVyIHJjdV9hc3NpZ25fcG9pbnRlcigpLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHJhY2UgY29uZGl0aW9uIHdoZXJlIG9sZCBtYXNrIGFycmF5IHN0cnVjdHVyZXMgY291bGQgYmUgcmVjbGFpbWVkIHdoaWxlIHN0aWxsIHJlZmVyZW5jZWQuIE1lbW9yeSBhbGxvY2F0aW9ucyBmb3IgbWFza19hcnJheSBhcmUgcGVyZm9ybWVkIHdpdGgga3phbGxvYygpIGFuZCBfX2FsbG9jX3BlcmNwdSgpLCBlbnN1cmluZyBtZW1vcnkgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIHVzZXItc3BhY2UgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBSQ1UgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29ycmVjdHMgdGhlIFJDVSBwb2ludGVyIHB1Ymxpc2hpbmcgc2VxdWVuY2UgaW4gdGJsX21hc2tfYXJyYXlfcmVhbGxvYygpIGJ5IG1vdmluZyBjYWxsX3JjdSgpIGFmdGVyIHJjdV9hc3NpZ25fcG9pbnRlcigpLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIHJhY2UgY29uZGl0aW9uIHdoZXJlIG9sZCBtYXNrIGFycmF5IHN0cnVjdHVyZXMgY291bGQgYmUgcmVjbGFpbWVkIHdoaWxlIHN0aWxsIHJlZmVyZW5jZWQuIE1lbW9yeSBhbGxvY2F0aW9ucyBmb3IgbWFza19hcnJheSBhcmUgcGVyZm9ybWVkIHdpdGgga3phbGxvYygpIGFuZCBfX2FsbG9jX3BlcmNwdSgpLCBlbnN1cmluZyBtZW1vcnkgaXMgZnVsbHkgemVyby1pbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHVuaW5pdGlhbGl6ZWQgY29uZGl0aW9uYWwgYnJhbmNoZXMsIG9yIHVzZXItc3BhY2UgaW5mby1sZWFrcyBhcmUgaW50cm9kdWNlZCBvciBleHBvc2VkLiBSQ1UgbGlmZXRpbWUgYW5kIHVzZS1hZnRlci1mcmVlIGlzc3VlcyBhcmUgZGV0ZWN0YWJsZSBieSBLQVNBTiwgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8kp7[1] Phase: Succeeded StartedAt: 2026-09-06 21:02:05 +0000 UTC FinishedAt: 2026-09-06 21:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-06 21:02:05 +0000 UTC FinishedAt: 2026-09-06 21:02:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2] Phase: Succeeded StartedAt: 2026-09-06 21:02:05 +0000 UTC FinishedAt: 2026-09-07 00:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:02:05 +0000 UTC FinishedAt: 2026-09-07 00:48:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:02:05 +0000 UTC FinishedAt: 2026-09-06 21:02:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:02:05 +0000 UTC FinishedAt: 2026-09-06 21:02:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-workflowb8kp7/series-workflowb8kp7-convert-artifact-1769755861/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:02:35 +0000 UTC FinishedAt: 2026-09-06 21:22:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:02:35 +0000 UTC FinishedAt: 2026-09-06 21:22:05 +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:*c6547bc9-8fb6-441d-b9b9-b6ce8ba8e95b,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-workflowb8kp7/series-workflowb8kp7-convert-artifact-1769755861/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": "46038e0b-71af-48db-bb4b-c6b71dafc15a", "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-workflowb8kp7/series-workflowb8kp7-build-action-863502139/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:02:35 +0000 UTC FinishedAt: 2026-09-06 21:21:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c6547bc9-8fb6-441d-b9b9-b6ce8ba8e95b,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-workflowb8kp7/series-workflowb8kp7-convert-artifact-1769755861/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": "46038e0b-71af-48db-bb4b-c6b71dafc15a", "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-workflowb8kp7/series-workflowb8kp7-build-action-863502139/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:22:05 +0000 UTC FinishedAt: 2026-09-06 21:22:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:22:05 +0000 UTC FinishedAt: 2026-09-06 21:22:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:22:05 +0000 UTC FinishedAt: 2026-09-06 21:22:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:22:05 +0000 UTC FinishedAt: 2026-09-06 21:22:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-workflowb8kp7/series-workflowb8kp7-convert-artifact-944447152/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:22:15 +0000 UTC FinishedAt: 2026-09-06 21:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:22:15 +0000 UTC FinishedAt: 2026-09-06 21:23:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46038e0b-71af-48db-bb4b-c6b71dafc15a,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-workflowb8kp7/series-workflowb8kp7-build-action-863502139/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-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:24:09 +0000 UTC FinishedAt: 2026-09-06 21:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:24:09 +0000 UTC FinishedAt: 2026-09-06 21:24:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:24:09 +0000 UTC FinishedAt: 2026-09-06 21:44:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:24:09 +0000 UTC FinishedAt: 2026-09-06 21:44:02 +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:*c6547bc9-8fb6-441d-b9b9-b6ce8ba8e95b,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-workflowb8kp7/series-workflowb8kp7-convert-artifact-944447152/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": "b0220f38-6c64-4605-a62c-becd9a29196b", "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-workflowb8kp7/series-workflowb8kp7-build-action-2209413292/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:24:09 +0000 UTC FinishedAt: 2026-09-06 21:43:52 +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:*c6547bc9-8fb6-441d-b9b9-b6ce8ba8e95b,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-workflowb8kp7/series-workflowb8kp7-convert-artifact-944447152/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": "b0220f38-6c64-4605-a62c-becd9a29196b", "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-workflowb8kp7/series-workflowb8kp7-build-action-2209413292/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:44:02 +0000 UTC FinishedAt: 2026-09-06 21:44:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:44:02 +0000 UTC FinishedAt: 2026-09-06 21:44:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:44:02 +0000 UTC FinishedAt: 2026-09-06 21:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:44:02 +0000 UTC FinishedAt: 2026-09-06 21:46:03 +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:*b0220f38-6c64-4605-a62c-becd9a29196b,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-workflowb8kp7/series-workflowb8kp7-build-action-2209413292/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-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:46:12 +0000 UTC FinishedAt: 2026-09-07 00:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:46:12 +0000 UTC FinishedAt: 2026-09-07 00:48:47 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"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:*46038e0b-71af-48db-bb4b-c6b71dafc15a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b0220f38-6c64-4605-a62c-becd9a29196b,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-workflowb8kp7/series-workflowb8kp7-build-action-863502139/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-workflowb8kp7/series-workflowb8kp7-build-action-2209413292/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:46:12 +0000 UTC FinishedAt: 2026-09-06 21:46:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:46:12 +0000 UTC FinishedAt: 2026-09-06 21:46:16 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"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-workflowb8kp7/series-workflowb8kp7-convert-artifact-954925865/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:46:12 +0000 UTC FinishedAt: 2026-09-06 21:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:46:12 +0000 UTC FinishedAt: 2026-09-06 21:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:46:12 +0000 UTC FinishedAt: 2026-09-06 21:46:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:46:22 +0000 UTC FinishedAt: 2026-09-07 00:48:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb8kp7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbl_mask_array_realloc","tbl_mask_array_add_mask","tbl_mask_array_del_mask","ovs_flow_tbl_insert","ovs_flow_tbl_remove"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"1b8ad8e5-713a-4733-91c8-113f2b2a66de","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-09-06 21:46:22 +0000 UTC FinishedAt: 2026-09-07 00:48:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*46038e0b-71af-48db-bb4b-c6b71dafc15a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b0220f38-6c64-4605-a62c-becd9a29196b,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-workflowb8kp7/series-workflowb8kp7-build-action-863502139/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-workflowb8kp7/series-workflowb8kp7-build-action-2209413292/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-workflowb8kp7/series-workflowb8kp7-convert-artifact-954925865/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,}