Name: series-workflow8bk56 Phase: Succeeded StartedAt: 2026-08-07 07:40:59 +0000 UTC FinishedAt: 2026-08-07 11:45:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[0] Phase: Succeeded StartedAt: 2026-08-07 07:40:59 +0000 UTC FinishedAt: 2026-08-07 08:03:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 07:40:59 +0000 UTC FinishedAt: 2026-08-07 08:03:10 +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": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_U32" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_U32" ], "series_id": "41d2cbaf-1364-4bf1-9b0f-594840e91878" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tc_ctl_tclass", "tc_new_tfilter" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1UzMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF90Y2xhc3MmIzM0OywKICAgICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMjE1YmI3ZDdmMzU0M2FiY2UzMTQzODgwMGZhNDc5ZTQxYjhjOWY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwODowMToxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuaW5kZXggYWM5OGIxYzIxNDRhNy4uYzI5N2Q3ZGJjZjkxNiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcbkBAIC0xMzQ2LDYgJiM0MzsxMzQ2LDkgQEAgc3RhdGljIHZvaWQgdTMyX2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxuIHtcbiBcdHN0cnVjdCB0Y191X2tub2RlICpuID0gZmg7XG4gXG4mIzQzO1x0aWYgKFRDX1UzMl9LRVkobi1cdTAwM2VoYW5kbGUpID09IDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0dGNfY2xzX2JpbmRfY2xhc3MoY2xhc3NpZCwgY2wsIHEsIFx1MDAyNm4tXHUwMDNlcmVzLCBiYXNlKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1UzMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF90Y2xhc3MmIzM0OywKICAgICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMjE1YmI3ZDdmMzU0M2FiY2UzMTQzODgwMGZhNDc5ZTQxYjhjOWY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAwODowMToxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCmluZGV4IGFjOThiMWMyMTQ0YTcuLmMyOTdkN2RiY2Y5MTYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc191MzIuYwpAQCAtMTM0Niw2ICYjNDM7MTM0Niw5IEBAIHN0YXRpYyB2b2lkIHUzMl9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSwKIHsKIAlzdHJ1Y3QgdGNfdV9rbm9kZSAqbiA9IGZoOwogCiYjNDM7CWlmIChUQ19VMzJfS0VZKG4tJmd0O2hhbmRsZSkgPT0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAl0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgJmFtcDtuLSZndDtyZXMsIGJhc2UpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB1MzIgQ2xhc3NpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfdTMyLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2sgd2l0aGluIHRoZSBgdTMyX2JpbmRfY2xhc3NgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSBndWFyZGluZyBhZ2FpbnN0IGEgc3BlY2lmaWMgY2FzZToKCmBgYGMKCXN0cnVjdCB0Y191X2tub2RlICpuID0gZmg7CiAKJiM0MzsJaWYgKFRDX1UzMl9LRVkobi0mZ3Q7aGFuZGxlKSA9PSAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCAmYW1wO24tJmd0O3JlcywgYmFzZSk7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIGB1MzJfYmluZF9jbGFzc2AgaXMgb2J2aW91c2x5IHBhcnQgb2YgdGhlIGB0Y191MzJgIGNsYXNzaWZpZXIsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFRyYWZmaWMgQ29udHJvbCAoVEMpIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogYHUzMl9iaW5kX2NsYXNzYCBpcyBjYWxsZWQuIEl0JiMzOTtzIGxpa2VseSBjYWxsZWQgdGhyb3VnaCBgdGNfY2xzX2JpbmRfY2xhc3NgIG9yIG1heWJlIGB0Y2ZfYmluZF9maWx0ZXJgLCBzb21ldGhpbmcgbGlrZSB0aGF0LCB3aGljaCBJIHdpbGwgY29uZmlybS4gQWgsIHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgYHRjZl9wcm90b19vcHNgIHN0cnVjdCBmb3IgdGhlIHUzMiBjbGFzc2lmaWVyLiBZZXAsIGl0JiMzOTtzIHRoZXJlIGFzIGEgY2FsbGJhY2s6CgpgYGBjCnN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0gewoJLmtpbmQJCT0JJiMzNDt1MzImIzM0OywKCS5jbGFzc2lmeQk9CXUzMl9jbGFzc2lmeSwKCS5pbml0CQk9CXUzMl9pbml0LAoJLmRlc3Ryb3kJPQl1MzJfZGVzdHJveSwKCS5nZXQJCT0JdTMyX2dldCwKCS5jaGFuZ2UJCT0JdTMyX2NoYW5nZSwKCS5kZWxldGUJCT0JdTMyX2RlbGV0ZSwKCS53YWxrCQk9CXUzMl93YWxrLAoJLnJlb2ZmbG9hZAk9CXUzMl9yZW9mZmxvYWQsCgkuYmluZF9jbGFzcwk9CXUzMl9iaW5kX2NsYXNzLAoJLm93bmVyCQk9CVRISVNfTU9EVUxFLAp9OwpgYGAKCk9rYXksIHNvIGB1MzJfYmluZF9jbGFzc2AgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoaW4gYGNsc191MzJfb3BzYC4gSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhhdCBvdmVyYWxsIGZyYW1ld29yay4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgKndoeSogdGhpcyBzcGVjaWZpYyBjaGVjayBmb3IgYFRDX1UzMl9LRVkobi0mZ3Q7aGFuZGxlKSA9PSAwYCB3YXMgYWRkZWQuIFdoYXQmIzM5O3MgdGhlIHBvdGVudGlhbCBpc3N1ZSBiZWluZyBhZGRyZXNzZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGVjayBvbiB0aGUgYmVoYXZpb3VyIG9mIGB1MzJgIHRyYWZmaWMgY2xhc3NpZmljYXRpb24/IEkgd2lsbCBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3UzMl9iaW5kX2NsYXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jPTEyOTc9c3RhdGljIGludCB1MzJfcmVvZmZsb2FkKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBib29sIGFkZCwgZmxvd19zZXR1cF9jYl90ICpjYixcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDMtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEzNDQ6c3RhdGljIHZvaWQgdTMyX2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzQ1LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTE0Njg9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc191MzJfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDc4LVx0LmR1bXBcdFx0PVx0dTMyX2R1bXAsXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0Nzk6XHQuYmluZF9jbGFzc1x0PVx0dTMyX2JpbmRfY2xhc3MsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0ODAtXHQub3duZXJcdFx0PVx0VEhJU19NT0RVTEUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHUzMl9iaW5kX2NsYXNzYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllcywgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGB1MzJfYmluZF9jbGFzc2AgZnVuY3Rpb24gKmlzKiBpbmRlZWQgYmVpbmcgdXNlZCBhcyB0aGUgYC5iaW5kX2NsYXNzYCBtZW1iZXIgaW4gdGhlIGBjbHNfdTMyX29wc2Agc3RydWN0dXJlLiBHb29kLCB0aGF0IGNvbmZpcm1zIHRoZSBpbXBsZW1lbnRhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbGx5IHNvdW5kOyBpdCYjMzk7cyBkZXNpZ25lZCB0byBmaXggYSBidWcsIGxpa2VseSBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHdhcyBoYXBwZW5pbmcgd2hlbiBgVENfVTMyX0tFWShuLSZndDtoYW5kbGUpYCBldmFsdWF0ZWQgdG8gemVyby4gSSBjYW4gYWxtb3N0IHBpY3R1cmUgdGhlIGNvZGUgYW5kIGhvdyB0aGF0IGNvdWxkIGhhcHBlbi4uLiBtYWtlcyBzZW5zZS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IENhbiBhIHVzZXIgYWN0dWFsbHkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aD8gVGhlIGFuc3dlciBpcyB5ZXMsIHVuZG91YnRlZGx5LiBXZSBpbnRlcmFjdCB3aXRoIHRoaXMgdGhyb3VnaCBgdGNgIG5ldGxpbmsgY29tbWFuZHMsIHdoaWNoIGFyZSB0aGUgc3RhbmRhcmQgd2F5IG9mIGNvbmZpZ3VyaW5nIHRyYWZmaWMgY29udHJvbC4gU28sIHRoaXMgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSBjb3JuZXIgY2FzZTsgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgY291bGQgZGVmaW5pdGVseSBiZSBleHBsb2l0ZWQgaW4gYSByZWFsLXdvcmxkIHNjZW5hcmlvLiBMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBjbHNfdTMyLmNgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgYXQgcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbHNfdTMyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL01ha2VmaWxlPTY2PW9iai0kKENPTkZJR19ORVRfU0NIX0RVQUxQSTIpXHQmIzQzOz0gc2NoX2R1YWxwaTIub1xubmV0L3NjaGVkL01ha2VmaWxlLTY3LVxubmV0L3NjaGVkL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19ORVRfQ0xTX1UzMilcdCYjNDM7PSBjbHNfdTMyLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS02OS1vYmotJChDT05GSUdfTkVUX0NMU19ST1VURTQpXHQmIzQzOz0gY2xzX3JvdXRlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBORVRfQ0xTX1UzMmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLiBJIGtub3cgdGhpcyBwYXJ0aWN1bGFyIGNsYXNzaWZpZXIsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBjcnVjaWFsLiBJcyB0aGlzIHN0YW5kYWxvbmUsIG9yIGRvZXMgaXQgcGlnZ3liYWNrIG9uIGFub3RoZXIgY29yZSBuZXR3b3JraW5nIG1vZHVsZT8gQXJlIHRoZXJlIGtlcm5lbCBmZWF0dXJlcyBJIG5lZWQgdG8gZW5hYmxlIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGtleS4gSXQgaGVscHMgbWUgZW5zdXJlIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCBvcHRpbWFsbHksIGF2b2lkcyBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMgZm9yIGBORVRfQ0xTX1UzMmAgdG8gcGVyZm9ybSBhcyBleHBlY3RlZC4gVGhpcyBhbHNvIGhlbHBzIG1lIHVuZGVyc3RhbmQgd2hpY2ggb3RoZXIgbW9kdWxlcyBtaWdodCBiZSBpbXBhY3RlZCBieSBhIGNoYW5nZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRoYXQgd2F5IEkgZG9uJiMzOTt0IGludHJvZHVjZSBwcm9ibGVtcyB3aGVyZSB0aGV5IHdlcmVuJiMzOTt0IGFudGljaXBhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ0xTX1UzMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTUwNj1jb25maWcgTkVUX0NMU19GV1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTUxNS1cbm5ldC9zY2hlZC9LY29uZmlnOjUxNjpjb25maWcgTkVUX0NMU19VMzJcbm5ldC9zY2hlZC9LY29uZmlnLTUxNy1cdHRyaXN0YXRlIFwmIzM0O1VuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBORVRfQ0xTX1UzMioqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9DTFNfVTMyYC4gVGhhdCBuYW1lIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgbGlrZWx5IGNsYXNzaWZpY2F0aW9uIG1vZHVsZSwgcHJvYmFibHkgcmVsYXRlZCB0byB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciB2YWx1ZXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBleHBlcnRpc2UgaXMgcHJpbWFyaWx5IGluIHRoZSBrZXJuZWwgYW5kIG5ldHdvcmsgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBzbyB0aGlzIGtpbmQgb2YgdGFzayBpcyByb3V0aW5lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgcmVseSBvbiBgTkVUX0NMU19VMzJgLCBvciwgY29udmVyc2VseSwgd2hhdCAqaXQqIHJlbGllcyB1cG9uLiBXaGF0IG90aGVyIG1vZHVsZXMsIGNvbmZpZ3VyYXRpb25zLCBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludGVydHdpbmVkIHdpdGggaXRzIGZ1bmN0aW9uYWxpdHk/IElzIGl0IGNvcmUgdG8gcGFja2V0IGZpbHRlcmluZywgUW9TLCBvciB0cmFmZmljIHNoYXBpbmc/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgaXQmIzM5O3MgbGlrZWx5IGEgbGVhZi1sZXZlbCBjb21wb25lbnQuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB2YXJpb3VzIHRyYWNpbmcgdG9vbHMgYW5kIGtlcm5lbCBkb2N1bWVudGF0aW9uIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBuZXh0IHN0ZXAuIFRvIGdldCBhIHVzZWZ1bCBvdmVydmlldywgSeKAmWxsIG5lZWQgdG8gd29yayB0aHJvdWdoIGl0cyBpbXBsZW1lbnRhdGlvbiwgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGRhdGEgc3RydWN0dXJlIHVzYWdlLCBhbmQgZnVuY3Rpb24gY2FsbHMuIFRoaXMgc2hvdWxkIHF1aWNrbHkgdW5jb3ZlciBpdHMgaW50ZWdyYXRpb24gcG9pbnRzIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN1YnN5c3RlbS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gbWlnaHQgYmUgYmVuZWZpY2lhbC4gSG9wZWZ1bGx5IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGRvY3VtZW50ZWQgd2VsbC4gT3RoZXJ3aXNlLCBJIG1heSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdXNlIGB0cmFjZXBvaW50c2AgYW5kIGRlYnVnZ2luZyB0b29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTE2Olx0Y29uZmlnIE5FVF9DTFNfVTMyXG4gNTE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuIDUxODpcdFx0c2VsZWN0IE5FVF9DTFNcbiA1MTk6XHRcdGhlbHBcbiA1MjA6XHRcdCAgU2F5IFkgaGVyZSB0byBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgdXNpbmcgYSB1bml2ZXJzYWxcbiA1MjE6XHRcdCAgMzJiaXQgcGllY2VzIGJhc2VkIGNvbXBhcmlzb24gc2NoZW1lLlxuIDUyMjpcdFxuIDUyMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTI0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfdTMyLlxuIDUyNTpcdFxuIDUyNjpcdGNvbmZpZyBDTFNfVTMyX1BFUkZcbiA1Mjc6XHRcdGJvb2wgXCYjMzQ7UGVyZm9ybWFuY2UgY291bnRlcnMgc3VwcG9ydFwmIzM0O1xuIDUyODpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX1UzMlxuIDUyOTpcdFx0aGVscFxuIDUzMDpcdFx0ICBTYXkgWSBoZXJlIHRvIG1ha2UgdTMyIGdhdGhlciBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgdXNlZnVsIGZvclxuIDUzMTpcdFx0ICBmaW5lIHR1bmluZyB1MzIgY2xhc3NpZmllcnMuXG4gNTMyOlx0XG4gNTMzOlx0Y29uZmlnIENMU19VMzJfTUFSS1xuIDUzNDpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbWFya3Mgc3VwcG9ydFwmIzM0O1xuIDUzNTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX1UzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODEzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aGlzIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3QgaW5pdGlhbGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCBzZWVtcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gcXVlc3Rpb24sIHdoYXRldmVyIGBORVRfQ0xTYCByZXByZXNlbnRzLCBpcyBkZXBlbmRlbnQgb24gbm90aGluZyAqc3BlY2lmaWMqIG90aGVyIHRoYW4gaXRzZWxmLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyBpdCYjMzk7cyBsaWtlbHkgYSByZWxhdGl2ZWx5IHNlbGYtY29udGFpbmVkIGZlYXR1cmUgb3IgYSBicm9hZCBjYXRlZ29yeSBvZiBmdW5jdGlvbmFsaXR5LiBNeSBpbnR1aXRpb24gc2F5cyB0aGF0IGBORVRfU0NIRURgLCB0aGUgcGFyZW50IG1lbnUsIHdpbGwgYmUgaW1wb3J0YW50IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4KClNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoYXQgYG1lbnVjb25maWcgTkVUX1NDSEVEYCBkZWZpbml0aW9uIHRvIGNsYXJpZnkgZXhhY3RseSBob3cgYE5FVF9DTFNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JrIHNjaGVkdWxlciBoaWVyYXJjaHkgYW5kIHBpbnBvaW50IGFueSBwb3RlbnRpYWwgaW5kaXJlY3QgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBuZWVkZWQgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiYjMzk7cyBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgTkVUX1NDSEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWctNS1cbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcbm5ldC9zY2hlZC9LY29uZmlnLTctXHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIHNjaGVkdWxlciBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBORVRfU0NIRURgIGFuZCBgTkVUX0NMU19VMzJgLiAgTXkgYnJhaW4gaXMgaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN5bWJvbHMgbWlnaHQgbGllLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZpbmRpbmcgdGhlIGtleSBmdW5jdGlvbnMuCgpJIGluaXRpYWxseSB0aG91Z2h0IGB1MzJfYmluZF9jbGFzc2AgbWlnaHQgYmUgcHJvbWlzaW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQmIzM5O3Mgc3RhdGljIGFuZCB0aGVyZWZvcmUgcG90ZW50aWFsbHkgbGVzcyB1c2VmdWwgZm9yIHRyYWNpbmcgb3IgYW5hbHlzaXMuIFdhaXQgYSBtaW51dGUuLi4gaXQmIzM5O3MgYSAqY2FsbGJhY2sqISBUaGF0IGNoYW5nZXMgdGhpbmdzLiBTaW5jZSBpdCYjMzk7cyBhIGNhbGxiYWNrLCBJIGNhbiYjMzk7dCBhc3N1bWUgdGhhdCBpdCYjMzk7cyBpbmxpbmVkLiBTdGlsbCwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgbWVhbnMgaXQgbWlnaHQgbm90IGJlIHRoZSBiZXN0IGZvY3VzIHBvaW50LiAgSG1tLCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBVMzIgY2xhc3M/CgpMZXQmIzM5O3Mgc2Vl4oCmIEnigJltIHRoaW5raW5nIEkmIzM5O2xsIHRyeSB0byBmaW5kIGEgc3VpdGFibGUgZm9jdXMgc3ltYm9sIHdpdGggYHUzMl9jaGFuZ2VgIG9yIGB1MzJfaW5pdGAuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYHUzMl9jaGFuZ2VgIGFuZCBzZWUgaWYgdGhhdCBsZWFkcyB0byBhbnl0aGluZyBmcnVpdGZ1bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dTMyX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYz04MjE9c3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtODcxLVxubmV0L3NjaGVkL2Nsc191MzIuYzo4NzI6c3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODczLVx0XHQgICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ2OD1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3UzMl9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NzMtXHQuZ2V0XHRcdD1cdHUzMl9nZXQsXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NzQ6XHQuY2hhbmdlXHRcdD1cdHUzMl9jaGFuZ2UsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NzUtXHQuZGVsZXRlXHRcdD1cdHUzMl9kZWxldGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyB0aGUgdTMyIFRyYWZmaWMgQ2xhc3NpZmllcioqCgpSaWdodCwgc28gYHUzMl9jaGFuZ2VgIGlzIHN0YXRpYyBhcyB3ZWxsLiBPa2F5LCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYW5kIGV4cGVjdGVkLCByZWFsbHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIG1vZHVsZS4gTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhpcy4gSGFuZyBvbi4uLiBgdGNfY2xzX2JpbmRfY2xhc3NgIGlzIGdldHRpbmcgY2FsbGVkICpmcm9tKiBgdTMyX2JpbmRfY2xhc3NgLiAgVGhhdCYjMzk7cyBhIGtleSBpbnRlcmFjdGlvbiB0byByZW1lbWJlci4gTm93IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCB3aGF0IHRoZSBoZWNrICppcyogY2FsbGluZyBgLSZndDtiaW5kX2NsYXNzYD8gV2hlcmUmIzM5O3MgdGhlIGVudHJ5IHBvaW50PyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVyIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIGJpbmRpbmcgb3BlcmF0aW9uIGFuZCBob3cgdGhlIGNsYXNzaWZpZXIgaXMgYmVpbmcgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGxhcmdlciB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLiBUaGlzIGlzIHRoZSBwaWVjZSBJIG5lZWQgdG8gc29saWRpZnksIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmluZF9jbGFzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19iYXNpYy5jPTI0OT1zdGF0aWMgdm9pZCBiYXNpY193YWxrKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNmX3dhbGtlciAqYXJnLFxuLS1cbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0yNjAtXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM6MjYxOnN0YXRpYyB2b2lkIGJhc2ljX2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTI2Mi1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMjY1LVxubmV0L3NjaGVkL2Nsc19iYXNpYy5jOjI2NjpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZmLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMjY3LX1cbi0tXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM9MzE4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfYmFzaWNfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTMyNy1cdC5kdW1wXHRcdD1cdGJhc2ljX2R1bXAsXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM6MzI4Olx0LmJpbmRfY2xhc3NcdD1cdGJhc2ljX2JpbmRfY2xhc3MsXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMzI5LVx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY2hlZC9jbHNfYnBmLmM9NTc5PXN0YXRpYyBpbnQgY2xzX2JwZl9kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmZoLFxuLS1cbm5ldC9zY2hlZC9jbHNfYnBmLmMtNjMxLVxubmV0L3NjaGVkL2Nsc19icGYuYzo2MzI6c3RhdGljIHZvaWQgY2xzX2JwZl9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCxcbm5ldC9zY2hlZC9jbHNfYnBmLmMtNjMzLVx0XHRcdCAgICAgICB2b2lkICpxLCB1bnNpZ25lZCBsb25nIGJhc2UpXG4tLVxubmV0L3NjaGVkL2Nsc19icGYuYy02MzYtXG5uZXQvc2NoZWQvY2xzX2JwZi5jOjYzNzpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZwcm9nLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX2JwZi5jLTYzOC19XG4tLVxubmV0L3NjaGVkL2Nsc19icGYuYz02ODQ9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL2Nsc19icGYuYy02OTUtXHQuZHVtcFx0XHQ9XHRjbHNfYnBmX2R1bXAsXG5uZXQvc2NoZWQvY2xzX2JwZi5jOjY5NjpcdC5iaW5kX2NsYXNzXHQ9XHRjbHNfYnBmX2JpbmRfY2xhc3MsXG5uZXQvc2NoZWQvY2xzX2JwZi5jLTY5Ny19O1xuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9Mzc4ND1zdGF0aWMgaW50IGZsX3RtcGx0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB2b2lkICp0bXBsdF9wcml2KVxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzgwOC1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MzgwOTpzdGF0aWMgdm9pZCBmbF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzgxMC1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4MTMtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjM4MTQ6XHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXHUwMDI2Zi1cdTAwM2VyZXMsIGJhc2UpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODE1LX1cbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTM4Mjg9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19mbF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NDMtXHQudGVyc2VfZHVtcFx0PSBmbF90ZXJzZV9kdW1wLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzozODQ0Olx0LmJpbmRfY2xhc3NcdD0gZmxfYmluZF9jbGFzcyxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzg0NS1cdC50bXBsdF9jcmVhdGVcdD0gZmxfdG1wbHRfY3JlYXRlLFxuLS1cbm5ldC9zY2hlZC9jbHNfZncuYz0zODI9c3RhdGljIGludCBmd19kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmZoLFxuLS1cbm5ldC9zY2hlZC9jbHNfZncuYy00MjgtXG5uZXQvc2NoZWQvY2xzX2Z3LmM6NDI5OnN0YXRpYyB2b2lkIGZ3X2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxubmV0L3NjaGVkL2Nsc19mdy5jLTQzMC1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX2Z3LmMtNDMzLVxubmV0L3NjaGVkL2Nsc19mdy5jOjQzNDpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZmLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX2Z3LmMtNDM1LX1cbi0tXG5uZXQvc2NoZWQvY2xzX2Z3LmM9NDM3PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZndfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL2Nsc19mdy5jLTQ0Ni1cdC5kdW1wXHRcdD1cdGZ3X2R1bXAsXG5uZXQvc2NoZWQvY2xzX2Z3LmM6NDQ3Olx0LmJpbmRfY2xhc3NcdD1cdGZ3X2JpbmRfY2xhc3MsXG5uZXQvc2NoZWQvY2xzX2Z3LmMtNDQ4LVx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYz0zMjg9c3RhdGljIGludCBtYWxsX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqZmgsXG4tLVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTM4MC1cbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYzozODE6c3RhdGljIHZvaWQgbWFsbF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0zODItXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMzg1LVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjM4NjpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZoZWFkLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMzg3LX1cbi0tXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM9Mzg5PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfbWFsbF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMzk5LVx0LmR1bXBcdFx0PSBtYWxsX2R1bXAsXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM6NDAwOlx0LmJpbmRfY2xhc3NcdD0gbWFsbF9iaW5kX2NsYXNzLFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTQwMS1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYz02MjE9c3RhdGljIGludCByb3V0ZTRfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpmaCxcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjY5LVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY3MDpzdGF0aWMgdm9pZCByb3V0ZTRfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjcxLVx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjc0LVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY3NTpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZmLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjc2LX1cbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9Njc4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfcm91dGU0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02ODctXHQuZHVtcFx0XHQ9XHRyb3V0ZTRfZHVtcCxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzo2ODg6XHQuYmluZF9jbGFzc1x0PVx0cm91dGU0X2JpbmRfY2xhc3MsXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjg5LVx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTI5Nz1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWQoc3RydWN0IHRjZl9wcm90byAqdHAsIGJvb2wgYWRkLCBmbG93X3NldHVwX2NiX3QgKmNiLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTM0My1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTM0NDpzdGF0aWMgdm9pZCB1MzJfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDUtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBiYXNlKVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTM1MS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTM1MjpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZuLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNTMtfVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ2OD1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3UzMl9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NzgtXHQuZHVtcFx0XHQ9XHR1MzJfZHVtcCxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ3OTpcdC5iaW5kX2NsYXNzXHQ9XHR1MzJfYmluZF9jbGFzcyxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ4MC1cdC5vd25lclx0XHQ9XHRUSElTX01PRFVMRSxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTIxMjE9c3RhdGljIGludCB0Y2Zfbm9kZV9iaW5kKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpuLCBzdHJ1Y3QgdGNmX3dhbGtlciAqYXJnKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjEyNC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjEyNTpcdGlmIChuIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VvcHMtXHUwMDNlYmluZF9jbGFzcykge1xubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTI2LVx0XHRzdHJ1Y3QgUWRpc2MgKnEgPSB0Y2ZfYmxvY2tfcSh0cC1cdTAwM2VjaGFpbi1cdTAwM2VibG9jayk7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTI4LVx0XHRzY2hfdHJlZV9sb2NrKHEpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoyMTI5Olx0XHR0cC1cdTAwM2VvcHMtXHUwMDNlYmluZF9jbGFzcyhuLCBhLVx1MDAzZWNsYXNzaWQsIGEtXHUwMDNlY2wsIHEsIGEtXHUwMDNlYmFzZSk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMzAtXHRcdHNjaF90cmVlX3VubG9jayhxKTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMzQtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxMzU6c3RydWN0IHRjX2JpbmRfY2xhc3NfYXJncyB7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMzYtXHRzdHJ1Y3QgcWRpc2Nfd2Fsa2VyIHc7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTQxLVxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMTQyOnN0YXRpYyBpbnQgdGNfYmluZF9jbGFzc193YWxrZXIoc3RydWN0IFFkaXNjICpxLCB1bnNpZ25lZCBsb25nIGNsLFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTQzLVx0XHRcdFx0c3RydWN0IHFkaXNjX3dhbGtlciAqdylcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE0NC17XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxNDU6XHRzdHJ1Y3QgdGNfYmluZF9jbGFzc19hcmdzICphID0gKHN0cnVjdCB0Y19iaW5kX2NsYXNzX2FyZ3MgKil3O1xubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTQ2LVx0Y29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyAqY29wcyA9IHEtXHUwMDNlb3BzLVx1MDAzZWNsX29wcztcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTIxNzM9c3RhdGljIHZvaWQgdGNfYmluZF90Y2xhc3Moc3RydWN0IFFkaXNjICpxLCB1MzIgcG9ydGlkLCB1MzIgY2xpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxNzYtXHRjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzICpjb3BzID0gcS1cdTAwM2VvcHMtXHUwMDNlY2xfb3BzO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoyMTc3Olx0c3RydWN0IHRjX2JpbmRfY2xhc3NfYXJncyBhcmdzID0ge307XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxNzgtXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTgzLVx0YXJncy5uZXdfY2wgPSBuZXdfY2w7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxODQ6XHRhcmdzLncuZm4gPSB0Y19iaW5kX2NsYXNzX3dhbGtlcjtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE4NS1cdHEtXHUwMDNlb3BzLVx1MDAzZWNsX29wcy1cdTAwM2V3YWxrKHEsIFx1MDAyNmFyZ3Mudyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUcmFmZmljIENvbnRyb2wgQ2xhc3MgQmluZGluZyBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZmxvdyBmcm9tIGNsYXNzIGNyZWF0aW9uL21vZGlmaWNhdGlvbiBpbiB0cmFmZmljIGNvbnRyb2wsIGFuZCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYHRjX2JpbmRfdGNsYXNzYCBpcyB0aGUga2V5IGZ1bmN0aW9uLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgdGNfY3RsX3RjbGFzc2AsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBJJiMzOTttIGFmdGVyLCBhcyBleHBlY3RlZC4KCmB0Y19iaW5kX3RjbGFzc2AgdGhlbiBkaWdzIGludG8gdGhlIGNsYXNzIGhpZXJhcmNoeS4gSXQgY2FsbHMgYHEtJmd0O29wcy0mZ3Q7Y2xfb3BzLSZndDt3YWxrKHEsICZhbXA7YXJncy53KWAuIFRoYXQsIGluIHR1cm4sIHNlZW1zIHRvIGZ1bm5lbCB0aGUgd29yayB0byBgdGNfYmluZF9jbGFzc193YWxrZXJgLiBXaXRoaW4gdGhhdCB3YWxrZXIsIGl0IGNhbGxzIGB0Y2ZfYmxvY2tfZ2V0YCBhbmQgdGhlbiB3ZSBoYXZlIHRoZSBmaWx0ZXIgd2Fsa2luZyB3aXRoIGB0Y2Zfbm9kZV9iaW5kYC4gQW5kIHRoZW4sIHRoaXMgd2hvbGUgcHJvY2VzcyBjYWxscyBgdHAtJmd0O29wcy0mZ3Q7YmluZF9jbGFzc2AuCgpTbywgdGhlIGNyaXRpY2FsIHBhdGggaXMgcHJldHR5IGNsZWFyOiBgdGNfY3RsX3RjbGFzc2AgLSZndDsgYHRjX2JpbmRfdGNsYXNzYCAtJmd0OyB3YWxrZXIvZmlsdGVyIGhhbmRsaW5nIGRvd24gdG8gdGhlIGluZGl2aWR1YWwgY2xhc3MgYmluZGluZyB1c2luZyBgdHAtJmd0O29wcy0mZ3Q7YmluZF9jbGFzc2AuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9uLCBJJiMzOTtsbCBkZWZpbml0ZWx5IGNoZWNrIGB0Y19jdGxfdGNsYXNzYCBtb3JlIGNsb3NlbHkgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jdGxfdGNsYXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTIxOTA9c3RhdGljIHZvaWQgdGNfYmluZF90Y2xhc3Moc3RydWN0IFFkaXNjICpxLCB1MzIgcG9ydGlkLCB1MzIgY2xpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxOTYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxOTc6c3RhdGljIGludCBfX3RjX2N0bF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTk4LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzMjYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIzMjc6c3RhdGljIGludCB0Y19jdGxfdGNsYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjMyOC1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0NS1cdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzQ2Olx0ZXJyID0gX190Y19jdGxfdGNsYXNzKHNrYiwgbiwgZXh0YWNrLCBkZXYsIHRjYSwgdGNtKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0Ny1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0yNTIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBwc2NoZWRfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MjctXHQgLmR1bXBpdCA9IHRjX2R1bXBfcWRpc2N9LFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI4Olx0ey5tc2d0eXBlID0gUlRNX05FV1RDTEFTUywgLmRvaXQgPSB0Y19jdGxfdGNsYXNzfSxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjUyOTpcdHsubXNndHlwZSA9IFJUTV9ERUxUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjI1MzA6XHR7Lm1zZ3R5cGUgPSBSVE1fR0VUVENMQVNTLCAuZG9pdCA9IHRjX2N0bF90Y2xhc3MsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzEtXHQgLmR1bXBpdCA9IHRjX2R1bXBfdGNsYXNzfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk3NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBGaWx0ZXIgQmluZGluZyBUcmlnZ2VyIFBvaW50cyoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gcGluIGRvd24gd2hlcmUgdGhlIHN5c3RlbSBiaW5kcyBmaWx0ZXJzLCBhbmQgYHRjX2N0bF90Y2xhc3NgIGZlZWxzIGxpa2UgYSBnb29kIGluaXRpYWwgZm9jdXMg4oCTIGl0JiMzOTtzIG9mdGVuIHRoZSBjZW50cmFsIHBvaW50IGZvciB0cmFmZmljIGNsYXNzIG1hbmFnZW1lbnQsIHNvIGZpbHRlciBpbnRlcmFjdGlvbnMgYXJlIGxpa2VseSBoYW5kbGVkIHRoZXJlLiBUaGVuLCBJIHJlbWVtYmVyIGB0Y19uZXdfdGZpbHRlcmAg4oCTIHRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciBjcmVhdGluZyBuZXcgZmlsdGVycywgd2hpY2ggY2VydGFpbmx5ICpjb3VsZCogYmUgYSB0cmlnZ2VyIGZvciBiaW5kaW5nLiBJdCBtYWtlcyBsb2dpY2FsIHNlbnNlIHRvIG1hbmFnZSB0aGUgZmlsdGVycyB0aGVyZS4gV2FpdCwgdGhvdWdoLi4uIEkgbmVlZCB0byBjb25zaWRlciBgdTMyX2JpbmRfY2xhc3NgLiBUaGF0IGdldHMgY2FsbGVkIHdoZW4gYSBjbGFzcyBpcyBjcmVhdGVkLCB0byBsaW5rIGV4aXN0aW5nIGZpbHRlcnMgdG8gdGhlIG5ldyBjbGFzcyBzdHJ1Y3R1cmUuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGF0IGZ1bmN0aW9uIGdldCBjYWxsZWQgd2hlbiBhIGZpbHRlciBpcyBjcmVhdGVkIGFzIHdlbGw/IFRoYXQmIzM5O3MgdGhlIHJlYWwgdGVzdC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgdGNmX2JpbmRfZmlsdGVyYCBub3cuIFRoYXQgZmVlbHMgbGlrZSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgYmluZGluZyBvZiBhIGNyZWF0ZWQgZmlsdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfYmluZF9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYmFzaWMuYz0xNDc9c3RhdGljIGludCBiYXNpY19zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbi0tXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMTY0LVx0XHRmLVx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX0JBU0lDX0NMQVNTSURdKTtcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoxNjU6XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2Zi1cdTAwM2VyZXMsIGJhc2UpO1xubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTE2Ni1cdH1cbi0tXG5uZXQvc2NoZWQvY2xzX2JwZi5jPTQwOT1zdGF0aWMgaW50IGNsc19icGZfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbi0tXG5uZXQvc2NoZWQvY2xzX2JwZi5jLTUwMC1cdFx0cHJvZy1cdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9CUEZfQ0xBU1NJRF0pO1xubmV0L3NjaGVkL2Nsc19icGYuYzo1MDE6XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2cHJvZy1cdTAwM2VyZXMsIGJhc2UpO1xubmV0L3NjaGVkL2Nsc19icGYuYy01MDItXHRcdGJvdW5kX3RvX2ZpbHRlciA9IHRydWU7XG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yMzUzPXN0YXRpYyBpbnQgZmxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI0NTctXHRcdFx0cnRubF9sb2NrKCk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI0NTg6XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2Zm5ldy1cdTAwM2VyZXMsIGJhc2UpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDU5LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IFRDQV9BQ1RfRkxBR1NfTk9fUlROTClcbi0tXG5uZXQvc2NoZWQvY2xzX2Z3LmM9MjA1PXN0YXRpYyBpbnQgZndfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4tLVxubmV0L3NjaGVkL2Nsc19mdy5jLTIzNi1cdFx0Zi1cdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9GV19DTEFTU0lEXSk7XG5uZXQvc2NoZWQvY2xzX2Z3LmM6MjM3Olx0XHR0Y2ZfYmluZF9maWx0ZXIodHAsIFx1MDAyNmYtXHUwMDNlcmVzLCBiYXNlKTtcbm5ldC9zY2hlZC9jbHNfZncuYy0yMzgtXHR9XG4tLVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jPTE2Mj1zdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbi0tXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMjE2LVx0XHRuZXctXHUwMDNlcmVzLmNsYXNzaWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfTUFUQ0hBTExfQ0xBU1NJRF0pO1xubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjIxNzpcdFx0dGNmX2JpbmRfZmlsdGVyKHRwLCBcdTAwMjZuZXctXHUwMDNlcmVzLCBiYXNlKTtcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0yMTgtXHRcdGJvdW5kX3RvX2ZpbHRlciA9IHRydWU7XG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTQwMD1zdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNDg2LVx0XHRmLVx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9DTEFTU0lEXSk7XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6NDg3Olx0XHR0Y2ZfYmluZF9maWx0ZXIodHAsIFx1MDAyNmYtXHUwMDNlcmVzLCBiYXNlKTtcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy00ODgtXHR9XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz03MzE9c3RhdGljIHZvaWQgdTMyX2JpbmRfZmlsdGVyKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTczNS1cdFx0bi1cdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfQ0xBU1NJRF0pO1xubmV0L3NjaGVkL2Nsc191MzIuYzo3MzY6XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2bi1cdTAwM2VyZXMsIGJhc2UpO1xubmV0L3NjaGVkL2Nsc191MzIuYy03MzctXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEZpbHRlciBCaW5kaW5nIFByb2Nlc3MqKgoKUmlnaHQsIGB0Y2ZfYmluZF9maWx0ZXJgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCYjMzk7cyBjYWxsZWQgd2hlbiBhIHRyYWZmaWMgY29udHJvbCAoVEMpIGZpbHRlciBpcyBjcmVhdGVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhhdCBjcnVjaWFsIHBvaW50LiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZpbHRlciBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIFRDIHN5c3RlbSwgSSYjMzk7bSBnb2luZyB0byBjb25zdWx0IHRoZSBrZXJuZWwgc291cmNlIGNvZGUuIEkmIzM5O20gcHJldHR5IHN1cmUgYHRjZl9iaW5kX2ZpbHRlcmAgaXMgZGVmaW5lZCBpbiBlaXRoZXIgYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgIG9yIHdpdGhpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRpbWUgdG8gZGlnIGluIGFuZCBwaW5wb2ludCB3aGVyZSB0aGUgZmlsdGVyJiMzOTtzIGJpbmRpbmcgbG9naWMgaXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmlsdGVyIGdldHMgYXNzb2NpYXRlZCB3aXRoIGl0cyBjbGFzc2lmaWVyLCBxZGlzYywgYW5kIG90aGVyIFRDIGNvbXBvbmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmX2JpbmRfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRyYWZmaWMgQ29udHJvbCBMYW5kc2NhcGUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIHRyYWZmaWMgY29udHJvbCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIHNjaGVkdWxpbmcgQVBJcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFRoZSBmaXJzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRoaXMgZmlsZSBpcyB0aGUgYmVkcm9jaywgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIHNjaGVkdWxpbmcgZGlzY2lwbGluZXMgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgZmluZGluZyB0aGUgY29yZSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBlbnF1ZXVpbmcgYW5kIGRlcXVldWluZyBwYWNrZXRzLCBhbmQgdGhlIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc21zIGZvciBuZXcgcXVldWVpbmcgZGlzY2lwbGluZXMgKHFkaXNjcykgYW5kIGNsYXNzaWZpZXJzLiBJIGhvcGUgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBsaWtlIGBRZGlzY2AsIGB0Y19jbGFzc19kZWZgLCBhbmQgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb24gcG9pbnRlcnMsIHRvIGdldCBteSBiZWFyaW5ncy4gSSYjMzk7bGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaGlnaGVyIGxheWVycywgbGlrZSBob3cgdHJhZmZpYyBzaGFwaW5nIGFuZCBwb2xpY2luZyBhcmUgaW1wbGVtZW50ZWQgdmlhIHRoZXNlIEFQSXMuIEl04oCZcyBhbGwgYWJvdXQgdHJhY2luZyB0aGUgcGFja2V0IGZsb3csIGZyb20gaXRzIGFycml2YWwgdG8gaXRzIHVsdGltYXRlIHRyYW5zbWlzc2lvbiwgc28gSSBleHBlY3QgdG8gc2VlIHRoZSBrZXkgY2FsbHMgaW4gYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9iaW5kX2ZpbHRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyB0aGUgRGVmaW5pdGlvbiBvZiBgdGNmX2JpbmRfZmlsdGVyYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSBgdGNmX2JpbmRfZmlsdGVyYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHRoZSBjb250ZXh0IGl0JiMzOTtzIG9wZXJhdGluZyB3aXRoaW4uIFRoaXMgaXMgZnVuZGFtZW50YWw7IHdpdGhvdXQga25vd2luZyB3aGVyZSBpdCBjb21lcyBmcm9tLCBJJiMzOTttIGVzc2VudGlhbGx5IGZseWluZyBibGluZC4gS25vd2luZyB0aGUgZGVmaW5pdGlvbiB3aWxsIHVubG9jayBzbyBtdWNoIOKAkyBpdHMgZGF0YSB0eXBlLCBhbnkgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzLCBhbmQgaG9wZWZ1bGx5IHNoZWQgbGlnaHQgb24gaXRzIHB1cnBvc2Ugd2l0aGluIHRoaXMgc3lzdGVtLiBMZXQmIzM5O3MgdHJhY2UgYmFjayBhbmQgZmluZCB0aGUgc291cmNlLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgYW55IGluLWRlcHRoIGRlYnVnZ2luZyBvciBleHBsb3JhdGlvbiBvZiB1bmZhbWlsaWFyIGNvZGUuIExvY2F0aW5nIHRoZSBkZWZpbml0aW9uIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9iaW5kX2ZpbHRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wa3RfY2xzLmg9MTgwPXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjE4MTpfX3RjZl9iaW5kX2ZpbHRlcihzdHJ1Y3QgUWRpc2MgKnEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyLCB1bnNpZ25lZCBsb25nIGJhc2UpXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMTgyLXtcbi0tXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9MTkxPXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjE5Mjp0Y2ZfYmluZF9maWx0ZXIoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyLCB1bnNpZ25lZCBsb25nIGJhc2UpXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMTkzLXtcbi0tXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjAxLVx0c2NoX3RyZWVfbG9jayhxKTtcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoyMDI6XHRfX3RjZl9iaW5kX2ZpbHRlcihxLCByLCBiYXNlKTtcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yMDMtXHRzY2hfdHJlZV91bmxvY2socSk7XG4tLVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTIyNT1zdGF0aWMgaW5saW5lIHZvaWQgdGNfY2xzX2JpbmRfY2xhc3ModTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsXG4tLVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTIzMC1cdFx0aWYgKGNsKVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjIzMTpcdFx0XHRfX3RjZl9iaW5kX2ZpbHRlcihxLCByZXMsIGJhc2UpO1xuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTIzMi1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFUzMiBDbGFzc2lmaWVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHRjX2Nsc19iaW5kX2NsYXNzYCBnZXRzIGludm9rZWQgaW5kaXJlY3RseSB0aHJvdWdoIGB1MzJfYmluZF9jbGFzc2AuICBBbmQgdGhhdCBgdTMyX2JpbmRfY2xhc3NgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGNyZWF0ZSBvciBtb2RpZnkgYSBjbGFzcyB1c2luZyB0aGUgYHRjX2JpbmRfdGNsYXNzYCBmdW5jdGlvbi4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGB0Y19jdGxfdGNsYXNzYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgbWFuYWdpbmcgdGhlc2UgY2xhc3Nlcy4gQW5kLCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBob3cgZmlsdGVycyBhcmUgY3JlYXRlZCwgYHRjX25ld190ZmlsdGVyYCBpcyBhbHNvIGFuIGltcG9ydGFudCBlbnRyeSBwb2ludCwgYmVjYXVzZSBpdCBjYWxscyBgdTMyX2NoYW5nZWAsIHdoaWNoIGV2ZW50dWFsbHkgbGFuZHMgb24gYHUzMl9iaW5kX2ZpbHRlcmAsIHRoZW4gYHRjZl9iaW5kX2ZpbHRlcmAuIEFsdGhvdWdoIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYHUzMl9iaW5kX2NsYXNzYCwgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgc3BlY2lmaWNhbGx5IHdoZW4gYSBjbGFzcyBpcyBib3VuZCwgc28gYHRjX2N0bF90Y2xhc3NgIGlzIHRoZSBtb3JlIHJlbGV2YW50IHN0YXJ0aW5nIHBvaW50LgoKTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyByZWxhdGVkIHRvIHRoaXMuIEkmIzM5O20gYXNzdW1pbmcgYE5FVF9DTFNfVTMyYCBpcyB0aGUgbWFpbiBvcHRpb24sIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVycz8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCBgTkVUX1NDSEVEYCBhdCB0aGUgdmVyeSBsZWFzdC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBORVRfQ0xTX1UzMmAgaW4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19VMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA2NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgU3RydWN0dXJlIG9mIE5FVF9TQ0hFRCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBORVRfU0NIRURgIGhlcmUuIFdlIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhhdCB3aGF0ZXZlciB0aGUgaXNzdWUgaXMsIGl0IGhpbmdlcyBvbiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd246IHdoYXQgKmRvZXMqIGBORVRfU0NIRURgIGRlcGVuZCBvbj8gSXMgaXQgYSBzdGFuZGFsb25lIGZlYXR1cmUsIG9yIGlzIGl0IGNvbnRpbmdlbnQgb24gb3RoZXIsIGxvd2VyLWxldmVsLCBtb3JlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb25zPyBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgYmVoYXZpb3IgYW5kIHJlc29sdmluZyBhbnkgY29uZmxpY3RzLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBjb25zdWx0IHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCBpbnZlc3RpZ2F0ZSB0aGUgc291cmNlIGNvZGUsIG9yIHJ1biBhIGNvbmZpZ3VyYXRpb24gYW5hbHlzaXMgdG8gbWFwIG91dCBgTkVUX1NDSEVEYCYjMzk7cyBkZXBlbmRlbmN5IHRyZWUgYW5kIGRldGVybWluZSBpdHMgaW1wbGljYXRpb25zLiBUaGlzIHdpbGwgY2xhcmlmeSBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBvdGhlciBzeXN0ZW1zIGFuZCBjbGFyaWZ5IGlmIHRoZXJlIGlzIGEgY29uZmxpY3QgaW4gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpcmVjdCBMaW5lIG9mIElucXVpcnkqKgoKSG1tLCB0aGlzIGZlZWxzIHNlbGYtY29udGFpbmVkLCBpbmRlcGVuZGVudC4gSXQmIzM5O3Mgbm90IGNvbnRpbmdlbnQgb24gc29tZSBleHRlcm5hbCBmYWN0b3Igb3IgcHJpb3Igc3RlcC4gVGhhdCBzdWdnZXN0cyBhIGNvcmUgcHJvY2Vzcywgc29tZXRoaW5nIGZvdW5kYXRpb25hbC4gQWxyaWdodCwgbGV0JiMzOTtzIGN1dCBzdHJhaWdodCB0byB0aGUgY2hhc2UgYW5kIGV4YW1pbmUgdGhlIGB0Y19jdGxfdGNsYXNzYCBmdW5jdGlvbi4gTXkgZ3Vlc3MgaXMgaXQmIzM5O3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdG8gYG5ldC9zY2hlZC9zY2hfYXBpLmNgIGluIHRoZSBrZXJuZWwgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jdGxfdGNsYXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTIxOTA9c3RhdGljIHZvaWQgdGNfYmluZF90Y2xhc3Moc3RydWN0IFFkaXNjICpxLCB1MzIgcG9ydGlkLCB1MzIgY2xpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxOTYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxOTc6c3RhdGljIGludCBfX3RjX2N0bF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTk4LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzMjYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIzMjc6c3RhdGljIGludCB0Y19jdGxfdGNsYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjMyOC1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0NS1cdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzQ2Olx0ZXJyID0gX190Y19jdGxfdGNsYXNzKHNrYiwgbiwgZXh0YWNrLCBkZXYsIHRjYSwgdGNtKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0Ny1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0yNTIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBwc2NoZWRfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MjctXHQgLmR1bXBpdCA9IHRjX2R1bXBfcWRpc2N9LFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI4Olx0ey5tc2d0eXBlID0gUlRNX05FV1RDTEFTUywgLmRvaXQgPSB0Y19jdGxfdGNsYXNzfSxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjUyOTpcdHsubXNndHlwZSA9IFJUTV9ERUxUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjI1MzA6XHR7Lm1zZ3R5cGUgPSBSVE1fR0VUVENMQVNTLCAuZG9pdCA9IHRjX2N0bF90Y2xhc3MsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzEtXHQgLmR1bXBpdCA9IHRjX2R1bXBfdGNsYXNzfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBUYXJnZXRlZCBJbnZlc3RpZ2F0aW9uKioKCk15IGluaXRpYWwgaW5zdGluY3QsIGdpdmVuIHRoaXMgY29udGV4dCwgaXMgdGhhdCBgdGNfY3RsX3RjbGFzc2AgaXMgdGhlIGtleSBwb2ludCBvZiBmb2N1cyBoZXJlLiBJdCBzZWVtcyB0byBiZSB0aGUgZGlyZWN0IGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIGBiaW5kX2NsYXNzYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIE9mIGNvdXJzZSwgSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgdGNfbmV3X3RmaWx0ZXJgLCBhcyBpdCYjMzk7cyBwb3NzaWJsZSBpdCBzaGFyZXMgYSBjb2RlIHBhdGggdGhhdCAqYWxzbyogbGVhZHMgdG8gYGJpbmRfY2xhc3NgLiBJdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gY29uc2lkZXIgcmVsYXRlZCBlbnRyeSBwb2ludHMsIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgZGVzaWduZWQgdG8gcGVyZm9ybSBzaW1pbGFyIHRhc2tzLiBCdXQsIHRvIGJlIGVmZmljaWVudCwgSSYjMzk7bGwgcHJpb3JpdGl6ZSBgdGNfY3RsX3RjbGFzc2AgZmlyc3QuIFRoZW4gSSB3aWxsIGludmVzdGlnYXRlIGB0Y19uZXdfdGZpbHRlcmAgbmV4dCwgaWYgSSBuZWVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjX25ld190ZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIFRyYWZmaWMgQ29udHJvbCBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIGludGVybmFscyBhZ2Fpbi4gVGhlIGtlcm5lbCYjMzk7cyB0YyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgYSBiaXQgb2YgYSBsYWJ5cmludGgsIGJ1dCBJJiMzOTttIGdldHRpbmcgYmFjayBpbnRvIGl0LiBBaCwgcmlnaHQsIHRoYXQgc3BlY2lmaWMgZmlsdGVyIGNyZWF0aW9uIGZ1bmN0aW9uLCBgdGNfbmV3X3RmaWx0ZXJgLi4uIEkgc2VlbSB0byByZWNhbGwgaXQmIzM5O3MgdHVja2VkIGF3YXkgaW4gYG5ldC9zY2hlZC9jbHNfYXBpLmNgLiBOb3cgSSByZW1lbWJlciwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBjbGFzcyBBUEkgYW5kIGZpbHRlciBoYW5kbGluZyBsb2dpYyByZXNpZGVzLiBHb29kLCB0aGF0IG5hcnJvd3MgbXkgZm9jdXMuIEkga25vdyBJJiMzOTtsbCBiZSBqdW1waW5nIGJldHdlZW4gYSBmZXcgZmlsZXMgYXMgSSB3b3JrIHRocm91Z2ggdGhpcywgYnV0IHJlbWVtYmVyaW5nIHRoYXQgZmlsZSBsb2NhdGlvbiBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGhlbHBzIHRvIG9yaWVudCBteSB0aG91Z2h0cyBhYm91dCB0aGUgb3ZlcmFsbCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjX25ld190ZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jPTIyNDY9c3RhdGljIGJvb2wgaXNfaW5ncmVzc19vcl9jbHNhY3Qoc3RydWN0IHRjZl9ibG9jayAqYmxvY2ssIHN0cnVjdCBRZGlzYyAqcSlcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyNTAtXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjIyNTE6c3RhdGljIGludCB0Y19uZXdfdGZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyNTItXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYz00MTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciB0Y19maWx0ZXJfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDExNzpcdHsubXNndHlwZSA9IFJUTV9ORVdURklMVEVSLCAuZG9pdCA9IHRjX25ld190ZmlsdGVyLFxubmV0L3NjaGVkL2Nsc19hcGkuYy00MTE4LVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NTEKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgVHJhZmZpYyBDb250cm9sIFBhdGNoKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHRjX25ld190ZmlsdGVyYCBpcyBpbmRlZWQgbG9jYXRlZCB3aXRoaW4gYGNsc19hcGkuY2AsIGdvb2QuIEJhc2VkIG9uIHRoZSBmaWxlIGNvbnRleHQgSSYjMzk7bGwgYWRkIGB0Y19jdGxfdGNsYXNzYCBhbmQgYHRjX25ld190ZmlsdGVyYCB0byBteSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZjoKCmBgYGMKIAlzdHJ1Y3QgdGNfdV9rbm9kZSAqbiA9IGZoOwogCiYjNDM7CWlmIChUQ19VMzJfS0VZKG4tJmd0O2hhbmRsZSkgPT0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAl0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgJmFtcDtuLSZndDtyZXMsIGJhc2UpOwpgYGAKCkFoLCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCYjMzk7cyBhIGJ1ZyBmaXggaW4gdGhlIGB1MzJfYmluZF9jbGFzc2AgZnVuY3Rpb24uIEJhc2ljYWxseSwgdGhpcyBwcmV2ZW50cyBgdGNfY2xzX2JpbmRfY2xhc3NgIGZyb20gYmVpbmcgY2FsbGVkIHdoZW4gYFRDX1UzMl9LRVkobi0mZ3Q7aGFuZGxlKWAgZXZhbHVhdGVzIHRvIHplcm8uIFRoaXMgc2hvdWxkIGRlZmluaXRlbHkgYmUgZnV6eiB0ZXN0ZWQuIEl0JiMzOTtzIGxpa2VseSBhIG1pc3NpbmcgbnVsbCBjaGVjayBzb21ld2hlcmUgYWxvbmcgdGhlIGNvbnRyb2wgcGF0aCB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaXNzdWUuCgpUaGUgY29uZmlnIG9wdGlvbnMgaW52b2x2ZWQgaGVyZSBhcmUgc3RyYWlnaHRmb3J3YXJkOiBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfVTMyYC4KClNvIHRvIHJlaXRlcmF0ZSwgdGhpcyBwYXRjaCBpbXBhY3RzIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIFUzMiBjbGFzc2lmaWVyLiBJdCBhZGRyZXNzZXMgYSBzY2VuYXJpbyB3aGVyZSBhbiBpbnZhbGlkIGhhbmRsZSAoemVybyB2YWx1ZSkgd2FzIHBvdGVudGlhbGx5IGJlaW5nIHBhc3NlZCB0byBgdGNfY2xzX2JpbmRfY2xhc3NgLiBUaGlzIGlzIHRyaWdnZXJlZCB0aHJvdWdoIG5ldGxpbmsgY29tbWFuZHMgdXRpbGl6ZWQgdG8gY3JlYXRlIG9yIG1vZGlmeSB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgdGNfY3RsX3RjbGFzc2AgYW5kIGB0Y19uZXdfdGZpbHRlcmAuIEFuZCBpdCB3aWxsIG9ubHkgaGF2ZSBhbiBlZmZlY3QgaWYgYENPTkZJR19ORVRfQ0xTX1UzMmAgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1UzMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF90Y2xhc3MmIzM0OywKICAgICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1UzMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF90Y2xhc3MmIzM0OywKICAgICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMToxNC42MjIxMDQ3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTM1ODI5NDg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNfVTMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNfY3RsX3RjbGFzc1wiLFxuICAgIFwidGNfbmV3X3RmaWx0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGVjayBpbiBgdTMyX2JpbmRfY2xhc3NgIHRvIHByZXZlbnQgYmluZGluZyBhIGNsYXNzIHdoZW4gYFRDX1UzMl9LRVkobi1cXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjE0LjYyMjExNDk4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwMzE5NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzIxNWJiN2Q3ZjM1NDNhYmNlMzE0Mzg4MDBmYTQ3OWU0MWI4YzlmOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDA4OjAxOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXFxuaW5kZXggYWM5OGIxYzIxNDRhNy4uYzI5N2Q3ZGJjZjkxNiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xcbkBAIC0xMzQ2LDYgKzEzNDYsOSBAQCBzdGF0aWMgdm9pZCB1MzJfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXFxuIHtcXG4gXFx0c3RydWN0IHRjX3Vfa25vZGUgKm4gPSBmaDtcXG4gXFxuK1xcdGlmIChUQ19VMzJfS0VZKG4tXFx1MDAzZWhhbmRsZSkgPT0gMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0dGNfY2xzX2JpbmRfY2xhc3MoY2xhc3NpZCwgY2wsIHEsIFxcdTAwMjZuLVxcdTAwM2VyZXMsIGJhc2UpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMToxNS44MTMyMjk1MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDQxNjcxNjE1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX1UzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX2N0bF90Y2xhc3NcIixcbiAgICBcInRjX25ld190ZmlsdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXFx1MDAzZWhhbmRsZSkgPT0gMGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGZvciBjcmVhdGluZy9tb2RpZnlpbmcgdHJhZmZpYyBjbGFzc2VzIGFuZCBmaWx0ZXJzIChgdGNfY3RsX3RjbGFzc2AsIGB0Y19uZXdfdGZpbHRlcmApLiBJdCByZXF1aXJlcyBgQ09ORklHX05FVF9DTFNfVTMyYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMjE1YmI3ZDdmMzU0M2FiY2UzMTQzODgwMGZhNDc5ZTQxYjhjOWY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwODowMToxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCBhYzk4YjFjMjE0NGE3Li5jMjk3ZDdkYmNmOTE2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTEzNDYsNiArMTM0Niw5IEBAIHN0YXRpYyB2b2lkIHUzMl9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcbiB7XG4gXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbiA9IGZoO1xuIFxuK1x0aWYgKFRDX1UzMl9LRVkobi1cdTAwM2VoYW5kbGUpID09IDApXG4rXHRcdHJldHVybjtcbitcbiBcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZuLVx1MDAzZXJlcywgYmFzZSk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6MTUuODEzMjMwNTY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEwNTU4ODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHUzMiBDbGFzc2lmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfdTMyLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gdGhlIGB1MzJfYmluZF9jbGFzc2AgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkncmUgZ3VhcmRpbmcgYWdhaW5zdCBhIHNwZWNpZmljIGNhc2U6XG5cbmBgYGNcblx0c3RydWN0IHRjX3Vfa25vZGUgKm4gPSBmaDtcbiBcbitcdGlmIChUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKSA9PSAwKVxuK1x0XHRyZXR1cm47XG4rXG4gXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXHUwMDI2bi1cdTAwM2VyZXMsIGJhc2UpO1xuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBgdTMyX2JpbmRfY2xhc3NgIGlzIG9idmlvdXNseSBwYXJ0IG9mIHRoZSBgdGNfdTMyYCBjbGFzc2lmaWVyLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBUcmFmZmljIENvbnRyb2wgKFRDKSBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGB1MzJfYmluZF9jbGFzc2AgaXMgY2FsbGVkLiBJdCdzIGxpa2VseSBjYWxsZWQgdGhyb3VnaCBgdGNfY2xzX2JpbmRfY2xhc3NgIG9yIG1heWJlIGB0Y2ZfYmluZF9maWx0ZXJgLCBzb21ldGhpbmcgbGlrZSB0aGF0LCB3aGljaCBJIHdpbGwgY29uZmlybS4gQWgsIHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQncyBsb29rIGF0IHRoZSBgdGNmX3Byb3RvX29wc2Agc3RydWN0IGZvciB0aGUgdTMyIGNsYXNzaWZpZXIuIFllcCwgaXQncyB0aGVyZSBhcyBhIGNhbGxiYWNrOlxuXG5gYGBjXG5zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3UzMl9vcHMgX19yZWFkX21vc3RseSA9IHtcblx0LmtpbmRcdFx0PVx0XCJ1MzJcIixcblx0LmNsYXNzaWZ5XHQ9XHR1MzJfY2xhc3NpZnksXG5cdC5pbml0XHRcdD1cdHUzMl9pbml0LFxuXHQuZGVzdHJveVx0PVx0dTMyX2Rlc3Ryb3ksXG5cdC5nZXRcdFx0PVx0dTMyX2dldCxcblx0LmNoYW5nZVx0XHQ9XHR1MzJfY2hhbmdlLFxuXHQuZGVsZXRlXHRcdD1cdHUzMl9kZWxldGUsXG5cdC53YWxrXHRcdD1cdHUzMl93YWxrLFxuXHQucmVvZmZsb2FkXHQ9XHR1MzJfcmVvZmZsb2FkLFxuXHQuYmluZF9jbGFzc1x0PVx0dTMyX2JpbmRfY2xhc3MsXG5cdC5vd25lclx0XHQ9XHRUSElTX01PRFVMRSxcbn07XG5gYGBcblxuT2theSwgc28gYHUzMl9iaW5kX2NsYXNzYCBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGhpbiBgY2xzX3UzMl9vcHNgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhhdCBvdmVyYWxsIGZyYW1ld29yay4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSAqd2h5KiB0aGlzIHNwZWNpZmljIGNoZWNrIGZvciBgVENfVTMyX0tFWShuLVx1MDAzZWhhbmRsZSkgPT0gMGAgd2FzIGFkZGVkLiBXaGF0J3MgdGhlIHBvdGVudGlhbCBpc3N1ZSBiZWluZyBhZGRyZXNzZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGVjayBvbiB0aGUgYmVoYXZpb3VyIG9mIGB1MzJgIHRyYWZmaWMgY2xhc3NpZmljYXRpb24/IEkgd2lsbCBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6MjIuOTE4ODIyNDE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjU4OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInUzMl9iaW5kX2NsYXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz0xMjk3PXN0YXRpYyBpbnQgdTMyX3Jlb2ZmbG9hZChzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgYm9vbCBhZGQsIGZsb3dfc2V0dXBfY2JfdCAqY2IsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDMtXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMzQ0OnN0YXRpYyB2b2lkIHUzMl9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDUtXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBiYXNlKVxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDY4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDc4LVxcdC5kdW1wXFx0XFx0PVxcdHUzMl9kdW1wLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ3OTpcXHQuYmluZF9jbGFzc1xcdD1cXHR1MzJfYmluZF9jbGFzcyxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0ODAtXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMToyMi45NjE0ODY1MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDQ3MTUyMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHUzMl9iaW5kX2NsYXNzYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBgdTMyX2JpbmRfY2xhc3NgIGZ1bmN0aW9uICppcyogaW5kZWVkIGJlaW5nIHVzZWQgYXMgdGhlIGAuYmluZF9jbGFzc2AgbWVtYmVyIGluIHRoZSBgY2xzX3UzMl9vcHNgIHN0cnVjdHVyZS4gR29vZCwgdGhhdCBjb25maXJtcyB0aGUgaW1wbGVtZW50YXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGZ1bmN0aW9uYWxseSBzb3VuZDsgaXQncyBkZXNpZ25lZCB0byBmaXggYSBidWcsIGxpa2VseSBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHdhcyBoYXBwZW5pbmcgd2hlbiBgVENfVTMyX0tFWShuLVx1MDAzZWhhbmRsZSlgIGV2YWx1YXRlZCB0byB6ZXJvLiBJIGNhbiBhbG1vc3QgcGljdHVyZSB0aGUgY29kZSBhbmQgaG93IHRoYXQgY291bGQgaGFwcGVuLi4uIG1ha2VzIHNlbnNlLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlPyBDYW4gYSB1c2VyIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBjb2RlIHBhdGg/IFRoZSBhbnN3ZXIgaXMgeWVzLCB1bmRvdWJ0ZWRseS4gV2UgaW50ZXJhY3Qgd2l0aCB0aGlzIHRocm91Z2ggYHRjYCBuZXRsaW5rIGNvbW1hbmRzLCB3aGljaCBhcmUgdGhlIHN0YW5kYXJkIHdheSBvZiBjb25maWd1cmluZyB0cmFmZmljIGNvbnRyb2wuIFNvLCB0aGlzIGlzbid0IHNvbWUgb2JzY3VyZSBjb3JuZXIgY2FzZTsgaXQncyBzb21ldGhpbmcgdGhhdCBjb3VsZCBkZWZpbml0ZWx5IGJlIGV4cGxvaXRlZCBpbiBhIHJlYWwtd29ybGQgc2NlbmFyaW8uIExldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYGNsc191MzIuY2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBhdCBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6MzEuMDA4NjQwNjgyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzQ2ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsc191MzIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL01ha2VmaWxlPTY2PW9iai0kKENPTkZJR19ORVRfU0NIX0RVQUxQSTIpXFx0Kz0gc2NoX2R1YWxwaTIub1xcbm5ldC9zY2hlZC9NYWtlZmlsZS02Ny1cXG5uZXQvc2NoZWQvTWFrZWZpbGU6Njg6b2JqLSQoQ09ORklHX05FVF9DTFNfVTMyKVxcdCs9IGNsc191MzIub1xcbm5ldC9zY2hlZC9NYWtlZmlsZS02OS1vYmotJChDT05GSUdfTkVUX0NMU19ST1VURTQpXFx0Kz0gY2xzX3JvdXRlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6MzEuMDUyMzkyOTE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MzIyMjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgTGFuZHNjYXBlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgTkVUX0NMU19VMzJgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgcGFydGljdWxhciBjbGFzc2lmaWVyLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBjcnVjaWFsLiBJcyB0aGlzIHN0YW5kYWxvbmUsIG9yIGRvZXMgaXQgcGlnZ3liYWNrIG9uIGFub3RoZXIgY29yZSBuZXR3b3JraW5nIG1vZHVsZT8gQXJlIHRoZXJlIGtlcm5lbCBmZWF0dXJlcyBJIG5lZWQgdG8gZW5hYmxlIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGtleS4gSXQgaGVscHMgbWUgZW5zdXJlIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCBvcHRpbWFsbHksIGF2b2lkcyBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMgZm9yIGBORVRfQ0xTX1UzMmAgdG8gcGVyZm9ybSBhcyBleHBlY3RlZC4gVGhpcyBhbHNvIGhlbHBzIG1lIHVuZGVyc3RhbmQgd2hpY2ggb3RoZXIgbW9kdWxlcyBtaWdodCBiZSBpbXBhY3RlZCBieSBhIGNoYW5nZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRoYXQgd2F5IEkgZG9uJ3QgaW50cm9kdWNlIHByb2JsZW1zIHdoZXJlIHRoZXkgd2VyZW4ndCBhbnRpY2lwYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjM1LjQwNTYxNzU1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk2MzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19VMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NTA2PWNvbmZpZyBORVRfQ0xTX0ZXXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXFxubmV0L3NjaGVkL0tjb25maWc6NTE2OmNvbmZpZyBORVRfQ0xTX1UzMlxcbm5ldC9zY2hlZC9LY29uZmlnLTUxNy1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjM1LjQ0OTU4NTEzNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjE3MDQ3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBORVRfQ0xTX1UzMioqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0NMU19VMzJgLiBUaGF0IG5hbWUgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBsaWtlbHkgY2xhc3NpZmljYXRpb24gbW9kdWxlLCBwcm9iYWJseSByZWxhdGVkIHRvIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIHZhbHVlcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IGV4cGVydGlzZSBpcyBwcmltYXJpbHkgaW4gdGhlIGtlcm5lbCBhbmQgbmV0d29yayBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIHNvIHRoaXMga2luZCBvZiB0YXNrIGlzIHJvdXRpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyByZWx5IG9uIGBORVRfQ0xTX1UzMmAsIG9yLCBjb252ZXJzZWx5LCB3aGF0ICppdCogcmVsaWVzIHVwb24uIFdoYXQgb3RoZXIgbW9kdWxlcywgY29uZmlndXJhdGlvbnMsIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgaW50ZXJ0d2luZWQgd2l0aCBpdHMgZnVuY3Rpb25hbGl0eT8gSXMgaXQgY29yZSB0byBwYWNrZXQgZmlsdGVyaW5nLCBRb1MsIG9yIHRyYWZmaWMgc2hhcGluZz8gSSdtIGFudGljaXBhdGluZyB0aGF0IGl0J3MgbGlrZWx5IGEgbGVhZi1sZXZlbCBjb21wb25lbnQuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyB0cmFjaW5nIHRvb2xzIGFuZCBrZXJuZWwgZG9jdW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgbmV4dCBzdGVwLiBUbyBnZXQgYSB1c2VmdWwgb3ZlcnZpZXcsIEnigJlsbCBuZWVkIHRvIHdvcmsgdGhyb3VnaCBpdHMgaW1wbGVtZW50YXRpb24sIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBkYXRhIHN0cnVjdHVyZSB1c2FnZSwgYW5kIGZ1bmN0aW9uIGNhbGxzLiBUaGlzIHNob3VsZCBxdWlja2x5IHVuY292ZXIgaXRzIGludGVncmF0aW9uIHBvaW50cyB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdWJzeXN0ZW0uIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gbWlnaHQgYmUgYmVuZWZpY2lhbC4gSG9wZWZ1bGx5IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGRvY3VtZW50ZWQgd2VsbC4gT3RoZXJ3aXNlLCBJIG1heSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdXNlIGB0cmFjZXBvaW50c2AgYW5kIGRlYnVnZ2luZyB0b29scy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjM5Ljc3MTI5MjUxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTY6XFx0Y29uZmlnIE5FVF9DTFNfVTMyXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuIDUxODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1MTk6XFx0XFx0aGVscFxcbiA1MjA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZyBhIHVuaXZlcnNhbFxcbiA1MjE6XFx0XFx0ICAzMmJpdCBwaWVjZXMgYmFzZWQgY29tcGFyaXNvbiBzY2hlbWUuXFxuIDUyMjpcXHRcXG4gNTIzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1MjQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3UzMi5cXG4gNTI1OlxcdFxcbiA1MjY6XFx0Y29uZmlnIENMU19VMzJfUEVSRlxcbiA1Mjc6XFx0XFx0Ym9vbCBcXFwiUGVyZm9ybWFuY2UgY291bnRlcnMgc3VwcG9ydFxcXCJcXG4gNTI4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19VMzJcXG4gNTI5OlxcdFxcdGhlbHBcXG4gNTMwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBtYWtlIHUzMiBnYXRoZXIgYWRkaXRpb25hbCBzdGF0aXN0aWNzIHVzZWZ1bCBmb3JcXG4gNTMxOlxcdFxcdCAgZmluZSB0dW5pbmcgdTMyIGNsYXNzaWZpZXJzLlxcbiA1MzI6XFx0XFxuIDUzMzpcXHRjb25maWcgQ0xTX1UzMl9NQVJLXFxuIDUzNDpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbWFya3Mgc3VwcG9ydFxcXCJcXG4gNTM1OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19VMzJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6MzkuNzcxMzc5NjkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDA2NTU2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aGlzIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3QgaW5pdGlhbGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCBzZWVtcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gcXVlc3Rpb24sIHdoYXRldmVyIGBORVRfQ0xTYCByZXByZXNlbnRzLCBpcyBkZXBlbmRlbnQgb24gbm90aGluZyAqc3BlY2lmaWMqIG90aGVyIHRoYW4gaXRzZWxmLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBtZWFuaW5nIGl0J3MgbGlrZWx5IGEgcmVsYXRpdmVseSBzZWxmLWNvbnRhaW5lZCBmZWF0dXJlIG9yIGEgYnJvYWQgY2F0ZWdvcnkgb2YgZnVuY3Rpb25hbGl0eS4gTXkgaW50dWl0aW9uIHNheXMgdGhhdCBgTkVUX1NDSEVEYCwgdGhlIHBhcmVudCBtZW51LCB3aWxsIGJlIGltcG9ydGFudCBoZXJlLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9LY29uZmlnYC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGF0IGBtZW51Y29uZmlnIE5FVF9TQ0hFRGAgZGVmaW5pdGlvbiB0byBjbGFyaWZ5IGV4YWN0bHkgaG93IGBORVRfQ0xTYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29yayBzY2hlZHVsZXIgaGllcmFyY2h5IGFuZCBwaW5wb2ludCBhbnkgcG90ZW50aWFsIGluZGlyZWN0IGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgbmVlZGVkIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24ncyBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjQzLjUxMjAzNzA0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNDk4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBORVRfU0NIRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjQzLjU1NjI4ODc5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDMxNDU1Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfVTMyYC4gIE15IGJyYWluIGlzIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzeW1ib2xzIG1pZ2h0IGxpZS4gSSdtIGZvY3VzaW5nIG9uIGZpbmRpbmcgdGhlIGtleSBmdW5jdGlvbnMuXG5cbkkgaW5pdGlhbGx5IHRob3VnaHQgYHUzMl9iaW5kX2NsYXNzYCBtaWdodCBiZSBwcm9taXNpbmcsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBpdCdzIHN0YXRpYyBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IGxlc3MgdXNlZnVsIGZvciB0cmFjaW5nIG9yIGFuYWx5c2lzLiBXYWl0IGEgbWludXRlLi4uIGl0J3MgYSAqY2FsbGJhY2sqISBUaGF0IGNoYW5nZXMgdGhpbmdzLiBTaW5jZSBpdCdzIGEgY2FsbGJhY2ssIEkgY2FuJ3QgYXNzdW1lIHRoYXQgaXQncyBpbmxpbmVkLiBTdGlsbCwgdGhlIGZhY3QgdGhhdCBpdCdzIHN0YXRpYyBtZWFucyBpdCBtaWdodCBub3QgYmUgdGhlIGJlc3QgZm9jdXMgcG9pbnQuICBIbW0sIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIFUzMiBjbGFzcz9cblxuTGV0J3Mgc2Vl4oCmIEnigJltIHRoaW5raW5nIEknbGwgdHJ5IHRvIGZpbmQgYSBzdWl0YWJsZSBmb2N1cyBzeW1ib2wgd2l0aCBgdTMyX2NoYW5nZWAgb3IgYHUzMl9pbml0YC4gSSdsbCBzdGFydCB3aXRoIGB1MzJfY2hhbmdlYCBhbmQgc2VlIGlmIHRoYXQgbGVhZHMgdG8gYW55dGhpbmcgZnJ1aXRmdWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6NDguNTg3NzQ2MTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTUzODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInUzMl9jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX3UzMi5jPTgyMT1zdGF0aWMgc3RydWN0IHRjX3Vfa25vZGUgKnUzMl9pbml0X2tub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg3MS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjg3MjpzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODczLVxcdFxcdCAgICAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTE0Njg9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc191MzJfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NzMtXFx0LmdldFxcdFxcdD1cXHR1MzJfZ2V0LFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ3NDpcXHQuY2hhbmdlXFx0XFx0PVxcdHUzMl9jaGFuZ2UsXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDc1LVxcdC5kZWxldGVcXHRcXHQ9XFx0dTMyX2RlbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6NDguNjM1MzAyNzM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTQ2MjE2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIHRoZSB1MzIgVHJhZmZpYyBDbGFzc2lmaWVyKipcblxuUmlnaHQsIHNvIGB1MzJfY2hhbmdlYCBpcyBzdGF0aWMgYXMgd2VsbC4gT2theSwgdGhhdCdzIGdvb2QgdG8ga25vdywgYW5kIGV4cGVjdGVkLCByZWFsbHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIG1vZHVsZS4gTm93LCBsZXQncyB0cmFjZSB0aGlzLiBIYW5nIG9uLi4uIGB0Y19jbHNfYmluZF9jbGFzc2AgaXMgZ2V0dGluZyBjYWxsZWQgKmZyb20qIGB1MzJfYmluZF9jbGFzc2AuICBUaGF0J3MgYSBrZXkgaW50ZXJhY3Rpb24gdG8gcmVtZW1iZXIuIE5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgd2hhdCB0aGUgaGVjayAqaXMqIGNhbGxpbmcgYC1cdTAwM2ViaW5kX2NsYXNzYD8gV2hlcmUncyB0aGUgZW50cnkgcG9pbnQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjYWxsZXIgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgYmluZGluZyBvcGVyYXRpb24gYW5kIGhvdyB0aGUgY2xhc3NpZmllciBpcyBiZWluZyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIFRoaXMgaXMgdGhlIHBpZWNlIEkgbmVlZCB0byBzb2xpZGlmeSwgSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMTo1Mi4yODk5MjY1NjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDY5ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpbmRfY2xhc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2Jhc2ljLmM9MjQ5PXN0YXRpYyB2b2lkIGJhc2ljX3dhbGsoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y2Zfd2Fsa2VyICphcmcsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMjYwLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoyNjE6c3RhdGljIHZvaWQgYmFzaWNfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTI2Mi1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0yNjUtXFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jOjI2NjpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTI2Ny19XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM9MzE4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfYmFzaWNfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMzI3LVxcdC5kdW1wXFx0XFx0PVxcdGJhc2ljX2R1bXAsXFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jOjMyODpcXHQuYmluZF9jbGFzc1xcdD1cXHRiYXNpY19iaW5kX2NsYXNzLFxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0zMjktXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19icGYuYz01Nzk9c3RhdGljIGludCBjbHNfYnBmX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqZmgsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2JwZi5jLTYzMS1cXG5uZXQvc2NoZWQvY2xzX2JwZi5jOjYzMjpzdGF0aWMgdm9pZCBjbHNfYnBmX2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLFxcbm5ldC9zY2hlZC9jbHNfYnBmLmMtNjMzLVxcdFxcdFxcdCAgICAgICB2b2lkICpxLCB1bnNpZ25lZCBsb25nIGJhc2UpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2JwZi5jLTYzNi1cXG5uZXQvc2NoZWQvY2xzX2JwZi5jOjYzNzpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNnByb2ctXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19icGYuYy02MzgtfVxcbi0tXFxubmV0L3NjaGVkL2Nsc19icGYuYz02ODQ9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2JwZi5jLTY5NS1cXHQuZHVtcFxcdFxcdD1cXHRjbHNfYnBmX2R1bXAsXFxubmV0L3NjaGVkL2Nsc19icGYuYzo2OTY6XFx0LmJpbmRfY2xhc3NcXHQ9XFx0Y2xzX2JwZl9iaW5kX2NsYXNzLFxcbm5ldC9zY2hlZC9jbHNfYnBmLmMtNjk3LX07XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTM3ODQ9c3RhdGljIGludCBmbF90bXBsdF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqdG1wbHRfcHJpdilcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzgwOC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjM4MDk6c3RhdGljIHZvaWQgZmxfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODEwLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBiYXNlKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODEzLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MzgxNDpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODE1LX1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MzgyOD1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX2ZsX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODQzLVxcdC50ZXJzZV9kdW1wXFx0PSBmbF90ZXJzZV9kdW1wLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6Mzg0NDpcXHQuYmluZF9jbGFzc1xcdD0gZmxfYmluZF9jbGFzcyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NDUtXFx0LnRtcGx0X2NyZWF0ZVxcdD0gZmxfdG1wbHRfY3JlYXRlLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mdy5jPTM4Mj1zdGF0aWMgaW50IGZ3X2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqZmgsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmMtNDI4LVxcbm5ldC9zY2hlZC9jbHNfZncuYzo0Mjk6c3RhdGljIHZvaWQgZndfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXFxubmV0L3NjaGVkL2Nsc19mdy5jLTQzMC1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYmFzZSlcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZncuYy00MzMtXFxubmV0L3NjaGVkL2Nsc19mdy5jOjQzNDpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19mdy5jLTQzNS19XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmM9NDM3PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZndfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmMtNDQ2LVxcdC5kdW1wXFx0XFx0PVxcdGZ3X2R1bXAsXFxubmV0L3NjaGVkL2Nsc19mdy5jOjQ0NzpcXHQuYmluZF9jbGFzc1xcdD1cXHRmd19iaW5kX2NsYXNzLFxcbm5ldC9zY2hlZC9jbHNfZncuYy00NDgtXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jPTMyOD1zdGF0aWMgaW50IG1hbGxfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpmaCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0zODAtXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjM4MTpzdGF0aWMgdm9pZCBtYWxsX2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0zODItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcXG4tLVxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0zODUtXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjM4NjpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNmhlYWQtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTM4Ny19XFxuLS1cXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM9Mzg5PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfbWFsbF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0zOTktXFx0LmR1bXBcXHRcXHQ9IG1hbGxfZHVtcCxcXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM6NDAwOlxcdC5iaW5kX2NsYXNzXFx0PSBtYWxsX2JpbmRfY2xhc3MsXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTQwMS1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTYyMT1zdGF0aWMgaW50IHJvdXRlNF9kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmZoLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY2OS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6NjcwOnN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjcxLVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcXG4tLVxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02NzQtXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY3NTpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY3Ni19XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9Njc4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfcm91dGU0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY4Ny1cXHQuZHVtcFxcdFxcdD1cXHRyb3V0ZTRfZHVtcCxcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6Njg4OlxcdC5iaW5kX2NsYXNzXFx0PVxcdHJvdXRlNF9iaW5kX2NsYXNzLFxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02ODktXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xMjk3PXN0YXRpYyBpbnQgdTMyX3Jlb2ZmbG9hZChzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgYm9vbCBhZGQsIGZsb3dfc2V0dXBfY2JfdCAqY2IsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDMtXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMzQ0OnN0YXRpYyB2b2lkIHUzMl9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDUtXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBiYXNlKVxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzUxLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTM1MjpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNm4tXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzUzLX1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ2OD1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3UzMl9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ3OC1cXHQuZHVtcFxcdFxcdD1cXHR1MzJfZHVtcCxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0Nzk6XFx0LmJpbmRfY2xhc3NcXHQ9XFx0dTMyX2JpbmRfY2xhc3MsXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDgwLVxcdC5vd25lclxcdFxcdD1cXHRUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MjEyMT1zdGF0aWMgaW50IHRjZl9ub2RlX2JpbmQoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKm4sIHN0cnVjdCB0Y2Zfd2Fsa2VyICphcmcpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMjQtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMTI1OlxcdGlmIChuIFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VvcHMtXFx1MDAzZWJpbmRfY2xhc3MpIHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMjYtXFx0XFx0c3RydWN0IFFkaXNjICpxID0gdGNmX2Jsb2NrX3EodHAtXFx1MDAzZWNoYWluLVxcdTAwM2VibG9jayk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMjgtXFx0XFx0c2NoX3RyZWVfbG9jayhxKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxMjk6XFx0XFx0dHAtXFx1MDAzZW9wcy1cXHUwMDNlYmluZF9jbGFzcyhuLCBhLVxcdTAwM2VjbGFzc2lkLCBhLVxcdTAwM2VjbCwgcSwgYS1cXHUwMDNlYmFzZSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTMwLVxcdFxcdHNjaF90cmVlX3VubG9jayhxKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjEzNC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxMzU6c3RydWN0IHRjX2JpbmRfY2xhc3NfYXJncyB7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTM2LVxcdHN0cnVjdCBxZGlzY193YWxrZXIgdztcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE0MS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxNDI6c3RhdGljIGludCB0Y19iaW5kX2NsYXNzX3dhbGtlcihzdHJ1Y3QgUWRpc2MgKnEsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTQzLVxcdFxcdFxcdFxcdHN0cnVjdCBxZGlzY193YWxrZXIgKncpXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTQ0LXtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxNDU6XFx0c3RydWN0IHRjX2JpbmRfY2xhc3NfYXJncyAqYSA9IChzdHJ1Y3QgdGNfYmluZF9jbGFzc19hcmdzICopdztcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxNDYtXFx0Y29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyAqY29wcyA9IHEtXFx1MDAzZW9wcy1cXHUwMDNlY2xfb3BzO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0yMTczPXN0YXRpYyB2b2lkIHRjX2JpbmRfdGNsYXNzKHN0cnVjdCBRZGlzYyAqcSwgdTMyIHBvcnRpZCwgdTMyIGNsaWQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxNzYtXFx0Y29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyAqY29wcyA9IHEtXFx1MDAzZW9wcy1cXHUwMDNlY2xfb3BzO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjE3NzpcXHRzdHJ1Y3QgdGNfYmluZF9jbGFzc19hcmdzIGFyZ3MgPSB7fTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxNzgtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxODMtXFx0YXJncy5uZXdfY2wgPSBuZXdfY2w7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMTg0OlxcdGFyZ3Mudy5mbiA9IHRjX2JpbmRfY2xhc3Nfd2Fsa2VyO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE4NS1cXHRxLVxcdTAwM2VvcHMtXFx1MDAzZWNsX29wcy1cXHUwMDNld2FsayhxLCBcXHUwMDI2YXJncy53KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6NTIuMzQwNDAyMDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzNDEzNDE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCBDbGFzcyBCaW5kaW5nIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZmxvdyBmcm9tIGNsYXNzIGNyZWF0aW9uL21vZGlmaWNhdGlvbiBpbiB0cmFmZmljIGNvbnRyb2wsIGFuZCBpdCdzIGxvb2tpbmcgbGlrZSBgdGNfYmluZF90Y2xhc3NgIGlzIHRoZSBrZXkgZnVuY3Rpb24uIEl0J3MgY2FsbGVkIGZyb20gYHRjX2N0bF90Y2xhc3NgLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQgSSdtIGFmdGVyLCBhcyBleHBlY3RlZC5cblxuYHRjX2JpbmRfdGNsYXNzYCB0aGVuIGRpZ3MgaW50byB0aGUgY2xhc3MgaGllcmFyY2h5LiBJdCBjYWxscyBgcS1cdTAwM2VvcHMtXHUwMDNlY2xfb3BzLVx1MDAzZXdhbGsocSwgXHUwMDI2YXJncy53KWAuIFRoYXQsIGluIHR1cm4sIHNlZW1zIHRvIGZ1bm5lbCB0aGUgd29yayB0byBgdGNfYmluZF9jbGFzc193YWxrZXJgLiBXaXRoaW4gdGhhdCB3YWxrZXIsIGl0IGNhbGxzIGB0Y2ZfYmxvY2tfZ2V0YCBhbmQgdGhlbiB3ZSBoYXZlIHRoZSBmaWx0ZXIgd2Fsa2luZyB3aXRoIGB0Y2Zfbm9kZV9iaW5kYC4gQW5kIHRoZW4sIHRoaXMgd2hvbGUgcHJvY2VzcyBjYWxscyBgdHAtXHUwMDNlb3BzLVx1MDAzZWJpbmRfY2xhc3NgLlxuXG5TbywgdGhlIGNyaXRpY2FsIHBhdGggaXMgcHJldHR5IGNsZWFyOiBgdGNfY3RsX3RjbGFzc2AgLVx1MDAzZSBgdGNfYmluZF90Y2xhc3NgIC1cdTAwM2Ugd2Fsa2VyL2ZpbHRlciBoYW5kbGluZyBkb3duIHRvIHRoZSBpbmRpdmlkdWFsIGNsYXNzIGJpbmRpbmcgdXNpbmcgYHRwLVx1MDAzZW9wcy1cdTAwM2ViaW5kX2NsYXNzYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGRlYnVnZ2luZyBvciBtb2RpZmljYXRpb24sIEknbGwgZGVmaW5pdGVseSBjaGVjayBgdGNfY3RsX3RjbGFzc2AgbW9yZSBjbG9zZWx5IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAxNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMTo1Ni43NzQ1MzgyMjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTE3MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2N0bF90Y2xhc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jPTIxOTA9c3RhdGljIHZvaWQgdGNfYmluZF90Y2xhc3Moc3RydWN0IFFkaXNjICpxLCB1MzIgcG9ydGlkLCB1MzIgY2xpZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE5Ni1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxOTc6c3RhdGljIGludCBfX3RjX2N0bF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE5OC1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzMjYtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzI3OnN0YXRpYyBpbnQgdGNfY3RsX3RjbGFzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMzI4LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzNDUtXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzQ2OlxcdGVyciA9IF9fdGNfY3RsX3RjbGFzcyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMzQ3LVxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI1MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHBzY2hlZF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yNTI3LVxcdCAuZHVtcGl0ID0gdGNfZHVtcF9xZGlzY30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI4OlxcdHsubXNndHlwZSA9IFJUTV9ORVdUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI5OlxcdHsubXNndHlwZSA9IFJUTV9ERUxUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTMwOlxcdHsubXNndHlwZSA9IFJUTV9HRVRUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzcyxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzEtXFx0IC5kdW1waXQgPSB0Y19kdW1wX3RjbGFzc30sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjU2LjgyMTY2NTA1OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjcyNTA4NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRmlsdGVyIEJpbmRpbmcgVHJpZ2dlciBQb2ludHMqKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBwaW4gZG93biB3aGVyZSB0aGUgc3lzdGVtIGJpbmRzIGZpbHRlcnMsIGFuZCBgdGNfY3RsX3RjbGFzc2AgZmVlbHMgbGlrZSBhIGdvb2QgaW5pdGlhbCBmb2N1cyDigJMgaXQncyBvZnRlbiB0aGUgY2VudHJhbCBwb2ludCBmb3IgdHJhZmZpYyBjbGFzcyBtYW5hZ2VtZW50LCBzbyBmaWx0ZXIgaW50ZXJhY3Rpb25zIGFyZSBsaWtlbHkgaGFuZGxlZCB0aGVyZS4gVGhlbiwgSSByZW1lbWJlciBgdGNfbmV3X3RmaWx0ZXJgIOKAkyB0aGF0J3MgdGhlIGVudHJ5IHBvaW50IGZvciBjcmVhdGluZyBuZXcgZmlsdGVycywgd2hpY2ggY2VydGFpbmx5ICpjb3VsZCogYmUgYSB0cmlnZ2VyIGZvciBiaW5kaW5nLiBJdCBtYWtlcyBsb2dpY2FsIHNlbnNlIHRvIG1hbmFnZSB0aGUgZmlsdGVycyB0aGVyZS4gV2FpdCwgdGhvdWdoLi4uIEkgbmVlZCB0byBjb25zaWRlciBgdTMyX2JpbmRfY2xhc3NgLiBUaGF0IGdldHMgY2FsbGVkIHdoZW4gYSBjbGFzcyBpcyBjcmVhdGVkLCB0byBsaW5rIGV4aXN0aW5nIGZpbHRlcnMgdG8gdGhlIG5ldyBjbGFzcyBzdHJ1Y3R1cmUuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGF0IGZ1bmN0aW9uIGdldCBjYWxsZWQgd2hlbiBhIGZpbHRlciBpcyBjcmVhdGVkIGFzIHdlbGw/IFRoYXQncyB0aGUgcmVhbCB0ZXN0LiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGB0Y2ZfYmluZF9maWx0ZXJgIG5vdy4gVGhhdCBmZWVscyBsaWtlIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBiaW5kaW5nIG9mIGEgY3JlYXRlZCBmaWx0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMjowMi4wOTQxNzU5ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTk1Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9iaW5kX2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfYmFzaWMuYz0xNDc9c3RhdGljIGludCBiYXNpY19zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0xNjQtXFx0XFx0Zi1cXHUwMDNlcmVzLmNsYXNzaWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfQkFTSUNfQ0xBU1NJRF0pO1xcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoxNjU6XFx0XFx0dGNmX2JpbmRfZmlsdGVyKHRwLCBcXHUwMDI2Zi1cXHUwMDNlcmVzLCBiYXNlKTtcXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMTY2LVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfYnBmLmM9NDA5PXN0YXRpYyBpbnQgY2xzX2JwZl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19icGYuYy01MDAtXFx0XFx0cHJvZy1cXHUwMDNlcmVzLmNsYXNzaWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfQlBGX0NMQVNTSURdKTtcXG5uZXQvc2NoZWQvY2xzX2JwZi5jOjUwMTpcXHRcXHR0Y2ZfYmluZF9maWx0ZXIodHAsIFxcdTAwMjZwcm9nLVxcdTAwM2VyZXMsIGJhc2UpO1xcbm5ldC9zY2hlZC9jbHNfYnBmLmMtNTAyLVxcdFxcdGJvdW5kX3RvX2ZpbHRlciA9IHRydWU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTIzNTM9c3RhdGljIGludCBmbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDU3LVxcdFxcdFxcdHJ0bmxfbG9jaygpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjQ1ODpcXHRcXHR0Y2ZfYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmbmV3LVxcdTAwM2VyZXMsIGJhc2UpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjQ1OS1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX05PX1JUTkwpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmM9MjA1PXN0YXRpYyBpbnQgZndfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmMtMjM2LVxcdFxcdGYtXFx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX0ZXX0NMQVNTSURdKTtcXG5uZXQvc2NoZWQvY2xzX2Z3LmM6MjM3OlxcdFxcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19mdy5jLTIzOC1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM9MTYyPXN0YXRpYyBpbnQgbWFsbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTIxNi1cXHRcXHRuZXctXFx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX01BVENIQUxMX0NMQVNTSURdKTtcXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM6MjE3OlxcdFxcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXFx1MDAyNm5ldy1cXHUwMDNlcmVzLCBiYXNlKTtcXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMjE4LVxcdFxcdGJvdW5kX3RvX2ZpbHRlciA9IHRydWU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NDAwPXN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTQ4Ni1cXHRcXHRmLVxcdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ST1VURTRfQ0xBU1NJRF0pO1xcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzo0ODc6XFx0XFx0dGNmX2JpbmRfZmlsdGVyKHRwLCBcXHUwMDI2Zi1cXHUwMDNlcmVzLCBiYXNlKTtcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNDg4LVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9NzMxPXN0YXRpYyB2b2lkIHUzMl9iaW5kX2ZpbHRlcihzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTczNS1cXHRcXHRuLVxcdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfQ0xBU1NJRF0pO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NzM2OlxcdFxcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXFx1MDAyNm4tXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy03MzctXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMjowMi4xMzcxNzU1MjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5OTA2NzY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpbHRlciBCaW5kaW5nIFByb2Nlc3MqKlxuXG5SaWdodCwgYHRjZl9iaW5kX2ZpbHRlcmAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEl0J3MgY2FsbGVkIHdoZW4gYSB0cmFmZmljIGNvbnRyb2wgKFRDKSBmaWx0ZXIgaXMgY3JlYXRlZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhhdCBjcnVjaWFsIHBvaW50LiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZpbHRlciBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIFRDIHN5c3RlbSwgSSdtIGdvaW5nIHRvIGNvbnN1bHQgdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSdtIHByZXR0eSBzdXJlIGB0Y2ZfYmluZF9maWx0ZXJgIGlzIGRlZmluZWQgaW4gZWl0aGVyIGBpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oYCBvciB3aXRoaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaW1lIHRvIGRpZyBpbiBhbmQgcGlucG9pbnQgd2hlcmUgdGhlIGZpbHRlcidzIGJpbmRpbmcgbG9naWMgaXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmlsdGVyIGdldHMgYXNzb2NpYXRlZCB3aXRoIGl0cyBjbGFzc2lmaWVyLCBxZGlzYywgYW5kIG90aGVyIFRDIGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MDYuMTM2MjQ1ODQ5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAwMjIzNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2JpbmRfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjA2LjE4MTI1NDk5NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTA4MzU5MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVHJhZmZpYyBDb250cm9sIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIHRyYWZmaWMgY29udHJvbCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIHNjaGVkdWxpbmcgQVBJcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFRoZSBmaXJzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRoaXMgZmlsZSBpcyB0aGUgYmVkcm9jaywgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIHNjaGVkdWxpbmcgZGlzY2lwbGluZXMgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgZmluZGluZyB0aGUgY29yZSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBlbnF1ZXVpbmcgYW5kIGRlcXVldWluZyBwYWNrZXRzLCBhbmQgdGhlIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc21zIGZvciBuZXcgcXVldWVpbmcgZGlzY2lwbGluZXMgKHFkaXNjcykgYW5kIGNsYXNzaWZpZXJzLiBJIGhvcGUgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBsaWtlIGBRZGlzY2AsIGB0Y19jbGFzc19kZWZgLCBhbmQgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb24gcG9pbnRlcnMsIHRvIGdldCBteSBiZWFyaW5ncy4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBoaWdoZXIgbGF5ZXJzLCBsaWtlIGhvdyB0cmFmZmljIHNoYXBpbmcgYW5kIHBvbGljaW5nIGFyZSBpbXBsZW1lbnRlZCB2aWEgdGhlc2UgQVBJcy4gSXTigJlzIGFsbCBhYm91dCB0cmFjaW5nIHRoZSBwYWNrZXQgZmxvdywgZnJvbSBpdHMgYXJyaXZhbCB0byBpdHMgdWx0aW1hdGUgdHJhbnNtaXNzaW9uLCBzbyBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBjYWxscyBpbiBhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MTMuMDg5NjE2MDU5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE0MTgxNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2JpbmRfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjEzLjEzNjc2NTAwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI0NTQ0MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYHRjZl9iaW5kX2ZpbHRlcmAqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSBgdGNmX2JpbmRfZmlsdGVyYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHRoZSBjb250ZXh0IGl0J3Mgb3BlcmF0aW5nIHdpdGhpbi4gVGhpcyBpcyBmdW5kYW1lbnRhbDsgd2l0aG91dCBrbm93aW5nIHdoZXJlIGl0IGNvbWVzIGZyb20sIEknbSBlc3NlbnRpYWxseSBmbHlpbmcgYmxpbmQuIEtub3dpbmcgdGhlIGRlZmluaXRpb24gd2lsbCB1bmxvY2sgc28gbXVjaCDigJMgaXRzIGRhdGEgdHlwZSwgYW55IGFzc29jaWF0ZWQgc3RydWN0dXJlcywgYW5kIGhvcGVmdWxseSBzaGVkIGxpZ2h0IG9uIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGlzIHN5c3RlbS4gTGV0J3MgdHJhY2UgYmFjayBhbmQgZmluZCB0aGUgc291cmNlLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgYW55IGluLWRlcHRoIGRlYnVnZ2luZyBvciBleHBsb3JhdGlvbiBvZiB1bmZhbWlsaWFyIGNvZGUuIExvY2F0aW5nIHRoZSBkZWZpbml0aW9uIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODYxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MTYuOTYxMzEyMDYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEzMTQ3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfYmluZF9maWx0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3BrdF9jbHMuaD0xODA9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjE4MTpfX3RjZl9iaW5kX2ZpbHRlcihzdHJ1Y3QgUWRpc2MgKnEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyLCB1bnNpZ25lZCBsb25nIGJhc2UpXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTE4Mi17XFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9MTkxPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoxOTI6dGNmX2JpbmRfZmlsdGVyKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNmX3Jlc3VsdCAqciwgdW5zaWduZWQgbG9uZyBiYXNlKVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0xOTMte1xcbi0tXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTIwMS1cXHRzY2hfdHJlZV9sb2NrKHEpO1xcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoyMDI6XFx0X190Y2ZfYmluZF9maWx0ZXIocSwgciwgYmFzZSk7XFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTIwMy1cXHRzY2hfdHJlZV91bmxvY2socSk7XFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9MjI1PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y19jbHNfYmluZF9jbGFzcyh1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCxcXG4tLVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yMzAtXFx0XFx0aWYgKGNsKVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoyMzE6XFx0XFx0XFx0X190Y2ZfYmluZF9maWx0ZXIocSwgcmVzLCBiYXNlKTtcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjMyLVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MTcuMDA4NDQ2MTI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzUzNTEyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVMzIgQ2xhc3NpZmllciBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgdGNfY2xzX2JpbmRfY2xhc3NgIGdldHMgaW52b2tlZCBpbmRpcmVjdGx5IHRocm91Z2ggYHUzMl9iaW5kX2NsYXNzYC4gIEFuZCB0aGF0IGB1MzJfYmluZF9jbGFzc2AgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHdoZW4gd2UgY3JlYXRlIG9yIG1vZGlmeSBhIGNsYXNzIHVzaW5nIHRoZSBgdGNfYmluZF90Y2xhc3NgIGZ1bmN0aW9uLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHRjX2N0bF90Y2xhc3NgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBtYW5hZ2luZyB0aGVzZSBjbGFzc2VzLiBBbmQsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBmaWx0ZXJzIGFyZSBjcmVhdGVkLCBgdGNfbmV3X3RmaWx0ZXJgIGlzIGFsc28gYW4gaW1wb3J0YW50IGVudHJ5IHBvaW50LCBiZWNhdXNlIGl0IGNhbGxzIGB1MzJfY2hhbmdlYCwgd2hpY2ggZXZlbnR1YWxseSBsYW5kcyBvbiBgdTMyX2JpbmRfZmlsdGVyYCwgdGhlbiBgdGNmX2JpbmRfZmlsdGVyYC4gQWx0aG91Z2ggdGhpcyBwYXRjaCBtb2RpZmllcyBgdTMyX2JpbmRfY2xhc3NgLCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBzcGVjaWZpY2FsbHkgd2hlbiBhIGNsYXNzIGlzIGJvdW5kLCBzbyBgdGNfY3RsX3RjbGFzc2AgaXMgdGhlIG1vcmUgcmVsZXZhbnQgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyByZWxhdGVkIHRvIHRoaXMuIEknbSBhc3N1bWluZyBgTkVUX0NMU19VMzJgIGlzIHRoZSBtYWluIG9wdGlvbiwgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXJzPyBJJ2xsIHByb2JhYmx5IG5lZWQgYE5FVF9TQ0hFRGAgYXQgdGhlIHZlcnkgbGVhc3QuIEknbGwgZG91YmxlLWNoZWNrIGBORVRfQ0xTX1UzMmAgaW4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgSSdtIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjI0LjQ0Mzc5OTE0NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NDAwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9DTFNfVTMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTUwNj1jb25maWcgTkVUX0NMU19GV1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTE1LVxcbm5ldC9zY2hlZC9LY29uZmlnOjUxNjpjb25maWcgTkVUX0NMU19VMzJcXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMjoyNC40ODc3NDEzODFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5NDAxNzA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IFN0cnVjdHVyZSBvZiBORVRfU0NIRUQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYE5FVF9TQ0hFRGAgaGVyZS4gV2UgYWxyZWFkeSBlc3RhYmxpc2hlZCB0aGF0IHdoYXRldmVyIHRoZSBpc3N1ZSBpcywgaXQgaGluZ2VzIG9uIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93bjogd2hhdCAqZG9lcyogYE5FVF9TQ0hFRGAgZGVwZW5kIG9uPyBJcyBpdCBhIHN0YW5kYWxvbmUgZmVhdHVyZSwgb3IgaXMgaXQgY29udGluZ2VudCBvbiBvdGhlciwgbG93ZXItbGV2ZWwsIG1vcmUgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbnM/IFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBiZWhhdmlvciBhbmQgcmVzb2x2aW5nIGFueSBjb25mbGljdHMuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGludmVzdGlnYXRlIHRoZSBzb3VyY2UgY29kZSwgb3IgcnVuIGEgY29uZmlndXJhdGlvbiBhbmFseXNpcyB0byBtYXAgb3V0IGBORVRfU0NIRURgJ3MgZGVwZW5kZW5jeSB0cmVlIGFuZCBkZXRlcm1pbmUgaXRzIGltcGxpY2F0aW9ucy4gVGhpcyB3aWxsIGNsYXJpZnkgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgb3RoZXIgc3lzdGVtcyBhbmQgY2xhcmlmeSBpZiB0aGVyZSBpcyBhIGNvbmZsaWN0IGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDY1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MjguODgxNzYwNTg1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY3NjQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MjguOTI2NDQwNjYyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjMyMzY1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpcmVjdCBMaW5lIG9mIElucXVpcnkqKlxuXG5IbW0sIHRoaXMgZmVlbHMgc2VsZi1jb250YWluZWQsIGluZGVwZW5kZW50LiBJdCdzIG5vdCBjb250aW5nZW50IG9uIHNvbWUgZXh0ZXJuYWwgZmFjdG9yIG9yIHByaW9yIHN0ZXAuIFRoYXQgc3VnZ2VzdHMgYSBjb3JlIHByb2Nlc3MsIHNvbWV0aGluZyBmb3VuZGF0aW9uYWwuIEFscmlnaHQsIGxldCdzIGN1dCBzdHJhaWdodCB0byB0aGUgY2hhc2UgYW5kIGV4YW1pbmUgdGhlIGB0Y19jdGxfdGNsYXNzYCBmdW5jdGlvbi4gTXkgZ3Vlc3MgaXMgaXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgbG9va2luZy4gSSdsbCBuZWVkIHRvIGdvIHRvIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBpbiB0aGUga2VybmVsIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMjozMy4zNDk2ODAwMDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTI1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2N0bF90Y2xhc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jPTIxOTA9c3RhdGljIHZvaWQgdGNfYmluZF90Y2xhc3Moc3RydWN0IFFkaXNjICpxLCB1MzIgcG9ydGlkLCB1MzIgY2xpZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE5Ni1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxOTc6c3RhdGljIGludCBfX3RjX2N0bF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE5OC1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzMjYtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzI3OnN0YXRpYyBpbnQgdGNfY3RsX3RjbGFzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMzI4LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzNDUtXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzQ2OlxcdGVyciA9IF9fdGNfY3RsX3RjbGFzcyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMzQ3LVxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI1MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHBzY2hlZF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yNTI3LVxcdCAuZHVtcGl0ID0gdGNfZHVtcF9xZGlzY30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI4OlxcdHsubXNndHlwZSA9IFJUTV9ORVdUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI5OlxcdHsubXNndHlwZSA9IFJUTV9ERUxUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTMwOlxcdHsubXNndHlwZSA9IFJUTV9HRVRUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzcyxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzEtXFx0IC5kdW1waXQgPSB0Y19kdW1wX3RjbGFzc30sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjMzLjM5MjgwNzYyMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAxODMxNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBUYXJnZXRlZCBJbnZlc3RpZ2F0aW9uKipcblxuTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gdGhpcyBjb250ZXh0LCBpcyB0aGF0IGB0Y19jdGxfdGNsYXNzYCBpcyB0aGUga2V5IHBvaW50IG9mIGZvY3VzIGhlcmUuIEl0IHNlZW1zIHRvIGJlIHRoZSBkaXJlY3QgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgYGJpbmRfY2xhc3NgLCBzbyB0aGF0J3Mgd2hlcmUgSSdkIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIE9mIGNvdXJzZSwgSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgdGNfbmV3X3RmaWx0ZXJgLCBhcyBpdCdzIHBvc3NpYmxlIGl0IHNoYXJlcyBhIGNvZGUgcGF0aCB0aGF0ICphbHNvKiBsZWFkcyB0byBgYmluZF9jbGFzc2AuIEl0J3MgYWx3YXlzIHNtYXJ0IHRvIGNvbnNpZGVyIHJlbGF0ZWQgZW50cnkgcG9pbnRzLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIGRlc2lnbmVkIHRvIHBlcmZvcm0gc2ltaWxhciB0YXNrcy4gQnV0LCB0byBiZSBlZmZpY2llbnQsIEknbGwgcHJpb3JpdGl6ZSBgdGNfY3RsX3RjbGFzc2AgZmlyc3QuIFRoZW4gSSB3aWxsIGludmVzdGlnYXRlIGB0Y19uZXdfdGZpbHRlcmAgbmV4dCwgaWYgSSBuZWVkIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjM3LjU5NDY0MTUzOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0NDgzMDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX25ld190ZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjM3LjYzNzEwMTg4NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODg5MjMxMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBUcmFmZmljIENvbnRyb2wgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgdHJhZmZpYyBjb250cm9sICh0YykgaW50ZXJuYWxzIGFnYWluLiBUaGUga2VybmVsJ3MgdGMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGEgYml0IG9mIGEgbGFieXJpbnRoLCBidXQgSSdtIGdldHRpbmcgYmFjayBpbnRvIGl0LiBBaCwgcmlnaHQsIHRoYXQgc3BlY2lmaWMgZmlsdGVyIGNyZWF0aW9uIGZ1bmN0aW9uLCBgdGNfbmV3X3RmaWx0ZXJgLi4uIEkgc2VlbSB0byByZWNhbGwgaXQncyB0dWNrZWQgYXdheSBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AuIE5vdyBJIHJlbWVtYmVyLCB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgY2xhc3MgQVBJIGFuZCBmaWx0ZXIgaGFuZGxpbmcgbG9naWMgcmVzaWRlcy4gR29vZCwgdGhhdCBuYXJyb3dzIG15IGZvY3VzLiBJIGtub3cgSSdsbCBiZSBqdW1waW5nIGJldHdlZW4gYSBmZXcgZmlsZXMgYXMgSSB3b3JrIHRocm91Z2ggdGhpcywgYnV0IHJlbWVtYmVyaW5nIHRoYXQgZmlsZSBsb2NhdGlvbiBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGhlbHBzIHRvIG9yaWVudCBteSB0aG91Z2h0cyBhYm91dCB0aGUgb3ZlcmFsbCBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzcwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6NDcuNTI2MzM1NzI1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI4MjgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19uZXdfdGZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmM9MjI0Nj1zdGF0aWMgYm9vbCBpc19pbmdyZXNzX29yX2Nsc2FjdChzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaywgc3RydWN0IFFkaXNjICpxKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0yMjUwLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MjI1MTpzdGF0aWMgaW50IHRjX25ld190ZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyNTItXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQxMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2ZpbHRlcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDExNzpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXVEZJTFRFUiwgLmRvaXQgPSB0Y19uZXdfdGZpbHRlcixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQxMTgtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6NDcuNTY5NjI0NTczWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzI2NjU4ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgVHJhZmZpYyBDb250cm9sIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgdGNfbmV3X3RmaWx0ZXJgIGlzIGluZGVlZCBsb2NhdGVkIHdpdGhpbiBgY2xzX2FwaS5jYCwgZ29vZC4gQmFzZWQgb24gdGhlIGZpbGUgY29udGV4dCBJJ2xsIGFkZCBgdGNfY3RsX3RjbGFzc2AgYW5kIGB0Y19uZXdfdGZpbHRlcmAgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmOlxuXG5gYGBjXG4gXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbiA9IGZoO1xuIFxuK1x0aWYgKFRDX1UzMl9LRVkobi1cdTAwM2VoYW5kbGUpID09IDApXG4rXHRcdHJldHVybjtcbitcbiBcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZuLVx1MDAzZXJlcywgYmFzZSk7XG5gYGBcblxuQWgsIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgYSBidWcgZml4IGluIHRoZSBgdTMyX2JpbmRfY2xhc3NgIGZ1bmN0aW9uLiBCYXNpY2FsbHksIHRoaXMgcHJldmVudHMgYHRjX2Nsc19iaW5kX2NsYXNzYCBmcm9tIGJlaW5nIGNhbGxlZCB3aGVuIGBUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKWAgZXZhbHVhdGVzIHRvIHplcm8uIFRoaXMgc2hvdWxkIGRlZmluaXRlbHkgYmUgZnV6eiB0ZXN0ZWQuIEl0J3MgbGlrZWx5IGEgbWlzc2luZyBudWxsIGNoZWNrIHNvbWV3aGVyZSBhbG9uZyB0aGUgY29udHJvbCBwYXRoIHRoYXQgY291bGQgbGVhZCB0byBhbiBpc3N1ZS5cblxuVGhlIGNvbmZpZyBvcHRpb25zIGludm9sdmVkIGhlcmUgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYE5FVF9TQ0hFRGAgYW5kIGBORVRfQ0xTX1UzMmAuXG5cblNvIHRvIHJlaXRlcmF0ZSwgdGhpcyBwYXRjaCBpbXBhY3RzIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIFUzMiBjbGFzc2lmaWVyLiBJdCBhZGRyZXNzZXMgYSBzY2VuYXJpbyB3aGVyZSBhbiBpbnZhbGlkIGhhbmRsZSAoemVybyB2YWx1ZSkgd2FzIHBvdGVudGlhbGx5IGJlaW5nIHBhc3NlZCB0byBgdGNfY2xzX2JpbmRfY2xhc3NgLiBUaGlzIGlzIHRyaWdnZXJlZCB0aHJvdWdoIG5ldGxpbmsgY29tbWFuZHMgdXRpbGl6ZWQgdG8gY3JlYXRlIG9yIG1vZGlmeSB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgdGNfY3RsX3RjbGFzc2AgYW5kIGB0Y19uZXdfdGZpbHRlcmAuIEFuZCBpdCB3aWxsIG9ubHkgaGF2ZSBhbiBlZmZlY3QgaWYgYENPTkZJR19ORVRfQ0xTX1UzMmAgaXMgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NTEsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjU5Ljg5NjI4NTQxN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MTAyNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNfVTMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNfY3RsX3RjbGFzc1wiLFxuICAgIFwidGNfbmV3X3RmaWx0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGVjayBpbiBgdTMyX2JpbmRfY2xhc3NgIHRvIHByZXZlbnQgYmluZGluZyBhIGNsYXNzIHdoZW4gYFRDX1UzMl9LRVkobi1cXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX1UzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX2N0bF90Y2xhc3NcIixcbiAgICBcInRjX25ld190ZmlsdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXFx1MDAzZWhhbmRsZSkgPT0gMGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGZvciBjcmVhdGluZy9tb2RpZnlpbmcgdHJhZmZpYyBjbGFzc2VzIGFuZCBmaWx0ZXJzIChgdGNfY3RsX3RjbGFzc2AsIGB0Y19uZXdfdGZpbHRlcmApLiBJdCByZXF1aXJlcyBgQ09ORklHX05FVF9DTFNfVTMyYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8bk56[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 07:40:59 +0000 UTC FinishedAt: 2026-08-07 08:03:00 +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": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_U32" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "594d905195024b228c962627ae5ae7c17bd582a4", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_SCHED", "NET_CLS_U32" ], "series_id": "41d2cbaf-1364-4bf1-9b0f-594840e91878" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tc_ctl_tclass", "tc_new_tfilter" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1UzMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF90Y2xhc3MmIzM0OywKICAgICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjMjE1YmI3ZDdmMzU0M2FiY2UzMTQzODgwMGZhNDc5ZTQxYjhjOWY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwODowMToxMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvY2xzX3UzMi5jIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuaW5kZXggYWM5OGIxYzIxNDRhNy4uYzI5N2Q3ZGJjZjkxNiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9jbHNfdTMyLmNcbkBAIC0xMzQ2LDYgJiM0MzsxMzQ2LDkgQEAgc3RhdGljIHZvaWQgdTMyX2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxuIHtcbiBcdHN0cnVjdCB0Y191X2tub2RlICpuID0gZmg7XG4gXG4mIzQzO1x0aWYgKFRDX1UzMl9LRVkobi1cdTAwM2VoYW5kbGUpID09IDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0dGNfY2xzX2JpbmRfY2xhc3MoY2xhc3NpZCwgY2wsIHEsIFx1MDAyNm4tXHUwMDNlcmVzLCBiYXNlKTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1UzMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF90Y2xhc3MmIzM0OywKICAgICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjMjE1YmI3ZDdmMzU0M2FiY2UzMTQzODgwMGZhNDc5ZTQxYjhjOWY4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgNyAwODowMToxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCmluZGV4IGFjOThiMWMyMTQ0YTcuLmMyOTdkN2RiY2Y5MTYgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2Nsc191MzIuYwpAQCAtMTM0Niw2ICYjNDM7MTM0Niw5IEBAIHN0YXRpYyB2b2lkIHUzMl9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSwKIHsKIAlzdHJ1Y3QgdGNfdV9rbm9kZSAqbiA9IGZoOwogCiYjNDM7CWlmIChUQ19VMzJfS0VZKG4tJmd0O2hhbmRsZSkgPT0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAl0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgJmFtcDtuLSZndDtyZXMsIGJhc2UpOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB1MzIgQ2xhc3NpZmllciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfdTMyLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkmIzM5O3ZlIGFkZGVkIGEgY2hlY2sgd2l0aGluIHRoZSBgdTMyX2JpbmRfY2xhc3NgIGZ1bmN0aW9uLiBJdCBzZWVtcyB0aGV5JiMzOTtyZSBndWFyZGluZyBhZ2FpbnN0IGEgc3BlY2lmaWMgY2FzZToKCmBgYGMKCXN0cnVjdCB0Y191X2tub2RlICpuID0gZmg7CiAKJiM0MzsJaWYgKFRDX1UzMl9LRVkobi0mZ3Q7aGFuZGxlKSA9PSAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCXRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCAmYW1wO24tJmd0O3JlcywgYmFzZSk7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIGB1MzJfYmluZF9jbGFzc2AgaXMgb2J2aW91c2x5IHBhcnQgb2YgdGhlIGB0Y191MzJgIGNsYXNzaWZpZXIsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFRyYWZmaWMgQ29udHJvbCAoVEMpIHN1YnN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKmhvdyogYHUzMl9iaW5kX2NsYXNzYCBpcyBjYWxsZWQuIEl0JiMzOTtzIGxpa2VseSBjYWxsZWQgdGhyb3VnaCBgdGNfY2xzX2JpbmRfY2xhc3NgIG9yIG1heWJlIGB0Y2ZfYmluZF9maWx0ZXJgLCBzb21ldGhpbmcgbGlrZSB0aGF0LCB3aGljaCBJIHdpbGwgY29uZmlybS4gQWgsIHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgbG9vayBhdCB0aGUgYHRjZl9wcm90b19vcHNgIHN0cnVjdCBmb3IgdGhlIHUzMiBjbGFzc2lmaWVyLiBZZXAsIGl0JiMzOTtzIHRoZXJlIGFzIGEgY2FsbGJhY2s6CgpgYGBjCnN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0gewoJLmtpbmQJCT0JJiMzNDt1MzImIzM0OywKCS5jbGFzc2lmeQk9CXUzMl9jbGFzc2lmeSwKCS5pbml0CQk9CXUzMl9pbml0LAoJLmRlc3Ryb3kJPQl1MzJfZGVzdHJveSwKCS5nZXQJCT0JdTMyX2dldCwKCS5jaGFuZ2UJCT0JdTMyX2NoYW5nZSwKCS5kZWxldGUJCT0JdTMyX2RlbGV0ZSwKCS53YWxrCQk9CXUzMl93YWxrLAoJLnJlb2ZmbG9hZAk9CXUzMl9yZW9mZmxvYWQsCgkuYmluZF9jbGFzcwk9CXUzMl9iaW5kX2NsYXNzLAoJLm93bmVyCQk9CVRISVNfTU9EVUxFLAp9OwpgYGAKCk9rYXksIHNvIGB1MzJfYmluZF9jbGFzc2AgaXMgYSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoaW4gYGNsc191MzJfb3BzYC4gSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgaXRzIGltcGxlbWVudGF0aW9uIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhhdCBvdmVyYWxsIGZyYW1ld29yay4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgKndoeSogdGhpcyBzcGVjaWZpYyBjaGVjayBmb3IgYFRDX1UzMl9LRVkobi0mZ3Q7aGFuZGxlKSA9PSAwYCB3YXMgYWRkZWQuIFdoYXQmIzM5O3MgdGhlIHBvdGVudGlhbCBpc3N1ZSBiZWluZyBhZGRyZXNzZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGVjayBvbiB0aGUgYmVoYXZpb3VyIG9mIGB1MzJgIHRyYWZmaWMgY2xhc3NpZmljYXRpb24/IEkgd2lsbCBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3UzMl9iaW5kX2NsYXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX3UzMi5jPTEyOTc9c3RhdGljIGludCB1MzJfcmVvZmZsb2FkKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBib29sIGFkZCwgZmxvd19zZXR1cF9jYl90ICpjYixcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDMtXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjEzNDQ6c3RhdGljIHZvaWQgdTMyX2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzQ1LVx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTE0Njg9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc191MzJfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDc4LVx0LmR1bXBcdFx0PVx0dTMyX2R1bXAsXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0Nzk6XHQuYmluZF9jbGFzc1x0PVx0dTMyX2JpbmRfY2xhc3MsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0ODAtXHQub3duZXJcdFx0PVx0VEhJU19NT0RVTEUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM0MwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHUzMl9iaW5kX2NsYXNzYCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllcywgaXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhlIGB1MzJfYmluZF9jbGFzc2AgZnVuY3Rpb24gKmlzKiBpbmRlZWQgYmVpbmcgdXNlZCBhcyB0aGUgYC5iaW5kX2NsYXNzYCBtZW1iZXIgaW4gdGhlIGBjbHNfdTMyX29wc2Agc3RydWN0dXJlLiBHb29kLCB0aGF0IGNvbmZpcm1zIHRoZSBpbXBsZW1lbnRhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgZnVuY3Rpb25hbGx5IHNvdW5kOyBpdCYjMzk7cyBkZXNpZ25lZCB0byBmaXggYSBidWcsIGxpa2VseSBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHdhcyBoYXBwZW5pbmcgd2hlbiBgVENfVTMyX0tFWShuLSZndDtoYW5kbGUpYCBldmFsdWF0ZWQgdG8gemVyby4gSSBjYW4gYWxtb3N0IHBpY3R1cmUgdGhlIGNvZGUgYW5kIGhvdyB0aGF0IGNvdWxkIGhhcHBlbi4uLiBtYWtlcyBzZW5zZS4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IENhbiBhIHVzZXIgYWN0dWFsbHkgdHJpZ2dlciB0aGlzIGNvZGUgcGF0aD8gVGhlIGFuc3dlciBpcyB5ZXMsIHVuZG91YnRlZGx5LiBXZSBpbnRlcmFjdCB3aXRoIHRoaXMgdGhyb3VnaCBgdGNgIG5ldGxpbmsgY29tbWFuZHMsIHdoaWNoIGFyZSB0aGUgc3RhbmRhcmQgd2F5IG9mIGNvbmZpZ3VyaW5nIHRyYWZmaWMgY29udHJvbC4gU28sIHRoaXMgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSBjb3JuZXIgY2FzZTsgaXQmIzM5O3Mgc29tZXRoaW5nIHRoYXQgY291bGQgZGVmaW5pdGVseSBiZSBleHBsb2l0ZWQgaW4gYSByZWFsLXdvcmxkIHNjZW5hcmlvLiBMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiByZWxhdGVkIHRvIGBjbHNfdTMyLmNgIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gb3RoZXIgY29uZmlndXJhdGlvbnMgYXQgcGxheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbHNfdTMyLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL01ha2VmaWxlPTY2PW9iai0kKENPTkZJR19ORVRfU0NIX0RVQUxQSTIpXHQmIzQzOz0gc2NoX2R1YWxwaTIub1xubmV0L3NjaGVkL01ha2VmaWxlLTY3LVxubmV0L3NjaGVkL01ha2VmaWxlOjY4Om9iai0kKENPTkZJR19ORVRfQ0xTX1UzMilcdCYjNDM7PSBjbHNfdTMyLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS02OS1vYmotJChDT05GSUdfTkVUX0NMU19ST1VURTQpXHQmIzQzOz0gY2xzX3JvdXRlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODQxCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgTGFuZHNjYXBlKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGBORVRfQ0xTX1UzMmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayBmb3IgZGVwZW5kZW5jaWVzLiBJIGtub3cgdGhpcyBwYXJ0aWN1bGFyIGNsYXNzaWZpZXIsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBjcnVjaWFsLiBJcyB0aGlzIHN0YW5kYWxvbmUsIG9yIGRvZXMgaXQgcGlnZ3liYWNrIG9uIGFub3RoZXIgY29yZSBuZXR3b3JraW5nIG1vZHVsZT8gQXJlIHRoZXJlIGtlcm5lbCBmZWF0dXJlcyBJIG5lZWQgdG8gZW5hYmxlIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGtleS4gSXQgaGVscHMgbWUgZW5zdXJlIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCBvcHRpbWFsbHksIGF2b2lkcyBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMgZm9yIGBORVRfQ0xTX1UzMmAgdG8gcGVyZm9ybSBhcyBleHBlY3RlZC4gVGhpcyBhbHNvIGhlbHBzIG1lIHVuZGVyc3RhbmQgd2hpY2ggb3RoZXIgbW9kdWxlcyBtaWdodCBiZSBpbXBhY3RlZCBieSBhIGNoYW5nZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRoYXQgd2F5IEkgZG9uJiMzOTt0IGludHJvZHVjZSBwcm9ibGVtcyB3aGVyZSB0aGV5IHdlcmVuJiMzOTt0IGFudGljaXBhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQ0xTX1UzMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnPTUwNj1jb25maWcgTkVUX0NMU19GV1xuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTUxNS1cbm5ldC9zY2hlZC9LY29uZmlnOjUxNjpjb25maWcgTkVUX0NMU19VMzJcbm5ldC9zY2hlZC9LY29uZmlnLTUxNy1cdHRyaXN0YXRlIFwmIzM0O1VuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDE2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBORVRfQ0xTX1UzMioqCgpBbHJpZ2h0LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBkZXBlbmRlbmNpZXMgb2YgYE5FVF9DTFNfVTMyYC4gVGhhdCBuYW1lIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGEgbGlrZWx5IGNsYXNzaWZpY2F0aW9uIG1vZHVsZSwgcHJvYmFibHkgcmVsYXRlZCB0byB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciB2YWx1ZXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBNeSBleHBlcnRpc2UgaXMgcHJpbWFyaWx5IGluIHRoZSBrZXJuZWwgYW5kIG5ldHdvcmsgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBzbyB0aGlzIGtpbmQgb2YgdGFzayBpcyByb3V0aW5lLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgcmVseSBvbiBgTkVUX0NMU19VMzJgLCBvciwgY29udmVyc2VseSwgd2hhdCAqaXQqIHJlbGllcyB1cG9uLiBXaGF0IG90aGVyIG1vZHVsZXMsIGNvbmZpZ3VyYXRpb25zLCBvciBkYXRhIHN0cnVjdHVyZXMgYXJlIGludGVydHdpbmVkIHdpdGggaXRzIGZ1bmN0aW9uYWxpdHk/IElzIGl0IGNvcmUgdG8gcGFja2V0IGZpbHRlcmluZywgUW9TLCBvciB0cmFmZmljIHNoYXBpbmc/IEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgaXQmIzM5O3MgbGlrZWx5IGEgbGVhZi1sZXZlbCBjb21wb25lbnQuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB2YXJpb3VzIHRyYWNpbmcgdG9vbHMgYW5kIGtlcm5lbCBkb2N1bWVudGF0aW9uIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBuZXh0IHN0ZXAuIFRvIGdldCBhIHVzZWZ1bCBvdmVydmlldywgSeKAmWxsIG5lZWQgdG8gd29yayB0aHJvdWdoIGl0cyBpbXBsZW1lbnRhdGlvbiwgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMsIGRhdGEgc3RydWN0dXJlIHVzYWdlLCBhbmQgZnVuY3Rpb24gY2FsbHMuIFRoaXMgc2hvdWxkIHF1aWNrbHkgdW5jb3ZlciBpdHMgaW50ZWdyYXRpb24gcG9pbnRzIHdpdGhpbiB0aGUgYnJvYWRlciBuZXR3b3JrIHN1YnN5c3RlbS4gSSYjMzk7bSBlc3BlY2lhbGx5IGtlZW4gdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gbWlnaHQgYmUgYmVuZWZpY2lhbC4gSG9wZWZ1bGx5IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGRvY3VtZW50ZWQgd2VsbC4gT3RoZXJ3aXNlLCBJIG1heSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdXNlIGB0cmFjZXBvaW50c2AgYW5kIGRlYnVnZ2luZyB0b29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxNiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTE2Olx0Y29uZmlnIE5FVF9DTFNfVTMyXG4gNTE3Olx0XHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuIDUxODpcdFx0c2VsZWN0IE5FVF9DTFNcbiA1MTk6XHRcdGhlbHBcbiA1MjA6XHRcdCAgU2F5IFkgaGVyZSB0byBiZSBhYmxlIHRvIGNsYXNzaWZ5IHBhY2tldHMgdXNpbmcgYSB1bml2ZXJzYWxcbiA1MjE6XHRcdCAgMzJiaXQgcGllY2VzIGJhc2VkIGNvbXBhcmlzb24gc2NoZW1lLlxuIDUyMjpcdFxuIDUyMzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTI0Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjbHNfdTMyLlxuIDUyNTpcdFxuIDUyNjpcdGNvbmZpZyBDTFNfVTMyX1BFUkZcbiA1Mjc6XHRcdGJvb2wgXCYjMzQ7UGVyZm9ybWFuY2UgY291bnRlcnMgc3VwcG9ydFwmIzM0O1xuIDUyODpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX1UzMlxuIDUyOTpcdFx0aGVscFxuIDUzMDpcdFx0ICBTYXkgWSBoZXJlIHRvIG1ha2UgdTMyIGdhdGhlciBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgdXNlZnVsIGZvclxuIDUzMTpcdFx0ICBmaW5lIHR1bmluZyB1MzIgY2xhc3NpZmllcnMuXG4gNTMyOlx0XG4gNTMzOlx0Y29uZmlnIENMU19VMzJfTUFSS1xuIDUzNDpcdFx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbWFya3Mgc3VwcG9ydFwmIzM0O1xuIDUzNTpcdFx0ZGVwZW5kcyBvbiBORVRfQ0xTX1UzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODEzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCB0aGlzIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3QgaW5pdGlhbGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCBzZWVtcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gcXVlc3Rpb24sIHdoYXRldmVyIGBORVRfQ0xTYCByZXByZXNlbnRzLCBpcyBkZXBlbmRlbnQgb24gbm90aGluZyAqc3BlY2lmaWMqIG90aGVyIHRoYW4gaXRzZWxmLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgbWVhbmluZyBpdCYjMzk7cyBsaWtlbHkgYSByZWxhdGl2ZWx5IHNlbGYtY29udGFpbmVkIGZlYXR1cmUgb3IgYSBicm9hZCBjYXRlZ29yeSBvZiBmdW5jdGlvbmFsaXR5LiBNeSBpbnR1aXRpb24gc2F5cyB0aGF0IGBORVRfU0NIRURgLCB0aGUgcGFyZW50IG1lbnUsIHdpbGwgYmUgaW1wb3J0YW50IGhlcmUuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4KClNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoYXQgYG1lbnVjb25maWcgTkVUX1NDSEVEYCBkZWZpbml0aW9uIHRvIGNsYXJpZnkgZXhhY3RseSBob3cgYE5FVF9DTFNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JrIHNjaGVkdWxlciBoaWVyYXJjaHkgYW5kIHBpbnBvaW50IGFueSBwb3RlbnRpYWwgaW5kaXJlY3QgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSB0aGUgY29udGV4dCBuZWVkZWQgdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiYjMzk7cyBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbnVjb25maWcgTkVUX1NDSEVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWctNS1cbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcbm5ldC9zY2hlZC9LY29uZmlnLTctXHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTU3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBuZXR3b3JrIHNjaGVkdWxlciBjb25maWd1cmF0aW9ucywgc3BlY2lmaWNhbGx5IGBORVRfU0NIRURgIGFuZCBgTkVUX0NMU19VMzJgLiAgTXkgYnJhaW4gaXMgaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQgd2hlcmUgdGhlIGludGVyZXN0aW5nIHN5bWJvbHMgbWlnaHQgbGllLiBJJiMzOTttIGZvY3VzaW5nIG9uIGZpbmRpbmcgdGhlIGtleSBmdW5jdGlvbnMuCgpJIGluaXRpYWxseSB0aG91Z2h0IGB1MzJfYmluZF9jbGFzc2AgbWlnaHQgYmUgcHJvbWlzaW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyZWQgaXQmIzM5O3Mgc3RhdGljIGFuZCB0aGVyZWZvcmUgcG90ZW50aWFsbHkgbGVzcyB1c2VmdWwgZm9yIHRyYWNpbmcgb3IgYW5hbHlzaXMuIFdhaXQgYSBtaW51dGUuLi4gaXQmIzM5O3MgYSAqY2FsbGJhY2sqISBUaGF0IGNoYW5nZXMgdGhpbmdzLiBTaW5jZSBpdCYjMzk7cyBhIGNhbGxiYWNrLCBJIGNhbiYjMzk7dCBhc3N1bWUgdGhhdCBpdCYjMzk7cyBpbmxpbmVkLiBTdGlsbCwgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBzdGF0aWMgbWVhbnMgaXQgbWlnaHQgbm90IGJlIHRoZSBiZXN0IGZvY3VzIHBvaW50LiAgSG1tLCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgYXZhaWxhYmxlIGluIHRoZSBVMzIgY2xhc3M/CgpMZXQmIzM5O3Mgc2Vl4oCmIEnigJltIHRoaW5raW5nIEkmIzM5O2xsIHRyeSB0byBmaW5kIGEgc3VpdGFibGUgZm9jdXMgc3ltYm9sIHdpdGggYHUzMl9jaGFuZ2VgIG9yIGB1MzJfaW5pdGAuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYHUzMl9jaGFuZ2VgIGFuZCBzZWUgaWYgdGhhdCBsZWFkcyB0byBhbnl0aGluZyBmcnVpdGZ1bC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dTMyX2NoYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfdTMyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc191MzIuYz04MjE9c3RhdGljIHN0cnVjdCB0Y191X2tub2RlICp1MzJfaW5pdF9rbm9kZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtODcxLVxubmV0L3NjaGVkL2Nsc191MzIuYzo4NzI6c3RhdGljIGludCB1MzJfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODczLVx0XHQgICAgICBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdW5zaWduZWQgbG9uZyBiYXNlLCB1MzIgaGFuZGxlLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ2OD1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3UzMl9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NzMtXHQuZ2V0XHRcdD1cdHUzMl9nZXQsXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0NzQ6XHQuY2hhbmdlXHRcdD1cdHUzMl9jaGFuZ2UsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NzUtXHQuZGVsZXRlXHRcdD1cdHUzMl9kZWxldGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6CgoqKkRlYnVnZ2luZyB0aGUgdTMyIFRyYWZmaWMgQ2xhc3NpZmllcioqCgpSaWdodCwgc28gYHUzMl9jaGFuZ2VgIGlzIHN0YXRpYyBhcyB3ZWxsLiBPa2F5LCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdywgYW5kIGV4cGVjdGVkLCByZWFsbHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIG1vZHVsZS4gTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhpcy4gSGFuZyBvbi4uLiBgdGNfY2xzX2JpbmRfY2xhc3NgIGlzIGdldHRpbmcgY2FsbGVkICpmcm9tKiBgdTMyX2JpbmRfY2xhc3NgLiAgVGhhdCYjMzk7cyBhIGtleSBpbnRlcmFjdGlvbiB0byByZW1lbWJlci4gTm93IHRoZSBjcnVjaWFsIHF1ZXN0aW9uIGlzLCB3aGF0IHRoZSBoZWNrICppcyogY2FsbGluZyBgLSZndDtiaW5kX2NsYXNzYD8gV2hlcmUmIzM5O3MgdGhlIGVudHJ5IHBvaW50PyBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgY2FsbGVyIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIGJpbmRpbmcgb3BlcmF0aW9uIGFuZCBob3cgdGhlIGNsYXNzaWZpZXIgaXMgYmVpbmcgaW50ZWdyYXRlZCB3aXRoaW4gdGhlIGxhcmdlciB0cmFmZmljIGNvbnRyb2wgZnJhbWV3b3JrLiBUaGlzIGlzIHRoZSBwaWVjZSBJIG5lZWQgdG8gc29saWRpZnksIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmluZF9jbGFzcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19iYXNpYy5jPTI0OT1zdGF0aWMgdm9pZCBiYXNpY193YWxrKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNmX3dhbGtlciAqYXJnLFxuLS1cbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0yNjAtXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM6MjYxOnN0YXRpYyB2b2lkIGJhc2ljX2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTI2Mi1cdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMjY1LVxubmV0L3NjaGVkL2Nsc19iYXNpYy5jOjI2NjpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZmLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMjY3LX1cbi0tXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM9MzE4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfYmFzaWNfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTMyNy1cdC5kdW1wXHRcdD1cdGJhc2ljX2R1bXAsXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM6MzI4Olx0LmJpbmRfY2xhc3NcdD1cdGJhc2ljX2JpbmRfY2xhc3MsXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMzI5LVx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY2hlZC9jbHNfYnBmLmM9NTc5PXN0YXRpYyBpbnQgY2xzX2JwZl9kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmZoLFxuLS1cbm5ldC9zY2hlZC9jbHNfYnBmLmMtNjMxLVxubmV0L3NjaGVkL2Nsc19icGYuYzo2MzI6c3RhdGljIHZvaWQgY2xzX2JwZl9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCxcbm5ldC9zY2hlZC9jbHNfYnBmLmMtNjMzLVx0XHRcdCAgICAgICB2b2lkICpxLCB1bnNpZ25lZCBsb25nIGJhc2UpXG4tLVxubmV0L3NjaGVkL2Nsc19icGYuYy02MzYtXG5uZXQvc2NoZWQvY2xzX2JwZi5jOjYzNzpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZwcm9nLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX2JwZi5jLTYzOC19XG4tLVxubmV0L3NjaGVkL2Nsc19icGYuYz02ODQ9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL2Nsc19icGYuYy02OTUtXHQuZHVtcFx0XHQ9XHRjbHNfYnBmX2R1bXAsXG5uZXQvc2NoZWQvY2xzX2JwZi5jOjY5NjpcdC5iaW5kX2NsYXNzXHQ9XHRjbHNfYnBmX2JpbmRfY2xhc3MsXG5uZXQvc2NoZWQvY2xzX2JwZi5jLTY5Ny19O1xuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9Mzc4ND1zdGF0aWMgaW50IGZsX3RtcGx0X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldCAqbmV0LCB2b2lkICp0bXBsdF9wcml2KVxuLS1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzgwOC1cbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MzgwOTpzdGF0aWMgdm9pZCBmbF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzgxMC1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4MTMtXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjM4MTQ6XHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXHUwMDI2Zi1cdTAwM2VyZXMsIGJhc2UpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODE1LX1cbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTM4Mjg9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19mbF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NDMtXHQudGVyc2VfZHVtcFx0PSBmbF90ZXJzZV9kdW1wLFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYzozODQ0Olx0LmJpbmRfY2xhc3NcdD0gZmxfYmluZF9jbGFzcyxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzg0NS1cdC50bXBsdF9jcmVhdGVcdD0gZmxfdG1wbHRfY3JlYXRlLFxuLS1cbm5ldC9zY2hlZC9jbHNfZncuYz0zODI9c3RhdGljIGludCBmd19kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmZoLFxuLS1cbm5ldC9zY2hlZC9jbHNfZncuYy00MjgtXG5uZXQvc2NoZWQvY2xzX2Z3LmM6NDI5OnN0YXRpYyB2b2lkIGZ3X2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxubmV0L3NjaGVkL2Nsc19mdy5jLTQzMC1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX2Z3LmMtNDMzLVxubmV0L3NjaGVkL2Nsc19mdy5jOjQzNDpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZmLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX2Z3LmMtNDM1LX1cbi0tXG5uZXQvc2NoZWQvY2xzX2Z3LmM9NDM3PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZndfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxubmV0L3NjaGVkL2Nsc19mdy5jLTQ0Ni1cdC5kdW1wXHRcdD1cdGZ3X2R1bXAsXG5uZXQvc2NoZWQvY2xzX2Z3LmM6NDQ3Olx0LmJpbmRfY2xhc3NcdD1cdGZ3X2JpbmRfY2xhc3MsXG5uZXQvc2NoZWQvY2xzX2Z3LmMtNDQ4LVx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYz0zMjg9c3RhdGljIGludCBtYWxsX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqZmgsXG4tLVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTM4MC1cbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYzozODE6c3RhdGljIHZvaWQgbWFsbF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0zODItXHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMzg1LVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjM4NjpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZoZWFkLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMzg3LX1cbi0tXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM9Mzg5PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfbWFsbF9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMzk5LVx0LmR1bXBcdFx0PSBtYWxsX2R1bXAsXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM6NDAwOlx0LmJpbmRfY2xhc3NcdD0gbWFsbF9iaW5kX2NsYXNzLFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTQwMS1cdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYz02MjE9c3RhdGljIGludCByb3V0ZTRfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpmaCxcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjY5LVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY3MDpzdGF0aWMgdm9pZCByb3V0ZTRfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjcxLVx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjc0LVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY3NTpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZmLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjc2LX1cbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9Njc4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfcm91dGU0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02ODctXHQuZHVtcFx0XHQ9XHRyb3V0ZTRfZHVtcCxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzo2ODg6XHQuYmluZF9jbGFzc1x0PVx0cm91dGU0X2JpbmRfY2xhc3MsXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjg5LVx0Lm93bmVyXHRcdD1cdFRISVNfTU9EVUxFLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTI5Nz1zdGF0aWMgaW50IHUzMl9yZW9mZmxvYWQoc3RydWN0IHRjZl9wcm90byAqdHAsIGJvb2wgYWRkLCBmbG93X3NldHVwX2NiX3QgKmNiLFxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTM0My1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTM0NDpzdGF0aWMgdm9pZCB1MzJfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDUtXHRcdFx0ICAgdW5zaWduZWQgbG9uZyBiYXNlKVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTM1MS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTM1MjpcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZuLVx1MDAzZXJlcywgYmFzZSk7XG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNTMtfVxuLS1cbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ2OD1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3UzMl9vcHMgX19yZWFkX21vc3RseSA9IHtcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NzgtXHQuZHVtcFx0XHQ9XHR1MzJfZHVtcCxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ3OTpcdC5iaW5kX2NsYXNzXHQ9XHR1MzJfYmluZF9jbGFzcyxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ4MC1cdC5vd25lclx0XHQ9XHRUSElTX01PRFVMRSxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTIxMjE9c3RhdGljIGludCB0Y2Zfbm9kZV9iaW5kKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpuLCBzdHJ1Y3QgdGNmX3dhbGtlciAqYXJnKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjEyNC1cbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjEyNTpcdGlmIChuIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VvcHMtXHUwMDNlYmluZF9jbGFzcykge1xubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTI2LVx0XHRzdHJ1Y3QgUWRpc2MgKnEgPSB0Y2ZfYmxvY2tfcSh0cC1cdTAwM2VjaGFpbi1cdTAwM2VibG9jayk7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTI4LVx0XHRzY2hfdHJlZV9sb2NrKHEpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoyMTI5Olx0XHR0cC1cdTAwM2VvcHMtXHUwMDNlYmluZF9jbGFzcyhuLCBhLVx1MDAzZWNsYXNzaWQsIGEtXHUwMDNlY2wsIHEsIGEtXHUwMDNlYmFzZSk7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMzAtXHRcdHNjaF90cmVlX3VubG9jayhxKTtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMzQtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxMzU6c3RydWN0IHRjX2JpbmRfY2xhc3NfYXJncyB7XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMzYtXHRzdHJ1Y3QgcWRpc2Nfd2Fsa2VyIHc7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTQxLVxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMTQyOnN0YXRpYyBpbnQgdGNfYmluZF9jbGFzc193YWxrZXIoc3RydWN0IFFkaXNjICpxLCB1bnNpZ25lZCBsb25nIGNsLFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTQzLVx0XHRcdFx0c3RydWN0IHFkaXNjX3dhbGtlciAqdylcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE0NC17XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxNDU6XHRzdHJ1Y3QgdGNfYmluZF9jbGFzc19hcmdzICphID0gKHN0cnVjdCB0Y19iaW5kX2NsYXNzX2FyZ3MgKil3O1xubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTQ2LVx0Y29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyAqY29wcyA9IHEtXHUwMDNlb3BzLVx1MDAzZWNsX29wcztcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTIxNzM9c3RhdGljIHZvaWQgdGNfYmluZF90Y2xhc3Moc3RydWN0IFFkaXNjICpxLCB1MzIgcG9ydGlkLCB1MzIgY2xpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxNzYtXHRjb25zdCBzdHJ1Y3QgUWRpc2NfY2xhc3Nfb3BzICpjb3BzID0gcS1cdTAwM2VvcHMtXHUwMDNlY2xfb3BzO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoyMTc3Olx0c3RydWN0IHRjX2JpbmRfY2xhc3NfYXJncyBhcmdzID0ge307XG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxNzgtXG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTgzLVx0YXJncy5uZXdfY2wgPSBuZXdfY2w7XG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxODQ6XHRhcmdzLncuZm4gPSB0Y19iaW5kX2NsYXNzX3dhbGtlcjtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE4NS1cdHEtXHUwMDNlb3BzLVx1MDAzZWNsX29wcy1cdTAwM2V3YWxrKHEsIFx1MDAyNmFyZ3Mudyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBUcmFmZmljIENvbnRyb2wgQ2xhc3MgQmluZGluZyBQcm9jZXNzKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZmxvdyBmcm9tIGNsYXNzIGNyZWF0aW9uL21vZGlmaWNhdGlvbiBpbiB0cmFmZmljIGNvbnRyb2wsIGFuZCBpdCYjMzk7cyBsb29raW5nIGxpa2UgYHRjX2JpbmRfdGNsYXNzYCBpcyB0aGUga2V5IGZ1bmN0aW9uLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgdGNfY3RsX3RjbGFzc2AsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBJJiMzOTttIGFmdGVyLCBhcyBleHBlY3RlZC4KCmB0Y19iaW5kX3RjbGFzc2AgdGhlbiBkaWdzIGludG8gdGhlIGNsYXNzIGhpZXJhcmNoeS4gSXQgY2FsbHMgYHEtJmd0O29wcy0mZ3Q7Y2xfb3BzLSZndDt3YWxrKHEsICZhbXA7YXJncy53KWAuIFRoYXQsIGluIHR1cm4sIHNlZW1zIHRvIGZ1bm5lbCB0aGUgd29yayB0byBgdGNfYmluZF9jbGFzc193YWxrZXJgLiBXaXRoaW4gdGhhdCB3YWxrZXIsIGl0IGNhbGxzIGB0Y2ZfYmxvY2tfZ2V0YCBhbmQgdGhlbiB3ZSBoYXZlIHRoZSBmaWx0ZXIgd2Fsa2luZyB3aXRoIGB0Y2Zfbm9kZV9iaW5kYC4gQW5kIHRoZW4sIHRoaXMgd2hvbGUgcHJvY2VzcyBjYWxscyBgdHAtJmd0O29wcy0mZ3Q7YmluZF9jbGFzc2AuCgpTbywgdGhlIGNyaXRpY2FsIHBhdGggaXMgcHJldHR5IGNsZWFyOiBgdGNfY3RsX3RjbGFzc2AgLSZndDsgYHRjX2JpbmRfdGNsYXNzYCAtJmd0OyB3YWxrZXIvZmlsdGVyIGhhbmRsaW5nIGRvd24gdG8gdGhlIGluZGl2aWR1YWwgY2xhc3MgYmluZGluZyB1c2luZyBgdHAtJmd0O29wcy0mZ3Q7YmluZF9jbGFzc2AuIFRoaXMgbG9va3MgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcgb3IgbW9kaWZpY2F0aW9uLCBJJiMzOTtsbCBkZWZpbml0ZWx5IGNoZWNrIGB0Y19jdGxfdGNsYXNzYCBtb3JlIGNsb3NlbHkgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jdGxfdGNsYXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTIxOTA9c3RhdGljIHZvaWQgdGNfYmluZF90Y2xhc3Moc3RydWN0IFFkaXNjICpxLCB1MzIgcG9ydGlkLCB1MzIgY2xpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxOTYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxOTc6c3RhdGljIGludCBfX3RjX2N0bF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTk4LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzMjYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIzMjc6c3RhdGljIGludCB0Y19jdGxfdGNsYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjMyOC1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0NS1cdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzQ2Olx0ZXJyID0gX190Y19jdGxfdGNsYXNzKHNrYiwgbiwgZXh0YWNrLCBkZXYsIHRjYSwgdGNtKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0Ny1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0yNTIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBwc2NoZWRfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MjctXHQgLmR1bXBpdCA9IHRjX2R1bXBfcWRpc2N9LFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI4Olx0ey5tc2d0eXBlID0gUlRNX05FV1RDTEFTUywgLmRvaXQgPSB0Y19jdGxfdGNsYXNzfSxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjUyOTpcdHsubXNndHlwZSA9IFJUTV9ERUxUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjI1MzA6XHR7Lm1zZ3R5cGUgPSBSVE1fR0VUVENMQVNTLCAuZG9pdCA9IHRjX2N0bF90Y2xhc3MsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzEtXHQgLmR1bXBpdCA9IHRjX2R1bXBfdGNsYXNzfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTk3NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBGaWx0ZXIgQmluZGluZyBUcmlnZ2VyIFBvaW50cyoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gcGluIGRvd24gd2hlcmUgdGhlIHN5c3RlbSBiaW5kcyBmaWx0ZXJzLCBhbmQgYHRjX2N0bF90Y2xhc3NgIGZlZWxzIGxpa2UgYSBnb29kIGluaXRpYWwgZm9jdXMg4oCTIGl0JiMzOTtzIG9mdGVuIHRoZSBjZW50cmFsIHBvaW50IGZvciB0cmFmZmljIGNsYXNzIG1hbmFnZW1lbnQsIHNvIGZpbHRlciBpbnRlcmFjdGlvbnMgYXJlIGxpa2VseSBoYW5kbGVkIHRoZXJlLiBUaGVuLCBJIHJlbWVtYmVyIGB0Y19uZXdfdGZpbHRlcmAg4oCTIHRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IGZvciBjcmVhdGluZyBuZXcgZmlsdGVycywgd2hpY2ggY2VydGFpbmx5ICpjb3VsZCogYmUgYSB0cmlnZ2VyIGZvciBiaW5kaW5nLiBJdCBtYWtlcyBsb2dpY2FsIHNlbnNlIHRvIG1hbmFnZSB0aGUgZmlsdGVycyB0aGVyZS4gV2FpdCwgdGhvdWdoLi4uIEkgbmVlZCB0byBjb25zaWRlciBgdTMyX2JpbmRfY2xhc3NgLiBUaGF0IGdldHMgY2FsbGVkIHdoZW4gYSBjbGFzcyBpcyBjcmVhdGVkLCB0byBsaW5rIGV4aXN0aW5nIGZpbHRlcnMgdG8gdGhlIG5ldyBjbGFzcyBzdHJ1Y3R1cmUuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGF0IGZ1bmN0aW9uIGdldCBjYWxsZWQgd2hlbiBhIGZpbHRlciBpcyBjcmVhdGVkIGFzIHdlbGw/IFRoYXQmIzM5O3MgdGhlIHJlYWwgdGVzdC4gSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byBgdGNmX2JpbmRfZmlsdGVyYCBub3cuIFRoYXQgZmVlbHMgbGlrZSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyB0aGUgYmluZGluZyBvZiBhIGNyZWF0ZWQgZmlsdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfYmluZF9maWx0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9jbHNfYmFzaWMuYz0xNDc9c3RhdGljIGludCBiYXNpY19zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbi0tXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMTY0LVx0XHRmLVx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX0JBU0lDX0NMQVNTSURdKTtcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoxNjU6XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2Zi1cdTAwM2VyZXMsIGJhc2UpO1xubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTE2Ni1cdH1cbi0tXG5uZXQvc2NoZWQvY2xzX2JwZi5jPTQwOT1zdGF0aWMgaW50IGNsc19icGZfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbi0tXG5uZXQvc2NoZWQvY2xzX2JwZi5jLTUwMC1cdFx0cHJvZy1cdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9CUEZfQ0xBU1NJRF0pO1xubmV0L3NjaGVkL2Nsc19icGYuYzo1MDE6XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2cHJvZy1cdTAwM2VyZXMsIGJhc2UpO1xubmV0L3NjaGVkL2Nsc19icGYuYy01MDItXHRcdGJvdW5kX3RvX2ZpbHRlciA9IHRydWU7XG4tLVxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYz0yMzUzPXN0YXRpYyBpbnQgZmxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbi0tXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTI0NTctXHRcdFx0cnRubF9sb2NrKCk7XG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjI0NTg6XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2Zm5ldy1cdTAwM2VyZXMsIGJhc2UpO1xubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDU5LVx0XHRpZiAoZmxhZ3MgXHUwMDI2IFRDQV9BQ1RfRkxBR1NfTk9fUlROTClcbi0tXG5uZXQvc2NoZWQvY2xzX2Z3LmM9MjA1PXN0YXRpYyBpbnQgZndfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXG4tLVxubmV0L3NjaGVkL2Nsc19mdy5jLTIzNi1cdFx0Zi1cdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9GV19DTEFTU0lEXSk7XG5uZXQvc2NoZWQvY2xzX2Z3LmM6MjM3Olx0XHR0Y2ZfYmluZF9maWx0ZXIodHAsIFx1MDAyNmYtXHUwMDNlcmVzLCBiYXNlKTtcbm5ldC9zY2hlZC9jbHNfZncuYy0yMzgtXHR9XG4tLVxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jPTE2Mj1zdGF0aWMgaW50IG1hbGxfY2hhbmdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKmluX3NrYixcbi0tXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMjE2LVx0XHRuZXctXHUwMDNlcmVzLmNsYXNzaWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfTUFUQ0hBTExfQ0xBU1NJRF0pO1xubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjIxNzpcdFx0dGNmX2JpbmRfZmlsdGVyKHRwLCBcdTAwMjZuZXctXHUwMDNlcmVzLCBiYXNlKTtcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0yMTgtXHRcdGJvdW5kX3RvX2ZpbHRlciA9IHRydWU7XG4tLVxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTQwMD1zdGF0aWMgaW50IHJvdXRlNF9zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcbi0tXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNDg2LVx0XHRmLVx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX1JPVVRFNF9DTEFTU0lEXSk7XG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6NDg3Olx0XHR0Y2ZfYmluZF9maWx0ZXIodHAsIFx1MDAyNmYtXHUwMDNlcmVzLCBiYXNlKTtcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy00ODgtXHR9XG4tLVxubmV0L3NjaGVkL2Nsc191MzIuYz03MzE9c3RhdGljIHZvaWQgdTMyX2JpbmRfZmlsdGVyKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNfdV9rbm9kZSAqbixcbi0tXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTczNS1cdFx0bi1cdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfQ0xBU1NJRF0pO1xubmV0L3NjaGVkL2Nsc191MzIuYzo3MzY6XHRcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXHUwMDI2bi1cdTAwM2VyZXMsIGJhc2UpO1xubmV0L3NjaGVkL2Nsc191MzIuYy03MzctXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEZpbHRlciBCaW5kaW5nIFByb2Nlc3MqKgoKUmlnaHQsIGB0Y2ZfYmluZF9maWx0ZXJgLi4uIHRoYXQgcmluZ3MgYSBiZWxsLiBJdCYjMzk7cyBjYWxsZWQgd2hlbiBhIHRyYWZmaWMgY29udHJvbCAoVEMpIGZpbHRlciBpcyBjcmVhdGVkLCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhhdCBjcnVjaWFsIHBvaW50LiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZpbHRlciBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIFRDIHN5c3RlbSwgSSYjMzk7bSBnb2luZyB0byBjb25zdWx0IHRoZSBrZXJuZWwgc291cmNlIGNvZGUuIEkmIzM5O20gcHJldHR5IHN1cmUgYHRjZl9iaW5kX2ZpbHRlcmAgaXMgZGVmaW5lZCBpbiBlaXRoZXIgYGluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhgIG9yIHdpdGhpbiBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRpbWUgdG8gZGlnIGluIGFuZCBwaW5wb2ludCB3aGVyZSB0aGUgZmlsdGVyJiMzOTtzIGJpbmRpbmcgbG9naWMgaXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmlsdGVyIGdldHMgYXNzb2NpYXRlZCB3aXRoIGl0cyBjbGFzc2lmaWVyLCBxZGlzYywgYW5kIG90aGVyIFRDIGNvbXBvbmVudHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmX2JpbmRfZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTc1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIFRyYWZmaWMgQ29udHJvbCBMYW5kc2NhcGUqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIHRyYWZmaWMgY29udHJvbCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIHNjaGVkdWxpbmcgQVBJcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFRoZSBmaXJzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRoaXMgZmlsZSBpcyB0aGUgYmVkcm9jaywgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIHNjaGVkdWxpbmcgZGlzY2lwbGluZXMgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgZmluZGluZyB0aGUgY29yZSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBlbnF1ZXVpbmcgYW5kIGRlcXVldWluZyBwYWNrZXRzLCBhbmQgdGhlIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc21zIGZvciBuZXcgcXVldWVpbmcgZGlzY2lwbGluZXMgKHFkaXNjcykgYW5kIGNsYXNzaWZpZXJzLiBJIGhvcGUgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBsaWtlIGBRZGlzY2AsIGB0Y19jbGFzc19kZWZgLCBhbmQgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb24gcG9pbnRlcnMsIHRvIGdldCBteSBiZWFyaW5ncy4gSSYjMzk7bGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaGlnaGVyIGxheWVycywgbGlrZSBob3cgdHJhZmZpYyBzaGFwaW5nIGFuZCBwb2xpY2luZyBhcmUgaW1wbGVtZW50ZWQgdmlhIHRoZXNlIEFQSXMuIEl04oCZcyBhbGwgYWJvdXQgdHJhY2luZyB0aGUgcGFja2V0IGZsb3csIGZyb20gaXRzIGFycml2YWwgdG8gaXRzIHVsdGltYXRlIHRyYW5zbWlzc2lvbiwgc28gSSBleHBlY3QgdG8gc2VlIHRoZSBrZXkgY2FsbHMgaW4gYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9iaW5kX2ZpbHRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9zY2hfYXBpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg2MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgY29kZS4KCioqSW52ZXN0aWdhdGluZyB0aGUgRGVmaW5pdGlvbiBvZiBgdGNmX2JpbmRfZmlsdGVyYCoqCgpBbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSBgdGNmX2JpbmRfZmlsdGVyYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHRoZSBjb250ZXh0IGl0JiMzOTtzIG9wZXJhdGluZyB3aXRoaW4uIFRoaXMgaXMgZnVuZGFtZW50YWw7IHdpdGhvdXQga25vd2luZyB3aGVyZSBpdCBjb21lcyBmcm9tLCBJJiMzOTttIGVzc2VudGlhbGx5IGZseWluZyBibGluZC4gS25vd2luZyB0aGUgZGVmaW5pdGlvbiB3aWxsIHVubG9jayBzbyBtdWNoIOKAkyBpdHMgZGF0YSB0eXBlLCBhbnkgYXNzb2NpYXRlZCBzdHJ1Y3R1cmVzLCBhbmQgaG9wZWZ1bGx5IHNoZWQgbGlnaHQgb24gaXRzIHB1cnBvc2Ugd2l0aGluIHRoaXMgc3lzdGVtLiBMZXQmIzM5O3MgdHJhY2UgYmFjayBhbmQgZmluZCB0aGUgc291cmNlLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgYW55IGluLWRlcHRoIGRlYnVnZ2luZyBvciBleHBsb3JhdGlvbiBvZiB1bmZhbWlsaWFyIGNvZGUuIExvY2F0aW5nIHRoZSBkZWZpbml0aW9uIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9iaW5kX2ZpbHRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wa3RfY2xzLmg9MTgwPXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjE4MTpfX3RjZl9iaW5kX2ZpbHRlcihzdHJ1Y3QgUWRpc2MgKnEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyLCB1bnNpZ25lZCBsb25nIGJhc2UpXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMTgyLXtcbi0tXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9MTkxPXN0YXRpYyBpbmxpbmUgdm9pZFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjE5Mjp0Y2ZfYmluZF9maWx0ZXIoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyLCB1bnNpZ25lZCBsb25nIGJhc2UpXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMTkzLXtcbi0tXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjAxLVx0c2NoX3RyZWVfbG9jayhxKTtcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoyMDI6XHRfX3RjZl9iaW5kX2ZpbHRlcihxLCByLCBiYXNlKTtcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yMDMtXHRzY2hfdHJlZV91bmxvY2socSk7XG4tLVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oPTIyNT1zdGF0aWMgaW5saW5lIHZvaWQgdGNfY2xzX2JpbmRfY2xhc3ModTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsXG4tLVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTIzMC1cdFx0aWYgKGNsKVxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjIzMTpcdFx0XHRfX3RjZl9iaW5kX2ZpbHRlcihxLCByZXMsIGJhc2UpO1xuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTIzMi1cdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQwNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFUzMiBDbGFzc2lmaWVyIEltcGxlbWVudGF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgYHRjX2Nsc19iaW5kX2NsYXNzYCBnZXRzIGludm9rZWQgaW5kaXJlY3RseSB0aHJvdWdoIGB1MzJfYmluZF9jbGFzc2AuICBBbmQgdGhhdCBgdTMyX2JpbmRfY2xhc3NgIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCB3aGVuIHdlIGNyZWF0ZSBvciBtb2RpZnkgYSBjbGFzcyB1c2luZyB0aGUgYHRjX2JpbmRfdGNsYXNzYCBmdW5jdGlvbi4gVGhhdCBzdHJvbmdseSBzdWdnZXN0cyB0aGF0IGB0Y19jdGxfdGNsYXNzYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgbWFuYWdpbmcgdGhlc2UgY2xhc3Nlcy4gQW5kLCBmcm9tIHRoZSBwZXJzcGVjdGl2ZSBvZiBob3cgZmlsdGVycyBhcmUgY3JlYXRlZCwgYHRjX25ld190ZmlsdGVyYCBpcyBhbHNvIGFuIGltcG9ydGFudCBlbnRyeSBwb2ludCwgYmVjYXVzZSBpdCBjYWxscyBgdTMyX2NoYW5nZWAsIHdoaWNoIGV2ZW50dWFsbHkgbGFuZHMgb24gYHUzMl9iaW5kX2ZpbHRlcmAsIHRoZW4gYHRjZl9iaW5kX2ZpbHRlcmAuIEFsdGhvdWdoIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYHUzMl9iaW5kX2NsYXNzYCwgdGhhdCBmdW5jdGlvbiBpcyBjYWxsZWQgc3BlY2lmaWNhbGx5IHdoZW4gYSBjbGFzcyBpcyBib3VuZCwgc28gYHRjX2N0bF90Y2xhc3NgIGlzIHRoZSBtb3JlIHJlbGV2YW50IHN0YXJ0aW5nIHBvaW50LgoKTm93LCBiZWZvcmUgSSBwcm9jZWVkIGZ1cnRoZXIsIEkgd2FudCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyByZWxhdGVkIHRvIHRoaXMuIEkmIzM5O20gYXNzdW1pbmcgYE5FVF9DTFNfVTMyYCBpcyB0aGUgbWFpbiBvcHRpb24sIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVycz8gSSYjMzk7bGwgcHJvYmFibHkgbmVlZCBgTkVUX1NDSEVEYCBhdCB0aGUgdmVyeSBsZWFzdC4gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGBORVRfQ0xTX1UzMmAgaW4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgY3JpdGljYWwgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX0NMU19VMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz01MDY9Y29uZmlnIE5FVF9DTFNfRldcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXG5uZXQvc2NoZWQvS2NvbmZpZzo1MTY6Y29uZmlnIE5FVF9DTFNfVTMyXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXHR0cmlzdGF0ZSBcJiMzNDtVbml2ZXJzYWwgMzJiaXQgY29tcGFyaXNvbnMgdy8gaGFzaGluZyAoVTMyKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA2NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY3kgU3RydWN0dXJlIG9mIE5FVF9TQ0hFRCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBORVRfU0NIRURgIGhlcmUuIFdlIGFscmVhZHkgZXN0YWJsaXNoZWQgdGhhdCB3aGF0ZXZlciB0aGUgaXNzdWUgaXMsIGl0IGhpbmdlcyBvbiB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24uIE5vdywgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd246IHdoYXQgKmRvZXMqIGBORVRfU0NIRURgIGRlcGVuZCBvbj8gSXMgaXQgYSBzdGFuZGFsb25lIGZlYXR1cmUsIG9yIGlzIGl0IGNvbnRpbmdlbnQgb24gb3RoZXIsIGxvd2VyLWxldmVsLCBtb3JlIGZ1bmRhbWVudGFsIGNvbmZpZ3VyYXRpb25zPyBVbmRlcnN0YW5kaW5nIGl0cyBkZXBlbmRlbmNpZXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIG92ZXJhbGwgYmVoYXZpb3IgYW5kIHJlc29sdmluZyBhbnkgY29uZmxpY3RzLiBUaGlzIG1lYW5zIEkgbmVlZCB0byBjb25zdWx0IHRoZSByZWxldmFudCBkb2N1bWVudGF0aW9uLCBpbnZlc3RpZ2F0ZSB0aGUgc291cmNlIGNvZGUsIG9yIHJ1biBhIGNvbmZpZ3VyYXRpb24gYW5hbHlzaXMgdG8gbWFwIG91dCBgTkVUX1NDSEVEYCYjMzk7cyBkZXBlbmRlbmN5IHRyZWUgYW5kIGRldGVybWluZSBpdHMgaW1wbGljYXRpb25zLiBUaGlzIHdpbGwgY2xhcmlmeSBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIHRoZSBvdGhlciBzeXN0ZW1zIGFuZCBjbGFyaWZ5IGlmIHRoZXJlIGlzIGEgY29uZmxpY3QgaW4gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpcmVjdCBMaW5lIG9mIElucXVpcnkqKgoKSG1tLCB0aGlzIGZlZWxzIHNlbGYtY29udGFpbmVkLCBpbmRlcGVuZGVudC4gSXQmIzM5O3Mgbm90IGNvbnRpbmdlbnQgb24gc29tZSBleHRlcm5hbCBmYWN0b3Igb3IgcHJpb3Igc3RlcC4gVGhhdCBzdWdnZXN0cyBhIGNvcmUgcHJvY2Vzcywgc29tZXRoaW5nIGZvdW5kYXRpb25hbC4gQWxyaWdodCwgbGV0JiMzOTtzIGN1dCBzdHJhaWdodCB0byB0aGUgY2hhc2UgYW5kIGV4YW1pbmUgdGhlIGB0Y19jdGxfdGNsYXNzYCBmdW5jdGlvbi4gTXkgZ3Vlc3MgaXMgaXQmIzM5O3MgdGhlIHJpZ2h0IHBsYWNlIHRvIHN0YXJ0IGxvb2tpbmcuIEkmIzM5O2xsIG5lZWQgdG8gZ28gdG8gYG5ldC9zY2hlZC9zY2hfYXBpLmNgIGluIHRoZSBrZXJuZWwgc291cmNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y19jdGxfdGNsYXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvc2NoX2FwaS5jPTIxOTA9c3RhdGljIHZvaWQgdGNfYmluZF90Y2xhc3Moc3RydWN0IFFkaXNjICpxLCB1MzIgcG9ydGlkLCB1MzIgY2xpZCxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxOTYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxOTc6c3RhdGljIGludCBfX3RjX2N0bF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTk4LVx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzMjYtXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIzMjc6c3RhdGljIGludCB0Y19jdGxfdGNsYXNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjMyOC1cdFx0XHQgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0NS1cdG5ldGRldl9sb2NrX29wcyhkZXYpO1xubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzQ2Olx0ZXJyID0gX190Y19jdGxfdGNsYXNzKHNrYiwgbiwgZXh0YWNrLCBkZXYsIHRjYSwgdGNtKTtcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjM0Ny1cdG5ldGRldl91bmxvY2tfb3BzKGRldik7XG4tLVxubmV0L3NjaGVkL3NjaF9hcGkuYz0yNTIzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciBwc2NoZWRfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbi0tXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MjctXHQgLmR1bXBpdCA9IHRjX2R1bXBfcWRpc2N9LFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI4Olx0ey5tc2d0eXBlID0gUlRNX05FV1RDTEFTUywgLmRvaXQgPSB0Y19jdGxfdGNsYXNzfSxcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjUyOTpcdHsubXNndHlwZSA9IFJUTV9ERUxUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjI1MzA6XHR7Lm1zZ3R5cGUgPSBSVE1fR0VUVENMQVNTLCAuZG9pdCA9IHRjX2N0bF90Y2xhc3MsXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzEtXHQgLmR1bXBpdCA9IHRjX2R1bXBfdGNsYXNzfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQwODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBUYXJnZXRlZCBJbnZlc3RpZ2F0aW9uKioKCk15IGluaXRpYWwgaW5zdGluY3QsIGdpdmVuIHRoaXMgY29udGV4dCwgaXMgdGhhdCBgdGNfY3RsX3RjbGFzc2AgaXMgdGhlIGtleSBwb2ludCBvZiBmb2N1cyBoZXJlLiBJdCBzZWVtcyB0byBiZSB0aGUgZGlyZWN0IGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciB0cmlnZ2VyaW5nIGBiaW5kX2NsYXNzYCwgc28gdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTtkIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIE9mIGNvdXJzZSwgSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgdGNfbmV3X3RmaWx0ZXJgLCBhcyBpdCYjMzk7cyBwb3NzaWJsZSBpdCBzaGFyZXMgYSBjb2RlIHBhdGggdGhhdCAqYWxzbyogbGVhZHMgdG8gYGJpbmRfY2xhc3NgLiBJdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gY29uc2lkZXIgcmVsYXRlZCBlbnRyeSBwb2ludHMsIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgZGVzaWduZWQgdG8gcGVyZm9ybSBzaW1pbGFyIHRhc2tzLiBCdXQsIHRvIGJlIGVmZmljaWVudCwgSSYjMzk7bGwgcHJpb3JpdGl6ZSBgdGNfY3RsX3RjbGFzc2AgZmlyc3QuIFRoZW4gSSB3aWxsIGludmVzdGlnYXRlIGB0Y19uZXdfdGZpbHRlcmAgbmV4dCwgaWYgSSBuZWVkIHRvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAwODowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjX25ld190ZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL3NjaF9hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzcwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIFRyYWZmaWMgQ29udHJvbCBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhlIHRyYWZmaWMgY29udHJvbCAodGMpIGludGVybmFscyBhZ2Fpbi4gVGhlIGtlcm5lbCYjMzk7cyB0YyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgYSBiaXQgb2YgYSBsYWJ5cmludGgsIGJ1dCBJJiMzOTttIGdldHRpbmcgYmFjayBpbnRvIGl0LiBBaCwgcmlnaHQsIHRoYXQgc3BlY2lmaWMgZmlsdGVyIGNyZWF0aW9uIGZ1bmN0aW9uLCBgdGNfbmV3X3RmaWx0ZXJgLi4uIEkgc2VlbSB0byByZWNhbGwgaXQmIzM5O3MgdHVja2VkIGF3YXkgaW4gYG5ldC9zY2hlZC9jbHNfYXBpLmNgLiBOb3cgSSByZW1lbWJlciwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgY29yZSBjbGFzcyBBUEkgYW5kIGZpbHRlciBoYW5kbGluZyBsb2dpYyByZXNpZGVzLiBHb29kLCB0aGF0IG5hcnJvd3MgbXkgZm9jdXMuIEkga25vdyBJJiMzOTtsbCBiZSBqdW1waW5nIGJldHdlZW4gYSBmZXcgZmlsZXMgYXMgSSB3b3JrIHRocm91Z2ggdGhpcywgYnV0IHJlbWVtYmVyaW5nIHRoYXQgZmlsZSBsb2NhdGlvbiBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGhlbHBzIHRvIG9yaWVudCBteSB0aG91Z2h0cyBhYm91dCB0aGUgb3ZlcmFsbCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDA4OjAyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjX25ld190ZmlsdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2Nsc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvY2xzX2FwaS5jPTIyNDY9c3RhdGljIGJvb2wgaXNfaW5ncmVzc19vcl9jbHNhY3Qoc3RydWN0IHRjZl9ibG9jayAqYmxvY2ssIHN0cnVjdCBRZGlzYyAqcSlcbi0tXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyNTAtXG5uZXQvc2NoZWQvY2xzX2FwaS5jOjIyNTE6c3RhdGljIGludCB0Y19uZXdfdGZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyNTItXHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2Nsc19hcGkuYz00MTE2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRubF9tc2dfaGFuZGxlciB0Y19maWx0ZXJfcnRubF9tc2dfaGFuZGxlcnNbXSBfX2luaXRjb25zdCA9IHtcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDExNzpcdHsubXNndHlwZSA9IFJUTV9ORVdURklMVEVSLCAuZG9pdCA9IHRjX25ld190ZmlsdGVyLFxubmV0L3NjaGVkL2Nsc19hcGkuYy00MTE4LVx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ4NTEKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMzEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoaXMgVHJhZmZpYyBDb250cm9sIFBhdGNoKioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYHRjX25ld190ZmlsdGVyYCBpcyBpbmRlZWQgbG9jYXRlZCB3aXRoaW4gYGNsc19hcGkuY2AsIGdvb2QuIEJhc2VkIG9uIHRoZSBmaWxlIGNvbnRleHQgSSYjMzk7bGwgYWRkIGB0Y19jdGxfdGNsYXNzYCBhbmQgYHRjX25ld190ZmlsdGVyYCB0byBteSBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgYW5hbHlzaXMuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZjoKCmBgYGMKIAlzdHJ1Y3QgdGNfdV9rbm9kZSAqbiA9IGZoOwogCiYjNDM7CWlmIChUQ19VMzJfS0VZKG4tJmd0O2hhbmRsZSkgPT0gMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAl0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgJmFtcDtuLSZndDtyZXMsIGJhc2UpOwpgYGAKCkFoLCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCYjMzk7cyBhIGJ1ZyBmaXggaW4gdGhlIGB1MzJfYmluZF9jbGFzc2AgZnVuY3Rpb24uIEJhc2ljYWxseSwgdGhpcyBwcmV2ZW50cyBgdGNfY2xzX2JpbmRfY2xhc3NgIGZyb20gYmVpbmcgY2FsbGVkIHdoZW4gYFRDX1UzMl9LRVkobi0mZ3Q7aGFuZGxlKWAgZXZhbHVhdGVzIHRvIHplcm8uIFRoaXMgc2hvdWxkIGRlZmluaXRlbHkgYmUgZnV6eiB0ZXN0ZWQuIEl0JiMzOTtzIGxpa2VseSBhIG1pc3NpbmcgbnVsbCBjaGVjayBzb21ld2hlcmUgYWxvbmcgdGhlIGNvbnRyb2wgcGF0aCB0aGF0IGNvdWxkIGxlYWQgdG8gYW4gaXNzdWUuCgpUaGUgY29uZmlnIG9wdGlvbnMgaW52b2x2ZWQgaGVyZSBhcmUgc3RyYWlnaHRmb3J3YXJkOiBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfVTMyYC4KClNvIHRvIHJlaXRlcmF0ZSwgdGhpcyBwYXRjaCBpbXBhY3RzIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIFUzMiBjbGFzc2lmaWVyLiBJdCBhZGRyZXNzZXMgYSBzY2VuYXJpbyB3aGVyZSBhbiBpbnZhbGlkIGhhbmRsZSAoemVybyB2YWx1ZSkgd2FzIHBvdGVudGlhbGx5IGJlaW5nIHBhc3NlZCB0byBgdGNfY2xzX2JpbmRfY2xhc3NgLiBUaGlzIGlzIHRyaWdnZXJlZCB0aHJvdWdoIG5ldGxpbmsgY29tbWFuZHMgdXRpbGl6ZWQgdG8gY3JlYXRlIG9yIG1vZGlmeSB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgdGNfY3RsX3RjbGFzc2AgYW5kIGB0Y19uZXdfdGZpbHRlcmAuIEFuZCBpdCB3aWxsIG9ubHkgaGF2ZSBhbiBlZmZlY3QgaWYgYENPTkZJR19ORVRfQ0xTX1UzMmAgaXMgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMDg6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1UzMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF90Y2xhc3MmIzM0OywKICAgICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9TQ0hFRCYjMzQ7LAogICAgJiMzNDtORVRfQ0xTX1UzMiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjX2N0bF90Y2xhc3MmIzM0OywKICAgICYjMzQ7dGNfbmV3X3RmaWx0ZXImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMToxNC42MjIxMDQ3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNTM1ODI5NDg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNfVTMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNfY3RsX3RjbGFzc1wiLFxuICAgIFwidGNfbmV3X3RmaWx0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGVjayBpbiBgdTMyX2JpbmRfY2xhc3NgIHRvIHByZXZlbnQgYmluZGluZyBhIGNsYXNzIHdoZW4gYFRDX1UzMl9LRVkobi1cXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjE0LjYyMjExNDk4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkwMzE5NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzIxNWJiN2Q3ZjM1NDNhYmNlMzE0Mzg4MDBmYTQ3OWU0MWI4YzlmOFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDA4OjAxOjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXFxuaW5kZXggYWM5OGIxYzIxNDRhNy4uYzI5N2Q3ZGJjZjkxNiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvY2xzX3UzMi5jXFxuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xcbkBAIC0xMzQ2LDYgKzEzNDYsOSBAQCBzdGF0aWMgdm9pZCB1MzJfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXFxuIHtcXG4gXFx0c3RydWN0IHRjX3Vfa25vZGUgKm4gPSBmaDtcXG4gXFxuK1xcdGlmIChUQ19VMzJfS0VZKG4tXFx1MDAzZWhhbmRsZSkgPT0gMClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0dGNfY2xzX2JpbmRfY2xhc3MoY2xhc3NpZCwgY2wsIHEsIFxcdTAwMjZuLVxcdTAwM2VyZXMsIGJhc2UpO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMToxNS44MTMyMjk1MjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDQxNjcxNjE1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX1UzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX2N0bF90Y2xhc3NcIixcbiAgICBcInRjX25ld190ZmlsdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXFx1MDAzZWhhbmRsZSkgPT0gMGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGZvciBjcmVhdGluZy9tb2RpZnlpbmcgdHJhZmZpYyBjbGFzc2VzIGFuZCBmaWx0ZXJzIChgdGNfY3RsX3RjbGFzc2AsIGB0Y19uZXdfdGZpbHRlcmApLiBJdCByZXF1aXJlcyBgQ09ORklHX05FVF9DTFNfVTMyYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjMjE1YmI3ZDdmMzU0M2FiY2UzMTQzODgwMGZhNDc5ZTQxYjhjOWY4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAwODowMToxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jXG5pbmRleCBhYzk4YjFjMjE0NGE3Li5jMjk3ZDdkYmNmOTE2IDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2Nsc191MzIuY1xuKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuY1xuQEAgLTEzNDYsNiArMTM0Niw5IEBAIHN0YXRpYyB2b2lkIHUzMl9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcbiB7XG4gXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbiA9IGZoO1xuIFxuK1x0aWYgKFRDX1UzMl9LRVkobi1cdTAwM2VoYW5kbGUpID09IDApXG4rXHRcdHJldHVybjtcbitcbiBcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZuLVx1MDAzZXJlcywgYmFzZSk7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6MTUuODEzMjMwNTY0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzEwNTU4ODkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHUzMiBDbGFzc2lmaWVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG5ldC9zY2hlZC9jbHNfdTMyLmNgLiBTcGVjaWZpY2FsbHksIHRoZXkndmUgYWRkZWQgYSBjaGVjayB3aXRoaW4gdGhlIGB1MzJfYmluZF9jbGFzc2AgZnVuY3Rpb24uIEl0IHNlZW1zIHRoZXkncmUgZ3VhcmRpbmcgYWdhaW5zdCBhIHNwZWNpZmljIGNhc2U6XG5cbmBgYGNcblx0c3RydWN0IHRjX3Vfa25vZGUgKm4gPSBmaDtcbiBcbitcdGlmIChUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKSA9PSAwKVxuK1x0XHRyZXR1cm47XG4rXG4gXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXHUwMDI2bi1cdTAwM2VyZXMsIGJhc2UpO1xuYGBgXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBgdTMyX2JpbmRfY2xhc3NgIGlzIG9idmlvdXNseSBwYXJ0IG9mIHRoZSBgdGNfdTMyYCBjbGFzc2lmaWVyLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBUcmFmZmljIENvbnRyb2wgKFRDKSBzdWJzeXN0ZW0uIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIGB1MzJfYmluZF9jbGFzc2AgaXMgY2FsbGVkLiBJdCdzIGxpa2VseSBjYWxsZWQgdGhyb3VnaCBgdGNfY2xzX2JpbmRfY2xhc3NgIG9yIG1heWJlIGB0Y2ZfYmluZF9maWx0ZXJgLCBzb21ldGhpbmcgbGlrZSB0aGF0LCB3aGljaCBJIHdpbGwgY29uZmlybS4gQWgsIHJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBMZXQncyBsb29rIGF0IHRoZSBgdGNmX3Byb3RvX29wc2Agc3RydWN0IGZvciB0aGUgdTMyIGNsYXNzaWZpZXIuIFllcCwgaXQncyB0aGVyZSBhcyBhIGNhbGxiYWNrOlxuXG5gYGBjXG5zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3UzMl9vcHMgX19yZWFkX21vc3RseSA9IHtcblx0LmtpbmRcdFx0PVx0XCJ1MzJcIixcblx0LmNsYXNzaWZ5XHQ9XHR1MzJfY2xhc3NpZnksXG5cdC5pbml0XHRcdD1cdHUzMl9pbml0LFxuXHQuZGVzdHJveVx0PVx0dTMyX2Rlc3Ryb3ksXG5cdC5nZXRcdFx0PVx0dTMyX2dldCxcblx0LmNoYW5nZVx0XHQ9XHR1MzJfY2hhbmdlLFxuXHQuZGVsZXRlXHRcdD1cdHUzMl9kZWxldGUsXG5cdC53YWxrXHRcdD1cdHUzMl93YWxrLFxuXHQucmVvZmZsb2FkXHQ9XHR1MzJfcmVvZmZsb2FkLFxuXHQuYmluZF9jbGFzc1x0PVx0dTMyX2JpbmRfY2xhc3MsXG5cdC5vd25lclx0XHQ9XHRUSElTX01PRFVMRSxcbn07XG5gYGBcblxuT2theSwgc28gYHUzMl9iaW5kX2NsYXNzYCBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGhpbiBgY2xzX3UzMl9vcHNgLiBJJ2xsIHdhbnQgdG8gdmVyaWZ5IGl0cyBpbXBsZW1lbnRhdGlvbiBhbmQgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhhdCBvdmVyYWxsIGZyYW1ld29yay4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSAqd2h5KiB0aGlzIHNwZWNpZmljIGNoZWNrIGZvciBgVENfVTMyX0tFWShuLVx1MDAzZWhhbmRsZSkgPT0gMGAgd2FzIGFkZGVkLiBXaGF0J3MgdGhlIHBvdGVudGlhbCBpc3N1ZSBiZWluZyBhZGRyZXNzZWQ/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGVjayBvbiB0aGUgYmVoYXZpb3VyIG9mIGB1MzJgIHRyYWZmaWMgY2xhc3NpZmljYXRpb24/IEkgd2lsbCBjb250aW51ZSBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6MjIuOTE4ODIyNDE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNjU4OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInUzMl9iaW5kX2NsYXNzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9jbHNfdTMyLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuYz0xMjk3PXN0YXRpYyBpbnQgdTMyX3Jlb2ZmbG9hZChzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgYm9vbCBhZGQsIGZsb3dfc2V0dXBfY2JfdCAqY2IsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDMtXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMzQ0OnN0YXRpYyB2b2lkIHUzMl9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDUtXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBiYXNlKVxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xNDY4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfdTMyX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDc4LVxcdC5kdW1wXFx0XFx0PVxcdHUzMl9kdW1wLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ3OTpcXHQuYmluZF9jbGFzc1xcdD1cXHR1MzJfYmluZF9jbGFzcyxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0ODAtXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMToyMi45NjE0ODY1MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDQ3MTUyMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYHUzMl9iaW5kX2NsYXNzYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCB5ZXMsIGl0IHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBgdTMyX2JpbmRfY2xhc3NgIGZ1bmN0aW9uICppcyogaW5kZWVkIGJlaW5nIHVzZWQgYXMgdGhlIGAuYmluZF9jbGFzc2AgbWVtYmVyIGluIHRoZSBgY2xzX3UzMl9vcHNgIHN0cnVjdHVyZS4gR29vZCwgdGhhdCBjb25maXJtcyB0aGUgaW1wbGVtZW50YXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGlzIGZ1bmN0aW9uYWxseSBzb3VuZDsgaXQncyBkZXNpZ25lZCB0byBmaXggYSBidWcsIGxpa2VseSBhIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHdhcyBoYXBwZW5pbmcgd2hlbiBgVENfVTMyX0tFWShuLVx1MDAzZWhhbmRsZSlgIGV2YWx1YXRlZCB0byB6ZXJvLiBJIGNhbiBhbG1vc3QgcGljdHVyZSB0aGUgY29kZSBhbmQgaG93IHRoYXQgY291bGQgaGFwcGVuLi4uIG1ha2VzIHNlbnNlLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgcmVhY2hhYmxlPyBDYW4gYSB1c2VyIGFjdHVhbGx5IHRyaWdnZXIgdGhpcyBjb2RlIHBhdGg/IFRoZSBhbnN3ZXIgaXMgeWVzLCB1bmRvdWJ0ZWRseS4gV2UgaW50ZXJhY3Qgd2l0aCB0aGlzIHRocm91Z2ggYHRjYCBuZXRsaW5rIGNvbW1hbmRzLCB3aGljaCBhcmUgdGhlIHN0YW5kYXJkIHdheSBvZiBjb25maWd1cmluZyB0cmFmZmljIGNvbnRyb2wuIFNvLCB0aGlzIGlzbid0IHNvbWUgb2JzY3VyZSBjb3JuZXIgY2FzZTsgaXQncyBzb21ldGhpbmcgdGhhdCBjb3VsZCBkZWZpbml0ZWx5IGJlIGV4cGxvaXRlZCBpbiBhIHJlYWwtd29ybGQgc2NlbmFyaW8uIExldCBtZSBqdXN0IHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYGNsc191MzIuY2AgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBvdGhlciBjb25maWd1cmF0aW9ucyBhdCBwbGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6MzEuMDA4NjQwNjgyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzQ2ODI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNsc191MzIub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL01ha2VmaWxlPTY2PW9iai0kKENPTkZJR19ORVRfU0NIX0RVQUxQSTIpXFx0Kz0gc2NoX2R1YWxwaTIub1xcbm5ldC9zY2hlZC9NYWtlZmlsZS02Ny1cXG5uZXQvc2NoZWQvTWFrZWZpbGU6Njg6b2JqLSQoQ09ORklHX05FVF9DTFNfVTMyKVxcdCs9IGNsc191MzIub1xcbm5ldC9zY2hlZC9NYWtlZmlsZS02OS1vYmotJChDT05GSUdfTkVUX0NMU19ST1VURTQpXFx0Kz0gY2xzX3JvdXRlLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6MzEuMDUyMzkyOTE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM1MzIyMjM2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kgTGFuZHNjYXBlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBgTkVUX0NMU19VMzJgLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgZm9yIGRlcGVuZGVuY2llcy4gSSBrbm93IHRoaXMgcGFydGljdWxhciBjbGFzc2lmaWVyLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG92ZXJsb29raW5nIHNvbWV0aGluZyBjcnVjaWFsLiBJcyB0aGlzIHN0YW5kYWxvbmUsIG9yIGRvZXMgaXQgcGlnZ3liYWNrIG9uIGFub3RoZXIgY29yZSBuZXR3b3JraW5nIG1vZHVsZT8gQXJlIHRoZXJlIGtlcm5lbCBmZWF0dXJlcyBJIG5lZWQgdG8gZW5hYmxlIGZvciBpdCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFVuZGVyc3RhbmRpbmcgdGhlc2UgZGVwZW5kZW5jaWVzIGlzIGtleS4gSXQgaGVscHMgbWUgZW5zdXJlIHRoZSBzeXN0ZW0gaXMgY29uZmlndXJlZCBvcHRpbWFsbHksIGF2b2lkcyBwb3RlbnRpYWwgY29uZmxpY3RzLCBhbmQgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSByZXNvdXJjZXMgZm9yIGBORVRfQ0xTX1UzMmAgdG8gcGVyZm9ybSBhcyBleHBlY3RlZC4gVGhpcyBhbHNvIGhlbHBzIG1lIHVuZGVyc3RhbmQgd2hpY2ggb3RoZXIgbW9kdWxlcyBtaWdodCBiZSBpbXBhY3RlZCBieSBhIGNoYW5nZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24uIFRoYXQgd2F5IEkgZG9uJ3QgaW50cm9kdWNlIHByb2JsZW1zIHdoZXJlIHRoZXkgd2VyZW4ndCBhbnRpY2lwYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjM1LjQwNTYxNzU1N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mzk2MzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0NMU19VMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9NTA2PWNvbmZpZyBORVRfQ0xTX0ZXXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy01MTUtXFxubmV0L3NjaGVkL0tjb25maWc6NTE2OmNvbmZpZyBORVRfQ0xTX1UzMlxcbm5ldC9zY2hlZC9LY29uZmlnLTUxNy1cXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjM1LjQ0OTU4NTEzNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMjE3MDQ3NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIERlcGVuZGVuY2llcyBvZiBORVRfQ0xTX1UzMioqXG5cbkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0NMU19VMzJgLiBUaGF0IG5hbWUgaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgYSBsaWtlbHkgY2xhc3NpZmljYXRpb24gbW9kdWxlLCBwcm9iYWJseSByZWxhdGVkIHRvIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyIHZhbHVlcyB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIE15IGV4cGVydGlzZSBpcyBwcmltYXJpbHkgaW4gdGhlIGtlcm5lbCBhbmQgbmV0d29yayBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24sIHNvIHRoaXMga2luZCBvZiB0YXNrIGlzIHJvdXRpbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgb3RoZXIgY29tcG9uZW50cyByZWx5IG9uIGBORVRfQ0xTX1UzMmAsIG9yLCBjb252ZXJzZWx5LCB3aGF0ICppdCogcmVsaWVzIHVwb24uIFdoYXQgb3RoZXIgbW9kdWxlcywgY29uZmlndXJhdGlvbnMsIG9yIGRhdGEgc3RydWN0dXJlcyBhcmUgaW50ZXJ0d2luZWQgd2l0aCBpdHMgZnVuY3Rpb25hbGl0eT8gSXMgaXQgY29yZSB0byBwYWNrZXQgZmlsdGVyaW5nLCBRb1MsIG9yIHRyYWZmaWMgc2hhcGluZz8gSSdtIGFudGljaXBhdGluZyB0aGF0IGl0J3MgbGlrZWx5IGEgbGVhZi1sZXZlbCBjb21wb25lbnQuXG5cbkknbSB0aGlua2luZyBhYm91dCB0aGUgdmFyaW91cyB0cmFjaW5nIHRvb2xzIGFuZCBrZXJuZWwgZG9jdW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgbmV4dCBzdGVwLiBUbyBnZXQgYSB1c2VmdWwgb3ZlcnZpZXcsIEnigJlsbCBuZWVkIHRvIHdvcmsgdGhyb3VnaCBpdHMgaW1wbGVtZW50YXRpb24sIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLCBkYXRhIHN0cnVjdHVyZSB1c2FnZSwgYW5kIGZ1bmN0aW9uIGNhbGxzLiBUaGlzIHNob3VsZCBxdWlja2x5IHVuY292ZXIgaXRzIGludGVncmF0aW9uIHBvaW50cyB3aXRoaW4gdGhlIGJyb2FkZXIgbmV0d29yayBzdWJzeXN0ZW0uIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB3aGVyZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gbWlnaHQgYmUgYmVuZWZpY2lhbC4gSG9wZWZ1bGx5IHRoZSBkZXBlbmRlbmNpZXMgYXJlIGRvY3VtZW50ZWQgd2VsbC4gT3RoZXJ3aXNlLCBJIG1heSBuZWVkIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdXNlIGB0cmFjZXBvaW50c2AgYW5kIGRlYnVnZ2luZyB0b29scy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE2NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjM5Ljc3MTI5MjUxM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MTYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTY6XFx0Y29uZmlnIE5FVF9DTFNfVTMyXFxuIDUxNzpcXHRcXHR0cmlzdGF0ZSBcXFwiVW5pdmVyc2FsIDMyYml0IGNvbXBhcmlzb25zIHcvIGhhc2hpbmcgKFUzMilcXFwiXFxuIDUxODpcXHRcXHRzZWxlY3QgTkVUX0NMU1xcbiA1MTk6XFx0XFx0aGVscFxcbiA1MjA6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGJlIGFibGUgdG8gY2xhc3NpZnkgcGFja2V0cyB1c2luZyBhIHVuaXZlcnNhbFxcbiA1MjE6XFx0XFx0ICAzMmJpdCBwaWVjZXMgYmFzZWQgY29tcGFyaXNvbiBzY2hlbWUuXFxuIDUyMjpcXHRcXG4gNTIzOlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1MjQ6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY2xzX3UzMi5cXG4gNTI1OlxcdFxcbiA1MjY6XFx0Y29uZmlnIENMU19VMzJfUEVSRlxcbiA1Mjc6XFx0XFx0Ym9vbCBcXFwiUGVyZm9ybWFuY2UgY291bnRlcnMgc3VwcG9ydFxcXCJcXG4gNTI4OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19VMzJcXG4gNTI5OlxcdFxcdGhlbHBcXG4gNTMwOlxcdFxcdCAgU2F5IFkgaGVyZSB0byBtYWtlIHUzMiBnYXRoZXIgYWRkaXRpb25hbCBzdGF0aXN0aWNzIHVzZWZ1bCBmb3JcXG4gNTMxOlxcdFxcdCAgZmluZSB0dW5pbmcgdTMyIGNsYXNzaWZpZXJzLlxcbiA1MzI6XFx0XFxuIDUzMzpcXHRjb25maWcgQ0xTX1UzMl9NQVJLXFxuIDUzNDpcXHRcXHRib29sIFxcXCJOZXRmaWx0ZXIgbWFya3Mgc3VwcG9ydFxcXCJcXG4gNTM1OlxcdFxcdGRlcGVuZHMgb24gTkVUX0NMU19VMzJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6MzkuNzcxMzc5NjkzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDA2NTU2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKlxuXG5BbHJpZ2h0LCB0aGlzIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCwgYXQgbGVhc3QgaW5pdGlhbGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJdCBzZWVtcyB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gaW4gcXVlc3Rpb24sIHdoYXRldmVyIGBORVRfQ0xTYCByZXByZXNlbnRzLCBpcyBkZXBlbmRlbnQgb24gbm90aGluZyAqc3BlY2lmaWMqIG90aGVyIHRoYW4gaXRzZWxmLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LCBtZWFuaW5nIGl0J3MgbGlrZWx5IGEgcmVsYXRpdmVseSBzZWxmLWNvbnRhaW5lZCBmZWF0dXJlIG9yIGEgYnJvYWQgY2F0ZWdvcnkgb2YgZnVuY3Rpb25hbGl0eS4gTXkgaW50dWl0aW9uIHNheXMgdGhhdCBgTkVUX1NDSEVEYCwgdGhlIHBhcmVudCBtZW51LCB3aWxsIGJlIGltcG9ydGFudCBoZXJlLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC5cblxuU28sIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gYG5ldC9zY2hlZC9LY29uZmlnYC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGF0IGBtZW51Y29uZmlnIE5FVF9TQ0hFRGAgZGVmaW5pdGlvbiB0byBjbGFyaWZ5IGV4YWN0bHkgaG93IGBORVRfQ0xTYCBmaXRzIGludG8gdGhlIGJyb2FkZXIgbmV0d29yayBzY2hlZHVsZXIgaGllcmFyY2h5IGFuZCBwaW5wb2ludCBhbnkgcG90ZW50aWFsIGluZGlyZWN0IGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHQgbmVlZGVkIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24ncyBpbXBsaWNhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjQzLjUxMjAzNzA0NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNDk4MzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVudWNvbmZpZyBORVRfU0NIRURcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWctNS1cXG5uZXQvc2NoZWQvS2NvbmZpZzo2Om1lbnVjb25maWcgTkVUX1NDSEVEXFxubmV0L3NjaGVkL0tjb25maWctNy1cXHRib29sIFxcXCJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjQzLjU1NjI4ODc5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDMxNDU1Mjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOZXR3b3JrIFNjaGVkdWxlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbmV0d29yayBzY2hlZHVsZXIgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBgTkVUX1NDSEVEYCBhbmQgYE5FVF9DTFNfVTMyYC4gIE15IGJyYWluIGlzIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHdoZXJlIHRoZSBpbnRlcmVzdGluZyBzeW1ib2xzIG1pZ2h0IGxpZS4gSSdtIGZvY3VzaW5nIG9uIGZpbmRpbmcgdGhlIGtleSBmdW5jdGlvbnMuXG5cbkkgaW5pdGlhbGx5IHRob3VnaHQgYHUzMl9iaW5kX2NsYXNzYCBtaWdodCBiZSBwcm9taXNpbmcsIGJ1dCB0aGVuIEkgcmVtZW1iZXJlZCBpdCdzIHN0YXRpYyBhbmQgdGhlcmVmb3JlIHBvdGVudGlhbGx5IGxlc3MgdXNlZnVsIGZvciB0cmFjaW5nIG9yIGFuYWx5c2lzLiBXYWl0IGEgbWludXRlLi4uIGl0J3MgYSAqY2FsbGJhY2sqISBUaGF0IGNoYW5nZXMgdGhpbmdzLiBTaW5jZSBpdCdzIGEgY2FsbGJhY2ssIEkgY2FuJ3QgYXNzdW1lIHRoYXQgaXQncyBpbmxpbmVkLiBTdGlsbCwgdGhlIGZhY3QgdGhhdCBpdCdzIHN0YXRpYyBtZWFucyBpdCBtaWdodCBub3QgYmUgdGhlIGJlc3QgZm9jdXMgcG9pbnQuICBIbW0sIHdoYXQgb3RoZXIgZnVuY3Rpb25zIGFyZSBhdmFpbGFibGUgaW4gdGhlIFUzMiBjbGFzcz9cblxuTGV0J3Mgc2Vl4oCmIEnigJltIHRoaW5raW5nIEknbGwgdHJ5IHRvIGZpbmQgYSBzdWl0YWJsZSBmb2N1cyBzeW1ib2wgd2l0aCBgdTMyX2NoYW5nZWAgb3IgYHUzMl9pbml0YC4gSSdsbCBzdGFydCB3aXRoIGB1MzJfY2hhbmdlYCBhbmQgc2VlIGlmIHRoYXQgbGVhZHMgdG8gYW55dGhpbmcgZnJ1aXRmdWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6NDguNTg3NzQ2MTVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTUzODM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInUzMl9jaGFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2Nsc191MzIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX3UzMi5jPTgyMT1zdGF0aWMgc3RydWN0IHRjX3Vfa25vZGUgKnUzMl9pbml0X2tub2RlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTg3MS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjg3MjpzdGF0aWMgaW50IHUzMl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtODczLVxcdFxcdCAgICAgIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1bnNpZ25lZCBsb25nIGJhc2UsIHUzMiBoYW5kbGUsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jPTE0Njg9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc191MzJfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTE0NzMtXFx0LmdldFxcdFxcdD1cXHR1MzJfZ2V0LFxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTQ3NDpcXHQuY2hhbmdlXFx0XFx0PVxcdHUzMl9jaGFuZ2UsXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDc1LVxcdC5kZWxldGVcXHRcXHQ9XFx0dTMyX2RlbGV0ZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6NDguNjM1MzAyNzM2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTQ2MjE2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBvd24gcGVyc3BlY3RpdmU6XG5cbioqRGVidWdnaW5nIHRoZSB1MzIgVHJhZmZpYyBDbGFzc2lmaWVyKipcblxuUmlnaHQsIHNvIGB1MzJfY2hhbmdlYCBpcyBzdGF0aWMgYXMgd2VsbC4gT2theSwgdGhhdCdzIGdvb2QgdG8ga25vdywgYW5kIGV4cGVjdGVkLCByZWFsbHksIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIG1vZHVsZS4gTm93LCBsZXQncyB0cmFjZSB0aGlzLiBIYW5nIG9uLi4uIGB0Y19jbHNfYmluZF9jbGFzc2AgaXMgZ2V0dGluZyBjYWxsZWQgKmZyb20qIGB1MzJfYmluZF9jbGFzc2AuICBUaGF0J3MgYSBrZXkgaW50ZXJhY3Rpb24gdG8gcmVtZW1iZXIuIE5vdyB0aGUgY3J1Y2lhbCBxdWVzdGlvbiBpcywgd2hhdCB0aGUgaGVjayAqaXMqIGNhbGxpbmcgYC1cdTAwM2ViaW5kX2NsYXNzYD8gV2hlcmUncyB0aGUgZW50cnkgcG9pbnQ/IEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBjYWxsZXIgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgYmluZGluZyBvcGVyYXRpb24gYW5kIGhvdyB0aGUgY2xhc3NpZmllciBpcyBiZWluZyBpbnRlZ3JhdGVkIHdpdGhpbiB0aGUgbGFyZ2VyIHRyYWZmaWMgY29udHJvbCBmcmFtZXdvcmsuIFRoaXMgaXMgdGhlIHBpZWNlIEkgbmVlZCB0byBzb2xpZGlmeSwgSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4MTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMTo1Mi4yODk5MjY1NjRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDY5ODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJpbmRfY2xhc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvY2xzX2Jhc2ljLmM9MjQ5PXN0YXRpYyB2b2lkIGJhc2ljX3dhbGsoc3RydWN0IHRjZl9wcm90byAqdHAsIHN0cnVjdCB0Y2Zfd2Fsa2VyICphcmcsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMjYwLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoyNjE6c3RhdGljIHZvaWQgYmFzaWNfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTI2Mi1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0yNjUtXFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jOjI2NjpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jLTI2Ny19XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmM9MzE4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfYmFzaWNfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMzI3LVxcdC5kdW1wXFx0XFx0PVxcdGJhc2ljX2R1bXAsXFxubmV0L3NjaGVkL2Nsc19iYXNpYy5jOjMyODpcXHQuYmluZF9jbGFzc1xcdD1cXHRiYXNpY19iaW5kX2NsYXNzLFxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0zMjktXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19icGYuYz01Nzk9c3RhdGljIGludCBjbHNfYnBmX2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqZmgsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2JwZi5jLTYzMS1cXG5uZXQvc2NoZWQvY2xzX2JwZi5jOjYzMjpzdGF0aWMgdm9pZCBjbHNfYnBmX2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLFxcbm5ldC9zY2hlZC9jbHNfYnBmLmMtNjMzLVxcdFxcdFxcdCAgICAgICB2b2lkICpxLCB1bnNpZ25lZCBsb25nIGJhc2UpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2JwZi5jLTYzNi1cXG5uZXQvc2NoZWQvY2xzX2JwZi5jOjYzNzpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNnByb2ctXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19icGYuYy02MzgtfVxcbi0tXFxubmV0L3NjaGVkL2Nsc19icGYuYz02ODQ9c3RhdGljIHN0cnVjdCB0Y2ZfcHJvdG9fb3BzIGNsc19icGZfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2JwZi5jLTY5NS1cXHQuZHVtcFxcdFxcdD1cXHRjbHNfYnBmX2R1bXAsXFxubmV0L3NjaGVkL2Nsc19icGYuYzo2OTY6XFx0LmJpbmRfY2xhc3NcXHQ9XFx0Y2xzX2JwZl9iaW5kX2NsYXNzLFxcbm5ldC9zY2hlZC9jbHNfYnBmLmMtNjk3LX07XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTM3ODQ9c3RhdGljIGludCBmbF90bXBsdF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdm9pZCAqdG1wbHRfcHJpdilcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMzgwOC1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jOjM4MDk6c3RhdGljIHZvaWQgZmxfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODEwLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBiYXNlKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODEzLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MzgxNDpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODE1LX1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM9MzgyOD1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX2ZsX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0zODQzLVxcdC50ZXJzZV9kdW1wXFx0PSBmbF90ZXJzZV9kdW1wLFxcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6Mzg0NDpcXHQuYmluZF9jbGFzc1xcdD0gZmxfYmluZF9jbGFzcyxcXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jLTM4NDUtXFx0LnRtcGx0X2NyZWF0ZVxcdD0gZmxfdG1wbHRfY3JlYXRlLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mdy5jPTM4Mj1zdGF0aWMgaW50IGZ3X2R1bXAoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdm9pZCAqZmgsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmMtNDI4LVxcbm5ldC9zY2hlZC9jbHNfZncuYzo0Mjk6c3RhdGljIHZvaWQgZndfYmluZF9jbGFzcyh2b2lkICpmaCwgdTMyIGNsYXNzaWQsIHVuc2lnbmVkIGxvbmcgY2wsIHZvaWQgKnEsXFxubmV0L3NjaGVkL2Nsc19mdy5jLTQzMC1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgYmFzZSlcXG4tLVxcbm5ldC9zY2hlZC9jbHNfZncuYy00MzMtXFxubmV0L3NjaGVkL2Nsc19mdy5jOjQzNDpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19mdy5jLTQzNS19XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmM9NDM3PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfZndfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmMtNDQ2LVxcdC5kdW1wXFx0XFx0PVxcdGZ3X2R1bXAsXFxubmV0L3NjaGVkL2Nsc19mdy5jOjQ0NzpcXHQuYmluZF9jbGFzc1xcdD1cXHRmd19iaW5kX2NsYXNzLFxcbm5ldC9zY2hlZC9jbHNfZncuYy00NDgtXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jPTMyOD1zdGF0aWMgaW50IG1hbGxfZHVtcChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB2b2lkICpmaCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0zODAtXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjM4MTpzdGF0aWMgdm9pZCBtYWxsX2JpbmRfY2xhc3Modm9pZCAqZmgsIHUzMiBjbGFzc2lkLCB1bnNpZ25lZCBsb25nIGNsLCB2b2lkICpxLFxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0zODItXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcXG4tLVxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0zODUtXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jOjM4NjpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNmhlYWQtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTM4Ny19XFxuLS1cXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM9Mzg5PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfbWFsbF9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfbWF0Y2hhbGwuYy0zOTktXFx0LmR1bXBcXHRcXHQ9IG1hbGxfZHVtcCxcXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM6NDAwOlxcdC5iaW5kX2NsYXNzXFx0PSBtYWxsX2JpbmRfY2xhc3MsXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTQwMS1cXHQub3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jPTYyMT1zdGF0aWMgaW50IHJvdXRlNF9kdW1wKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKmZoLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY2OS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6NjcwOnN0YXRpYyB2b2lkIHJvdXRlNF9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNjcxLVxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgYmFzZSlcXG4tLVxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02NzQtXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jOjY3NTpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY3Ni19XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9Njc4PXN0YXRpYyBzdHJ1Y3QgdGNmX3Byb3RvX29wcyBjbHNfcm91dGU0X29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTY4Ny1cXHQuZHVtcFxcdFxcdD1cXHRyb3V0ZTRfZHVtcCxcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM6Njg4OlxcdC5iaW5kX2NsYXNzXFx0PVxcdHJvdXRlNF9iaW5kX2NsYXNzLFxcbm5ldC9zY2hlZC9jbHNfcm91dGUuYy02ODktXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYz0xMjk3PXN0YXRpYyBpbnQgdTMyX3Jlb2ZmbG9hZChzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgYm9vbCBhZGQsIGZsb3dfc2V0dXBfY2JfdCAqY2IsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDMtXFxubmV0L3NjaGVkL2Nsc191MzIuYzoxMzQ0OnN0YXRpYyB2b2lkIHUzMl9iaW5kX2NsYXNzKHZvaWQgKmZoLCB1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCwgdm9pZCAqcSxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTEzNDUtXFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBiYXNlKVxcbi0tXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzUxLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM6MTM1MjpcXHR0Y19jbHNfYmluZF9jbGFzcyhjbGFzc2lkLCBjbCwgcSwgXFx1MDAyNm4tXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy0xMzUzLX1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9MTQ2OD1zdGF0aWMgc3RydWN0IHRjZl9wcm90b19vcHMgY2xzX3UzMl9vcHMgX19yZWFkX21vc3RseSA9IHtcXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmMtMTQ3OC1cXHQuZHVtcFxcdFxcdD1cXHR1MzJfZHVtcCxcXG5uZXQvc2NoZWQvY2xzX3UzMi5jOjE0Nzk6XFx0LmJpbmRfY2xhc3NcXHQ9XFx0dTMyX2JpbmRfY2xhc3MsXFxubmV0L3NjaGVkL2Nsc191MzIuYy0xNDgwLVxcdC5vd25lclxcdFxcdD1cXHRUSElTX01PRFVMRSxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmM9MjEyMT1zdGF0aWMgaW50IHRjZl9ub2RlX2JpbmQoc3RydWN0IHRjZl9wcm90byAqdHAsIHZvaWQgKm4sIHN0cnVjdCB0Y2Zfd2Fsa2VyICphcmcpXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMjQtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMTI1OlxcdGlmIChuIFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VvcHMtXFx1MDAzZWJpbmRfY2xhc3MpIHtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMjYtXFx0XFx0c3RydWN0IFFkaXNjICpxID0gdGNmX2Jsb2NrX3EodHAtXFx1MDAzZWNoYWluLVxcdTAwM2VibG9jayk7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxMjgtXFx0XFx0c2NoX3RyZWVfbG9jayhxKTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxMjk6XFx0XFx0dHAtXFx1MDAzZW9wcy1cXHUwMDNlYmluZF9jbGFzcyhuLCBhLVxcdTAwM2VjbGFzc2lkLCBhLVxcdTAwM2VjbCwgcSwgYS1cXHUwMDNlYmFzZSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTMwLVxcdFxcdHNjaF90cmVlX3VubG9jayhxKTtcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjEzNC1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxMzU6c3RydWN0IHRjX2JpbmRfY2xhc3NfYXJncyB7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTM2LVxcdHN0cnVjdCBxZGlzY193YWxrZXIgdztcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE0MS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxNDI6c3RhdGljIGludCB0Y19iaW5kX2NsYXNzX3dhbGtlcihzdHJ1Y3QgUWRpc2MgKnEsIHVuc2lnbmVkIGxvbmcgY2wsXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTQzLVxcdFxcdFxcdFxcdHN0cnVjdCBxZGlzY193YWxrZXIgKncpXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMTQ0LXtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxNDU6XFx0c3RydWN0IHRjX2JpbmRfY2xhc3NfYXJncyAqYSA9IChzdHJ1Y3QgdGNfYmluZF9jbGFzc19hcmdzICopdztcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxNDYtXFx0Y29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyAqY29wcyA9IHEtXFx1MDAzZW9wcy1cXHUwMDNlY2xfb3BzO1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYz0yMTczPXN0YXRpYyB2b2lkIHRjX2JpbmRfdGNsYXNzKHN0cnVjdCBRZGlzYyAqcSwgdTMyIHBvcnRpZCwgdTMyIGNsaWQsXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxNzYtXFx0Y29uc3Qgc3RydWN0IFFkaXNjX2NsYXNzX29wcyAqY29wcyA9IHEtXFx1MDAzZW9wcy1cXHUwMDNlY2xfb3BzO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmM6MjE3NzpcXHRzdHJ1Y3QgdGNfYmluZF9jbGFzc19hcmdzIGFyZ3MgPSB7fTtcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxNzgtXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIxODMtXFx0YXJncy5uZXdfY2wgPSBuZXdfY2w7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMTg0OlxcdGFyZ3Mudy5mbiA9IHRjX2JpbmRfY2xhc3Nfd2Fsa2VyO1xcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE4NS1cXHRxLVxcdTAwM2VvcHMtXFx1MDAzZWNsX29wcy1cXHUwMDNld2FsayhxLCBcXHUwMDI2YXJncy53KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDE6NTIuMzQwNDAyMDNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQzNDEzNDE2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRyYWZmaWMgQ29udHJvbCBDbGFzcyBCaW5kaW5nIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aGUgZmxvdyBmcm9tIGNsYXNzIGNyZWF0aW9uL21vZGlmaWNhdGlvbiBpbiB0cmFmZmljIGNvbnRyb2wsIGFuZCBpdCdzIGxvb2tpbmcgbGlrZSBgdGNfYmluZF90Y2xhc3NgIGlzIHRoZSBrZXkgZnVuY3Rpb24uIEl0J3MgY2FsbGVkIGZyb20gYHRjX2N0bF90Y2xhc3NgLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQgSSdtIGFmdGVyLCBhcyBleHBlY3RlZC5cblxuYHRjX2JpbmRfdGNsYXNzYCB0aGVuIGRpZ3MgaW50byB0aGUgY2xhc3MgaGllcmFyY2h5LiBJdCBjYWxscyBgcS1cdTAwM2VvcHMtXHUwMDNlY2xfb3BzLVx1MDAzZXdhbGsocSwgXHUwMDI2YXJncy53KWAuIFRoYXQsIGluIHR1cm4sIHNlZW1zIHRvIGZ1bm5lbCB0aGUgd29yayB0byBgdGNfYmluZF9jbGFzc193YWxrZXJgLiBXaXRoaW4gdGhhdCB3YWxrZXIsIGl0IGNhbGxzIGB0Y2ZfYmxvY2tfZ2V0YCBhbmQgdGhlbiB3ZSBoYXZlIHRoZSBmaWx0ZXIgd2Fsa2luZyB3aXRoIGB0Y2Zfbm9kZV9iaW5kYC4gQW5kIHRoZW4sIHRoaXMgd2hvbGUgcHJvY2VzcyBjYWxscyBgdHAtXHUwMDNlb3BzLVx1MDAzZWJpbmRfY2xhc3NgLlxuXG5TbywgdGhlIGNyaXRpY2FsIHBhdGggaXMgcHJldHR5IGNsZWFyOiBgdGNfY3RsX3RjbGFzc2AgLVx1MDAzZSBgdGNfYmluZF90Y2xhc3NgIC1cdTAwM2Ugd2Fsa2VyL2ZpbHRlciBoYW5kbGluZyBkb3duIHRvIHRoZSBpbmRpdmlkdWFsIGNsYXNzIGJpbmRpbmcgdXNpbmcgYHRwLVx1MDAzZW9wcy1cdTAwM2ViaW5kX2NsYXNzYC4gVGhpcyBsb29rcyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGRlYnVnZ2luZyBvciBtb2RpZmljYXRpb24sIEknbGwgZGVmaW5pdGVseSBjaGVjayBgdGNfY3RsX3RjbGFzc2AgbW9yZSBjbG9zZWx5IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAxNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMTo1Ni43NzQ1MzgyMjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MTE3MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2N0bF90Y2xhc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jPTIxOTA9c3RhdGljIHZvaWQgdGNfYmluZF90Y2xhc3Moc3RydWN0IFFkaXNjICpxLCB1MzIgcG9ydGlkLCB1MzIgY2xpZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE5Ni1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxOTc6c3RhdGljIGludCBfX3RjX2N0bF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE5OC1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzMjYtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzI3OnN0YXRpYyBpbnQgdGNfY3RsX3RjbGFzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMzI4LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzNDUtXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzQ2OlxcdGVyciA9IF9fdGNfY3RsX3RjbGFzcyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMzQ3LVxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI1MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHBzY2hlZF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yNTI3LVxcdCAuZHVtcGl0ID0gdGNfZHVtcF9xZGlzY30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI4OlxcdHsubXNndHlwZSA9IFJUTV9ORVdUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI5OlxcdHsubXNndHlwZSA9IFJUTV9ERUxUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTMwOlxcdHsubXNndHlwZSA9IFJUTV9HRVRUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzcyxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzEtXFx0IC5kdW1waXQgPSB0Y19kdW1wX3RjbGFzc30sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAxOjU2LjgyMTY2NTA1OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjcyNTA4NDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgRmlsdGVyIEJpbmRpbmcgVHJpZ2dlciBQb2ludHMqKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBwaW4gZG93biB3aGVyZSB0aGUgc3lzdGVtIGJpbmRzIGZpbHRlcnMsIGFuZCBgdGNfY3RsX3RjbGFzc2AgZmVlbHMgbGlrZSBhIGdvb2QgaW5pdGlhbCBmb2N1cyDigJMgaXQncyBvZnRlbiB0aGUgY2VudHJhbCBwb2ludCBmb3IgdHJhZmZpYyBjbGFzcyBtYW5hZ2VtZW50LCBzbyBmaWx0ZXIgaW50ZXJhY3Rpb25zIGFyZSBsaWtlbHkgaGFuZGxlZCB0aGVyZS4gVGhlbiwgSSByZW1lbWJlciBgdGNfbmV3X3RmaWx0ZXJgIOKAkyB0aGF0J3MgdGhlIGVudHJ5IHBvaW50IGZvciBjcmVhdGluZyBuZXcgZmlsdGVycywgd2hpY2ggY2VydGFpbmx5ICpjb3VsZCogYmUgYSB0cmlnZ2VyIGZvciBiaW5kaW5nLiBJdCBtYWtlcyBsb2dpY2FsIHNlbnNlIHRvIG1hbmFnZSB0aGUgZmlsdGVycyB0aGVyZS4gV2FpdCwgdGhvdWdoLi4uIEkgbmVlZCB0byBjb25zaWRlciBgdTMyX2JpbmRfY2xhc3NgLiBUaGF0IGdldHMgY2FsbGVkIHdoZW4gYSBjbGFzcyBpcyBjcmVhdGVkLCB0byBsaW5rIGV4aXN0aW5nIGZpbHRlcnMgdG8gdGhlIG5ldyBjbGFzcyBzdHJ1Y3R1cmUuIFRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGF0IGZ1bmN0aW9uIGdldCBjYWxsZWQgd2hlbiBhIGZpbHRlciBpcyBjcmVhdGVkIGFzIHdlbGw/IFRoYXQncyB0aGUgcmVhbCB0ZXN0LiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGB0Y2ZfYmluZF9maWx0ZXJgIG5vdy4gVGhhdCBmZWVscyBsaWtlIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVzIHRoZSBiaW5kaW5nIG9mIGEgY3JlYXRlZCBmaWx0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMjowMi4wOTQxNzU5ODlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTk1Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9iaW5kX2ZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfYmFzaWMuYz0xNDc9c3RhdGljIGludCBiYXNpY19zZXRfcGFybXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCxcXG4tLVxcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYy0xNjQtXFx0XFx0Zi1cXHUwMDNlcmVzLmNsYXNzaWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfQkFTSUNfQ0xBU1NJRF0pO1xcbm5ldC9zY2hlZC9jbHNfYmFzaWMuYzoxNjU6XFx0XFx0dGNmX2JpbmRfZmlsdGVyKHRwLCBcXHUwMDI2Zi1cXHUwMDNlcmVzLCBiYXNlKTtcXG5uZXQvc2NoZWQvY2xzX2Jhc2ljLmMtMTY2LVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfYnBmLmM9NDA5PXN0YXRpYyBpbnQgY2xzX2JwZl9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19icGYuYy01MDAtXFx0XFx0cHJvZy1cXHUwMDNlcmVzLmNsYXNzaWQgPSBubGFfZ2V0X3UzMih0YltUQ0FfQlBGX0NMQVNTSURdKTtcXG5uZXQvc2NoZWQvY2xzX2JwZi5jOjUwMTpcXHRcXHR0Y2ZfYmluZF9maWx0ZXIodHAsIFxcdTAwMjZwcm9nLVxcdTAwM2VyZXMsIGJhc2UpO1xcbm5ldC9zY2hlZC9jbHNfYnBmLmMtNTAyLVxcdFxcdGJvdW5kX3RvX2ZpbHRlciA9IHRydWU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Zsb3dlci5jPTIzNTM9c3RhdGljIGludCBmbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19mbG93ZXIuYy0yNDU3LVxcdFxcdFxcdHJ0bmxfbG9jaygpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmM6MjQ1ODpcXHRcXHR0Y2ZfYmluZF9maWx0ZXIodHAsIFxcdTAwMjZmbmV3LVxcdTAwM2VyZXMsIGJhc2UpO1xcbm5ldC9zY2hlZC9jbHNfZmxvd2VyLmMtMjQ1OS1cXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX05PX1JUTkwpXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmM9MjA1PXN0YXRpYyBpbnQgZndfc2V0X3Bhcm1zKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHRjZl9wcm90byAqdHAsXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2Z3LmMtMjM2LVxcdFxcdGYtXFx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX0ZXX0NMQVNTSURdKTtcXG5uZXQvc2NoZWQvY2xzX2Z3LmM6MjM3OlxcdFxcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXFx1MDAyNmYtXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc19mdy5jLTIzOC1cXHR9XFxuLS1cXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM9MTYyPXN0YXRpYyBpbnQgbWFsbF9jaGFuZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqaW5fc2tiLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19tYXRjaGFsbC5jLTIxNi1cXHRcXHRuZXctXFx1MDAzZXJlcy5jbGFzc2lkID0gbmxhX2dldF91MzIodGJbVENBX01BVENIQUxMX0NMQVNTSURdKTtcXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmM6MjE3OlxcdFxcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXFx1MDAyNm5ldy1cXHUwMDNlcmVzLCBiYXNlKTtcXG5uZXQvc2NoZWQvY2xzX21hdGNoYWxsLmMtMjE4LVxcdFxcdGJvdW5kX3RvX2ZpbHRlciA9IHRydWU7XFxuLS1cXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmM9NDAwPXN0YXRpYyBpbnQgcm91dGU0X3NldF9wYXJtcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLFxcbi0tXFxubmV0L3NjaGVkL2Nsc19yb3V0ZS5jLTQ4Ni1cXHRcXHRmLVxcdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9ST1VURTRfQ0xBU1NJRF0pO1xcbm5ldC9zY2hlZC9jbHNfcm91dGUuYzo0ODc6XFx0XFx0dGNmX2JpbmRfZmlsdGVyKHRwLCBcXHUwMDI2Zi1cXHUwMDNlcmVzLCBiYXNlKTtcXG5uZXQvc2NoZWQvY2xzX3JvdXRlLmMtNDg4LVxcdH1cXG4tLVxcbm5ldC9zY2hlZC9jbHNfdTMyLmM9NzMxPXN0YXRpYyB2b2lkIHUzMl9iaW5kX2ZpbHRlcihzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgc3RydWN0IHRjX3Vfa25vZGUgKm4sXFxuLS1cXG5uZXQvc2NoZWQvY2xzX3UzMi5jLTczNS1cXHRcXHRuLVxcdTAwM2VyZXMuY2xhc3NpZCA9IG5sYV9nZXRfdTMyKHRiW1RDQV9VMzJfQ0xBU1NJRF0pO1xcbm5ldC9zY2hlZC9jbHNfdTMyLmM6NzM2OlxcdFxcdHRjZl9iaW5kX2ZpbHRlcih0cCwgXFx1MDAyNm4tXFx1MDAzZXJlcywgYmFzZSk7XFxubmV0L3NjaGVkL2Nsc191MzIuYy03MzctXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMjowMi4xMzcxNzU1MjZaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5OTA2NzY0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpbHRlciBCaW5kaW5nIFByb2Nlc3MqKlxuXG5SaWdodCwgYHRjZl9iaW5kX2ZpbHRlcmAuLi4gdGhhdCByaW5ncyBhIGJlbGwuIEl0J3MgY2FsbGVkIHdoZW4gYSB0cmFmZmljIGNvbnRyb2wgKFRDKSBmaWx0ZXIgaXMgY3JlYXRlZCwgYW5kIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhhdCBjcnVjaWFsIHBvaW50LiBUbyBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIGZpbHRlciBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIFRDIHN5c3RlbSwgSSdtIGdvaW5nIHRvIGNvbnN1bHQgdGhlIGtlcm5lbCBzb3VyY2UgY29kZS4gSSdtIHByZXR0eSBzdXJlIGB0Y2ZfYmluZF9maWx0ZXJgIGlzIGRlZmluZWQgaW4gZWl0aGVyIGBpbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oYCBvciB3aXRoaW4gYG5ldC9zY2hlZC9zY2hfYXBpLmNgLiBUaW1lIHRvIGRpZyBpbiBhbmQgcGlucG9pbnQgd2hlcmUgdGhlIGZpbHRlcidzIGJpbmRpbmcgbG9naWMgaXMuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZmlsdGVyIGdldHMgYXNzb2NpYXRlZCB3aXRoIGl0cyBjbGFzc2lmaWVyLCBxZGlzYywgYW5kIG90aGVyIFRDIGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MDYuMTM2MjQ1ODQ5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAwMjIzNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2JpbmRfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjA2LjE4MTI1NDk5NloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTA4MzU5MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgVHJhZmZpYyBDb250cm9sIExhbmRzY2FwZSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIHRyYWZmaWMgY29udHJvbCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBjb3JlIHNjaGVkdWxpbmcgQVBJcyBhbmQgaG93IHRoZXkgaW50ZXJhY3QuIFRoZSBmaXJzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBgbmV0L3NjaGVkL3NjaF9hcGkuY2AuIFRoaXMgZmlsZSBpcyB0aGUgYmVkcm9jaywgdGhlIGNlbnRyYWwgcG9pbnQgd2hlcmUgdGhlIHNjaGVkdWxpbmcgZGlzY2lwbGluZXMgYXJlIGRlZmluZWQgYW5kIGhvdyB0aGV5IGludGVyZmFjZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJIGFudGljaXBhdGUgZmluZGluZyB0aGUgY29yZSBzdHJ1Y3R1cmVzLCBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBlbnF1ZXVpbmcgYW5kIGRlcXVldWluZyBwYWNrZXRzLCBhbmQgdGhlIHJlZ2lzdHJhdGlvbiBtZWNoYW5pc21zIGZvciBuZXcgcXVldWVpbmcgZGlzY2lwbGluZXMgKHFkaXNjcykgYW5kIGNsYXNzaWZpZXJzLiBJIGhvcGUgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBsaWtlIGBRZGlzY2AsIGB0Y19jbGFzc19kZWZgLCBhbmQgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb24gcG9pbnRlcnMsIHRvIGdldCBteSBiZWFyaW5ncy4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBoaWdoZXIgbGF5ZXJzLCBsaWtlIGhvdyB0cmFmZmljIHNoYXBpbmcgYW5kIHBvbGljaW5nIGFyZSBpbXBsZW1lbnRlZCB2aWEgdGhlc2UgQVBJcy4gSXTigJlzIGFsbCBhYm91dCB0cmFjaW5nIHRoZSBwYWNrZXQgZmxvdywgZnJvbSBpdHMgYXJyaXZhbCB0byBpdHMgdWx0aW1hdGUgdHJhbnNtaXNzaW9uLCBzbyBJIGV4cGVjdCB0byBzZWUgdGhlIGtleSBjYWxscyBpbiBhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MTMuMDg5NjE2MDU5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzE0MTgxNywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNmX2JpbmRfZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjEzLjEzNjc2NTAwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI0NTQ0MjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBjb2RlLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlZmluaXRpb24gb2YgYHRjZl9iaW5kX2ZpbHRlcmAqKlxuXG5BbHJpZ2h0LCBteSBmaXJzdCBpbnN0aW5jdCBoZXJlIGlzIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSBgdGNmX2JpbmRfZmlsdGVyYCBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIHRoZSBjb250ZXh0IGl0J3Mgb3BlcmF0aW5nIHdpdGhpbi4gVGhpcyBpcyBmdW5kYW1lbnRhbDsgd2l0aG91dCBrbm93aW5nIHdoZXJlIGl0IGNvbWVzIGZyb20sIEknbSBlc3NlbnRpYWxseSBmbHlpbmcgYmxpbmQuIEtub3dpbmcgdGhlIGRlZmluaXRpb24gd2lsbCB1bmxvY2sgc28gbXVjaCDigJMgaXRzIGRhdGEgdHlwZSwgYW55IGFzc29jaWF0ZWQgc3RydWN0dXJlcywgYW5kIGhvcGVmdWxseSBzaGVkIGxpZ2h0IG9uIGl0cyBwdXJwb3NlIHdpdGhpbiB0aGlzIHN5c3RlbS4gTGV0J3MgdHJhY2UgYmFjayBhbmQgZmluZCB0aGUgc291cmNlLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgYW55IGluLWRlcHRoIGRlYnVnZ2luZyBvciBleHBsb3JhdGlvbiBvZiB1bmZhbWlsaWFyIGNvZGUuIExvY2F0aW5nIHRoZSBkZWZpbml0aW9uIGlzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODYxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MTYuOTYxMzEyMDYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzEzMTQ3NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfYmluZF9maWx0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9uZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3BrdF9jbHMuaD0xODA9c3RhdGljIGlubGluZSB2b2lkXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oOjE4MTpfX3RjZl9iaW5kX2ZpbHRlcihzdHJ1Y3QgUWRpc2MgKnEsIHN0cnVjdCB0Y2ZfcmVzdWx0ICpyLCB1bnNpZ25lZCBsb25nIGJhc2UpXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTE4Mi17XFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9MTkxPXN0YXRpYyBpbmxpbmUgdm9pZFxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoxOTI6dGNmX2JpbmRfZmlsdGVyKHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCBzdHJ1Y3QgdGNmX3Jlc3VsdCAqciwgdW5zaWduZWQgbG9uZyBiYXNlKVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0xOTMte1xcbi0tXFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTIwMS1cXHRzY2hfdHJlZV9sb2NrKHEpO1xcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoyMDI6XFx0X190Y2ZfYmluZF9maWx0ZXIocSwgciwgYmFzZSk7XFxuaW5jbHVkZS9uZXQvcGt0X2Nscy5oLTIwMy1cXHRzY2hfdHJlZV91bmxvY2socSk7XFxuLS1cXG5pbmNsdWRlL25ldC9wa3RfY2xzLmg9MjI1PXN0YXRpYyBpbmxpbmUgdm9pZCB0Y19jbHNfYmluZF9jbGFzcyh1MzIgY2xhc3NpZCwgdW5zaWduZWQgbG9uZyBjbCxcXG4tLVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaC0yMzAtXFx0XFx0aWYgKGNsKVxcbmluY2x1ZGUvbmV0L3BrdF9jbHMuaDoyMzE6XFx0XFx0XFx0X190Y2ZfYmluZF9maWx0ZXIocSwgcmVzLCBiYXNlKTtcXG5pbmNsdWRlL25ldC9wa3RfY2xzLmgtMjMyLVxcdFxcdGVsc2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MTcuMDA4NDQ2MTI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0MzUzNTEyMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBVMzIgQ2xhc3NpZmllciBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSBgdGNfY2xzX2JpbmRfY2xhc3NgIGdldHMgaW52b2tlZCBpbmRpcmVjdGx5IHRocm91Z2ggYHUzMl9iaW5kX2NsYXNzYC4gIEFuZCB0aGF0IGB1MzJfYmluZF9jbGFzc2AgZnVuY3Rpb24gaXMgdHJpZ2dlcmVkIHdoZW4gd2UgY3JlYXRlIG9yIG1vZGlmeSBhIGNsYXNzIHVzaW5nIHRoZSBgdGNfYmluZF90Y2xhc3NgIGZ1bmN0aW9uLiBUaGF0IHN0cm9uZ2x5IHN1Z2dlc3RzIHRoYXQgYHRjX2N0bF90Y2xhc3NgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBtYW5hZ2luZyB0aGVzZSBjbGFzc2VzLiBBbmQsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGhvdyBmaWx0ZXJzIGFyZSBjcmVhdGVkLCBgdGNfbmV3X3RmaWx0ZXJgIGlzIGFsc28gYW4gaW1wb3J0YW50IGVudHJ5IHBvaW50LCBiZWNhdXNlIGl0IGNhbGxzIGB1MzJfY2hhbmdlYCwgd2hpY2ggZXZlbnR1YWxseSBsYW5kcyBvbiBgdTMyX2JpbmRfZmlsdGVyYCwgdGhlbiBgdGNmX2JpbmRfZmlsdGVyYC4gQWx0aG91Z2ggdGhpcyBwYXRjaCBtb2RpZmllcyBgdTMyX2JpbmRfY2xhc3NgLCB0aGF0IGZ1bmN0aW9uIGlzIGNhbGxlZCBzcGVjaWZpY2FsbHkgd2hlbiBhIGNsYXNzIGlzIGJvdW5kLCBzbyBgdGNfY3RsX3RjbGFzc2AgaXMgdGhlIG1vcmUgcmVsZXZhbnQgc3RhcnRpbmcgcG9pbnQuXG5cbk5vdywgYmVmb3JlIEkgcHJvY2VlZCBmdXJ0aGVyLCBJIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBuZWVkIHRvIGlkZW50aWZ5IGFueSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyByZWxhdGVkIHRvIHRoaXMuIEknbSBhc3N1bWluZyBgTkVUX0NMU19VMzJgIGlzIHRoZSBtYWluIG9wdGlvbiwgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXJzPyBJJ2xsIHByb2JhYmx5IG5lZWQgYE5FVF9TQ0hFRGAgYXQgdGhlIHZlcnkgbGVhc3QuIEknbGwgZG91YmxlLWNoZWNrIGBORVRfQ0xTX1UzMmAgaW4gdGhlIGBuZXQvc2NoZWQvS2NvbmZpZ2AgZmlsZSB0byBjb25maXJtIHRoYXQgSSdtIG5vdCBtaXNzaW5nIGFueSBjcml0aWNhbCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDA2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjI0LjQ0Mzc5OTE0NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM5NDAwMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9DTFNfVTMyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTUwNj1jb25maWcgTkVUX0NMU19GV1xcbi0tXFxubmV0L3NjaGVkL0tjb25maWctNTE1LVxcbm5ldC9zY2hlZC9LY29uZmlnOjUxNjpjb25maWcgTkVUX0NMU19VMzJcXG5uZXQvc2NoZWQvS2NvbmZpZy01MTctXFx0dHJpc3RhdGUgXFxcIlVuaXZlcnNhbCAzMmJpdCBjb21wYXJpc29ucyB3LyBoYXNoaW5nIChVMzIpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMjoyNC40ODc3NDEzODFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5NDAxNzA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IFN0cnVjdHVyZSBvZiBORVRfU0NIRUQqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYE5FVF9TQ0hFRGAgaGVyZS4gV2UgYWxyZWFkeSBlc3RhYmxpc2hlZCB0aGF0IHdoYXRldmVyIHRoZSBpc3N1ZSBpcywgaXQgaGluZ2VzIG9uIHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCB0aGUgbG9naWNhbCBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93bjogd2hhdCAqZG9lcyogYE5FVF9TQ0hFRGAgZGVwZW5kIG9uPyBJcyBpdCBhIHN0YW5kYWxvbmUgZmVhdHVyZSwgb3IgaXMgaXQgY29udGluZ2VudCBvbiBvdGhlciwgbG93ZXItbGV2ZWwsIG1vcmUgZnVuZGFtZW50YWwgY29uZmlndXJhdGlvbnM/IFVuZGVyc3RhbmRpbmcgaXRzIGRlcGVuZGVuY2llcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBiZWhhdmlvciBhbmQgcmVzb2x2aW5nIGFueSBjb25mbGljdHMuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGNvbnN1bHQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24sIGludmVzdGlnYXRlIHRoZSBzb3VyY2UgY29kZSwgb3IgcnVuIGEgY29uZmlndXJhdGlvbiBhbmFseXNpcyB0byBtYXAgb3V0IGBORVRfU0NIRURgJ3MgZGVwZW5kZW5jeSB0cmVlIGFuZCBkZXRlcm1pbmUgaXRzIGltcGxpY2F0aW9ucy4gVGhpcyB3aWxsIGNsYXJpZnkgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgb3RoZXIgc3lzdGVtcyBhbmQgY2xhcmlmeSBpZiB0aGVyZSBpcyBhIGNvbmZsaWN0IGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDY1LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MjguODgxNzYwNTg1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY3NjQ1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6MjguOTI2NDQwNjYyWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjMyMzY1NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpcmVjdCBMaW5lIG9mIElucXVpcnkqKlxuXG5IbW0sIHRoaXMgZmVlbHMgc2VsZi1jb250YWluZWQsIGluZGVwZW5kZW50LiBJdCdzIG5vdCBjb250aW5nZW50IG9uIHNvbWUgZXh0ZXJuYWwgZmFjdG9yIG9yIHByaW9yIHN0ZXAuIFRoYXQgc3VnZ2VzdHMgYSBjb3JlIHByb2Nlc3MsIHNvbWV0aGluZyBmb3VuZGF0aW9uYWwuIEFscmlnaHQsIGxldCdzIGN1dCBzdHJhaWdodCB0byB0aGUgY2hhc2UgYW5kIGV4YW1pbmUgdGhlIGB0Y19jdGxfdGNsYXNzYCBmdW5jdGlvbi4gTXkgZ3Vlc3MgaXMgaXQncyB0aGUgcmlnaHQgcGxhY2UgdG8gc3RhcnQgbG9va2luZy4gSSdsbCBuZWVkIHRvIGdvIHRvIGBuZXQvc2NoZWQvc2NoX2FwaS5jYCBpbiB0aGUga2VybmVsIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QwODowMjozMy4zNDk2ODAwMDRaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTI1NDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX2N0bF90Y2xhc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL3NjaF9hcGkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvc2NoX2FwaS5jPTIxOTA9c3RhdGljIHZvaWQgdGNfYmluZF90Y2xhc3Moc3RydWN0IFFkaXNjICpxLCB1MzIgcG9ydGlkLCB1MzIgY2xpZCxcXG4tLVxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE5Ni1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jOjIxOTc6c3RhdGljIGludCBfX3RjX2N0bF90Y2xhc3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpuLFxcbm5ldC9zY2hlZC9zY2hfYXBpLmMtMjE5OC1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2ssXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzMjYtXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzI3OnN0YXRpYyBpbnQgdGNfY3RsX3RjbGFzcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMzI4LVxcdFxcdFxcdCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTIzNDUtXFx0bmV0ZGV2X2xvY2tfb3BzKGRldik7XFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyMzQ2OlxcdGVyciA9IF9fdGNfY3RsX3RjbGFzcyhza2IsIG4sIGV4dGFjaywgZGV2LCB0Y2EsIHRjbSk7XFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yMzQ3LVxcdG5ldGRldl91bmxvY2tfb3BzKGRldik7XFxuLS1cXG5uZXQvc2NoZWQvc2NoX2FwaS5jPTI1MjM9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHBzY2hlZF9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbi0tXFxubmV0L3NjaGVkL3NjaF9hcGkuYy0yNTI3LVxcdCAuZHVtcGl0ID0gdGNfZHVtcF9xZGlzY30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI4OlxcdHsubXNndHlwZSA9IFJUTV9ORVdUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTI5OlxcdHsubXNndHlwZSA9IFJUTV9ERUxUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzc30sXFxubmV0L3NjaGVkL3NjaF9hcGkuYzoyNTMwOlxcdHsubXNndHlwZSA9IFJUTV9HRVRUQ0xBU1MsIC5kb2l0ID0gdGNfY3RsX3RjbGFzcyxcXG5uZXQvc2NoZWQvc2NoX2FwaS5jLTI1MzEtXFx0IC5kdW1waXQgPSB0Y19kdW1wX3RjbGFzc30sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjMzLjM5MjgwNzYyMVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAxODMxNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBUYXJnZXRlZCBJbnZlc3RpZ2F0aW9uKipcblxuTXkgaW5pdGlhbCBpbnN0aW5jdCwgZ2l2ZW4gdGhpcyBjb250ZXh0LCBpcyB0aGF0IGB0Y19jdGxfdGNsYXNzYCBpcyB0aGUga2V5IHBvaW50IG9mIGZvY3VzIGhlcmUuIEl0IHNlZW1zIHRvIGJlIHRoZSBkaXJlY3QgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHRyaWdnZXJpbmcgYGJpbmRfY2xhc3NgLCBzbyB0aGF0J3Mgd2hlcmUgSSdkIHN0YXJ0IG15IGludmVzdGlnYXRpb24uIE9mIGNvdXJzZSwgSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgdGNfbmV3X3RmaWx0ZXJgLCBhcyBpdCdzIHBvc3NpYmxlIGl0IHNoYXJlcyBhIGNvZGUgcGF0aCB0aGF0ICphbHNvKiBsZWFkcyB0byBgYmluZF9jbGFzc2AuIEl0J3MgYWx3YXlzIHNtYXJ0IHRvIGNvbnNpZGVyIHJlbGF0ZWQgZW50cnkgcG9pbnRzLCBlc3BlY2lhbGx5IGlmIHRoZXkgYXJlIGRlc2lnbmVkIHRvIHBlcmZvcm0gc2ltaWxhciB0YXNrcy4gQnV0LCB0byBiZSBlZmZpY2llbnQsIEknbGwgcHJpb3JpdGl6ZSBgdGNfY3RsX3RjbGFzc2AgZmlyc3QuIFRoZW4gSSB3aWxsIGludmVzdGlnYXRlIGB0Y19uZXdfdGZpbHRlcmAgbmV4dCwgaWYgSSBuZWVkIHRvLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDA4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjM3LjU5NDY0MTUzOVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI0NDgzMDcsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjX25ld190ZmlsdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9zY2hfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjM3LjYzNzEwMTg4NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODg5MjMxMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBUcmFmZmljIENvbnRyb2wgTGFuZHNjYXBlKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgdHJhZmZpYyBjb250cm9sICh0YykgaW50ZXJuYWxzIGFnYWluLiBUaGUga2VybmVsJ3MgdGMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGEgYml0IG9mIGEgbGFieXJpbnRoLCBidXQgSSdtIGdldHRpbmcgYmFjayBpbnRvIGl0LiBBaCwgcmlnaHQsIHRoYXQgc3BlY2lmaWMgZmlsdGVyIGNyZWF0aW9uIGZ1bmN0aW9uLCBgdGNfbmV3X3RmaWx0ZXJgLi4uIEkgc2VlbSB0byByZWNhbGwgaXQncyB0dWNrZWQgYXdheSBpbiBgbmV0L3NjaGVkL2Nsc19hcGkuY2AuIE5vdyBJIHJlbWVtYmVyLCB0aGF0J3Mgd2hlcmUgdGhlIGNvcmUgY2xhc3MgQVBJIGFuZCBmaWx0ZXIgaGFuZGxpbmcgbG9naWMgcmVzaWRlcy4gR29vZCwgdGhhdCBuYXJyb3dzIG15IGZvY3VzLiBJIGtub3cgSSdsbCBiZSBqdW1waW5nIGJldHdlZW4gYSBmZXcgZmlsZXMgYXMgSSB3b3JrIHRocm91Z2ggdGhpcywgYnV0IHJlbWVtYmVyaW5nIHRoYXQgZmlsZSBsb2NhdGlvbiBnaXZlcyBtZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGhlbHBzIHRvIG9yaWVudCBteSB0aG91Z2h0cyBhYm91dCB0aGUgb3ZlcmFsbCBkZXNpZ24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MzcwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6NDcuNTI2MzM1NzI1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzI4MjgwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y19uZXdfdGZpbHRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvY2xzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9jbHNfYXBpLmM9MjI0Nj1zdGF0aWMgYm9vbCBpc19pbmdyZXNzX29yX2Nsc2FjdChzdHJ1Y3QgdGNmX2Jsb2NrICpibG9jaywgc3RydWN0IFFkaXNjICpxKVxcbi0tXFxubmV0L3NjaGVkL2Nsc19hcGkuYy0yMjUwLVxcbm5ldC9zY2hlZC9jbHNfYXBpLmM6MjI1MTpzdGF0aWMgaW50IHRjX25ld190ZmlsdGVyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciAqbixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTIyNTItXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvY2xzX2FwaS5jPTQxMTY9c3RhdGljIGNvbnN0IHN0cnVjdCBydG5sX21zZ19oYW5kbGVyIHRjX2ZpbHRlcl9ydG5sX21zZ19oYW5kbGVyc1tdIF9faW5pdGNvbnN0ID0ge1xcbm5ldC9zY2hlZC9jbHNfYXBpLmM6NDExNzpcXHR7Lm1zZ3R5cGUgPSBSVE1fTkVXVEZJTFRFUiwgLmRvaXQgPSB0Y19uZXdfdGZpbHRlcixcXG5uZXQvc2NoZWQvY2xzX2FwaS5jLTQxMTgtXFx0IC5mbGFncyA9IFJUTkxfRkxBR19ET0lUX1VOTE9DS0VEfSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDdUMDg6MDI6NDcuNTY5NjI0NTczWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMzI2NjU4ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoaXMgVHJhZmZpYyBDb250cm9sIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgdGNfbmV3X3RmaWx0ZXJgIGlzIGluZGVlZCBsb2NhdGVkIHdpdGhpbiBgY2xzX2FwaS5jYCwgZ29vZC4gQmFzZWQgb24gdGhlIGZpbGUgY29udGV4dCBJJ2xsIGFkZCBgdGNfY3RsX3RjbGFzc2AgYW5kIGB0Y19uZXdfdGZpbHRlcmAgdG8gbXkgbGlzdCBvZiBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLlxuXG5Ob3csIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmOlxuXG5gYGBjXG4gXHRzdHJ1Y3QgdGNfdV9rbm9kZSAqbiA9IGZoO1xuIFxuK1x0aWYgKFRDX1UzMl9LRVkobi1cdTAwM2VoYW5kbGUpID09IDApXG4rXHRcdHJldHVybjtcbitcbiBcdHRjX2Nsc19iaW5kX2NsYXNzKGNsYXNzaWQsIGNsLCBxLCBcdTAwMjZuLVx1MDAzZXJlcywgYmFzZSk7XG5gYGBcblxuQWgsIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0J3MgYSBidWcgZml4IGluIHRoZSBgdTMyX2JpbmRfY2xhc3NgIGZ1bmN0aW9uLiBCYXNpY2FsbHksIHRoaXMgcHJldmVudHMgYHRjX2Nsc19iaW5kX2NsYXNzYCBmcm9tIGJlaW5nIGNhbGxlZCB3aGVuIGBUQ19VMzJfS0VZKG4tXHUwMDNlaGFuZGxlKWAgZXZhbHVhdGVzIHRvIHplcm8uIFRoaXMgc2hvdWxkIGRlZmluaXRlbHkgYmUgZnV6eiB0ZXN0ZWQuIEl0J3MgbGlrZWx5IGEgbWlzc2luZyBudWxsIGNoZWNrIHNvbWV3aGVyZSBhbG9uZyB0aGUgY29udHJvbCBwYXRoIHRoYXQgY291bGQgbGVhZCB0byBhbiBpc3N1ZS5cblxuVGhlIGNvbmZpZyBvcHRpb25zIGludm9sdmVkIGhlcmUgYXJlIHN0cmFpZ2h0Zm9yd2FyZDogYE5FVF9TQ0hFRGAgYW5kIGBORVRfQ0xTX1UzMmAuXG5cblNvIHRvIHJlaXRlcmF0ZSwgdGhpcyBwYXRjaCBpbXBhY3RzIHRoZSB0cmFmZmljIGNvbnRyb2wgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIFUzMiBjbGFzc2lmaWVyLiBJdCBhZGRyZXNzZXMgYSBzY2VuYXJpbyB3aGVyZSBhbiBpbnZhbGlkIGhhbmRsZSAoemVybyB2YWx1ZSkgd2FzIHBvdGVudGlhbGx5IGJlaW5nIHBhc3NlZCB0byBgdGNfY2xzX2JpbmRfY2xhc3NgLiBUaGlzIGlzIHRyaWdnZXJlZCB0aHJvdWdoIG5ldGxpbmsgY29tbWFuZHMgdXRpbGl6ZWQgdG8gY3JlYXRlIG9yIG1vZGlmeSB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMuIFRoZSBmb2N1cyBzeW1ib2xzIGFyZSBgdGNfY3RsX3RjbGFzc2AgYW5kIGB0Y19uZXdfdGZpbHRlcmAuIEFuZCBpdCB3aWxsIG9ubHkgaGF2ZSBhbiBlZmZlY3QgaWYgYENPTkZJR19ORVRfQ0xTX1UzMmAgaXMgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ4NTEsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDA4OjAyOjU5Ljg5NjI4NTQxN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MTAyNjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfU0NIRURcIixcbiAgICBcIk5FVF9DTFNfVTMyXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNfY3RsX3RjbGFzc1wiLFxuICAgIFwidGNfbmV3X3RmaWx0ZXJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCBjaGVjayBpbiBgdTMyX2JpbmRfY2xhc3NgIHRvIHByZXZlbnQgYmluZGluZyBhIGNsYXNzIHdoZW4gYFRDX1UzMl9LRVkobi1cXHUwMDNlaGFuZGxlKSA9PSAwYC4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29tbWFuZHMgZm9yIGNyZWF0aW5nL21vZGlmeWluZyB0cmFmZmljIGNsYXNzZXMgYW5kIGZpbHRlcnMgKGB0Y19jdGxfdGNsYXNzYCwgYHRjX25ld190ZmlsdGVyYCkuIEl0IHJlcXVpcmVzIGBDT05GSUdfTkVUX0NMU19VMzJgIHRvIGJlIGVuYWJsZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX1UzMlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjX2N0bF90Y2xhc3NcIixcbiAgICBcInRjX25ld190ZmlsdGVyXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgY2hlY2sgaW4gYHUzMl9iaW5kX2NsYXNzYCB0byBwcmV2ZW50IGJpbmRpbmcgYSBjbGFzcyB3aGVuIGBUQ19VMzJfS0VZKG4tXFx1MDAzZWhhbmRsZSkgPT0gMGAuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbW1hbmRzIGZvciBjcmVhdGluZy9tb2RpZnlpbmcgdHJhZmZpYyBjbGFzc2VzIGFuZCBmaWx0ZXJzIChgdGNfY3RsX3RjbGFzc2AsIGB0Y19uZXdfdGZpbHRlcmApLiBJdCByZXF1aXJlcyBgQ09ORklHX05FVF9DTFNfVTMyYCB0byBiZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow8bk56[1] Phase: Succeeded StartedAt: 2026-08-07 08:03:10 +0000 UTC FinishedAt: 2026-08-07 08:03:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-07 08:03:10 +0000 UTC FinishedAt: 2026-08-07 08:03:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2] Phase: Succeeded StartedAt: 2026-08-07 08:03:10 +0000 UTC FinishedAt: 2026-08-07 11:45:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-07 08:03:10 +0000 UTC FinishedAt: 2026-08-07 11:45:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","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-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-07 08:03:10 +0000 UTC FinishedAt: 2026-08-07 08:03:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-07 08:03:10 +0000 UTC FinishedAt: 2026-08-07 08:03:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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-workflow8bk56/series-workflow8bk56-convert-artifact-740252967/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-07 08:03:20 +0000 UTC FinishedAt: 2026-08-07 08:19:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-07 08:03:20 +0000 UTC FinishedAt: 2026-08-07 08:19:20 +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:*ec26af41-c639-4c8e-a4e6-d836c7716fff,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-workflow8bk56/series-workflow8bk56-convert-artifact-740252967/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": "f2fe92f2-15d4-48e7-ad4d-0b02c57a6d58", "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-workflow8bk56/series-workflow8bk56-build-action-4212632765/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-07 08:03:20 +0000 UTC FinishedAt: 2026-08-07 08:19:10 +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:*ec26af41-c639-4c8e-a4e6-d836c7716fff,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-workflow8bk56/series-workflow8bk56-convert-artifact-740252967/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": "f2fe92f2-15d4-48e7-ad4d-0b02c57a6d58", "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-workflow8bk56/series-workflow8bk56-build-action-4212632765/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-07 08:19:20 +0000 UTC FinishedAt: 2026-08-07 08:19:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-07 08:19:20 +0000 UTC FinishedAt: 2026-08-07 08:19:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-07 08:19:20 +0000 UTC FinishedAt: 2026-08-07 08:19:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-07 08:19:20 +0000 UTC FinishedAt: 2026-08-07 08:19:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","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-workflow8bk56/series-workflow8bk56-convert-artifact-2237091030/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-07 08:19:30 +0000 UTC FinishedAt: 2026-08-07 08:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-07 08:19:30 +0000 UTC FinishedAt: 2026-08-07 08:21:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f2fe92f2-15d4-48e7-ad4d-0b02c57a6d58,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-workflow8bk56/series-workflow8bk56-build-action-4212632765/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-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-07 08:21:25 +0000 UTC FinishedAt: 2026-08-07 08:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-07 08:21:25 +0000 UTC FinishedAt: 2026-08-07 08:21:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-07 08:21:25 +0000 UTC FinishedAt: 2026-08-07 08:41:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-07 08:21:25 +0000 UTC FinishedAt: 2026-08-07 08:41:51 +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:*ec26af41-c639-4c8e-a4e6-d836c7716fff,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-workflow8bk56/series-workflow8bk56-convert-artifact-2237091030/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": "a22eacee-9cba-4387-8dbf-072f9fdd8791", "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-workflow8bk56/series-workflow8bk56-build-action-3054236378/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-07 08:21:25 +0000 UTC FinishedAt: 2026-08-07 08:41:28 +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:*ec26af41-c639-4c8e-a4e6-d836c7716fff,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-workflow8bk56/series-workflow8bk56-convert-artifact-2237091030/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": "a22eacee-9cba-4387-8dbf-072f9fdd8791", "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-workflow8bk56/series-workflow8bk56-build-action-3054236378/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-07 08:41:51 +0000 UTC FinishedAt: 2026-08-07 08:41:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-07 08:41:51 +0000 UTC FinishedAt: 2026-08-07 08:41:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-07 08:41:51 +0000 UTC FinishedAt: 2026-08-07 08:43:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-07 08:41:51 +0000 UTC FinishedAt: 2026-08-07 08:43:45 +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:*a22eacee-9cba-4387-8dbf-072f9fdd8791,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-workflow8bk56/series-workflow8bk56-build-action-3054236378/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-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-07 08:43:55 +0000 UTC FinishedAt: 2026-08-07 11:45:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-07 08:43:55 +0000 UTC FinishedAt: 2026-08-07 11:45:16 +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":["tc_ctl_tclass","tc_new_tfilter"],"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:*f2fe92f2-15d4-48e7-ad4d-0b02c57a6d58,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a22eacee-9cba-4387-8dbf-072f9fdd8791,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-workflow8bk56/series-workflow8bk56-build-action-4212632765/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-workflow8bk56/series-workflow8bk56-build-action-3054236378/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-07 08:43:55 +0000 UTC FinishedAt: 2026-08-07 08:44:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-07 08:43:55 +0000 UTC FinishedAt: 2026-08-07 08:44:00 +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":["tc_ctl_tclass","tc_new_tfilter"],"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-workflow8bk56/series-workflow8bk56-convert-artifact-4090127483/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-07 08:43:55 +0000 UTC FinishedAt: 2026-08-07 08:43:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-07 08:43:55 +0000 UTC FinishedAt: 2026-08-07 08:43:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-07 08:43:55 +0000 UTC FinishedAt: 2026-08-07 08:43:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-07 08:44:05 +0000 UTC FinishedAt: 2026-08-07 11:45:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bk56[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"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":["tc_ctl_tclass","tc_new_tfilter"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"594d905195024b228c962627ae5ae7c17bd582a4","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_SCHED","NET_CLS_U32"],"series_id":"41d2cbaf-1364-4bf1-9b0f-594840e91878","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-07 08:44:05 +0000 UTC FinishedAt: 2026-08-07 11:45:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f2fe92f2-15d4-48e7-ad4d-0b02c57a6d58,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a22eacee-9cba-4387-8dbf-072f9fdd8791,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-workflow8bk56/series-workflow8bk56-build-action-4212632765/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-workflow8bk56/series-workflow8bk56-build-action-3054236378/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-workflow8bk56/series-workflow8bk56-convert-artifact-4090127483/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,}