Name: series-workflowhf49b Phase: Succeeded StartedAt: 2026-08-17 06:38:20 +0000 UTC FinishedAt: 2026-08-17 11:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[0] Phase: Succeeded StartedAt: 2026-08-17 06:38:20 +0000 UTC FinishedAt: 2026-08-17 07:21:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[0].run-triage Phase: Succeeded StartedAt: 2026-08-17 06:38:20 +0000 UTC FinishedAt: 2026-08-17 07:21:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MODULES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MODULES" ], "series_id": "79f5630d-8a00-45dc-ad50-4368fb96e196" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "codetag_load_module", "codetag_unload_module" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TU9EVUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGV0YWdfbG9hZF9tb2R1bGUmIzM0OywKICAgICYjMzQ7Y29kZXRhZ191bmxvYWRfbW9kdWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyAoYWxsb2NfdGFnKSBhbmQgY29kZXRhZyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBtb2R1bGUgbG9hZGluZyB3aGVuIG1lbW9yeSBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSB3b3JrcXVldWUgdG8gcmVtb3ZlIHRoZSBhbGxvY2luZm8gcHJvYyBlbnRyeSBhc3luY2hyb25vdXNseSBhbmQgY2hhbmdlcyBlcnJvciBoYW5kbGluZyBpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdG8gYWxsb3cgbW9kdWxlcyB0byBsb2FkIHdpdGhvdXQgdGFncyBieSByZXR1cm5pbmcgLUVPUE5PVFNVUFAuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb250cm9sIGZsb3csIGVycm9yIGhhbmRsaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyBhbmQgdW5sb2FkaW5nIGxvZ2ljIGluIGBsaWIvY29kZXRhZy5jYCBhbmQgYG1tL2FsbG9jX3RhZy5jYCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkLiBJdCBhbHNvIGNoYW5nZXMgYHNodXRkb3duX21lbV9wcm9maWxpbmdgIHRvIHNjaGVkdWxlIGEgd29yayBpdGVtIGZvciByZW1vdmluZyB0aGUgcHJvYyBlbnRyeSBpbnN0ZWFkIG9mIGRvaW5nIGl0IGRpcmVjdGx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZHVyaW5nIG1vZHVsZSBsb2FkL3VubG9hZCBhbmQgbWVtb3J5IHByb2ZpbGluZyBzaHV0ZG93biwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJjZWRkYjIwZGFkMzdhODNkYmZiNDEzMzk3MDE0MjNjOGMxY2IyNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzoxOTowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9saWIvY29kZXRhZy5jIGIvbGliL2NvZGV0YWcuY1xuaW5kZXggYTljZGE0Yzk2MmEzMC4uYTBiNjAwNzIwYWZjMSAxMDA2NDRcbi0tLSBhL2xpYi9jb2RldGFnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9jb2RldGFnLmNcbkBAIC0yNDAsNyAmIzQzOzI0MCw5IEBAIHN0YXRpYyBpbnQgY29kZXRhZ19tb2R1bGVfaW5pdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUsIHN0cnVjdCBtb2R1bGUgKm1vZClcbiBcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0a2ZyZWUoY21vZCk7XG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHQvKiAtRU9QTk9UU1VQUCBtZWFucyB3ZSBjYW4gbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZy4gKi9cbiYjNDM7XHRcdGlmIChlcnIgIT0gLUVPUE5PVFNVUFApXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zODgsNyAmIzQzOzM5MCwxMSBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXHRcdFx0JiM0MzsmIzQzO2N0dHlwZS1cdTAwM2Vjb250ZW50X2lkO1xuIFx0XHR9XG4gXHRcdHVwX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4tXHRcdGlmIChmb3VuZCBcdTAwMjZcdTAwMjYgY3R0eXBlLVx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbSlcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIG1vZHVsZSB3aG9zZSBtb2R1bGVfbG9hZCgpIHJldHVybmVkIC1FT1BOT1RTVVBQIGlzIG5vdFxuJiM0MztcdFx0ICogaW4gdGhlIGlkciBidXQgbWF5IHN0aWxsIGhvbGQgcmVzZXJ2ZWQgc2VjdGlvbiBtZW1vcnkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChjdHR5cGUtXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxuIFx0XHRcdGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0obW9kLCB0cnVlKTtcbiBcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZjb2RldGFnX2xvY2spO1xuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGIzMzQxMDMxMDQ3NzkuLmYzMGVmOGRkMjRjNzAgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva21lbWxlYWsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYWxsb2NfdGFnLmhcdTAwM2VcbiBcbkBAIC01OTEsNiAmIzQzOzU5MiwxMyBAQCB2b2lkIHBnYWxsb2NfdGFnX3N3YXAoc3RydWN0IGZvbGlvICpuZXcsIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0cHV0X3BhZ2VfdGFnX3JlZihoYW5kbGVfbmV3KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJlbW92ZV9hbGxvY2luZm9fZmlsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRyZW1vdmVfcHJvY19lbnRyeShBTExPQ0lORk9fRklMRV9OQU1FLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIERFQ0xBUkVfV09SSyhyZW1vdmVfYWxsb2NpbmZvX3dvcmssIHJlbW92ZV9hbGxvY2luZm9fZmlsZSk7XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNodXRkb3duX21lbV9wcm9maWxpbmcoYm9vbCByZW1vdmVfZmlsZSlcbiB7XG4gXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXG5AQCAtNjAwLDcgJiM0Mzs2MDgsNyBAQCBzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChyZW1vdmVfZmlsZSlcbi1cdFx0cmVtb3ZlX3Byb2NfZW50cnkoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgTlVMTCk7XG4mIzQzO1x0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnJlbW92ZV9hbGxvY2luZm9fd29yayk7XG4gXHRtZW1fcHJvZmlsaW5nX3N1cHBvcnQgPSBmYWxzZTtcbiB9XG4gXG5AQCAtOTc1LDYgJiM0Mzs5ODMsMTAgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWdcbiBcdHN0cnVjdCBhbGxvY190YWcgKnN0b3BfdGFnO1xuIFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuIFxuJiM0MztcdC8qIFByb2ZpbGluZyBkaXNhYmxlZDogbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZ3MuICovXG4mIzQzO1x0aWYgKCFtZW1fcHJvZmlsaW5nX3N1cHBvcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuIFx0LyogcGVyY3B1IGNvdW50ZXJzIGZvciBjb3JlIGFsbG9jYXRpb25zIGFyZSBhbHJlYWR5IHN0YXRpY2FsbHkgYWxsb2NhdGVkICovXG4gXHRpZiAoIW1vZClcbiBcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TU9EVUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGV0YWdfbG9hZF9tb2R1bGUmIzM0OywKICAgICYjMzQ7Y29kZXRhZ191bmxvYWRfbW9kdWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1vZHVsZSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgbG9naWMgaW4gYGxpYi9jb2RldGFnLmNgIGFuZCBgbW0vYWxsb2NfdGFnLmNgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGFsc28gY2hhbmdlcyBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgdG8gc2NoZWR1bGUgYSB3b3JrIGl0ZW0gZm9yIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5IGluc3RlYWQgb2YgZG9pbmcgaXQgZGlyZWN0bHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgbW9kdWxlIGxvYWQvdW5sb2FkIGFuZCBtZW1vcnkgcHJvZmlsaW5nIHNodXRkb3duLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmNlZGRiMjBkYWQzN2E4M2RiZmI0MTMzOTcwMTQyM2M4YzFjYjI1NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA3OjE5OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbGliL2NvZGV0YWcuYyBiL2xpYi9jb2RldGFnLmMKaW5kZXggYTljZGE0Yzk2MmEzMC4uYTBiNjAwNzIwYWZjMSAxMDA2NDQKLS0tIGEvbGliL2NvZGV0YWcuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvY29kZXRhZy5jCkBAIC0yNDAsNyAmIzQzOzI0MCw5IEBAIHN0YXRpYyBpbnQgY29kZXRhZ19tb2R1bGVfaW5pdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUsIHN0cnVjdCBtb2R1bGUgKm1vZCkKIAogCWlmIChlcnIgJmx0OyAwKSB7CiAJCWtmcmVlKGNtb2QpOwotCQlyZXR1cm4gZXJyOwomIzQzOwkJLyogLUVPUE5PVFNVUFAgbWVhbnMgd2UgY2FuIGxvYWQgdGhlIG1vZHVsZSB3aXRob3V0IGl0cyB0YWcuICovCiYjNDM7CQlpZiAoZXJyICE9IC1FT1BOT1RTVVBQKQomIzQzOwkJCXJldHVybiBlcnI7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zODgsNyAmIzQzOzM5MCwxMSBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpCiAJCQkmIzQzOyYjNDM7Y3R0eXBlLSZndDtjb250ZW50X2lkOwogCQl9CiAJCXVwX3dyaXRlKCZhbXA7Y3R0eXBlLSZndDttb2RfbG9jayk7Ci0JCWlmIChmb3VuZCAmYW1wOyZhbXA7IGN0dHlwZS0mZ3Q7ZGVzYy5mcmVlX3NlY3Rpb25fbWVtKQomIzQzOwkJLyoKJiM0MzsJCSAqIEEgbW9kdWxlIHdob3NlIG1vZHVsZV9sb2FkKCkgcmV0dXJuZWQgLUVPUE5PVFNVUFAgaXMgbm90CiYjNDM7CQkgKiBpbiB0aGUgaWRyIGJ1dCBtYXkgc3RpbGwgaG9sZCByZXNlcnZlZCBzZWN0aW9uIG1lbW9yeS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGN0dHlwZS0mZ3Q7ZGVzYy5mcmVlX3NlY3Rpb25fbWVtKQogCQkJY3R0eXBlLSZndDtkZXNjLmZyZWVfc2VjdGlvbl9tZW0obW9kLCB0cnVlKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Y29kZXRhZ19sb2NrKTsKZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmMKaW5kZXggYjMzNDEwMzEwNDc3OS4uZjMwZWY4ZGQyNGM3MCAxMDA2NDQKLS0tIGEvbW0vYWxsb2NfdGFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2VxX2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmdfY2hvaWNlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva21lbWxlYWsuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2FsbG9jX3RhZy5oJmd0OwogCkBAIC01OTEsNiAmIzQzOzU5MiwxMyBAQCB2b2lkIHBnYWxsb2NfdGFnX3N3YXAoc3RydWN0IGZvbGlvICpuZXcsIHN0cnVjdCBmb2xpbyAqb2xkKQogCXB1dF9wYWdlX3RhZ19yZWYoaGFuZGxlX25ldyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJcmVtb3ZlX3Byb2NfZW50cnkoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBERUNMQVJFX1dPUksocmVtb3ZlX2FsbG9jaW5mb193b3JrLCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUpOwomIzQzOwogc3RhdGljIHZvaWQgc2h1dGRvd25fbWVtX3Byb2ZpbGluZyhib29sIHJlbW92ZV9maWxlKQogewogCWlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSkKQEAgLTYwMCw3ICYjNDM7NjA4LDcgQEAgc3RhdGljIHZvaWQgc2h1dGRvd25fbWVtX3Byb2ZpbGluZyhib29sIHJlbW92ZV9maWxlKQogCQlyZXR1cm47CiAKIAlpZiAocmVtb3ZlX2ZpbGUpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KEFMTE9DSU5GT19GSUxFX05BTUUsIE5VTEwpOwomIzQzOwkJc2NoZWR1bGVfd29yaygmYW1wO3JlbW92ZV9hbGxvY2luZm9fd29yayk7CiAJbWVtX3Byb2ZpbGluZ19zdXBwb3J0ID0gZmFsc2U7CiB9CiAKQEAgLTk3NSw2ICYjNDM7OTgzLDEwIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgY29kZXRhZyAqc3RhcnQsIHN0cnVjdCBjb2RldGFnCiAJc3RydWN0IGFsbG9jX3RhZyAqc3RvcF90YWc7CiAJc3RydWN0IGFsbG9jX3RhZyAqdGFnOwogCiYjNDM7CS8qIFByb2ZpbGluZyBkaXNhYmxlZDogbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZ3MuICovCiYjNDM7CWlmICghbWVtX3Byb2ZpbGluZ19zdXBwb3J0KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwogCS8qIHBlcmNwdSBjb3VudGVycyBmb3IgY29yZSBhbGxvY2F0aW9ucyBhcmUgYWxyZWFkeSBzdGF0aWNhbGx5IGFsbG9jYXRlZCAqLwogCWlmICghbW9kKQogCQlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgbWFraW5nIHNvbWUgcHJldHR5IHRhcmdldGVkIG1vZGlmaWNhdGlvbnMgdG8gb3VyIG1lbW9yeSB0YWdnaW5nIGFuZCBwcm9maWxpbmcgaW5mcmFzdHJ1Y3R1cmUuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggZ3JhY2VmdWxseSBoYW5kbGluZyBzY2VuYXJpb3Mgd2hlcmUgY2VydGFpbiBmZWF0dXJlcyBhcmVuJiMzOTt0IHN1cHBvcnRlZCDigJMgc3BlY2lmaWNhbGx5LCBjb2RlIHRhZ2dpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZy4KClNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBgY29kZXRhZ19tb2R1bGVfaW5pdGAsIGluIGBsaWIvY29kZXRhZy5jYCB0byBub3QgdGhyb3cgYW4gZXJyb3IgaWYgYC1FT1BOT1RTVVBQYCBpcyBlbmNvdW50ZXJlZC4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IHN1cHBvcnQgY29kZSB0YWdnaW5nLCB3ZSBzaG91bGRuJiMzOTt0IGZhaWwgdGhlIG1vZHVsZSBsb2FkLiBXZSBzaG91bGQgc2ltcGx5IHdvcmsgd2l0aG91dCB0YWdzLiBTaW1pbGFybHksIHRoZSBwYXRjaCBtb2RpZmllcyBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCB0byBlbnN1cmUgdGhhdCBtZW1vcnkgYWxsb2NhdGVkIGZvciBzZWN0aW9ucyBpcyBmcmVlZCBldmVuIGlmIHRoZSBtb2R1bGUgd2FzbiYjMzk7dCBmb3VuZCBpbiB0aGUgSURSLCB3aGljaCBtaWdodCBvY2N1ciBpZiB0aGUgbW9kdWxlIGxvYWQgcmV0dXJuZWQgdGhlIGAtRU9QTk9UU1VQUGAgZXJyb3IuIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gZW5zdXJlIHJlc291cmNlcyBhcmUgaGFuZGxlZCwgcmVnYXJkbGVzcyBvZiBsb2FkIHN0YXRlLgoKSW4gYG1tL2FsbG9jX3RhZy5jYCwgdGhlIGBsb2FkX21vZHVsZWAgZnVuY3Rpb24gYXBwZWFycyB0byBiZSB1cGRhdGVkIHRvIHJldHVybiBgLUVPUE5PVFNVUFBgIGlmIG1lbW9yeSBwcm9maWxpbmcgc3VwcG9ydCBpc24mIzM5O3QgYXZhaWxhYmxlIChgIW1lbV9wcm9maWxpbmdfc3VwcG9ydGApLiBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZ29hbCBvZiBncmFjZWZ1bGx5IGRlZ3JhZGluZyBpZiB0aGUgZnVuY3Rpb25hbGl0eSBpc24mIzM5O3QgcHJlc2VudC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyB0aGUgY2xlYW51cCwgd2l0aCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2Agbm93IHNjaGVkdWxpbmcgYSB3b3JrIHF1ZXVlIChgcmVtb3ZlX2FsbG9jaW5mb193b3JrYCkgZm9yIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5IGluc3RlYWQgb2YgZG9pbmcgaXQgZGlyZWN0bHkuIFRoaXMgYXN5bmNocm9ub3VzIGFwcHJvYWNoIGxpa2VseSBwcmV2ZW50cyBwb3RlbnRpYWwgYmxvY2tpbmcgaW4gc2h1dGRvd24gcGF0aHMuCgpOb3csIGFzIGFuIGV4cGVydCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgZmlsZXMuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgbGliL2NvZGV0YWcuY2AgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQ09ERV9UQUdHSU5HYCBpcyBkZWZpbmVkLCBhbmQgYG1tL2FsbG9jX3RhZy5jYCBvbmx5IGNvbXBpbGVzIHdpdGggYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYC4gSWYgdGhlc2UgYXJlIHNldCBjb3JyZWN0bHksIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB3aWxsIGhhbmRsZSB0aGVzZSBjb25kaXRpb25zLiBXaXRoIHRob3NlIHNldCBjb3JyZWN0bHksIHRoaXMgaXMgYSBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkIHdheSBvZiBwcm92aWRpbmcgZm9yIHRob3NlIGVkZ2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0NPREVfVEFHR0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvTWFrZWZpbGU9MTk2PW9iai0kKENPTkZJR19GVU5DVElPTl9FUlJPUl9JTkpFQ1RJT04pICYjNDM7PSBlcnJvci1pbmplY3Qub1xubGliL01ha2VmaWxlLTE5Ny1cbmxpYi9NYWtlZmlsZToxOTg6b2JqLSQoQ09ORklHX0NPREVfVEFHR0lORykgJiM0Mzs9IGNvZGV0YWcub1xubGliL01ha2VmaWxlLTE5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDcyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBtZW50YWwgbXVzaW5nczoKCioqQW5hbHl6aW5nIGBtbS9hbGxvY190YWcuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgbW0vYWxsb2NfdGFnLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB0YWdnaW5nIG1hZ2ljIGhhcHBlbnMsIGFuZCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBkZWVwIGxvb2suIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdHJhY2tpbmcgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBvcmdhbml6aW5nIHRoaW5ncywgdGhlIHRyYWRlLW9mZnMgdGhleSYjMzk7dmUgbWFkZSBiZXR3ZWVuIG1ldGFkYXRhIG92ZXJoZWFkIGFuZCBsb29rdXAgc3BlZWQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGhhc2ggdGFibGUsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgbGlrZSBhIHRyZWUtYmFzZWQgc3RydWN0dXJlPyBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHNvIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGUgY29sbGlzaW9uIGhhbmRsaW5nIHN0cmF0ZWdpZXMgaWYgdGhleSYjMzk7cmUgdXNpbmcgYSBoYXNoIHRhYmxlLgoKTmV4dCwgSSYjMzk7bSBjaGVja2luZyB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHBhdGhzLiBJJiMzOTttIGtlZW4gb24gdW5kZXJzdGFuZGluZyB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZC4gV2UmIzM5O3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQgaW4gbW9zdCBzeXN0ZW1zLCBzbyBpcyB0aGlzIHVzaW5nIHNwaW5sb2NrcywgbXV0ZXhlcywgYXRvbWljIG9wZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBsb2NrIGNvbnRlbnRpb24gaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNhbGxzIGFyZSBpbnRlZ3JhdGVkLCBpZiB0aGV5JiMzOTtyZSBpbmxpbmUgZnVuY3Rpb25zIG9yIGZ1bmN0aW9uIGNhbGxzLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdGFnZ2luZyBtZWNoYW5pc21zIHRoZW1zZWx2ZXMuIEhvdyBhcmUgdGhlc2UgdGFncyBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IHJlZ2lvbnM/IElzIGl0IHN0b3JlZCBhbG9uZ3NpZGUgdGhlIGFsbG9jYXRpb24gbWV0YWRhdGEsIG9yIGlzIGl0IGluIGEgc2VwYXJhdGUsIGRlZGljYXRlZCBhcmVhPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb2YgdGhlIHRhZ2dpbmcgc3lzdGVtIG9uIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gcGVyZm9ybWFuY2U/IEhvdyBhcmUgdGhlIHRhZyB2YWx1ZXMgY2hvc2VuIGFuZCBob3cgY2FuIHRoZXkgYmUgdXNlZCB0byBkZWJ1ZyBhbGxvY2F0aW9ucy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBvdGhlciBhbGxvY2F0aW9uIHByb2JsZW1zIHdpdGhpbiB0aGUgdGFnIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gSWYgdGhlIHRhZyBtYW5hZ2VtZW50IHN5c3RlbSBoYXMgYW4gZXJyb3IsIGl0IGlzIHBvc3NpYmxlIGZvciB0aGluZ3MgdG8gZ2V0IGxvc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfdGFnLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xNDk9b2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgJiM0Mzs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xubW0vTWFrZWZpbGU6MTUwOm9iai0kKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKSAmIzQzOz0gYWxsb2NfdGFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTc1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIFByb2ZpbGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpbiB0aGUgS2NvbmZpZyBmaWxlLiBUaGlzIGlzIGNydWNpYWw7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgc2V0dGluZyBpcyBmdW5kYW1lbnRhbC4gS25vd2luZyB0aGUgc3RhdHVzIG9mIHRoaXMgY29uZmlnIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciBvcHRpbWl6aW5nIG1lbW9yeSB1c2FnZS4gVW5kZXJzdGFuZGluZyBpdHMgc3RhdGUgaW1tZWRpYXRlbHkgZGljdGF0ZXMgbXkgbmV4dCBhY3Rpb24gaW4gdGhlIHByb2plY3QuIEl0cyBpbXBhY3QgaXMgcHJldHR5IHNpZ25pZmljYW50IHdoZW4gZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTMxMT1jb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMjMtXG5tbS9LY29uZmlnLmRlYnVnOjMyNDpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vS2NvbmZpZy5kZWJ1Zy0zMjUtXHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTMzNi1cbm1tL0tjb25maWcuZGVidWc6MzM3OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzgtXHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctMzQxLVxubW0vS2NvbmZpZy5kZWJ1ZzozNDI6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbm1tL0tjb25maWcuZGVidWctMzQzLVx0Ym9vbCBcJiMzNDtNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgS2VybmVsIENvbmZpZ3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGRlYnVnZ2luZyBvcHRpb25zIGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUuLi4gdGhlIGBtbS9LY29uZmlnLmRlYnVnYCBmaWxlIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzcGVjaWZpYyBkZWJ1Z2dpbmcgc2V0dGluZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDMyNC4gVGhhdCByYW5nZSBvZnRlbiBob2xkcyByZWxhdGVkIG9wdGlvbnMsIGFuZCBnaXZlbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBhIGxpa2VseSBzcG90IGZvciBhIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBhbiBpbnRlcmNvbm5lY3RlZCBncm91cCBvZiBkZWJ1ZyBmbGFncyByZWxhdGVkIHRvIHRoZSBtZW1vcnkgbWFuYWdlci4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQgaW4gdGhhdCBhcmVhLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBhIGdyb3VwIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cbiAzMjE6XHRcbiAzMjI6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxuIDMyMzpcdFxuIDMyNDpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXG4gMzI1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcJiMzNDtcbiAzMjY6XHRcdGRlZmF1bHQgblxuIDMyNzpcdFx0ZGVwZW5kcyBvbiBNTVVcbiAzMjg6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDMyOTpcdFx0c2VsZWN0IENPREVfVEFHR0lOR1xuIDMzMDpcdFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXG4gMzMxOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4gMzMyOlx0XHRoZWxwXG4gMzMzOlx0XHQgIFRyYWNrIGFsbG9jYXRpb24gc291cmNlIGNvZGUgYW5kIHJlY29yZCB0b3RhbCBhbGxvY2F0aW9uIHNpemVcbiAzMzQ6XHRcdCAgaW5pdGlhdGVkIGF0IHRoYXQgY29kZSBsb2NhdGlvbi4gVGhlIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byB0cmFja1xuIDMzNTpcdFx0ICBtZW1vcnkgbGVha3Mgd2l0aCBhIGxvdyBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IGltcGFjdC5cbiAzMzY6XHRcbiAzMzc6XHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbiAzMzg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XCYjMzQ7XG4gMzM5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IFByb2ZpbGluZyBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBhcmVhcywgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBgY29kZXRhZ2Agc3Vic3lzdGVtOiBJIHNlZSBjaGFuZ2VzIHRvIGBjb2RldGFnX21vZHVsZV9pbml0YCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgaW4gYGxpYi9jb2RldGFnLmNgLiBUaGF0IG1ha2VzIHNlbnNlLCBzaW5jZSBjb2RlIHRhZ3MgYXJlIGFsbCBhYm91dCBpZGVudGlmeWluZyB3aGVyZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBmcmVlZCwgcHJlc3VtYWJseSBsaW5rZWQgdG8gYSBsb2FkZWQgbW9kdWxlLiBUaGVuIGluIGBtbS9hbGxvY190YWcuY2AsIHdlIGhhdmUgYGxvYWRfbW9kdWxlYCBhbmQgYHNodXRkb3duX21lbV9wcm9maWxpbmdgIGJlaW5nIG1vZGlmaWVkLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSBvbmVzIHdpdGhpbiB0aGUgY29kZSB0YWcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHN1Yi1zeXN0ZW1zLCBnb2luZyB0byBiZSB0cmlnZ2VyZWQgaW4gb3VyIHZpcnR1YWwgbWFjaGluZSBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQuCgpgY29kZXRhZ19tb2R1bGVfaW5pdGAgaXMgY2FsbGVkLCBvZiBjb3Vyc2UsIHdoZW4gYSBtb2R1bGUgaXMgbG9hZGVkIGludG8gdGhlIGtlcm5lbC4gYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgaXMgaXRzIGNvdW50ZXJwYXJ0LCB0cmlnZ2VyZWQgb24gbW9kdWxlIHVubG9hZC4gV2UmIzM5O3JlIG9idmlvdXNseSBpbnN0cnVtZW50aW5nIHRoZXNlIHBvaW50cy4KCk5vdywgYGxvYWRfbW9kdWxlYCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGNhbGxiYWNrIHJlZ2lzdGVyZWQgd2l0aGluIGBjb2RldGFnX3R5cGVfZGVzY2AsIGVzdGFibGlzaGVkIHZpYSBgYWxsb2NfdGFnX2luaXRgLiBTbywgaXQmIzM5O3MgdGllZCBpbnRvIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB0YWdnaW5nIG1lY2hhbmlzbS4gVGhpcyBoYXMgdGhlIGhhbGxtYXJrcyBvZiBiZWluZyBwcm9wZXJseSBpbnRlZ3JhdGVkLgoKYHNodXRkb3duX21lbV9wcm9maWxpbmdgIGlzIHRoZSBvdGhlciBwaWVjZSwgYW5kIHRoaXMgaGFwcGVucyB3aGVuIG1lbW9yeSBwcm9maWxpbmcgaXMgYmVpbmcgZGlzYWJsZWQuIFNvIGl0IGlzIHRoZSBjb3VudGVycGFydCB0byB0aGUgZW5hYmxlZCBmdW5jdGlvbmFsaXR5LCBzbyBzaG91bGQgYmUgY2FsbGVkIHRvIHByb3Blcmx5IGNsZWFudXAuCgpPa2F5LCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgbGFzdCBwb2ludCwgd2hlcmUgZXhhY3RseSBpcyB0aGF0IGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBmdW5jdGlvbiBjYWxsZWQ/IE5lZWQgdG8gdHJhY2UgdGhvc2UgY2FsbCBwYXRocy4gR290dGEgYmUgc3VyZSB0aG9zZSBjbGVhbnVwcyBhcmUgZG9uZSBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2h1dGRvd25fbWVtX3Byb2ZpbGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jPTYwMD1zdGF0aWMgREVDTEFSRV9XT1JLKHJlbW92ZV9hbGxvY2luZm9fd29yaywgcmVtb3ZlX2FsbG9jaW5mb19maWxlKTtcbm1tL2FsbG9jX3RhZy5jLTYwMS1cbm1tL2FsbG9jX3RhZy5jOjYwMjpzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG5tbS9hbGxvY190YWcuYy02MDMte1xuLS1cbm1tL2FsbG9jX3RhZy5jPTYxNT12b2lkIF9faW5pdCBhbGxvY190YWdfc2VjX2luaXQodm9pZClcbi0tXG5tbS9hbGxvY190YWcuYy02MzItXHRpZiAoa2VybmVsX3RhZ3MuY291bnQgXHUwMDNlICgxVUwgXHUwMDNjXHUwMDNjIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKSkge1xubW0vYWxsb2NfdGFnLmM6NjMzOlx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGZhbHNlKTsgLyogYWxsb2NpbmZvIGZpbGUgZG9lcyBub3QgZXhpc3QgeWV0ICovXG5tbS9hbGxvY190YWcuYy02MzQtXHRcdHByX2VycihcJiMzNDslbHUgYWxsb2NhdGlvbiB0YWdzIGNhbm5vdCBiZSByZWZlcmVuY2VzIHVzaW5nICVkIGF2YWlsYWJsZSBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcblwmIzM0Oyxcbi0tXG5tbS9hbGxvY190YWcuYz04NDY9c3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxubW0vYWxsb2NfdGFnLmMtODY1LVx0aWYgKCFlbnN1cmVfYWxpZ25tZW50KGFsaWduLCBcdTAwMjZwcmVwZW5kKSkge1xubW0vYWxsb2NfdGFnLmM6ODY2Olx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xubW0vYWxsb2NfdGFnLmMtODY3LVx0XHRwcl9lcnIoXCYjMzQ7JXM6IGFsaWdubWVudCAlbHUgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsb2NhdGlvbiB0YWcgaW5kZXhpbmcuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cJiMzNDssXG4tLVxubW0vYWxsb2NfdGFnLmMtOTE1LVx0XHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbm1tL2FsbG9jX3RhZy5jOjkxNjpcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xubW0vYWxsb2NfdGFnLmMtOTE3LVx0XHRcdHByX3dhcm4oXCYjMzQ7V2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCYjMzQ7LFxuLS1cbm1tL2FsbG9jX3RhZy5jLTkyMi1cdFx0aWYgKGdyb3dfcmVzKSB7XG5tbS9hbGxvY190YWcuYzo5MjM6XHRcdFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcbm1tL2FsbG9jX3RhZy5jLTkyNC1cdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cJiMzNDssXG4tLVxubW0vYWxsb2NfdGFnLmM9MTMzND1zdGF0aWMgaW50IF9faW5pdCBhbGxvY190YWdfaW5pdCh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTEzNTctXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gY3JlYXRlICVzIGZpbGVcXG5cJiMzNDssIEFMTE9DSU5GT19GSUxFX05BTUUpO1xubW0vYWxsb2NfdGFnLmM6MTM1ODpcdFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyhmYWxzZSk7XG5tbS9hbGxvY190YWcuYy0xMzU5LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5tbS9hbGxvY190YWcuYy0xMzY0LVx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgYWRkcmVzcyBzcGFjZSBmb3IgbW9kdWxlIHRhZ3MsIGVycm5vID0gJWRcXG5cJiMzNDssIHJlcyk7XG5tbS9hbGxvY190YWcuYzoxMzY1Olx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xubW0vYWxsb2NfdGFnLmMtMTM2Ni1cdFx0cmV0dXJuIHJlcztcbi0tXG5tbS9hbGxvY190YWcuYy0xMzcyLVx0XHRmcmVlX21vZF90YWdzX21lbSgpO1xubW0vYWxsb2NfdGFnLmM6MTM3MzpcdFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcbm1tL2FsbG9jX3RhZy5jLTEzNzQtXHRcdHJldHVybiBQVFJfRVJSKGFsbG9jX3RhZ19jdHR5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBNb2R1bGUgVGFnZ2luZyBhbmQgTWVtb3J5IFByb2ZpbGluZyBGaXhlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRyZXNzaW5nIHNvbWUgc3VidGxlIGlzc3VlcyBpbiB0aGUga2VybmVsJiMzOTtzIG1vZHVsZSB0YWdnaW5nIGFuZCBtZW1vcnkgcHJvZmlsaW5nIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IG1vZHVsZXMgYXJlIGxvYWRlZCwgdW5sb2FkZWQsIGFuZCBwcm9maWxlZC4gVGhlIGNvcmUgY29uY2VybiBzZWVtcyB0byBiZSB0aGF0IGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBjYW4gYmUgaW52b2tlZCBmcm9tIGByZXNlcnZlX21vZHVsZV90YWdzYCBkdXJpbmcgbWVtb3J5IGNvbnRlbnRpb24gb3IgYWxsb2NhdGlvbiBmYWlsdXJlcywgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGNhbGxlZCBgcmVtb3ZlX3Byb2NfZW50cnlgIGRpcmVjdGx5IGZyb20gYHNodXRkb3duX21lbV9wcm9maWxpbmdgLCB3aGljaCBpcyBhIGNsYXNzaWMgcmVjaXBlIGZvciBhIGtlcm5lbCBwYW5pYywgcmlnaHQ/IFRoZSBjb250ZXh0IG9mIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBtaWdodCBub3QgYWxsb3cgc2xlZXBpbmcgb3IgaG9sZGluZyBjZXJ0YWluIGxvY2tzLiBTbyB0aGUgZml4IGlzIHRvIHNjaGVkdWxlIHRoaXMgb3BlcmF0aW9uIGFzIGEgd29yayBpdGVtLCB3aGljaCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaC4KCk5leHQsIGl0IGhhbmRsZXMgYGxvYWRfbW9kdWxlYCByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gVGhpcyBtZWFucyB0aGUgbW9kdWxlIGxvYWQgd291bGRuJiMzOTt0IGZhaWwgY29tcGxldGVseSBpZiBwcm9maWxpbmcgaXMgZGlzYWJsZWQ7IGBjb2RldGFnX21vZHVsZV9pbml0YCBzaW1wbHkgc2tpcHMgdGhlIHRhZ2dpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgYSBwcmFnbWF0aWMgc29sdXRpb24uIE5vdywgdGhlIGBjb2RldGFnX3VubG9hZF9tb2R1bGVgIGZ1bmN0aW9uIGFsc28gY2xlYXJzIG1lbW9yeSBldmVuIGlmIHRoZSBtb2R1bGUgd2FzbiYjMzk7dCBpbiB0aGUgSURSLCB3aGljaCBmaXhlcyBhIG1lbW9yeSBsZWFrIHdoZW4gYSBtb2R1bGUgaXMgbG9hZGVkIGJ1dCBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIFRoaXMgaXMgZ29vZCBob3VzZWtlZXBpbmcuCgpUaGlzIGlzIGEgY29yZSBrZXJuZWwgY2hhbmdlLCB0b3VjaGluZyBtb2R1bGUgbG9hZGluZyBhbmQgbWVtb3J5IHByb2ZpbGluZy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QuIFdlIG5lZWQgdG8gcmVhbGx5IHB1dCB0aGVzZSBuZXcgY29kZSBwYXRocyB0aHJvdWdoIHRoZWlyIHBhY2VzLgoKTGV0IG1lIHNlZSwgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGBjb2RldGFnX21vZHVsZV9pbml0YCwgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAsIGFuZCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgKHRob3VnaCBpdCYjMzk7cyBzdGF0aWMpIGFuZCBgcmVtb3ZlX2FsbG9jaW5mb19maWxlYCAoYWxzbyBzdGF0aWMpLiBXYWl0IGEgc2Vjb25kLCBpcyBgY29kZXRhZ19tb2R1bGVfaW5pdGAgc3RhdGljPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdDsgaXQmIzM5O3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gTG9va3MgbGlrZSBhIHF1aWNrIHRyaXAgdG8gYGxpYi9jb2RldGFnLmNgIGlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RldGFnX21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL2NvZGV0YWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvY29kZXRhZy5jPTE4NT1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X21vZF9uYW1lKF9fbWF5YmVfdW51c2VkIHN0cnVjdCBtb2R1bGUgKm1vZClcbi0tXG5saWIvY29kZXRhZy5jLTE5My1cbmxpYi9jb2RldGFnLmM6MTk0OnN0YXRpYyBpbnQgY29kZXRhZ19tb2R1bGVfaW5pdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUsIHN0cnVjdCBtb2R1bGUgKm1vZClcbmxpYi9jb2RldGFnLmMtMTk1LXtcbi0tXG5saWIvY29kZXRhZy5jPTM0MD1pbnQgY29kZXRhZ19sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4tLVxubGliL2NvZGV0YWcuYy0zNDktXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0dHlwZSwgXHUwMDI2Y29kZXRhZ190eXBlcywgbGluaykge1xubGliL2NvZGV0YWcuYzozNTA6XHRcdHJldCA9IGNvZGV0YWdfbW9kdWxlX2luaXQoY3R0eXBlLCBtb2QpO1xubGliL2NvZGV0YWcuYy0zNTEtXHRcdGlmIChyZXQpXG4tLVxubGliL2NvZGV0YWcuYz00MDU9Y29kZXRhZ19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBjb2RldGFnX3R5cGVfZGVzYyAqZGVzYylcbi0tXG5saWIvY29kZXRhZy5jLTQxOS1cbmxpYi9jb2RldGFnLmM6NDIwOlx0ZXJyID0gY29kZXRhZ19tb2R1bGVfaW5pdChjdHR5cGUsIE5VTEwpO1xubGliL2NvZGV0YWcuYy00MjEtXHRpZiAodW5saWtlbHkoZXJyKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKk1vZHVsZSBNYW5hZ2VtZW50IENvbmNlcm5zOiBTdGF0aWMgdnMuIEV4cG9ydGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYC4gVGhlIGtleSBwb2ludCBoZXJlLCBhbmQgd2hhdCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUsIGlzIHRoYXQgdGhleSYjMzk7cmUgZWl0aGVyIGV4cG9ydGVkIG9yIG5vdCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IGludGVuZGVkIHRvIGJlIHZpc2libGUgb3V0c2lkZSBvZiB0aGVpciBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdC4gVGhpcyBoYXMgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGluIGEgbW9kdWxhciBzeXN0ZW0uCgpJZiB0aGV5ICp3ZXJlbiYjMzk7dCogZXhwb3J0ZWQgb3Igc3RhdGljLCB0aGV5JiMzOTtkIGJlIGhpZGRlbiwgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYW5kIHdlIHdvdWxkbiYjMzk7dCBoYXZlIHRvIHdvcnJ5IGFib3V0IGV4dGVybmFsIGNvZGUgZGlyZWN0bHkgYWNjZXNzaW5nIG9yIGNhbGxpbmcgdGhlbS4gVGhpcyB3b3VsZCBiZSB0eXBpY2FsIGZvciBmdW5jdGlvbnMgdXNlZCBvbmx5IHdpdGhpbiB0aGUgbW9kdWxlLgoKQnV0IGJlY2F1c2UgdGhleSAqYXJlKiBleHBvc2VkLCB0aGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIGJlIGEgcGFydCBvZiB0aGUgZXh0ZXJuYWwgbW9kdWxlIGludGVyZmFjZS4gVGhpcyBtYWtlcyBtZSBjb25zaWRlciBhIGZldyB0aGluZ3M6CgoqICAgKipEZXBlbmRlbmN5IE1hbmFnZW1lbnQ6KiogSG93IGFyZSB0aGVzZSBtb2R1bGVzIGxvYWRlZCBhbmQgdW5sb2FkZWQ/IElzIHRoZXJlIGEgZHluYW1pYyBsaW5rZXIgaW52b2x2ZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggc2hhcmVkIGxpYnJhcmllcywgZHluYW1pY2FsbHkgbG9hZGFibGUgbW9kdWxlcywgb3Igc29tZXRoaW5nIG1vcmUgY3VzdG9tPyBUaGVzZSBmdW5jdGlvbnMgd291bGQgbGlrZWx5IGJlIHRoZSBpbnRlcmZhY2UgcG9pbnRzIHRoZSBkeW5hbWljIGxvYWRlciB1c2VzIHRvIGluaXRpYWxpemUgYW5kIHNodXQgZG93biBtb2R1bGVzLgoKKiAgICoqQVBJIERlc2lnbjoqKiBXaGF0JiMzOTtzIHRoZSBkZXNpZ24gcmF0aW9uYWxlIGZvciB0aGVzZSBmdW5jdGlvbnM/IEFyZSB0aGV5IHBhcnQgb2YgYSBsYXJnZXIgQVBJIGZvciBtYW5hZ2luZyBjb2RlIG1vZHVsZXMsIG9yIGFyZSB0aGV5IGxvd2VyLWxldmVsIHByaW1pdGl2ZXM/IEtub3dpbmcgdGhpcyB3aWxsIGluZmx1ZW5jZSB0aGUgb3ZlcmFsbCBkZXNpZ24uCgoqICAgKipQb3RlbnRpYWwgZm9yIENvbmZsaWN0czoqKiBTaW5jZSB3ZSYjMzk7cmUgZXhwb3J0aW5nIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLCB3ZSBuZWVkIHRvIGJlIGV4dHJlbWVseSBjYXJlZnVsIGFib3V0IHBvdGVudGlhbCBuYW1lIGNvbGxpc2lvbnMsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGluIGEgc3lzdGVtIHdpdGggcG90ZW50aWFsbHkgbWFueSBtb2R1bGVzIGZyb20gbXVsdGlwbGUgc291cmNlcy4gV2UgbWlnaHQgbmVlZCB0byBjb25zaWRlciBzeW1ib2wgdmVyc2lvbmluZywgbmFtZXNwYWNlIG1hbmFnZW1lbnQsIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtIHRvIGF2b2lkIGNvbmZsaWN0cy4KCiogICAqKlNlY3VyaXR5IEltcGxpY2F0aW9uczoqKiBJZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGVudHJ5IHBvaW50cyB0byB0aGUgY29kZSB3aXRoaW4gYSBtb2R1bGUsIHdlIG5lZWQgdG8gY29uc2lkZXIgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBXaGF0IGFyZSB0aGUgdmFsaWRhdGlvbiBhbmQgYXV0aGVudGljYXRpb24gc2NoZW1lcz8gQXJlIHRoZXJlIHJpc2tzIG9mIG1hbGljaW91cyBtb2R1bGVzPwoKKiAgICoqVGhyZWFkIFNhZmV0eToqKiBEZXBlbmRpbmcgb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCwgd2UmIzM5O2xsIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHRocmVhZCBzYWZldHkuIElmIG11bHRpcGxlIHRocmVhZHMgbWlnaHQgbG9hZCBvciB1bmxvYWQgbW9kdWxlcyBjb25jdXJyZW50bHksIHdlIG5lZWQgYXBwcm9wcmlhdGUgbG9ja2luZyBtZWNoYW5pc21zIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBkYXRhIGNvcnJ1cHRpb24uCgpFc3NlbnRpYWxseSwgYnkgbWFraW5nIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgbm9uLXN0YXRpYywgdGhleSBhcmUgKnNpZ25hbGxpbmcqIHRoYXQgdGhleSBhcmUgaW1wb3J0YW50IGVudHJ5IHBvaW50cywgYW5kLCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBjb250ZXh0IG9mIG1vZHVsZSBtYW5hZ2VtZW50LCBpbmNsdWRpbmcgZGVzaWduIGNob2ljZXMsIHBvdGVudGlhbCByaXNrcyBhbmQgaG93IHRvIG1hbmFnZSB0aGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RldGFnX2xvYWRfbW9kdWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL2NvZGV0YWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvY29kZXRhZy5jPTMyND12b2lkIGNvZGV0YWdfbW9kdWxlX3JlcGxhY2VkKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHVsZSAqbmV3X21vZClcbi0tXG5saWIvY29kZXRhZy5jLTMzOS1cbmxpYi9jb2RldGFnLmM6MzQwOmludCBjb2RldGFnX2xvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZClcbmxpYi9jb2RldGFnLmMtMzQxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNb2R1bGUgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoaXMsIHllYWg/IE1ha2VzIHNlbnNlLiBCdXQgd2FpdCBhIHNlYy4uLiBJIG5lZWQgdG8gY29uZmlybSBgY29kZXRhZ19sb2FkX21vZHVsZWAgaXMgc3BlY2lmaWNhbGx5IGNhbGxlZCAqZHVyaW5nKiBtb2R1bGUgbG9hZC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4uIExldCYjMzk7cyBkaWcgaW50byB0aGUgc291cmNlLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9tb2R1bGUvbWFpbi5jYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGZ1bmN0aW9uIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZSBsb2FkaW5nIHByb2Nlc3MuIFRpbWUgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvZGV0YWdfbG9hZF9tb2R1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYz0zNDIyPXN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgY29uc3QgY2hhciBfX3VzZXIgKnVhcmdzLFxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1NzAtXG5rZXJuZWwvbW9kdWxlL21haW4uYzozNTcxOlx0aWYgKGNvZGV0YWdfbG9hZF9tb2R1bGUobW9kKSlcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1NzItXHRcdGdvdG8gc3lzZnNfY2xlYW51cDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEFsbG9jYXRpb24gVGFnIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgYWxsb2NhdGlvbiB0YWdnaW5nIG1lY2hhbmlzbS4gVGhlIG5hbWUgZGVmaW5pdGVseSByaW5ncyBhIGJlbGwuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgd2hldGhlciB0aGVyZSYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlc2UgdGFncywgc29tZXRoaW5nIGxpa2UgYGFsbG9jX3RhZ19pbml0YCBwZXJoYXBzPyBJJiMzOTtkIGV4cGVjdCBvbmUsIGl0JiMzOTtzIGZ1bmRhbWVudGFsIGZvciBhbnkgc3lzdGVtIGxpa2UgdGhpcy4KCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBmb2N1c2luZyBvbiBgbG9hZF9tb2R1bGVgIHdpdGhpbiBgbW0vYWxsb2NfdGFnLmNgLiBBbm5veWluZywgaXQmIzM5O3Mgc3RhdGljLCBzbyBpdOKAmXMgbGlrZWx5IG5vdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlICoqY29udGV4dCoqIG9mIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBsb2FkaW5nIHByb2Nlc3MgaW5mbHVlbmNlcyB0aGUgdGFnZ2VkIGFsbG9jYXRpb25zLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhhdCBmaWxlIG1vcmUgY2xvc2VseS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG1tL2FsbG9jX3RhZy5jYC4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgKnJlbGF0ZWQqIHRvIGBsb2FkX21vZHVsZWAuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBlbnRyeSBwb2ludHMsIGhvdyB0aGVzZSB0YWdnZWQgYWxsb2NhdGlvbnMgYXJlIGluaXRpYWxpemVkLCBhbmQgaWYgdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBgbG9hZF9tb2R1bGVgIHNvbWVob3cuIEkgc3VzcGVjdCB0aGVyZeKAmXMgZ29pbmcgdG8gYmUgYSBjaGFpbiBvZiBjYWxscyBvciBzb21lIGZvcm0gb2YgaW50ZXJhY3Rpb24gdGhhdOKAmXMgcmVsZXZhbnQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2FkX21vZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jPTkzMz1zdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTk3OC1cbm1tL2FsbG9jX3RhZy5jOjk3OTpzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcbm1tL2FsbG9jX3RhZy5jLTk4MC17XG4tLVxubW0vYWxsb2NfdGFnLmM9MTMzND1zdGF0aWMgaW50IF9faW5pdCBhbGxvY190YWdfaW5pdCh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTEzNDItXHRcdC5mcmVlX3NlY3Rpb25fbWVtXHQ9IHJlbGVhc2VfbW9kdWxlX3RhZ3MsXG5tbS9hbGxvY190YWcuYzoxMzQzOlx0XHQubW9kdWxlX2xvYWRcdFx0PSBsb2FkX21vZHVsZSxcbm1tL2FsbG9jX3RhZy5jLTEzNDQtXHRcdC5tb2R1bGVfcmVwbGFjZWRcdD0gcmVwbGFjZV9tb2R1bGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIGBsb2FkX21vZHVsZWAgaXMgdGhlIGtleSBjYWxsYmFjayBoZXJlOyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gV2hpY2ggbWVhbnMgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIHRyYWNraW5nIGRvd24gd2hhdCYjMzk7cyBnb2luZyBvbi4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZS4gQW5kIHRvIGdldCB0aGlzIHdob2xlIHRoaW5nIHdvcmtpbmcsIEkgcmVtZW1iZXIgSSBuZWVkIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgZW5hYmxlZCwgcmlnaHQ/IEFuZCBiZWNhdXNlIGBDT05GSUdfQ09ERV9UQUdHSU5HYCBpcyBhY3R1YWxseSAqc2VsZWN0ZWQqIGJ5IHRoYXQsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyB0aGUgcmVhbCBraW5ncGluIGNvbmZpZy4gCgpCdXQgd2FpdCBhIG1pbnV0ZSwgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGRlcGVuZHMgb24gYE1NVWAgYW5kIGBQUk9DX0ZTYC4uLiB0aGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LCBhbmQgd29ydGggbm90aW5nLiBBcmUgdGhlcmUgYW55IG90aGVyIGZsYWdzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgYW5kIHNlZSBpZiBgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR2AgaXMgcmVsZXZhbnQgaGVyZSBhcyB3ZWxsLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMzc9Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zNDEtXG5tbS9LY29uZmlnLmRlYnVnOjM0Mjpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDMtXHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmxlY3Rpbmcgb24gTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCwgcmVhbGlzdGljYWxseSwgd2UgZG9uJiMzOTt0ICpzdHJpY3RseSogbmVlZCB0aGF0IGBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHYCBmbGFnLiBJdCBzZWVtcyBsaWtlIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBieSBpdHNlbGYgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uIGZvciBtb3N0IHNjZW5hcmlvcy4gSSYjMzk7bSBnb2luZyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLCB0aG91Z2guCgpMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXJlYXMgb2YgY29kZSB0aGF0IGFyZSByZWxldmFudCBoZXJlLiBJJiMzOTttIGN1cmlvdXMgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBtaWdodCBuZWVkIGF0dGVudGlvbi4gSG1tLCBgcGdhbGxvY190YWdfc3dhcGAgaXMgaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFjdHVhbGx5IHRvdWNoIHRoYXQuIEl0JiMzOTtzIGp1c3QgdGhlcmUgZm9yIGNvbnRleHQsIG5vdGhpbmcgdG8gd29ycnkgYWJvdXQuCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggKmRvZXMqIGFkZCBgcmVtb3ZlX2FsbG9jaW5mb19maWxlYCwgd2hpY2ggaXMgc3RhdGljLCBhbmQgbW9kaWZpZXMgdGhlIGV4aXN0aW5nIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBmdW5jdGlvbiwgYWxzbyBzdGF0aWMuIExldCBtZSBzZWUgd2hlcmUgYHNodXRkb3duX21lbV9wcm9maWxpbmdgIGdldHMgY2FsbGVkLiBBaCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGFsbG9jX3RhZ19zZWNfaW5pdGAsIGByZXNlcnZlX21vZHVsZV90YWdzYCwgYW5kIGBhbGxvY190YWdfaW5pdGAuIE5vdywgSSB3b25kZXIgaWYgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIGlzIGNhbGxlZCBmcm9tIGBhbGxvY190YWdfbW9kdWxlX2luaXRgPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVzZXJ2ZV9tb2R1bGVfdGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jPTc4NT1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtODQ1LVxubW0vYWxsb2NfdGFnLmM6ODQ2OnN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxubW0vYWxsb2NfdGFnLmMtODQ3LVx0XHRcdFx0IHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKVxuLS1cbm1tL2FsbG9jX3RhZy5jPTEzMzQ9c3RhdGljIGludCBfX2luaXQgYWxsb2NfdGFnX2luaXQodm9pZClcbi0tXG5tbS9hbGxvY190YWcuYy0xMzQwLVx0XHQubmVlZHNfc2VjdGlvbl9tZW1cdD0gbmVlZHNfc2VjdGlvbl9tZW0sXG5tbS9hbGxvY190YWcuYzoxMzQxOlx0XHQuYWxsb2Nfc2VjdGlvbl9tZW1cdD0gcmVzZXJ2ZV9tb2R1bGVfdGFncyxcbm1tL2FsbG9jX3RhZy5jLTEzNDItXHRcdC5mcmVlX3NlY3Rpb25fbWVtXHQ9IHJlbGVhc2VfbW9kdWxlX3RhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBNb2R1bGUgVGFnZ2luZyoqCgpBbHJpZ2h0LCBzbyBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AuLi4gcmlnaHQsIHRoYXQmIzM5O3MgYSBjYWxsYmFjayBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBjb2RldGFnX21vZHVsZV9pbml0YC4gR29vZC4gVGhhdCBwdXRzIGl0IGluIGNvbnRleHQuIFRoZSBrZXkgZW50cnkgcG9pbnRzIHRvIGZvY3VzIG9uIHNlZW0gdG8gYmUgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHkg4oCTIHRoZSBsb2FkIGFuZCB1bmxvYWQgaG9va3MuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZSBsb29rLiBOb3csIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2ssIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgY29kZXRhZ19sb2FkX21vZHVsZWAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIE5vIHBvaW50IGluIGRpZ2dpbmcgaW50byBhIG5vbi1leHBvcnRlZCBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9jb2RldGFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIE1vZHVsZSBDYWxsKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGV4ZWN1dGlvbiBwYXRoIGFuZCBpdCBzZWVtcyB0aGlzIGZ1bmN0aW9uIGlzbiYjMzk7dCBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGZpbmUsIGJ1dCB3aGF0JiMzOTtzIHJlYWxseSB0aHJvd2luZyBtZSBpcyB0aGF0IGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBrZXJuZWwvbW9kdWxlL21haW4uY2AsIGFuZCB0aGF0JiMzOTtzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0JiMzOTtzIGRlZmluZWQuCgpIYW5nIG9uLi4uIEkgdGhpbmsgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIGluIGBsaWIvY29kZXRhZy5jYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQuIFdhaXQgYSBzZWNvbmQsIGNvdWxkIGl0IGhhdmUgYSBkZWNsYXJhdGlvbiBpbiBgaW5jbHVkZS9saW51eC9jb2RldGFnLmhgPyBUaGF0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBzcG90IGZvciBhbiBpbXBvcnQgaWYgaXQmIzM5O3Mgbm90IGJlaW5nIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIEdvdCB0byBjaGVjayB0aGF0IGluY2x1ZGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29kZXRhZ19sb2FkX21vZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29kZXRhZy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29kZXRhZy5oPTk4PXZvaWQgY29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbW9kdWxlICpuZXdfbW9kKTtcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk5OmludCBjb2RldGFnX2xvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCk7XG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC0xMDAtdm9pZCBjb2RldGFnX3VubG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaD0xMTI9c3RhdGljIGlubGluZSB2b2lkIGNvZGV0YWdfbW9kdWxlX3JlcGxhY2VkKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHVsZSAqbmV3X21vZCkge31cbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjExMzpzdGF0aWMgaW5saW5lIGludCBjb2RldGFnX2xvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtMTE0LXN0YXRpYyBpbmxpbmUgdm9pZCBjb2RldGFnX3VubG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKSB7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg0MAoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBNb2R1bGUgTG9hZGluZyBhbmQgVW5sb2FkaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgYXJlIGluZGVlZCB0aGUgY29ycmVjdCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLCBhcyBzdXNwZWN0ZWQuIFRoZXkgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBob29rcyByZWxhdGVkIHRvIG1vZHVsZSBpbnRlcmFjdGlvbi4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBsdXJraW5nIGFyb3VuZC4gSSBzZWUgYGFsbG9jX3RhZ19pbml0YCBpcyBtYXJrZWQgYXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHNvIHRoYXQmIzM5O3MgcHJvYmFibHkgbm90IHVzZWZ1bCBmb3IgdHJhY2tpbmcgbW9kdWxlIGxpZmV0aW1lIGFmdGVyIGluaXRpYWxpemF0aW9uLiBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgYW5kIGByZW1vdmVfYWxsb2NpbmZvX2ZpbGVgIGFyZSBib3RoIHN0YXRpYywgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIHRoZXkmIzM5O3JlIG5vdCBleHRlcm5hbGx5IHZpc2libGUgYW5kIGNhbiBiZSBzYWZlbHkgaWdub3JlZCBmb3IgdGhpcyBicm9hZGVyIG1vZHVsZSBsaWZlY3ljbGUgcGVyc3BlY3RpdmUuIFRoZXJlZm9yZSwgZm9jdXNpbmcgb24gYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBzZWVtcyBsaWtlIHRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaC4KCkhtbSwgSSBzZWUgYSBwb3RlbnRpYWwgY29tcGxpY2F0aW9uIHRob3VnaC4gVGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYGxvYWRfbW9kdWxlYCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGl0JiMzOTtzICpzdGF0aWMqLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgcmVkIGZsYWcsIG1lYW5pbmcgaXQgbWlnaHQgYmUgaGlkZGVuIGZyb20gZGlyZWN0IGludm9jYXRpb24gZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgaW4gYG1tL2FsbG9jX3RhZy5jYCB0aGF0IGNvdWxkIGFsc28gc2VydmUgYXMgcG90ZW50aWFsIGZvY3VzIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBtb2R1bGUgYmVoYXZpb3Igd2l0aGluIHRoYXQgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jPTMzPXN0YXRpYyBib29sIG1lbV9wcm9maWxpbmdfc3VwcG9ydDtcbi0tXG5tbS9hbGxvY190YWcuYy0zOS0gKi9cbm1tL2FsbG9jX3RhZy5jOjQwOmJvb2wgbWVtX2FsbG9jX3Byb2ZpbGluZ19wZXJtYW5lbnRseV9kaXNhYmxlZCh2b2lkKVxubW0vYWxsb2NfdGFnLmMtNDEte1xuLS1cbm1tL2FsbG9jX3RhZy5jPTQ3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGFsbG9jaW5mb19wcm9jX29wcyA9IHtcbi0tXG5tbS9hbGxvY190YWcuYy00ODctXG5tbS9hbGxvY190YWcuYzo0ODg6c2l6ZV90IGFsbG9jX3RhZ190b3BfdXNlcnMoc3RydWN0IGNvZGV0YWdfYnl0ZXMgKnRhZ3MsIHNpemVfdCBjb3VudCwgYm9vbCBjYW5fc2xlZXApXG5tbS9hbGxvY190YWcuYy00ODkte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTUyOC1cbm1tL2FsbG9jX3RhZy5jOjUyOTp2b2lkIHBnYWxsb2NfdGFnX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG5tbS9hbGxvY190YWcuYy01MzAte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTU1NC1cbm1tL2FsbG9jX3RhZy5jOjU1NTp2b2lkIHBnYWxsb2NfdGFnX3N3YXAoc3RydWN0IGZvbGlvICpuZXcsIHN0cnVjdCBmb2xpbyAqb2xkKVxubW0vYWxsb2NfdGFnLmMtNTU2LXtcbi0tXG5tbS9hbGxvY190YWcuYz01OTU9c3RhdGljIHZvaWQgcmVtb3ZlX2FsbG9jaW5mb19maWxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9hbGxvY190YWcuYy01OTktXG5tbS9hbGxvY190YWcuYzo2MDA6c3RhdGljIERFQ0xBUkVfV09SSyhyZW1vdmVfYWxsb2NpbmZvX3dvcmssIHJlbW92ZV9hbGxvY2luZm9fZmlsZSk7XG5tbS9hbGxvY190YWcuYy02MDEtXG4tLVxubW0vYWxsb2NfdGFnLmM9MTE5MT1zdGF0aWMgYWxsb2NfdGFnX2FkZF9mdW5jIF9fcmN1ICphbGxvY190YWdfYWRkX2Vhcmx5X3Bmbl9wdHIgX19yZWZkYXRhID1cbi0tXG5tbS9hbGxvY190YWcuYy0xMTkzLVxubW0vYWxsb2NfdGFnLmM6MTE5NDp2b2lkIGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG5tbS9hbGxvY190YWcuYy0xMTk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NzMKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogMTAwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNb2R1bGUgTG9hZGluZyBhbmQgTWVtb3J5IFByb2ZpbGluZyBDaGFuZ2VzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgZHVlIHRvIHRoZWlyIGRpcmVjdCBpbnZvbHZlbWVudCBpbiBtb2R1bGUgaGFuZGxpbmcuIFRoZSBgYWxsb2NfdGFnX3RvcF91c2Vyc2AgZnVuY3Rpb24gaXMgcHJvYmFibHkgb25seSByZWxldmFudCBpbiB0aGUgY29udGV4dCBvZiByZWFkaW5nIHRoZSBwcm9jIGZpbGUsIHNvIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIG1vZHVsZSBsb2FkaW5nIGl0c2VsZi4KClJldmlld2luZyB0aGUgY29kZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIGEga2V5IGFkanVzdG1lbnQgaGFzIGJlZW4gbWFkZSBpbiBgY29kZXRhZ19tb2R1bGVfaW5pdGAuIE5vdywgaWYgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZhaWxzIHdpdGggYC1FT1BOT1RTVVBQYCAoT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQpLCBpdCYjMzk7cyBubyBsb25nZXIgdHJlYXRlZCBhcyBhIGNyaXRpY2FsIGVycm9yLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBtb2R1bGUgY2FuIGJlIGxvYWRlZCBldmVuIHdpdGhvdXQgY2VydGFpbiBjb2RlIHRhZ2dpbmcgZmVhdHVyZXMgZW5hYmxlZC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBjb2RlIGhhcyBiZWVuIG1hZGUgbW9yZSByb2J1c3QgaW4gaGFuZGxpbmcgbW9kdWxlcyB0aGF0IG1pZ2h0IG5vdCBmdWxseSBzdXBwb3J0IHRoZSB0YWdnaW5nIG1lY2hhbmlzbS4KClRoZSBjb3JyZXNwb25kaW5nIGNoYW5nZSBpbiBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBhY2tub3dsZWRnZXMgdGhhdCBhIG1vZHVsZSBtaWdodCBiZSBwcmVzZW50IGRlc3BpdGUgYG1vZHVsZV9sb2FkKClgIHJldHVybmluZyBgLUVPUE5PVFNVUFBgLiBUaGUgYGZyZWVfc2VjdGlvbl9tZW1gIGNhbGwgaGFzIGJlZW4gZXhwYW5kZWQgdG8gZGVhbCB3aXRoIG1vZHVsZXMgaW4gdGhlIGlkciBvciB0aG9zZSB3aXRoIHJlc2VydmVkIHNlY3Rpb24gbWVtb3J5LgoKVHVybmluZyB0byB0aGUgYGFsbG9jX3RhZy5jYCBmaWxlLCBJIHNlZSB0aGUgY29kZSBhZGRyZXNzZXMgYSBidWcgcmVsYXRlZCB0byByZW1vdmluZyB0aGUgcHJvYyBlbnRyeS4gVGhlIGByZW1vdmVfcHJvY19lbnRyeWAgY2FsbCBoYXMgYmVlbiBtb3ZlZCB0byBhIHdvcmtxdWV1ZSwgbGlrZWx5IHRvIGF2b2lkIGlzc3VlcyB3aXRoIGNhbGxpbmcgaXQgZnJvbSBhbiBpbmFwcHJvcHJpYXRlIGNvbnRleHQuIEFkZGl0aW9uYWxseSwgbW9kdWxlIGxvYWRpbmcgaGFzIGJlZW4gdXBkYXRlZCB3aGVuIHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSWYgYG1lbV9wcm9maWxpbmdfc3VwcG9ydGAgaXMgZmFsc2UsIG1vZHVsZSBsb2FkaW5nIHdpbGwgcmV0dXJuIGAtRU9QTk9UU1VQUGAuCgpTbywgaW4gc3VtbWFyeSwgdGhlc2UgY2hhbmdlcyBhcmUgYWRkcmVzc2luZyB0aGUgaW50ZWdyYXRpb24gYmV0d2VlbiBtb2R1bGUgbG9hZGluZyBhbmQgbWVtb3J5IHByb2ZpbGluZy4gVGhlIGNoYW5nZXMgaGFuZGxlIGNhc2VzIHdoZXJlIGEgbW9kdWxlIG1pZ2h0IG5vdCBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggY29kZSB0YWdnaW5nLCBhbmQgcHJvdmlkZXMgc2FmZXIgaGFuZGxpbmcgb2YgcHJvYyBlbnRyeSByZW1vdmFsLgoKQXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgY2xlYXJseSBgQ09ORklHX01PRFVMRVNgIGlzIG5lY2Vzc2FyeSBmb3IgbW9kdWxlIGxvYWRpbmcgaW4gZ2VuZXJhbC4gSW4gdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGFsc28gZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TU9EVUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGV0YWdfbG9hZF9tb2R1bGUmIzM0OywKICAgICYjMzQ7Y29kZXRhZ191bmxvYWRfbW9kdWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1vZHVsZSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgbG9naWMgaW4gYGxpYi9jb2RldGFnLmNgIGFuZCBgbW0vYWxsb2NfdGFnLmNgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGFsc28gY2hhbmdlcyBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgdG8gc2NoZWR1bGUgYSB3b3JrIGl0ZW0gZm9yIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5IGluc3RlYWQgb2YgZG9pbmcgaXQgZGlyZWN0bHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgbW9kdWxlIGxvYWQvdW5sb2FkIGFuZCBtZW1vcnkgcHJvZmlsaW5nIHNodXRkb3duLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgICAmIzM0O01PRFVMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2RldGFnX2xvYWRfbW9kdWxlJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfdW5sb2FkX21vZHVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyBhbmQgdW5sb2FkaW5nIGxvZ2ljIGluIGBsaWIvY29kZXRhZy5jYCBhbmQgYG1tL2FsbG9jX3RhZy5jYCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkLiBJdCBhbHNvIGNoYW5nZXMgYHNodXRkb3duX21lbV9wcm9maWxpbmdgIHRvIHNjaGVkdWxlIGEgd29yayBpdGVtIGZvciByZW1vdmluZyB0aGUgcHJvYyBlbnRyeSBpbnN0ZWFkIG9mIGRvaW5nIGl0IGRpcmVjdGx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZHVyaW5nIG1vZHVsZSBsb2FkL3VubG9hZCBhbmQgbWVtb3J5IHByb2ZpbGluZyBzaHV0ZG93biwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIChhbGxvY190YWcpIGFuZCBjb2RldGFnIHN1YnN5c3RlbXMgdG8gaGFuZGxlIG1vZHVsZSBsb2FkaW5nIHdoZW4gbWVtb3J5IHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSB0byByZW1vdmUgdGhlIGFsbG9jaW5mbyBwcm9jIGVudHJ5IGFzeW5jaHJvbm91c2x5IGFuZCBjaGFuZ2VzIGVycm9yIGhhbmRsaW5nIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0byBhbGxvdyBtb2R1bGVzIHRvIGxvYWQgd2l0aG91dCB0YWdzIGJ5IHJldHVybmluZyAtRU9QTk9UU1VQUC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbnRyb2wgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjZWRkYjIwZGFkMzdhODNkYmZiNDEzMzk3MDE0MjNjOGMxY2IyNTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzoxOTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2xpYi9jb2RldGFnLmMgYi9saWIvY29kZXRhZy5jCmluZGV4IGE5Y2RhNGM5NjJhMzAuLmEwYjYwMDcyMGFmYzEgMTAwNjQ0Ci0tLSBhL2xpYi9jb2RldGFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL2NvZGV0YWcuYwpAQCAtMjQwLDcgJiM0MzsyNDAsOSBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiAKIAlpZiAoZXJyICZsdDsgMCkgewogCQlrZnJlZShjbW9kKTsKLQkJcmV0dXJuIGVycjsKJiM0MzsJCS8qIC1FT1BOT1RTVVBQIG1lYW5zIHdlIGNhbiBsb2FkIHRoZSBtb2R1bGUgd2l0aG91dCBpdHMgdGFnLiAqLwomIzQzOwkJaWYgKGVyciAhPSAtRU9QTk9UU1VQUCkKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzg4LDcgJiM0MzszOTAsMTEgQEAgdm9pZCBjb2RldGFnX3VubG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKQogCQkJJiM0MzsmIzQzO2N0dHlwZS0mZ3Q7Y29udGVudF9pZDsKIAkJfQogCQl1cF93cml0ZSgmYW1wO2N0dHlwZS0mZ3Q7bW9kX2xvY2spOwotCQlpZiAoZm91bmQgJmFtcDsmYW1wOyBjdHR5cGUtJmd0O2Rlc2MuZnJlZV9zZWN0aW9uX21lbSkKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIG1vZHVsZSB3aG9zZSBtb2R1bGVfbG9hZCgpIHJldHVybmVkIC1FT1BOT1RTVVBQIGlzIG5vdAomIzQzOwkJICogaW4gdGhlIGlkciBidXQgbWF5IHN0aWxsIGhvbGQgcmVzZXJ2ZWQgc2VjdGlvbiBtZW1vcnkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChjdHR5cGUtJmd0O2Rlc2MuZnJlZV9zZWN0aW9uX21lbSkKIAkJCWN0dHlwZS0mZ3Q7ZGVzYy5mcmVlX3NlY3Rpb25fbWVtKG1vZCwgdHJ1ZSk7CiAJfQogCW11dGV4X3VubG9jaygmYW1wO2NvZGV0YWdfbG9jayk7CmRpZmYgLS1naXQgYS9tbS9hbGxvY190YWcuYyBiL21tL2FsbG9jX3RhZy5jCmluZGV4IGIzMzQxMDMxMDQ3NzkuLmYzMGVmOGRkMjRjNzAgMTAwNjQ0Ci0tLSBhL21tL2FsbG9jX3RhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2FsbG9jX3RhZy5jCkBAIC0xNSw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nX2Nob2ljZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ttZW1sZWFrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9hbGxvY190YWcuaCZndDsKIApAQCAtNTkxLDYgJiM0Mzs1OTIsMTMgQEAgdm9pZCBwZ2FsbG9jX3RhZ19zd2FwKHN0cnVjdCBmb2xpbyAqbmV3LCBzdHJ1Y3QgZm9saW8gKm9sZCkKIAlwdXRfcGFnZV90YWdfcmVmKGhhbmRsZV9uZXcpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmVtb3ZlX2FsbG9jaW5mb19maWxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXJlbW92ZV9wcm9jX2VudHJ5KEFMTE9DSU5GT19GSUxFX05BTUUsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgREVDTEFSRV9XT1JLKHJlbW92ZV9hbGxvY2luZm9fd29yaywgcmVtb3ZlX2FsbG9jaW5mb19maWxlKTsKJiM0MzsKIHN0YXRpYyB2b2lkIHNodXRkb3duX21lbV9wcm9maWxpbmcoYm9vbCByZW1vdmVfZmlsZSkKIHsKIAlpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpCkBAIC02MDAsNyAmIzQzOzYwOCw3IEBAIHN0YXRpYyB2b2lkIHNodXRkb3duX21lbV9wcm9maWxpbmcoYm9vbCByZW1vdmVfZmlsZSkKIAkJcmV0dXJuOwogCiAJaWYgKHJlbW92ZV9maWxlKQotCQlyZW1vdmVfcHJvY19lbnRyeShBTExPQ0lORk9fRklMRV9OQU1FLCBOVUxMKTsKJiM0MzsJCXNjaGVkdWxlX3dvcmsoJmFtcDtyZW1vdmVfYWxsb2NpbmZvX3dvcmspOwogCW1lbV9wcm9maWxpbmdfc3VwcG9ydCA9IGZhbHNlOwogfQogCkBAIC05NzUsNiAmIzQzOzk4MywxMCBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZwogCXN0cnVjdCBhbGxvY190YWcgKnN0b3BfdGFnOwogCXN0cnVjdCBhbGxvY190YWcgKnRhZzsKIAomIzQzOwkvKiBQcm9maWxpbmcgZGlzYWJsZWQ6IGxvYWQgdGhlIG1vZHVsZSB3aXRob3V0IGl0cyB0YWdzLiAqLwomIzQzOwlpZiAoIW1lbV9wcm9maWxpbmdfc3VwcG9ydCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKIAkvKiBwZXJjcHUgY291bnRlcnMgZm9yIGNvcmUgYWxsb2NhdGlvbnMgYXJlIGFscmVhZHkgc3RhdGljYWxseSBhbGxvY2F0ZWQgKi8KIAlpZiAoIW1vZCkKIAkJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc2CgkJCQkJCQlvdXRwdXQ6IDE5NgoJCQkJCQkJdGhvdWdodHM6IDQxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBmb2N1cyBpcyBvbiBlbmhhbmNpbmcgdGhlIG1lbW9yeSBwcm9maWxpbmcgYW5kIG1vZHVsZSBtYW5hZ2VtZW50IGFzcGVjdHMgd2l0aGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgbGliL2NvZGV0YWcuY2AgYW5kIGBtbS9hbGxvY190YWcuY2AuCgpJbiBgbGliL2NvZGV0YWcuY2AsIHRoZSBjaGFuZ2VzIHJlZmluZSBob3cgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB1bmxvYWRlZC4gVGhlIGBjb2RldGFnX21vZHVsZV9pbml0YCBmdW5jdGlvbiBub3cgaGFuZGxlcyBjYXNlcyB3aGVyZSBhIG1vZHVsZSBtaWdodCBub3QgYmUgc3VwcG9ydGVkLCByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gTW9yZSBpbXBvcnRhbnRseSwgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gZnJlZSByZXNlcnZlZCBzZWN0aW9uIG1lbW9yeSBldmVuIGlmIHRoZSBtb2R1bGUgd2FzbiYjMzk7dCBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCAoIGBmb3VuZGAgaXMgZmFsc2UgKSwgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBpZiB0aGUgbG9hZCBmYWlsZWQuCgpPdmVyIGluIGBtbS9hbGxvY190YWcuY2AsIGEgd29ya3F1ZXVlIGl0ZW0sIGByZW1vdmVfYWxsb2NpbmZvX2ZpbGVgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBzYWZlbHkgcmVtb3ZpbmcgdGhlIGBBTExPQ0lORk9fRklMRV9OQU1FYCBwcm9jIGVudHJ5LiBJbnN0ZWFkIG9mIGRpcmVjdGx5IGNhbGxpbmcgYHJlbW92ZV9wcm9jX2VudHJ5YCBkdXJpbmcgc2h1dGRvd24sIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBub3cgc2NoZWR1bGVzIHRoaXMgd29yay4gVGhlIGBsb2FkX21vZHVsZWAgZnVuY3Rpb24gYWxzbyBub3cgcmV0dXJucyBgLUVPUE5PVFNVUFBgIGlmIG1lbW9yeSBwcm9maWxpbmcgaXNuJiMzOTt0IHN1cHBvcnRlZCwgZnVydGhlciBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcuCgpUaGUgcGF0Y2ggc2VlbXMgZm9jdXNlZCBvbiBpbXByb3ZlZCBlcnJvciBoYW5kbGluZywgd29ya3F1ZXVlIHV0aWxpemF0aW9uIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgYSBtb3JlIHJvYnVzdCBtb2R1bGUgdW5sb2FkaW5nIHByb2Nlc3MuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgc28gbm8gbmV3IEFQSXMgdG8gd29ycnkgYWJvdXQuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGlzIGdvb2QuCgpJJiMzOTt2ZSB0YWtlbiBhIGNsb3NlciBsb29rIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gYHJlbW92ZV9hbGxvY2luZm9fd29ya2AgaXMgYSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIGBERUNMQVJFX1dPUktgLCBzbyBubyBwcm9ibGVtcyB0aGVyZS4gYGxvYWRfbW9kdWxlYCByZXR1cm5zIGAtRU9QTk9UU1VQUGAgYXMgZXhwZWN0ZWQsIGFuZCBgY29kZXRhZ19tb2R1bGVfaW5pdGAgcHJvcGVybHkgY2hlY2tzIHRoaXMgZXJyb3IgY29kZS4gTW9zdCBpbXBvcnRhbnRseSwgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgY2FsbHMgYGZyZWVfc2VjdGlvbl9tZW1gIHJlZ2FyZGxlc3Mgb2Ygc3VjY2Vzcy4gVGhpcyBhbGxheWVkIG15IHN1c3BpY2lvbnMuCgpTaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB0aGUgZXhpc3RpbmcgS0FTQU4vTE9DS0RFUCBjaGVja3MgYW5kIG90aGVyIGJ1ZyBkZXRlY3Rpb24gbWV0aG9kcyBhcmUgc3VmZmljaWVudC4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIChhbGxvY190YWcpIGFuZCBjb2RldGFnIHN1YnN5c3RlbXMgdG8gaGFuZGxlIG1vZHVsZSBsb2FkaW5nIHdoZW4gbWVtb3J5IHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSB0byByZW1vdmUgdGhlIGFsbG9jaW5mbyBwcm9jIGVudHJ5IGFzeW5jaHJvbm91c2x5IGFuZCBjaGFuZ2VzIGVycm9yIGhhbmRsaW5nIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0byBhbGxvdyBtb2R1bGVzIHRvIGxvYWQgd2l0aG91dCB0YWdzIGJ5IHJldHVybmluZyAtRU9QTk9UU1VQUC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbnRyb2wgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIChhbGxvY190YWcpIGFuZCBjb2RldGFnIHN1YnN5c3RlbXMgdG8gaGFuZGxlIG1vZHVsZSBsb2FkaW5nIHdoZW4gbWVtb3J5IHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSB0byByZW1vdmUgdGhlIGFsbG9jaW5mbyBwcm9jIGVudHJ5IGFzeW5jaHJvbm91c2x5IGFuZCBjaGFuZ2VzIGVycm9yIGhhbmRsaW5nIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0byBhbGxvdyBtb2R1bGVzIHRvIGxvYWQgd2l0aG91dCB0YWdzIGJ5IHJldHVybmluZyAtRU9QTk9UU1VQUC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbnRyb2wgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjAzLjE5NDcwNzQ1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDgzNjYyNTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJNT0RVTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29kZXRhZ19sb2FkX21vZHVsZVwiLFxuICAgIFwiY29kZXRhZ191bmxvYWRfbW9kdWxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIChhbGxvY190YWcpIGFuZCBjb2RldGFnIHN1YnN5c3RlbXMgdG8gaGFuZGxlIG1vZHVsZSBsb2FkaW5nIHdoZW4gbWVtb3J5IHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSB0byByZW1vdmUgdGhlIGFsbG9jaW5mbyBwcm9jIGVudHJ5IGFzeW5jaHJvbm91c2x5IGFuZCBjaGFuZ2VzIGVycm9yIGhhbmRsaW5nIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0byBhbGxvdyBtb2R1bGVzIHRvIGxvYWQgd2l0aG91dCB0YWdzIGJ5IHJldHVybmluZyAtRU9QTk9UU1VQUC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbnRyb2wgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9kdWxlIGxvYWRpbmcgYW5kIHVubG9hZGluZyBsb2dpYyBpbiBgbGliL2NvZGV0YWcuY2AgYW5kIGBtbS9hbGxvY190YWcuY2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgYWxzbyBjaGFuZ2VzIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCB0byBzY2hlZHVsZSBhIHdvcmsgaXRlbSBmb3IgcmVtb3ZpbmcgdGhlIHByb2MgZW50cnkgaW5zdGVhZCBvZiBkb2luZyBpdCBkaXJlY3RseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBtb2R1bGUgbG9hZC91bmxvYWQgYW5kIG1lbW9yeSBwcm9maWxpbmcgc2h1dGRvd24sIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjAzLjE5NDcxMzYxNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5Nzg0MDc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJjZWRkYjIwZGFkMzdhODNkYmZiNDEzMzk3MDE0MjNjOGMxY2IyNTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDc6MTk6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbGliL2NvZGV0YWcuYyBiL2xpYi9jb2RldGFnLmNcXG5pbmRleCBhOWNkYTRjOTYyYTMwLi5hMGI2MDA3MjBhZmMxIDEwMDY0NFxcbi0tLSBhL2xpYi9jb2RldGFnLmNcXG4rKysgYi9saWIvY29kZXRhZy5jXFxuQEAgLTI0MCw3ICsyNDAsOSBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxuIFxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRrZnJlZShjbW9kKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0LyogLUVPUE5PVFNVUFAgbWVhbnMgd2UgY2FuIGxvYWQgdGhlIG1vZHVsZSB3aXRob3V0IGl0cyB0YWcuICovXFxuK1xcdFxcdGlmIChlcnIgIT0gLUVPUE5PVFNVUFApXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0zODgsNyArMzkwLDExIEBAIHZvaWQgY29kZXRhZ191bmxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZClcXG4gXFx0XFx0XFx0KytjdHR5cGUtXFx1MDAzZWNvbnRlbnRfaWQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbi1cXHRcXHRpZiAoZm91bmQgXFx1MDAyNlxcdTAwMjYgY3R0eXBlLVxcdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgbW9kdWxlIHdob3NlIG1vZHVsZV9sb2FkKCkgcmV0dXJuZWQgLUVPUE5PVFNVUFAgaXMgbm90XFxuK1xcdFxcdCAqIGluIHRoZSBpZHIgYnV0IG1heSBzdGlsbCBob2xkIHJlc2VydmVkIHNlY3Rpb24gbWVtb3J5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGN0dHlwZS1cXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxcbiBcXHRcXHRcXHRjdHR5cGUtXFx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbShtb2QsIHRydWUpO1xcbiBcXHR9XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29kZXRhZ19sb2NrKTtcXG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xcbmluZGV4IGIzMzQxMDMxMDQ3NzkuLmYzMGVmOGRkMjRjNzAgMTAwNjQ0XFxuLS0tIGEvbW0vYWxsb2NfdGFnLmNcXG4rKysgYi9tbS9hbGxvY190YWcuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXFfZmlsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva21lbWxlYWsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvYWxsb2NfdGFnLmhcXHUwMDNlXFxuIFxcbkBAIC01OTEsNiArNTkyLDEzIEBAIHZvaWQgcGdhbGxvY190YWdfc3dhcChzdHJ1Y3QgZm9saW8gKm5ldywgc3RydWN0IGZvbGlvICpvbGQpXFxuIFxcdHB1dF9wYWdlX3RhZ19yZWYoaGFuZGxlX25ldyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJlbW92ZV9hbGxvY2luZm9fZmlsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0cmVtb3ZlX3Byb2NfZW50cnkoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyBERUNMQVJFX1dPUksocmVtb3ZlX2FsbG9jaW5mb193b3JrLCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUpO1xcbitcXG4gc3RhdGljIHZvaWQgc2h1dGRvd25fbWVtX3Byb2ZpbGluZyhib29sIHJlbW92ZV9maWxlKVxcbiB7XFxuIFxcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcXG5AQCAtNjAwLDcgKzYwOCw3IEBAIHN0YXRpYyB2b2lkIHNodXRkb3duX21lbV9wcm9maWxpbmcoYm9vbCByZW1vdmVfZmlsZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0aWYgKHJlbW92ZV9maWxlKVxcbi1cXHRcXHRyZW1vdmVfcHJvY19lbnRyeShBTExPQ0lORk9fRklMRV9OQU1FLCBOVUxMKTtcXG4rXFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2cmVtb3ZlX2FsbG9jaW5mb193b3JrKTtcXG4gXFx0bWVtX3Byb2ZpbGluZ19zdXBwb3J0ID0gZmFsc2U7XFxuIH1cXG4gXFxuQEAgLTk3NSw2ICs5ODMsMTAgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWdcXG4gXFx0c3RydWN0IGFsbG9jX3RhZyAqc3RvcF90YWc7XFxuIFxcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcXG4gXFxuK1xcdC8qIFByb2ZpbGluZyBkaXNhYmxlZDogbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZ3MuICovXFxuK1xcdGlmICghbWVtX3Byb2ZpbGluZ19zdXBwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbiBcXHQvKiBwZXJjcHUgY291bnRlcnMgZm9yIGNvcmUgYWxsb2NhdGlvbnMgYXJlIGFscmVhZHkgc3RhdGljYWxseSBhbGxvY2F0ZWQgKi9cXG4gXFx0aWYgKCFtb2QpXFxuIFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTowNC40OTMxNzI1OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDA3Mzk0MTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJNT0RVTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29kZXRhZ19sb2FkX21vZHVsZVwiLFxuICAgIFwiY29kZXRhZ191bmxvYWRfbW9kdWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9kdWxlIGxvYWRpbmcgYW5kIHVubG9hZGluZyBsb2dpYyBpbiBgbGliL2NvZGV0YWcuY2AgYW5kIGBtbS9hbGxvY190YWcuY2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgYWxzbyBjaGFuZ2VzIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCB0byBzY2hlZHVsZSBhIHdvcmsgaXRlbSBmb3IgcmVtb3ZpbmcgdGhlIHByb2MgZW50cnkgaW5zdGVhZCBvZiBkb2luZyBpdCBkaXJlY3RseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBtb2R1bGUgbG9hZC91bmxvYWQgYW5kIG1lbW9yeSBwcm9maWxpbmcgc2h1dGRvd24sIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjZWRkYjIwZGFkMzdhODNkYmZiNDEzMzk3MDE0MjNjOGMxY2IyNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzoxOTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2xpYi9jb2RldGFnLmMgYi9saWIvY29kZXRhZy5jXG5pbmRleCBhOWNkYTRjOTYyYTMwLi5hMGI2MDA3MjBhZmMxIDEwMDY0NFxuLS0tIGEvbGliL2NvZGV0YWcuY1xuKysrIGIvbGliL2NvZGV0YWcuY1xuQEAgLTI0MCw3ICsyNDAsOSBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlKGNtb2QpO1xuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHQvKiAtRU9QTk9UU1VQUCBtZWFucyB3ZSBjYW4gbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZy4gKi9cbitcdFx0aWYgKGVyciAhPSAtRU9QTk9UU1VQUClcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMzg4LDcgKzM5MCwxMSBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXHRcdFx0KytjdHR5cGUtXHUwMDNlY29udGVudF9pZDtcbiBcdFx0fVxuIFx0XHR1cF93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuLVx0XHRpZiAoZm91bmQgXHUwMDI2XHUwMDI2IGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXG4rXHRcdC8qXG4rXHRcdCAqIEEgbW9kdWxlIHdob3NlIG1vZHVsZV9sb2FkKCkgcmV0dXJuZWQgLUVPUE5PVFNVUFAgaXMgbm90XG4rXHRcdCAqIGluIHRoZSBpZHIgYnV0IG1heSBzdGlsbCBob2xkIHJlc2VydmVkIHNlY3Rpb24gbWVtb3J5LlxuK1x0XHQgKi9cbitcdFx0aWYgKGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXG4gXHRcdFx0Y3R0eXBlLVx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbShtb2QsIHRydWUpO1xuIFx0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvZGV0YWdfbG9jayk7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggYjMzNDEwMzEwNDc3OS4uZjMwZWY4ZGQyNGM3MCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTE1LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva21lbWxlYWsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYWxsb2NfdGFnLmhcdTAwM2VcbiBcbkBAIC01OTEsNiArNTkyLDEzIEBAIHZvaWQgcGdhbGxvY190YWdfc3dhcChzdHJ1Y3QgZm9saW8gKm5ldywgc3RydWN0IGZvbGlvICpvbGQpXG4gXHRwdXRfcGFnZV90YWdfcmVmKGhhbmRsZV9uZXcpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHJlbW92ZV9wcm9jX2VudHJ5KEFMTE9DSU5GT19GSUxFX05BTUUsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgREVDTEFSRV9XT1JLKHJlbW92ZV9hbGxvY2luZm9fd29yaywgcmVtb3ZlX2FsbG9jaW5mb19maWxlKTtcbitcbiBzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG4ge1xuIFx0aWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpKVxuQEAgLTYwMCw3ICs2MDgsNyBAQCBzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChyZW1vdmVfZmlsZSlcbi1cdFx0cmVtb3ZlX3Byb2NfZW50cnkoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgTlVMTCk7XG4rXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cmVtb3ZlX2FsbG9jaW5mb193b3JrKTtcbiBcdG1lbV9wcm9maWxpbmdfc3VwcG9ydCA9IGZhbHNlO1xuIH1cbiBcbkBAIC05NzUsNiArOTgzLDEwIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgY29kZXRhZyAqc3RhcnQsIHN0cnVjdCBjb2RldGFnXG4gXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdG9wX3RhZztcbiBcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcbiBcbitcdC8qIFByb2ZpbGluZyBkaXNhYmxlZDogbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZ3MuICovXG4rXHRpZiAoIW1lbV9wcm9maWxpbmdfc3VwcG9ydClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuIFx0LyogcGVyY3B1IGNvdW50ZXJzIGZvciBjb3JlIGFsbG9jYXRpb25zIGFyZSBhbHJlYWR5IHN0YXRpY2FsbHkgYWxsb2NhdGVkICovXG4gXHRpZiAoIW1vZClcbiBcdFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTowNC40OTMxNzM3NDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjU0MjU3NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgbWFraW5nIHNvbWUgcHJldHR5IHRhcmdldGVkIG1vZGlmaWNhdGlvbnMgdG8gb3VyIG1lbW9yeSB0YWdnaW5nIGFuZCBwcm9maWxpbmcgaW5mcmFzdHJ1Y3R1cmUuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBncmFjZWZ1bGx5IGhhbmRsaW5nIHNjZW5hcmlvcyB3aGVyZSBjZXJ0YWluIGZlYXR1cmVzIGFyZW4ndCBzdXBwb3J0ZWQg4oCTIHNwZWNpZmljYWxseSwgY29kZSB0YWdnaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcuXG5cblNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBgY29kZXRhZ19tb2R1bGVfaW5pdGAsIGluIGBsaWIvY29kZXRhZy5jYCB0byBub3QgdGhyb3cgYW4gZXJyb3IgaWYgYC1FT1BOT1RTVVBQYCBpcyBlbmNvdW50ZXJlZC4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBjb2RlIHRhZ2dpbmcsIHdlIHNob3VsZG4ndCBmYWlsIHRoZSBtb2R1bGUgbG9hZC4gV2Ugc2hvdWxkIHNpbXBseSB3b3JrIHdpdGhvdXQgdGFncy4gU2ltaWxhcmx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgdG8gZW5zdXJlIHRoYXQgbWVtb3J5IGFsbG9jYXRlZCBmb3Igc2VjdGlvbnMgaXMgZnJlZWQgZXZlbiBpZiB0aGUgbW9kdWxlIHdhc24ndCBmb3VuZCBpbiB0aGUgSURSLCB3aGljaCBtaWdodCBvY2N1ciBpZiB0aGUgbW9kdWxlIGxvYWQgcmV0dXJuZWQgdGhlIGAtRU9QTk9UU1VQUGAgZXJyb3IuIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gZW5zdXJlIHJlc291cmNlcyBhcmUgaGFuZGxlZCwgcmVnYXJkbGVzcyBvZiBsb2FkIHN0YXRlLlxuXG5JbiBgbW0vYWxsb2NfdGFnLmNgLCB0aGUgYGxvYWRfbW9kdWxlYCBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIHVwZGF0ZWQgdG8gcmV0dXJuIGAtRU9QTk9UU1VQUGAgaWYgbWVtb3J5IHByb2ZpbGluZyBzdXBwb3J0IGlzbid0IGF2YWlsYWJsZSAoYCFtZW1fcHJvZmlsaW5nX3N1cHBvcnRgKS4gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGdvYWwgb2YgZ3JhY2VmdWxseSBkZWdyYWRpbmcgaWYgdGhlIGZ1bmN0aW9uYWxpdHkgaXNuJ3QgcHJlc2VudC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyB0aGUgY2xlYW51cCwgd2l0aCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2Agbm93IHNjaGVkdWxpbmcgYSB3b3JrIHF1ZXVlIChgcmVtb3ZlX2FsbG9jaW5mb193b3JrYCkgZm9yIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5IGluc3RlYWQgb2YgZG9pbmcgaXQgZGlyZWN0bHkuIFRoaXMgYXN5bmNocm9ub3VzIGFwcHJvYWNoIGxpa2VseSBwcmV2ZW50cyBwb3RlbnRpYWwgYmxvY2tpbmcgaW4gc2h1dGRvd24gcGF0aHMuXG5cbk5vdywgYXMgYW4gZXhwZXJ0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBmaWxlcy4gSSBpbW1lZGlhdGVseSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBsaWIvY29kZXRhZy5jYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19DT0RFX1RBR0dJTkdgIGlzIGRlZmluZWQsIGFuZCBgbW0vYWxsb2NfdGFnLmNgIG9ubHkgY29tcGlsZXMgd2l0aCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgLiBJZiB0aGVzZSBhcmUgc2V0IGNvcnJlY3RseSwgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpbGwgaGFuZGxlIHRoZXNlIGNvbmRpdGlvbnMuIFdpdGggdGhvc2Ugc2V0IGNvcnJlY3RseSwgdGhpcyBpcyBhIGNsZWFuIGFuZCBzdHJhaWdodGZvcndhcmQgd2F5IG9mIHByb3ZpZGluZyBmb3IgdGhvc2UgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjEwLjc0NzQzMzcwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg0NzQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ09ERV9UQUdHSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvTWFrZWZpbGU9MTk2PW9iai0kKENPTkZJR19GVU5DVElPTl9FUlJPUl9JTkpFQ1RJT04pICs9IGVycm9yLWluamVjdC5vXFxubGliL01ha2VmaWxlLTE5Ny1cXG5saWIvTWFrZWZpbGU6MTk4Om9iai0kKENPTkZJR19DT0RFX1RBR0dJTkcpICs9IGNvZGV0YWcub1xcbmxpYi9NYWtlZmlsZS0xOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjEwLjc5MDI4NTAyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMzEwMTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gbWVudGFsIG11c2luZ3M6XG5cbioqQW5hbHl6aW5nIGBtbS9hbGxvY190YWcuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYG1tL2FsbG9jX3RhZy5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gdGFnZ2luZyBtYWdpYyBoYXBwZW5zLCBhbmQgaXQncyBhbHdheXMgd29ydGggYSBkZWVwIGxvb2suIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdHJhY2tpbmcgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3JlIG9yZ2FuaXppbmcgdGhpbmdzLCB0aGUgdHJhZGUtb2ZmcyB0aGV5J3ZlIG1hZGUgYmV0d2VlbiBtZXRhZGF0YSBvdmVyaGVhZCBhbmQgbG9va3VwIHNwZWVkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBoYXNoIHRhYmxlLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGxpa2UgYSB0cmVlLWJhc2VkIHN0cnVjdHVyZT8gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgY29sbGlzaW9uIGhhbmRsaW5nIHN0cmF0ZWdpZXMgaWYgdGhleSdyZSB1c2luZyBhIGhhc2ggdGFibGUuXG5cbk5leHQsIEknbSBjaGVja2luZyB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHBhdGhzLiBJJ20ga2VlbiBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkLiBXZSdyZSBjbGVhcmx5IGRlYWxpbmcgd2l0aCBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50IGluIG1vc3Qgc3lzdGVtcywgc28gaXMgdGhpcyB1c2luZyBzcGlubG9ja3MsIG11dGV4ZXMsIGF0b21pYyBvcGVyYXRpb25zPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBsb2NrIGNvbnRlbnRpb24gaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhlc2UgY2FsbHMgYXJlIGludGVncmF0ZWQsIGlmIHRoZXkncmUgaW5saW5lIGZ1bmN0aW9ucyBvciBmdW5jdGlvbiBjYWxscy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB0YWdnaW5nIG1lY2hhbmlzbXMgdGhlbXNlbHZlcy4gSG93IGFyZSB0aGVzZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgcmVnaW9ucz8gSXMgaXQgc3RvcmVkIGFsb25nc2lkZSB0aGUgYWxsb2NhdGlvbiBtZXRhZGF0YSwgb3IgaXMgaXQgaW4gYSBzZXBhcmF0ZSwgZGVkaWNhdGVkIGFyZWE/IFdoYXQncyB0aGUgaW1wYWN0IG9mIHRoZSB0YWdnaW5nIHN5c3RlbSBvbiB0aGUgb3ZlcmFsbCBhbGxvY2F0aW9uIHBlcmZvcm1hbmNlPyBIb3cgYXJlIHRoZSB0YWcgdmFsdWVzIGNob3NlbiBhbmQgaG93IGNhbiB0aGV5IGJlIHVzZWQgdG8gZGVidWcgYWxsb2NhdGlvbnMuXG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzIG9yIG90aGVyIGFsbG9jYXRpb24gcHJvYmxlbXMgd2l0aGluIHRoZSB0YWcgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJZiB0aGUgdGFnIG1hbmFnZW1lbnQgc3lzdGVtIGhhcyBhbiBlcnJvciwgaXQgaXMgcG9zc2libGUgZm9yIHRoaW5ncyB0byBnZXQgbG9zdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjE1LjIxMzM4ODc1N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE5MDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY190YWcub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xNDk9b2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgKz0gdGVzdHMvbGF6eV9tbXVfbW9kZV9rdW5pdC5vXFxubW0vTWFrZWZpbGU6MTUwOm9iai0kKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKSArPSBhbGxvY190YWcub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOToxNS4yNTc1ODI2MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk0MDk5Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaW4gdGhlIEtjb25maWcgZmlsZS4gVGhpcyBpcyBjcnVjaWFsOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGlzIHNldHRpbmcgaXMgZnVuZGFtZW50YWwuIEtub3dpbmcgdGhlIHN0YXR1cyBvZiB0aGlzIGNvbmZpZyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3Igb3B0aW1pemluZyBtZW1vcnkgdXNhZ2UuIFVuZGVyc3RhbmRpbmcgaXRzIHN0YXRlIGltbWVkaWF0ZWx5IGRpY3RhdGVzIG15IG5leHQgYWN0aW9uIGluIHRoZSBwcm9qZWN0LiBJdHMgaW1wYWN0IGlzIHByZXR0eSBzaWduaWZpY2FudCB3aGVuIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOToxOC44NTE2ODM3ODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNDc3OTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMjMtXFxubW0vS2NvbmZpZy5kZWJ1ZzozMjQ6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9LY29uZmlnLmRlYnVnLTMyNS1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzYtXFxubW0vS2NvbmZpZy5kZWJ1ZzozMzc6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzgtXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDEtXFxubW0vS2NvbmZpZy5kZWJ1ZzozNDI6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTM0My1cXHRib29sIFxcXCJNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjIwLjg1NjQ2ODEyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDI3NzE4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gRGVidWdnaW5nIEtlcm5lbCBDb25maWdzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGRlYnVnZ2luZyBvcHRpb25zIGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZS4uLiB0aGUgYG1tL0tjb25maWcuZGVidWdgIGZpbGUgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljIGRlYnVnZ2luZyBzZXR0aW5ncy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgMzI0LiBUaGF0IHJhbmdlIG9mdGVuIGhvbGRzIHJlbGF0ZWQgb3B0aW9ucywgYW5kIGdpdmVuIG15IGV4cGVyaWVuY2UsIGl0J3MgYSBsaWtlbHkgc3BvdCBmb3IgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3IgYW4gaW50ZXJjb25uZWN0ZWQgZ3JvdXAgb2YgZGVidWcgZmxhZ3MgcmVsYXRlZCB0byB0aGUgbWVtb3J5IG1hbmFnZXIuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzZWUgd2hhdCdzIHdoYXQgaW4gdGhhdCBhcmVhLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGEgZ3JvdXAgcmVsYXRlZCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6MjQuMzk5MjQyNjYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuIDMyMzpcXHRcXG4gMzI0OlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxuIDMyNTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbiAzMjY6XFx0XFx0ZGVmYXVsdCBuXFxuIDMyNzpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiAzMjg6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDMyOTpcXHRcXHRzZWxlY3QgQ09ERV9UQUdHSU5HXFxuIDMzMDpcXHRcXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG4gMzMxOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4gMzMyOlxcdFxcdGhlbHBcXG4gMzMzOlxcdFxcdCAgVHJhY2sgYWxsb2NhdGlvbiBzb3VyY2UgY29kZSBhbmQgcmVjb3JkIHRvdGFsIGFsbG9jYXRpb24gc2l6ZVxcbiAzMzQ6XFx0XFx0ICBpbml0aWF0ZWQgYXQgdGhhdCBjb2RlIGxvY2F0aW9uLiBUaGUgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIHRyYWNrXFxuIDMzNTpcXHRcXHQgIG1lbW9yeSBsZWFrcyB3aXRoIGEgbG93IHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgaW1wYWN0LlxcbiAzMzY6XFx0XFxuIDMzNzpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG4gMzM4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYnkgZGVmYXVsdFxcXCJcXG4gMzM5OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOToyNC4zOTkzMTUwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjYzMzc3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgUHJvZmlsaW5nIFBhdGNoKipcblxuT2theSwgc28gd2UncmUgaW50cm9kdWNpbmcgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBhcmVhcywgbGV0J3MgYnJlYWsgaXQgZG93bi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHdlJ3JlIG1vZGlmeWluZyB0aGUgYGNvZGV0YWdgIHN1YnN5c3RlbTogSSBzZWUgY2hhbmdlcyB0byBgY29kZXRhZ19tb2R1bGVfaW5pdGAgYW5kIGBjb2RldGFnX3VubG9hZF9tb2R1bGVgIGluIGBsaWIvY29kZXRhZy5jYC4gVGhhdCBtYWtlcyBzZW5zZSwgc2luY2UgY29kZSB0YWdzIGFyZSBhbGwgYWJvdXQgaWRlbnRpZnlpbmcgd2hlcmUgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgZnJlZWQsIHByZXN1bWFibHkgbGlua2VkIHRvIGEgbG9hZGVkIG1vZHVsZS4gVGhlbiBpbiBgbW0vYWxsb2NfdGFnLmNgLCB3ZSBoYXZlIGBsb2FkX21vZHVsZWAgYW5kIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBiZWluZyBtb2RpZmllZC5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSBvbmVzIHdpdGhpbiB0aGUgY29kZSB0YWcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHN1Yi1zeXN0ZW1zLCBnb2luZyB0byBiZSB0cmlnZ2VyZWQgaW4gb3VyIHZpcnR1YWwgbWFjaGluZSBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQuXG5cbmBjb2RldGFnX21vZHVsZV9pbml0YCBpcyBjYWxsZWQsIG9mIGNvdXJzZSwgd2hlbiBhIG1vZHVsZSBpcyBsb2FkZWQgaW50byB0aGUga2VybmVsLiBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBpcyBpdHMgY291bnRlcnBhcnQsIHRyaWdnZXJlZCBvbiBtb2R1bGUgdW5sb2FkLiBXZSdyZSBvYnZpb3VzbHkgaW5zdHJ1bWVudGluZyB0aGVzZSBwb2ludHMuXG5cbk5vdywgYGxvYWRfbW9kdWxlYCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCdzIGEgY2FsbGJhY2sgcmVnaXN0ZXJlZCB3aXRoaW4gYGNvZGV0YWdfdHlwZV9kZXNjYCwgZXN0YWJsaXNoZWQgdmlhIGBhbGxvY190YWdfaW5pdGAuIFNvLCBpdCdzIHRpZWQgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gdGFnZ2luZyBtZWNoYW5pc20uIFRoaXMgaGFzIHRoZSBoYWxsbWFya3Mgb2YgYmVpbmcgcHJvcGVybHkgaW50ZWdyYXRlZC5cblxuYHNodXRkb3duX21lbV9wcm9maWxpbmdgIGlzIHRoZSBvdGhlciBwaWVjZSwgYW5kIHRoaXMgaGFwcGVucyB3aGVuIG1lbW9yeSBwcm9maWxpbmcgaXMgYmVpbmcgZGlzYWJsZWQuIFNvIGl0IGlzIHRoZSBjb3VudGVycGFydCB0byB0aGUgZW5hYmxlZCBmdW5jdGlvbmFsaXR5LCBzbyBzaG91bGQgYmUgY2FsbGVkIHRvIHByb3Blcmx5IGNsZWFudXAuXG5cbk9rYXksIGxldCdzIHZlcmlmeSB0aGF0IGxhc3QgcG9pbnQsIHdoZXJlIGV4YWN0bHkgaXMgdGhhdCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgZnVuY3Rpb24gY2FsbGVkPyBOZWVkIHRvIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMuIEdvdHRhIGJlIHN1cmUgdGhvc2UgY2xlYW51cHMgYXJlIGRvbmUgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTozMS4wNjI2OTQzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzOTQzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2h1dGRvd25fbWVtX3Byb2ZpbGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9hbGxvY190YWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9hbGxvY190YWcuYz02MDA9c3RhdGljIERFQ0xBUkVfV09SSyhyZW1vdmVfYWxsb2NpbmZvX3dvcmssIHJlbW92ZV9hbGxvY2luZm9fZmlsZSk7XFxubW0vYWxsb2NfdGFnLmMtNjAxLVxcbm1tL2FsbG9jX3RhZy5jOjYwMjpzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXFxubW0vYWxsb2NfdGFnLmMtNjAzLXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTYxNT12b2lkIF9faW5pdCBhbGxvY190YWdfc2VjX2luaXQodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTYzMi1cXHRpZiAoa2VybmVsX3RhZ3MuY291bnQgXFx1MDAzZSAoMVVMIFxcdTAwM2NcXHUwMDNjIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKSkge1xcbm1tL2FsbG9jX3RhZy5jOjYzMzpcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGZhbHNlKTsgLyogYWxsb2NpbmZvIGZpbGUgZG9lcyBub3QgZXhpc3QgeWV0ICovXFxubW0vYWxsb2NfdGFnLmMtNjM0LVxcdFxcdHByX2VycihcXFwiJWx1IGFsbG9jYXRpb24gdGFncyBjYW5ub3QgYmUgcmVmZXJlbmNlcyB1c2luZyAlZCBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuLS1cXG5tbS9hbGxvY190YWcuYz04NDY9c3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5tbS9hbGxvY190YWcuYy04NjUtXFx0aWYgKCFlbnN1cmVfYWxpZ25tZW50KGFsaWduLCBcXHUwMDI2cHJlcGVuZCkpIHtcXG5tbS9hbGxvY190YWcuYzo4NjY6XFx0XFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcXG5tbS9hbGxvY190YWcuYy04NjctXFx0XFx0cHJfZXJyKFxcXCIlczogYWxpZ25tZW50ICVsdSBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGxvY2F0aW9uIHRhZyBpbmRleGluZy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcXFxuXFxcIixcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTkxNS1cXHRcXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIXRhZ3NfYWRkcmVzc2FibGUoKSkge1xcbm1tL2FsbG9jX3RhZy5jOjkxNjpcXHRcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xcbm1tL2FsbG9jX3RhZy5jLTkxNy1cXHRcXHRcXHRwcl93YXJuKFxcXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuLS1cXG5tbS9hbGxvY190YWcuYy05MjItXFx0XFx0aWYgKGdyb3dfcmVzKSB7XFxubW0vYWxsb2NfdGFnLmM6OTIzOlxcdFxcdFxcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XFxubW0vYWxsb2NfdGFnLmMtOTI0LVxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuLS1cXG5tbS9hbGxvY190YWcuYz0xMzM0PXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMzU3LVxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGNyZWF0ZSAlcyBmaWxlXFxcXG5cXFwiLCBBTExPQ0lORk9fRklMRV9OQU1FKTtcXG5tbS9hbGxvY190YWcuYzoxMzU4OlxcdFxcdHNodXRkb3duX21lbV9wcm9maWxpbmcoZmFsc2UpO1xcbm1tL2FsbG9jX3RhZy5jLTEzNTktXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMzY0LVxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgYWRkcmVzcyBzcGFjZSBmb3IgbW9kdWxlIHRhZ3MsIGVycm5vID0gJWRcXFxcblxcXCIsIHJlcyk7XFxubW0vYWxsb2NfdGFnLmM6MTM2NTpcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xcbm1tL2FsbG9jX3RhZy5jLTEzNjYtXFx0XFx0cmV0dXJuIHJlcztcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEzNzItXFx0XFx0ZnJlZV9tb2RfdGFnc19tZW0oKTtcXG5tbS9hbGxvY190YWcuYzoxMzczOlxcdFxcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XFxubW0vYWxsb2NfdGFnLmMtMTM3NC1cXHRcXHRyZXR1cm4gUFRSX0VSUihhbGxvY190YWdfY3R0eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6MzEuMTA2MDk0NDU1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MjM0MDczMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1vZHVsZSBUYWdnaW5nIGFuZCBNZW1vcnkgUHJvZmlsaW5nIEZpeGVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGFkZHJlc3Npbmcgc29tZSBzdWJ0bGUgaXNzdWVzIGluIHRoZSBrZXJuZWwncyBtb2R1bGUgdGFnZ2luZyBhbmQgbWVtb3J5IHByb2ZpbGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBtb2R1bGVzIGFyZSBsb2FkZWQsIHVubG9hZGVkLCBhbmQgcHJvZmlsZWQuIFRoZSBjb3JlIGNvbmNlcm4gc2VlbXMgdG8gYmUgdGhhdCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgY2FuIGJlIGludm9rZWQgZnJvbSBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgZHVyaW5nIG1lbW9yeSBjb250ZW50aW9uIG9yIGFsbG9jYXRpb24gZmFpbHVyZXMsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBjYWxsZWQgYHJlbW92ZV9wcm9jX2VudHJ5YCBkaXJlY3RseSBmcm9tIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCwgd2hpY2ggaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgYSBrZXJuZWwgcGFuaWMsIHJpZ2h0PyBUaGUgY29udGV4dCBvZiBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgbWlnaHQgbm90IGFsbG93IHNsZWVwaW5nIG9yIGhvbGRpbmcgY2VydGFpbiBsb2Nrcy4gU28gdGhlIGZpeCBpcyB0byBzY2hlZHVsZSB0aGlzIG9wZXJhdGlvbiBhcyBhIHdvcmsgaXRlbSwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2guXG5cbk5leHQsIGl0IGhhbmRsZXMgYGxvYWRfbW9kdWxlYCByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gVGhpcyBtZWFucyB0aGUgbW9kdWxlIGxvYWQgd291bGRuJ3QgZmFpbCBjb21wbGV0ZWx5IGlmIHByb2ZpbGluZyBpcyBkaXNhYmxlZDsgYGNvZGV0YWdfbW9kdWxlX2luaXRgIHNpbXBseSBza2lwcyB0aGUgdGFnZ2luZyBwcm9jZXNzLiBJdCdzIGEgcHJhZ21hdGljIHNvbHV0aW9uLiBOb3csIHRoZSBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBmdW5jdGlvbiBhbHNvIGNsZWFycyBtZW1vcnkgZXZlbiBpZiB0aGUgbW9kdWxlIHdhc24ndCBpbiB0aGUgSURSLCB3aGljaCBmaXhlcyBhIG1lbW9yeSBsZWFrIHdoZW4gYSBtb2R1bGUgaXMgbG9hZGVkIGJ1dCBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIFRoaXMgaXMgZ29vZCBob3VzZWtlZXBpbmcuXG5cblRoaXMgaXMgYSBjb3JlIGtlcm5lbCBjaGFuZ2UsIHRvdWNoaW5nIG1vZHVsZSBsb2FkaW5nIGFuZCBtZW1vcnkgcHJvZmlsaW5nLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC4gV2UgbmVlZCB0byByZWFsbHkgcHV0IHRoZXNlIG5ldyBjb2RlIHBhdGhzIHRocm91Z2ggdGhlaXIgcGFjZXMuXG5cbkxldCBtZSBzZWUsIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgY29kZXRhZ19tb2R1bGVfaW5pdGAsIGBjb2RldGFnX3VubG9hZF9tb2R1bGVgLCBhbmQgYHNodXRkb3duX21lbV9wcm9maWxpbmdgICh0aG91Z2ggaXQncyBzdGF0aWMpIGFuZCBgcmVtb3ZlX2FsbG9jaW5mb19maWxlYCAoYWxzbyBzdGF0aWMpLiBXYWl0IGEgc2Vjb25kLCBpcyBgY29kZXRhZ19tb2R1bGVfaW5pdGAgc3RhdGljPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdDsgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBMb29rcyBsaWtlIGEgcXVpY2sgdHJpcCB0byBgbGliL2NvZGV0YWcuY2AgaXMgaW4gb3JkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6MzkuNjI5NTA0Mzk0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUzODI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2RldGFnX21vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9jb2RldGFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL2NvZGV0YWcuYz0xODU9c3RhdGljIGNvbnN0IGNoYXIgKmdldF9tb2RfbmFtZShfX21heWJlX3VudXNlZCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5saWIvY29kZXRhZy5jLTE5My1cXG5saWIvY29kZXRhZy5jOjE5NDpzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxubGliL2NvZGV0YWcuYy0xOTUte1xcbi0tXFxubGliL2NvZGV0YWcuYz0zNDA9aW50IGNvZGV0YWdfbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxubGliL2NvZGV0YWcuYy0zNDktXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHR5cGUsIFxcdTAwMjZjb2RldGFnX3R5cGVzLCBsaW5rKSB7XFxubGliL2NvZGV0YWcuYzozNTA6XFx0XFx0cmV0ID0gY29kZXRhZ19tb2R1bGVfaW5pdChjdHR5cGUsIG1vZCk7XFxubGliL2NvZGV0YWcuYy0zNTEtXFx0XFx0aWYgKHJldClcXG4tLVxcbmxpYi9jb2RldGFnLmM9NDA1PWNvZGV0YWdfcmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgY29kZXRhZ190eXBlX2Rlc2MgKmRlc2MpXFxuLS1cXG5saWIvY29kZXRhZy5jLTQxOS1cXG5saWIvY29kZXRhZy5jOjQyMDpcXHRlcnIgPSBjb2RldGFnX21vZHVsZV9pbml0KGN0dHlwZSwgTlVMTCk7XFxubGliL2NvZGV0YWcuYy00MjEtXFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6MzkuNjczMDQ2NjY5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzY1NzA4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKk1vZHVsZSBNYW5hZ2VtZW50IENvbmNlcm5zOiBTdGF0aWMgdnMuIEV4cG9ydGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHR3byBmdW5jdGlvbnMsIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAuIFRoZSBrZXkgcG9pbnQgaGVyZSwgYW5kIHdoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lLCBpcyB0aGF0IHRoZXkncmUgZWl0aGVyIGV4cG9ydGVkIG9yIG5vdCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBtZWFucyB0aGV5J3JlIGV4cGxpY2l0bHkgaW50ZW5kZWQgdG8gYmUgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZWlyIGltbWVkaWF0ZSBjb21waWxhdGlvbiB1bml0LiBUaGlzIGhhcyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgaW4gYSBtb2R1bGFyIHN5c3RlbS5cblxuSWYgdGhleSAqd2VyZW4ndCogZXhwb3J0ZWQgb3Igc3RhdGljLCB0aGV5J2QgYmUgaGlkZGVuLCBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgd2Ugd291bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBleHRlcm5hbCBjb2RlIGRpcmVjdGx5IGFjY2Vzc2luZyBvciBjYWxsaW5nIHRoZW0uIFRoaXMgd291bGQgYmUgdHlwaWNhbCBmb3IgZnVuY3Rpb25zIHVzZWQgb25seSB3aXRoaW4gdGhlIG1vZHVsZS5cblxuQnV0IGJlY2F1c2UgdGhleSAqYXJlKiBleHBvc2VkLCB0aGlzIHN1Z2dlc3RzIHRoZXkncmUgZGVzaWduZWQgdG8gYmUgYSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBtb2R1bGUgaW50ZXJmYWNlLiBUaGlzIG1ha2VzIG1lIGNvbnNpZGVyIGEgZmV3IHRoaW5nczpcblxuKiAgICoqRGVwZW5kZW5jeSBNYW5hZ2VtZW50OioqIEhvdyBhcmUgdGhlc2UgbW9kdWxlcyBsb2FkZWQgYW5kIHVubG9hZGVkPyBJcyB0aGVyZSBhIGR5bmFtaWMgbGlua2VyIGludm9sdmVkPyBBcmUgd2UgZGVhbGluZyB3aXRoIHNoYXJlZCBsaWJyYXJpZXMsIGR5bmFtaWNhbGx5IGxvYWRhYmxlIG1vZHVsZXMsIG9yIHNvbWV0aGluZyBtb3JlIGN1c3RvbT8gVGhlc2UgZnVuY3Rpb25zIHdvdWxkIGxpa2VseSBiZSB0aGUgaW50ZXJmYWNlIHBvaW50cyB0aGUgZHluYW1pYyBsb2FkZXIgdXNlcyB0byBpbml0aWFsaXplIGFuZCBzaHV0IGRvd24gbW9kdWxlcy5cblxuKiAgICoqQVBJIERlc2lnbjoqKiBXaGF0J3MgdGhlIGRlc2lnbiByYXRpb25hbGUgZm9yIHRoZXNlIGZ1bmN0aW9ucz8gQXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBBUEkgZm9yIG1hbmFnaW5nIGNvZGUgbW9kdWxlcywgb3IgYXJlIHRoZXkgbG93ZXItbGV2ZWwgcHJpbWl0aXZlcz8gS25vd2luZyB0aGlzIHdpbGwgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIGRlc2lnbi5cblxuKiAgICoqUG90ZW50aWFsIGZvciBDb25mbGljdHM6KiogU2luY2Ugd2UncmUgZXhwb3J0aW5nIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLCB3ZSBuZWVkIHRvIGJlIGV4dHJlbWVseSBjYXJlZnVsIGFib3V0IHBvdGVudGlhbCBuYW1lIGNvbGxpc2lvbnMsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGluIGEgc3lzdGVtIHdpdGggcG90ZW50aWFsbHkgbWFueSBtb2R1bGVzIGZyb20gbXVsdGlwbGUgc291cmNlcy4gV2UgbWlnaHQgbmVlZCB0byBjb25zaWRlciBzeW1ib2wgdmVyc2lvbmluZywgbmFtZXNwYWNlIG1hbmFnZW1lbnQsIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtIHRvIGF2b2lkIGNvbmZsaWN0cy5cblxuKiAgICoqU2VjdXJpdHkgSW1wbGljYXRpb25zOioqIElmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW50cnkgcG9pbnRzIHRvIHRoZSBjb2RlIHdpdGhpbiBhIG1vZHVsZSwgd2UgbmVlZCB0byBjb25zaWRlciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFdoYXQgYXJlIHRoZSB2YWxpZGF0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBzY2hlbWVzPyBBcmUgdGhlcmUgcmlza3Mgb2YgbWFsaWNpb3VzIG1vZHVsZXM/XG5cbiogICAqKlRocmVhZCBTYWZldHk6KiogRGVwZW5kaW5nIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIHdlJ2xsIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHRocmVhZCBzYWZldHkuIElmIG11bHRpcGxlIHRocmVhZHMgbWlnaHQgbG9hZCBvciB1bmxvYWQgbW9kdWxlcyBjb25jdXJyZW50bHksIHdlIG5lZWQgYXBwcm9wcmlhdGUgbG9ja2luZyBtZWNoYW5pc21zIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBkYXRhIGNvcnJ1cHRpb24uXG5cbkVzc2VudGlhbGx5LCBieSBtYWtpbmcgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBub24tc3RhdGljLCB0aGV5IGFyZSAqc2lnbmFsbGluZyogdGhhdCB0aGV5IGFyZSBpbXBvcnRhbnQgZW50cnkgcG9pbnRzLCBhbmQsIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgY29udGV4dCBvZiBtb2R1bGUgbWFuYWdlbWVudCwgaW5jbHVkaW5nIGRlc2lnbiBjaG9pY2VzLCBwb3RlbnRpYWwgcmlza3MgYW5kIGhvdyB0byBtYW5hZ2UgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjQ0LjYwOTYyMDEzNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMTE1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29kZXRhZ19sb2FkX21vZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvY29kZXRhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9jb2RldGFnLmM9MzI0PXZvaWQgY29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbW9kdWxlICpuZXdfbW9kKVxcbi0tXFxubGliL2NvZGV0YWcuYy0zMzktXFxubGliL2NvZGV0YWcuYzozNDA6aW50IGNvZGV0YWdfbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbmxpYi9jb2RldGFnLmMtMzQxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6NDQuNjUzNzM2NDU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDI3Mjc2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1vZHVsZSBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoaXMsIHllYWg/IE1ha2VzIHNlbnNlLiBCdXQgd2FpdCBhIHNlYy4uLiBJIG5lZWQgdG8gY29uZmlybSBgY29kZXRhZ19sb2FkX21vZHVsZWAgaXMgc3BlY2lmaWNhbGx5IGNhbGxlZCAqZHVyaW5nKiBtb2R1bGUgbG9hZC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4uIExldCdzIGRpZyBpbnRvIHRoZSBzb3VyY2UsIHNwZWNpZmljYWxseSBga2VybmVsL21vZHVsZS9tYWluLmNgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBmdW5jdGlvbiBhbmQgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZSBsb2FkaW5nIHByb2Nlc3MuIFRpbWUgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTo0Ny44OTY0NjU4NzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjQ1OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvZGV0YWdfbG9hZF9tb2R1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL21vZHVsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL21vZHVsZS9tYWluLmM9MzQyMj1zdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICp1YXJncyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1NzAtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MzU3MTpcXHRpZiAoY29kZXRhZ19sb2FkX21vZHVsZShtb2QpKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1NzItXFx0XFx0Z290byBzeXNmc19jbGVhbnVwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTo0Ny45NDAxMTkwNjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NTQ4MDcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQWxsb2NhdGlvbiBUYWcgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgYWxsb2NhdGlvbiB0YWdnaW5nIG1lY2hhbmlzbS4gVGhlIG5hbWUgZGVmaW5pdGVseSByaW5ncyBhIGJlbGwuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgd2hldGhlciB0aGVyZSdzIGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGVzZSB0YWdzLCBzb21ldGhpbmcgbGlrZSBgYWxsb2NfdGFnX2luaXRgIHBlcmhhcHM/IEknZCBleHBlY3Qgb25lLCBpdCdzIGZ1bmRhbWVudGFsIGZvciBhbnkgc3lzdGVtIGxpa2UgdGhpcy5cblxuT2theSwgc28gdGhlIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGBsb2FkX21vZHVsZWAgd2l0aGluIGBtbS9hbGxvY190YWcuY2AuIEFubm95aW5nLCBpdCdzIHN0YXRpYywgc28gaXTigJlzIGxpa2VseSBub3QgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSAqKmNvbnRleHQqKiBvZiBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgbG9hZGluZyBwcm9jZXNzIGluZmx1ZW5jZXMgdGhlIHRhZ2dlZCBhbGxvY2F0aW9ucy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhhdCBmaWxlIG1vcmUgY2xvc2VseS4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vYWxsb2NfdGFnLmNgLiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlICpyZWxhdGVkKiB0byBgbG9hZF9tb2R1bGVgLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZW50cnkgcG9pbnRzLCBob3cgdGhlc2UgdGFnZ2VkIGFsbG9jYXRpb25zIGFyZSBpbml0aWFsaXplZCwgYW5kIGlmIHRob3NlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggYGxvYWRfbW9kdWxlYCBzb21laG93LiBJIHN1c3BlY3QgdGhlcmXigJlzIGdvaW5nIHRvIGJlIGEgY2hhaW4gb2YgY2FsbHMgb3Igc29tZSBmb3JtIG9mIGludGVyYWN0aW9uIHRoYXTigJlzIHJlbGV2YW50LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjg2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6NTIuMzg1NjAxODE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAxMDM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2FkX21vZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9hbGxvY190YWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9hbGxvY190YWcuYz05MzM9c3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTk3OC1cXG5tbS9hbGxvY190YWcuYzo5Nzk6c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWcgKnN0b3ApXFxubW0vYWxsb2NfdGFnLmMtOTgwLXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTEzMzQ9c3RhdGljIGludCBfX2luaXQgYWxsb2NfdGFnX2luaXQodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEzNDItXFx0XFx0LmZyZWVfc2VjdGlvbl9tZW1cXHQ9IHJlbGVhc2VfbW9kdWxlX3RhZ3MsXFxubW0vYWxsb2NfdGFnLmM6MTM0MzpcXHRcXHQubW9kdWxlX2xvYWRcXHRcXHQ9IGxvYWRfbW9kdWxlLFxcbm1tL2FsbG9jX3RhZy5jLTEzNDQtXFx0XFx0Lm1vZHVsZV9yZXBsYWNlZFxcdD0gcmVwbGFjZV9tb2R1bGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjUyLjQyODYxNjQ1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTEzNzUxMzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqXG5cbk9rYXksIHNvIGBsb2FkX21vZHVsZWAgaXMgdGhlIGtleSBjYWxsYmFjayBoZXJlOyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBXaGljaCBtZWFucyBgY29kZXRhZ19sb2FkX21vZHVsZWAgYW5kIGBjb2RldGFnX3VubG9hZF9tb2R1bGVgIGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCBmb3IgdHJhY2tpbmcgZG93biB3aGF0J3MgZ29pbmcgb24uIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZS4gQW5kIHRvIGdldCB0aGlzIHdob2xlIHRoaW5nIHdvcmtpbmcsIEkgcmVtZW1iZXIgSSBuZWVkIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgZW5hYmxlZCwgcmlnaHQ/IEFuZCBiZWNhdXNlIGBDT05GSUdfQ09ERV9UQUdHSU5HYCBpcyBhY3R1YWxseSAqc2VsZWN0ZWQqIGJ5IHRoYXQsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyB0aGUgcmVhbCBraW5ncGluIGNvbmZpZy4gXG5cbkJ1dCB3YWl0IGEgbWludXRlLCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVwZW5kcyBvbiBgTU1VYCBhbmQgYFBST0NfRlNgLi4uIHRoYXQncyBhIGtleSByZXF1aXJlbWVudCwgYW5kIHdvcnRoIG5vdGluZy4gQXJlIHRoZXJlIGFueSBvdGhlciBmbGFncyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGFuZCBzZWUgaWYgYE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdgIGlzIHJlbGV2YW50IGhlcmUgYXMgd2VsbC4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTo1Ny4zNDIzNzA0NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTUyOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTMzNz1jb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMzQxLVxcbm1tL0tjb25maWcuZGVidWc6MzQyOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDMtXFx0Ym9vbCBcXFwiTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTo1Ny4zOTM5Mjc0MjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxMzE3OTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZsZWN0aW5nIG9uIE1lbW9yeSBBbGxvY2F0aW9uIFByb2ZpbGluZyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kLCByZWFsaXN0aWNhbGx5LCB3ZSBkb24ndCAqc3RyaWN0bHkqIG5lZWQgdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR2AgZmxhZy4gSXQgc2VlbXMgbGlrZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYnkgaXRzZWxmIHNob3VsZCBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbiBmb3IgbW9zdCBzY2VuYXJpb3MuIEknbSBnb2luZyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLCB0aG91Z2guXG5cbkxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFyZWFzIG9mIGNvZGUgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4gSSdtIGN1cmlvdXMgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBtaWdodCBuZWVkIGF0dGVudGlvbi4gSG1tLCBgcGdhbGxvY190YWdfc3dhcGAgaXMgaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGRvZXNuJ3QgYWN0dWFsbHkgdG91Y2ggdGhhdC4gSXQncyBqdXN0IHRoZXJlIGZvciBjb250ZXh0LCBub3RoaW5nIHRvIHdvcnJ5IGFib3V0LlxuXG5BbHJpZ2h0LCB0aGUgcGF0Y2ggKmRvZXMqIGFkZCBgcmVtb3ZlX2FsbG9jaW5mb19maWxlYCwgd2hpY2ggaXMgc3RhdGljLCBhbmQgbW9kaWZpZXMgdGhlIGV4aXN0aW5nIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBmdW5jdGlvbiwgYWxzbyBzdGF0aWMuIExldCBtZSBzZWUgd2hlcmUgYHNodXRkb3duX21lbV9wcm9maWxpbmdgIGdldHMgY2FsbGVkLiBBaCwgaXQncyBjYWxsZWQgZnJvbSBgYWxsb2NfdGFnX3NlY19pbml0YCwgYHJlc2VydmVfbW9kdWxlX3RhZ3NgLCBhbmQgYGFsbG9jX3RhZ19pbml0YC4gTm93LCBJIHdvbmRlciBpZiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgaXMgY2FsbGVkIGZyb20gYGFsbG9jX3RhZ19tb2R1bGVfaW5pdGA/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzODcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MjA6MDIuNjA3MTA5Njc4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjI2NTU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXNlcnZlX21vZHVsZV90YWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2FsbG9jX3RhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2FsbG9jX3RhZy5jPTc4NT1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy04NDUtXFxubW0vYWxsb2NfdGFnLmM6ODQ2OnN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbm1tL2FsbG9jX3RhZy5jLTg0Ny1cXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXFxuLS1cXG5tbS9hbGxvY190YWcuYz0xMzM0PXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMzQwLVxcdFxcdC5uZWVkc19zZWN0aW9uX21lbVxcdD0gbmVlZHNfc2VjdGlvbl9tZW0sXFxubW0vYWxsb2NfdGFnLmM6MTM0MTpcXHRcXHQuYWxsb2Nfc2VjdGlvbl9tZW1cXHQ9IHJlc2VydmVfbW9kdWxlX3RhZ3MsXFxubW0vYWxsb2NfdGFnLmMtMTM0Mi1cXHRcXHQuZnJlZV9zZWN0aW9uX21lbVxcdD0gcmVsZWFzZV9tb2R1bGVfdGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MjA6MDIuNjQ5Mzc4NzMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTY4OTM5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgTW9kdWxlIFRhZ2dpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AuLi4gcmlnaHQsIHRoYXQncyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBgY29kZXRhZ19tb2R1bGVfaW5pdGAuIEdvb2QuIFRoYXQgcHV0cyBpdCBpbiBjb250ZXh0LiBUaGUga2V5IGVudHJ5IHBvaW50cyB0byBmb2N1cyBvbiBzZWVtIHRvIGJlIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBmdW5jdGlvbmFsaXR5IOKAkyB0aGUgbG9hZCBhbmQgdW5sb2FkIGhvb2tzLiBUaGV5J3JlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZSBsb29rLiBOb3csIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2ssIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgY29kZXRhZ19sb2FkX21vZHVsZWAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIE5vIHBvaW50IGluIGRpZ2dpbmcgaW50byBhIG5vbi1leHBvcnRlZCBzeW1ib2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MjA6MDYuNzA2Mjc1NzY5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxNjkyNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvY29kZXRhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoyMDowNi43NTA3OTkyMTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4NTc5MzYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNb2R1bGUgQ2FsbCoqXG5cbkFscmlnaHQsIHNvIEknbSB0cmFjaW5nIHRoaXMgZXhlY3V0aW9uIHBhdGggYW5kIGl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZC4gVGhhdCdzIGZpbmUsIGJ1dCB3aGF0J3MgcmVhbGx5IHRocm93aW5nIG1lIGlzIHRoYXQgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBga2VybmVsL21vZHVsZS9tYWluLmNgLCBhbmQgdGhhdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0J3MgZGVmaW5lZC5cblxuSGFuZyBvbi4uLiBJIHRoaW5rIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBpbiBgbGliL2NvZGV0YWcuY2AuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBXYWl0IGEgc2Vjb25kLCBjb3VsZCBpdCBoYXZlIGEgZGVjbGFyYXRpb24gaW4gYGluY2x1ZGUvbGludXgvY29kZXRhZy5oYD8gVGhhdCdzIHRoZSBtb3N0IGxpa2VseSBzcG90IGZvciBhbiBpbXBvcnQgaWYgaXQncyBub3QgYmVpbmcgZXhwbGljaXRseSBleHBvcnRlZC4gR290IHRvIGNoZWNrIHRoYXQgaW5jbHVkZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjIwOjEzLjIzNjU5NTI2NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0ODA2ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29kZXRhZ19sb2FkX21vZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2NvZGV0YWcuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NvZGV0YWcuaD05OD12b2lkIGNvZGV0YWdfbW9kdWxlX3JlcGxhY2VkKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHVsZSAqbmV3X21vZCk7XFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmg6OTk6aW50IGNvZGV0YWdfbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKTtcXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC0xMDAtdm9pZCBjb2RldGFnX3VubG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oPTExMj1zdGF0aWMgaW5saW5lIHZvaWQgY29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbW9kdWxlICpuZXdfbW9kKSB7fVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjExMzpzdGF0aWMgaW5saW5lIGludCBjb2RldGFnX2xvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTExNC1zdGF0aWMgaW5saW5lIHZvaWQgY29kZXRhZ191bmxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkge31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MjA6MTMuMjgwMDc4MDk5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTU2NzQ0OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIE1vZHVsZSBMb2FkaW5nIGFuZCBVbmxvYWRpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgYXJlIGluZGVlZCB0aGUgY29ycmVjdCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLCBhcyBzdXNwZWN0ZWQuIFRoZXkgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBob29rcyByZWxhdGVkIHRvIG1vZHVsZSBpbnRlcmFjdGlvbi5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBsdXJraW5nIGFyb3VuZC4gSSBzZWUgYGFsbG9jX3RhZ19pbml0YCBpcyBtYXJrZWQgYXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHNvIHRoYXQncyBwcm9iYWJseSBub3QgdXNlZnVsIGZvciB0cmFja2luZyBtb2R1bGUgbGlmZXRpbWUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBhbmQgYHJlbW92ZV9hbGxvY2luZm9fZmlsZWAgYXJlIGJvdGggc3RhdGljLCB3aGljaCBnZW5lcmFsbHkgbWVhbnMgdGhleSdyZSBub3QgZXh0ZXJuYWxseSB2aXNpYmxlIGFuZCBjYW4gYmUgc2FmZWx5IGlnbm9yZWQgZm9yIHRoaXMgYnJvYWRlciBtb2R1bGUgbGlmZWN5Y2xlIHBlcnNwZWN0aXZlLiBUaGVyZWZvcmUsIGZvY3VzaW5nIG9uIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgc2VlbXMgbGlrZSB0aGUgbW9zdCBlZmZlY3RpdmUgYXBwcm9hY2guXG5cbkhtbSwgSSBzZWUgYSBwb3RlbnRpYWwgY29tcGxpY2F0aW9uIHRob3VnaC4gVGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYGxvYWRfbW9kdWxlYCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGl0J3MgKnN0YXRpYyouIFRoYXQncyBhIGJpdCBvZiBhIHJlZCBmbGFnLCBtZWFuaW5nIGl0IG1pZ2h0IGJlIGhpZGRlbiBmcm9tIGRpcmVjdCBpbnZvY2F0aW9uIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgaW4gYG1tL2FsbG9jX3RhZy5jYCB0aGF0IGNvdWxkIGFsc28gc2VydmUgYXMgcG90ZW50aWFsIGZvY3VzIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBtb2R1bGUgYmVoYXZpb3Igd2l0aGluIHRoYXQgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NDAsIk91dHB1dFRva2VucyI6NjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MjA6MjMuNDM2ODM3NTcxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcwNTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vYWxsb2NfdGFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vYWxsb2NfdGFnLmM9MzM9c3RhdGljIGJvb2wgbWVtX3Byb2ZpbGluZ19zdXBwb3J0O1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtMzktICovXFxubW0vYWxsb2NfdGFnLmM6NDA6Ym9vbCBtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKHZvaWQpXFxubW0vYWxsb2NfdGFnLmMtNDEte1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9NDc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNDg3LVxcbm1tL2FsbG9jX3RhZy5jOjQ4ODpzaXplX3QgYWxsb2NfdGFnX3RvcF91c2VycyhzdHJ1Y3QgY29kZXRhZ19ieXRlcyAqdGFncywgc2l6ZV90IGNvdW50LCBib29sIGNhbl9zbGVlcClcXG5tbS9hbGxvY190YWcuYy00ODkte1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNTI4LVxcbm1tL2FsbG9jX3RhZy5jOjUyOTp2b2lkIHBnYWxsb2NfdGFnX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXFxubW0vYWxsb2NfdGFnLmMtNTMwLXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTU1NC1cXG5tbS9hbGxvY190YWcuYzo1NTU6dm9pZCBwZ2FsbG9jX3RhZ19zd2FwKHN0cnVjdCBmb2xpbyAqbmV3LCBzdHJ1Y3QgZm9saW8gKm9sZClcXG5tbS9hbGxvY190YWcuYy01NTYte1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9NTk1PXN0YXRpYyB2b2lkIHJlbW92ZV9hbGxvY2luZm9fZmlsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9hbGxvY190YWcuYy01OTktXFxubW0vYWxsb2NfdGFnLmM6NjAwOnN0YXRpYyBERUNMQVJFX1dPUksocmVtb3ZlX2FsbG9jaW5mb193b3JrLCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUpO1xcbm1tL2FsbG9jX3RhZy5jLTYwMS1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTExOTE9c3RhdGljIGFsbG9jX3RhZ19hZGRfZnVuYyBfX3JjdSAqYWxsb2NfdGFnX2FkZF9lYXJseV9wZm5fcHRyIF9fcmVmZGF0YSA9XFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMTkzLVxcbm1tL2FsbG9jX3RhZy5jOjExOTQ6dm9pZCBhbGxvY190YWdfYWRkX2Vhcmx5X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbm1tL2FsbG9jX3RhZy5jLTExOTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoyMDoyMy40ODA1NDQ3OTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMTIzODE3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTW9kdWxlIExvYWRpbmcgYW5kIE1lbW9yeSBQcm9maWxpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgZHVlIHRvIHRoZWlyIGRpcmVjdCBpbnZvbHZlbWVudCBpbiBtb2R1bGUgaGFuZGxpbmcuIFRoZSBgYWxsb2NfdGFnX3RvcF91c2Vyc2AgZnVuY3Rpb24gaXMgcHJvYmFibHkgb25seSByZWxldmFudCBpbiB0aGUgY29udGV4dCBvZiByZWFkaW5nIHRoZSBwcm9jIGZpbGUsIHNvIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIG1vZHVsZSBsb2FkaW5nIGl0c2VsZi5cblxuUmV2aWV3aW5nIHRoZSBjb2RlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2UgYSBrZXkgYWRqdXN0bWVudCBoYXMgYmVlbiBtYWRlIGluIGBjb2RldGFnX21vZHVsZV9pbml0YC4gTm93LCBpZiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbHMgd2l0aCBgLUVPUE5PVFNVUFBgIChPcGVyYXRpb24gbm90IHN1cHBvcnRlZCksIGl0J3Mgbm8gbG9uZ2VyIHRyZWF0ZWQgYXMgYSBjcml0aWNhbCBlcnJvci4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgbW9kdWxlIGNhbiBiZSBsb2FkZWQgZXZlbiB3aXRob3V0IGNlcnRhaW4gY29kZSB0YWdnaW5nIGZlYXR1cmVzIGVuYWJsZWQuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgY29kZSBoYXMgYmVlbiBtYWRlIG1vcmUgcm9idXN0IGluIGhhbmRsaW5nIG1vZHVsZXMgdGhhdCBtaWdodCBub3QgZnVsbHkgc3VwcG9ydCB0aGUgdGFnZ2luZyBtZWNoYW5pc20uXG5cblRoZSBjb3JyZXNwb25kaW5nIGNoYW5nZSBpbiBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBhY2tub3dsZWRnZXMgdGhhdCBhIG1vZHVsZSBtaWdodCBiZSBwcmVzZW50IGRlc3BpdGUgYG1vZHVsZV9sb2FkKClgIHJldHVybmluZyBgLUVPUE5PVFNVUFBgLiBUaGUgYGZyZWVfc2VjdGlvbl9tZW1gIGNhbGwgaGFzIGJlZW4gZXhwYW5kZWQgdG8gZGVhbCB3aXRoIG1vZHVsZXMgaW4gdGhlIGlkciBvciB0aG9zZSB3aXRoIHJlc2VydmVkIHNlY3Rpb24gbWVtb3J5LlxuXG5UdXJuaW5nIHRvIHRoZSBgYWxsb2NfdGFnLmNgIGZpbGUsIEkgc2VlIHRoZSBjb2RlIGFkZHJlc3NlcyBhIGJ1ZyByZWxhdGVkIHRvIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5LiBUaGUgYHJlbW92ZV9wcm9jX2VudHJ5YCBjYWxsIGhhcyBiZWVuIG1vdmVkIHRvIGEgd29ya3F1ZXVlLCBsaWtlbHkgdG8gYXZvaWQgaXNzdWVzIHdpdGggY2FsbGluZyBpdCBmcm9tIGFuIGluYXBwcm9wcmlhdGUgY29udGV4dC4gQWRkaXRpb25hbGx5LCBtb2R1bGUgbG9hZGluZyBoYXMgYmVlbiB1cGRhdGVkIHdoZW4gcHJvZmlsaW5nIGlzIGRpc2FibGVkLiBJZiBgbWVtX3Byb2ZpbGluZ19zdXBwb3J0YCBpcyBmYWxzZSwgbW9kdWxlIGxvYWRpbmcgd2lsbCByZXR1cm4gYC1FT1BOT1RTVVBQYC5cblxuU28sIGluIHN1bW1hcnksIHRoZXNlIGNoYW5nZXMgYXJlIGFkZHJlc3NpbmcgdGhlIGludGVncmF0aW9uIGJldHdlZW4gbW9kdWxlIGxvYWRpbmcgYW5kIG1lbW9yeSBwcm9maWxpbmcuIFRoZSBjaGFuZ2VzIGhhbmRsZSBjYXNlcyB3aGVyZSBhIG1vZHVsZSBtaWdodCBub3QgYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGNvZGUgdGFnZ2luZywgYW5kIHByb3ZpZGVzIHNhZmVyIGhhbmRsaW5nIG9mIHByb2MgZW50cnkgcmVtb3ZhbC5cblxuQXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgY2xlYXJseSBgQ09ORklHX01PRFVMRVNgIGlzIG5lY2Vzc2FyeSBmb3IgbW9kdWxlIGxvYWRpbmcgaW4gZ2VuZXJhbC4gSW4gdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcywgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgYWxzbyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg3MywiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjIwOjM0LjQ5MjkyODQ3NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTc1MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJNT0RVTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29kZXRhZ19sb2FkX21vZHVsZVwiLFxuICAgIFwiY29kZXRhZ191bmxvYWRfbW9kdWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9kdWxlIGxvYWRpbmcgYW5kIHVubG9hZGluZyBsb2dpYyBpbiBgbGliL2NvZGV0YWcuY2AgYW5kIGBtbS9hbGxvY190YWcuY2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgYWxzbyBjaGFuZ2VzIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCB0byBzY2hlZHVsZSBhIHdvcmsgaXRlbSBmb3IgcmVtb3ZpbmcgdGhlIHByb2MgZW50cnkgaW5zdGVhZCBvZiBkb2luZyBpdCBkaXJlY3RseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBtb2R1bGUgbG9hZC91bmxvYWQgYW5kIG1lbW9yeSBwcm9maWxpbmcgc2h1dGRvd24sIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTU9EVUxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvZGV0YWdfbG9hZF9tb2R1bGVcIixcbiAgICBcImNvZGV0YWdfdW5sb2FkX21vZHVsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1vZHVsZSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgbG9naWMgaW4gYGxpYi9jb2RldGFnLmNgIGFuZCBgbW0vYWxsb2NfdGFnLmNgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGFsc28gY2hhbmdlcyBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgdG8gc2NoZWR1bGUgYSB3b3JrIGl0ZW0gZm9yIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5IGluc3RlYWQgb2YgZG9pbmcgaXQgZGlyZWN0bHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgbW9kdWxlIGxvYWQvdW5sb2FkIGFuZCBtZW1vcnkgcHJvZmlsaW5nIHNodXRkb3duLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoyMDozNC41NjcxMTY3NzRaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NjQyMDY2NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoyMDozNC41Njc2OTAxNDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ2MzYyOTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyAoYWxsb2NfdGFnKSBhbmQgY29kZXRhZyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBtb2R1bGUgbG9hZGluZyB3aGVuIG1lbW9yeSBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSB3b3JrcXVldWUgdG8gcmVtb3ZlIHRoZSBhbGxvY2luZm8gcHJvYyBlbnRyeSBhc3luY2hyb25vdXNseSBhbmQgY2hhbmdlcyBlcnJvciBoYW5kbGluZyBpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdG8gYWxsb3cgbW9kdWxlcyB0byBsb2FkIHdpdGhvdXQgdGFncyBieSByZXR1cm5pbmcgLUVPUE5PVFNVUFAuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb250cm9sIGZsb3csIGVycm9yIGhhbmRsaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjZWRkYjIwZGFkMzdhODNkYmZiNDEzMzk3MDE0MjNjOGMxY2IyNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzoxOTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2xpYi9jb2RldGFnLmMgYi9saWIvY29kZXRhZy5jXG5pbmRleCBhOWNkYTRjOTYyYTMwLi5hMGI2MDA3MjBhZmMxIDEwMDY0NFxuLS0tIGEvbGliL2NvZGV0YWcuY1xuKysrIGIvbGliL2NvZGV0YWcuY1xuQEAgLTI0MCw3ICsyNDAsOSBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlKGNtb2QpO1xuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHQvKiAtRU9QTk9UU1VQUCBtZWFucyB3ZSBjYW4gbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZy4gKi9cbitcdFx0aWYgKGVyciAhPSAtRU9QTk9UU1VQUClcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMzg4LDcgKzM5MCwxMSBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXHRcdFx0KytjdHR5cGUtXHUwMDNlY29udGVudF9pZDtcbiBcdFx0fVxuIFx0XHR1cF93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuLVx0XHRpZiAoZm91bmQgXHUwMDI2XHUwMDI2IGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXG4rXHRcdC8qXG4rXHRcdCAqIEEgbW9kdWxlIHdob3NlIG1vZHVsZV9sb2FkKCkgcmV0dXJuZWQgLUVPUE5PVFNVUFAgaXMgbm90XG4rXHRcdCAqIGluIHRoZSBpZHIgYnV0IG1heSBzdGlsbCBob2xkIHJlc2VydmVkIHNlY3Rpb24gbWVtb3J5LlxuK1x0XHQgKi9cbitcdFx0aWYgKGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXG4gXHRcdFx0Y3R0eXBlLVx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbShtb2QsIHRydWUpO1xuIFx0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvZGV0YWdfbG9jayk7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggYjMzNDEwMzEwNDc3OS4uZjMwZWY4ZGQyNGM3MCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTE1LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva21lbWxlYWsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYWxsb2NfdGFnLmhcdTAwM2VcbiBcbkBAIC01OTEsNiArNTkyLDEzIEBAIHZvaWQgcGdhbGxvY190YWdfc3dhcChzdHJ1Y3QgZm9saW8gKm5ldywgc3RydWN0IGZvbGlvICpvbGQpXG4gXHRwdXRfcGFnZV90YWdfcmVmKGhhbmRsZV9uZXcpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHJlbW92ZV9wcm9jX2VudHJ5KEFMTE9DSU5GT19GSUxFX05BTUUsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgREVDTEFSRV9XT1JLKHJlbW92ZV9hbGxvY2luZm9fd29yaywgcmVtb3ZlX2FsbG9jaW5mb19maWxlKTtcbitcbiBzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG4ge1xuIFx0aWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpKVxuQEAgLTYwMCw3ICs2MDgsNyBAQCBzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChyZW1vdmVfZmlsZSlcbi1cdFx0cmVtb3ZlX3Byb2NfZW50cnkoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgTlVMTCk7XG4rXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cmVtb3ZlX2FsbG9jaW5mb193b3JrKTtcbiBcdG1lbV9wcm9maWxpbmdfc3VwcG9ydCA9IGZhbHNlO1xuIH1cbiBcbkBAIC05NzUsNiArOTgzLDEwIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgY29kZXRhZyAqc3RhcnQsIHN0cnVjdCBjb2RldGFnXG4gXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdG9wX3RhZztcbiBcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcbiBcbitcdC8qIFByb2ZpbGluZyBkaXNhYmxlZDogbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZ3MuICovXG4rXHRpZiAoIW1lbV9wcm9maWxpbmdfc3VwcG9ydClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuIFx0LyogcGVyY3B1IGNvdW50ZXJzIGZvciBjb3JlIGFsbG9jYXRpb25zIGFyZSBhbHJlYWR5IHN0YXRpY2FsbHkgYWxsb2NhdGVkICovXG4gXHRpZiAoIW1vZClcbiBcdFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoyMDozNC41Njc2OTEwNjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ2MzYwOTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZm9jdXMgaXMgb24gZW5oYW5jaW5nIHRoZSBtZW1vcnkgcHJvZmlsaW5nIGFuZCBtb2R1bGUgbWFuYWdlbWVudCBhc3BlY3RzIHdpdGhpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIGl0IHRvdWNoZXMgYGxpYi9jb2RldGFnLmNgIGFuZCBgbW0vYWxsb2NfdGFnLmNgLlxuXG5JbiBgbGliL2NvZGV0YWcuY2AsIHRoZSBjaGFuZ2VzIHJlZmluZSBob3cgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB1bmxvYWRlZC4gVGhlIGBjb2RldGFnX21vZHVsZV9pbml0YCBmdW5jdGlvbiBub3cgaGFuZGxlcyBjYXNlcyB3aGVyZSBhIG1vZHVsZSBtaWdodCBub3QgYmUgc3VwcG9ydGVkLCByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gTW9yZSBpbXBvcnRhbnRseSwgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gZnJlZSByZXNlcnZlZCBzZWN0aW9uIG1lbW9yeSBldmVuIGlmIHRoZSBtb2R1bGUgd2Fzbid0IHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkICggYGZvdW5kYCBpcyBmYWxzZSApLCBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIGlmIHRoZSBsb2FkIGZhaWxlZC5cblxuT3ZlciBpbiBgbW0vYWxsb2NfdGFnLmNgLCBhIHdvcmtxdWV1ZSBpdGVtLCBgcmVtb3ZlX2FsbG9jaW5mb19maWxlYCwgaGFzIGJlZW4gaW50cm9kdWNlZC4gVGhpcyBpcyByZXNwb25zaWJsZSBmb3Igc2FmZWx5IHJlbW92aW5nIHRoZSBgQUxMT0NJTkZPX0ZJTEVfTkFNRWAgcHJvYyBlbnRyeS4gSW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGByZW1vdmVfcHJvY19lbnRyeWAgZHVyaW5nIHNodXRkb3duLCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2Agbm93IHNjaGVkdWxlcyB0aGlzIHdvcmsuIFRoZSBgbG9hZF9tb2R1bGVgIGZ1bmN0aW9uIGFsc28gbm93IHJldHVybnMgYC1FT1BOT1RTVVBQYCBpZiBtZW1vcnkgcHJvZmlsaW5nIGlzbid0IHN1cHBvcnRlZCwgZnVydGhlciBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIGltcHJvdmVkIGVycm9yIGhhbmRsaW5nLCB3b3JrcXVldWUgdXRpbGl6YXRpb24gZm9yIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBhIG1vcmUgcm9idXN0IG1vZHVsZSB1bmxvYWRpbmcgcHJvY2Vzcy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBubyBuZXcgQVBJcyB0byB3b3JyeSBhYm91dC4gSSBkb24ndCBzZWUgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCB3aGljaCBpcyBnb29kLlxuXG5JJ3ZlIHRha2VuIGEgY2xvc2VyIGxvb2sgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBgcmVtb3ZlX2FsbG9jaW5mb193b3JrYCBpcyBhIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgYERFQ0xBUkVfV09SS2AsIHNvIG5vIHByb2JsZW1zIHRoZXJlLiBgbG9hZF9tb2R1bGVgIHJldHVybnMgYC1FT1BOT1RTVVBQYCBhcyBleHBlY3RlZCwgYW5kIGBjb2RldGFnX21vZHVsZV9pbml0YCBwcm9wZXJseSBjaGVja3MgdGhpcyBlcnJvciBjb2RlLiBNb3N0IGltcG9ydGFudGx5LCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBjYWxscyBgZnJlZV9zZWN0aW9uX21lbWAgcmVnYXJkbGVzcyBvZiBzdWNjZXNzLiBUaGlzIGFsbGF5ZWQgbXkgc3VzcGljaW9ucy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgdGhlIGV4aXN0aW5nIEtBU0FOL0xPQ0tERVAgY2hlY2tzIGFuZCBvdGhlciBidWcgZGV0ZWN0aW9uIG1ldGhvZHMgYXJlIHN1ZmZpY2llbnQuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc2LCJPdXRwdXRUb2tlbnMiOjE5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjIwOjQ0LjAzMTMwMjk5OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyAoYWxsb2NfdGFnKSBhbmQgY29kZXRhZyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBtb2R1bGUgbG9hZGluZyB3aGVuIG1lbW9yeSBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSB3b3JrcXVldWUgdG8gcmVtb3ZlIHRoZSBhbGxvY2luZm8gcHJvYyBlbnRyeSBhc3luY2hyb25vdXNseSBhbmQgY2hhbmdlcyBlcnJvciBoYW5kbGluZyBpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdG8gYWxsb3cgbW9kdWxlcyB0byBsb2FkIHdpdGhvdXQgdGFncyBieSByZXR1cm5pbmcgLUVPUE5PVFNVUFAuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb250cm9sIGZsb3csIGVycm9yIGhhbmRsaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgKGFsbG9jX3RhZykgYW5kIGNvZGV0YWcgc3Vic3lzdGVtcyB0byBoYW5kbGUgbW9kdWxlIGxvYWRpbmcgd2hlbiBtZW1vcnkgcHJvZmlsaW5nIGlzIGRpc2FibGVkLiBJdCBpbnRyb2R1Y2VzIGEgd29ya3F1ZXVlIHRvIHJlbW92ZSB0aGUgYWxsb2NpbmZvIHByb2MgZW50cnkgYXN5bmNocm9ub3VzbHkgYW5kIGNoYW5nZXMgZXJyb3IgaGFuZGxpbmcgaW4gbW9kdWxlIGluaXRpYWxpemF0aW9uIHRvIGFsbG93IG1vZHVsZXMgdG8gbG9hZCB3aXRob3V0IHRhZ3MgYnkgcmV0dXJuaW5nIC1FT1BOT1RTVVBQLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29udHJvbCBmbG93LCBlcnJvciBoYW5kbGluZywgYW5kIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhf49b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-17 06:38:20 +0000 UTC FinishedAt: 2026-08-17 07:20:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MODULES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "4b65683fd25fe596b5b5947d934bb176413d077b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MODULES" ], "series_id": "79f5630d-8a00-45dc-ad50-4368fb96e196" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "codetag_load_module", "codetag_unload_module" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TU9EVUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGV0YWdfbG9hZF9tb2R1bGUmIzM0OywKICAgICYjMzQ7Y29kZXRhZ191bmxvYWRfbW9kdWxlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyAoYWxsb2NfdGFnKSBhbmQgY29kZXRhZyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBtb2R1bGUgbG9hZGluZyB3aGVuIG1lbW9yeSBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSB3b3JrcXVldWUgdG8gcmVtb3ZlIHRoZSBhbGxvY2luZm8gcHJvYyBlbnRyeSBhc3luY2hyb25vdXNseSBhbmQgY2hhbmdlcyBlcnJvciBoYW5kbGluZyBpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdG8gYWxsb3cgbW9kdWxlcyB0byBsb2FkIHdpdGhvdXQgdGFncyBieSByZXR1cm5pbmcgLUVPUE5PVFNVUFAuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb250cm9sIGZsb3csIGVycm9yIGhhbmRsaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyBhbmQgdW5sb2FkaW5nIGxvZ2ljIGluIGBsaWIvY29kZXRhZy5jYCBhbmQgYG1tL2FsbG9jX3RhZy5jYCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkLiBJdCBhbHNvIGNoYW5nZXMgYHNodXRkb3duX21lbV9wcm9maWxpbmdgIHRvIHNjaGVkdWxlIGEgd29yayBpdGVtIGZvciByZW1vdmluZyB0aGUgcHJvYyBlbnRyeSBpbnN0ZWFkIG9mIGRvaW5nIGl0IGRpcmVjdGx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZHVyaW5nIG1vZHVsZSBsb2FkL3VubG9hZCBhbmQgbWVtb3J5IHByb2ZpbGluZyBzaHV0ZG93biwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGJjZWRkYjIwZGFkMzdhODNkYmZiNDEzMzk3MDE0MjNjOGMxY2IyNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzoxOTowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9saWIvY29kZXRhZy5jIGIvbGliL2NvZGV0YWcuY1xuaW5kZXggYTljZGE0Yzk2MmEzMC4uYTBiNjAwNzIwYWZjMSAxMDA2NDRcbi0tLSBhL2xpYi9jb2RldGFnLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9jb2RldGFnLmNcbkBAIC0yNDAsNyAmIzQzOzI0MCw5IEBAIHN0YXRpYyBpbnQgY29kZXRhZ19tb2R1bGVfaW5pdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUsIHN0cnVjdCBtb2R1bGUgKm1vZClcbiBcbiBcdGlmIChlcnIgXHUwMDNjIDApIHtcbiBcdFx0a2ZyZWUoY21vZCk7XG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHQvKiAtRU9QTk9UU1VQUCBtZWFucyB3ZSBjYW4gbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZy4gKi9cbiYjNDM7XHRcdGlmIChlcnIgIT0gLUVPUE5PVFNVUFApXG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zODgsNyAmIzQzOzM5MCwxMSBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXHRcdFx0JiM0MzsmIzQzO2N0dHlwZS1cdTAwM2Vjb250ZW50X2lkO1xuIFx0XHR9XG4gXHRcdHVwX3dyaXRlKFx1MDAyNmN0dHlwZS1cdTAwM2Vtb2RfbG9jayk7XG4tXHRcdGlmIChmb3VuZCBcdTAwMjZcdTAwMjYgY3R0eXBlLVx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbSlcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBBIG1vZHVsZSB3aG9zZSBtb2R1bGVfbG9hZCgpIHJldHVybmVkIC1FT1BOT1RTVVBQIGlzIG5vdFxuJiM0MztcdFx0ICogaW4gdGhlIGlkciBidXQgbWF5IHN0aWxsIGhvbGQgcmVzZXJ2ZWQgc2VjdGlvbiBtZW1vcnkuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChjdHR5cGUtXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxuIFx0XHRcdGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0obW9kLCB0cnVlKTtcbiBcdH1cbiBcdG11dGV4X3VubG9jayhcdTAwMjZjb2RldGFnX2xvY2spO1xuZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmNcbmluZGV4IGIzMzQxMDMxMDQ3NzkuLmYzMGVmOGRkMjRjNzAgMTAwNjQ0XG4tLS0gYS9tbS9hbGxvY190YWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva21lbWxlYWsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYWxsb2NfdGFnLmhcdTAwM2VcbiBcbkBAIC01OTEsNiAmIzQzOzU5MiwxMyBAQCB2b2lkIHBnYWxsb2NfdGFnX3N3YXAoc3RydWN0IGZvbGlvICpuZXcsIHN0cnVjdCBmb2xpbyAqb2xkKVxuIFx0cHV0X3BhZ2VfdGFnX3JlZihoYW5kbGVfbmV3KTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJlbW92ZV9hbGxvY2luZm9fZmlsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4mIzQzO3tcbiYjNDM7XHRyZW1vdmVfcHJvY19lbnRyeShBTExPQ0lORk9fRklMRV9OQU1FLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIERFQ0xBUkVfV09SSyhyZW1vdmVfYWxsb2NpbmZvX3dvcmssIHJlbW92ZV9hbGxvY2luZm9fZmlsZSk7XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHNodXRkb3duX21lbV9wcm9maWxpbmcoYm9vbCByZW1vdmVfZmlsZSlcbiB7XG4gXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpXG5AQCAtNjAwLDcgJiM0Mzs2MDgsNyBAQCBzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChyZW1vdmVfZmlsZSlcbi1cdFx0cmVtb3ZlX3Byb2NfZW50cnkoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgTlVMTCk7XG4mIzQzO1x0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnJlbW92ZV9hbGxvY2luZm9fd29yayk7XG4gXHRtZW1fcHJvZmlsaW5nX3N1cHBvcnQgPSBmYWxzZTtcbiB9XG4gXG5AQCAtOTc1LDYgJiM0Mzs5ODMsMTAgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWdcbiBcdHN0cnVjdCBhbGxvY190YWcgKnN0b3BfdGFnO1xuIFx0c3RydWN0IGFsbG9jX3RhZyAqdGFnO1xuIFxuJiM0MztcdC8qIFByb2ZpbGluZyBkaXNhYmxlZDogbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZ3MuICovXG4mIzQzO1x0aWYgKCFtZW1fcHJvZmlsaW5nX3N1cHBvcnQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuIFx0LyogcGVyY3B1IGNvdW50ZXJzIGZvciBjb3JlIGFsbG9jYXRpb25zIGFyZSBhbHJlYWR5IHN0YXRpY2FsbHkgYWxsb2NhdGVkICovXG4gXHRpZiAoIW1vZClcbiBcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TU9EVUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGV0YWdfbG9hZF9tb2R1bGUmIzM0OywKICAgICYjMzQ7Y29kZXRhZ191bmxvYWRfbW9kdWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1vZHVsZSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgbG9naWMgaW4gYGxpYi9jb2RldGFnLmNgIGFuZCBgbW0vYWxsb2NfdGFnLmNgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGFsc28gY2hhbmdlcyBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgdG8gc2NoZWR1bGUgYSB3b3JrIGl0ZW0gZm9yIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5IGluc3RlYWQgb2YgZG9pbmcgaXQgZGlyZWN0bHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgbW9kdWxlIGxvYWQvdW5sb2FkIGFuZCBtZW1vcnkgcHJvZmlsaW5nIHNodXRkb3duLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmNlZGRiMjBkYWQzN2E4M2RiZmI0MTMzOTcwMTQyM2M4YzFjYjI1NApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDE3IDA3OjE5OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbGliL2NvZGV0YWcuYyBiL2xpYi9jb2RldGFnLmMKaW5kZXggYTljZGE0Yzk2MmEzMC4uYTBiNjAwNzIwYWZjMSAxMDA2NDQKLS0tIGEvbGliL2NvZGV0YWcuYwomIzQzOyYjNDM7JiM0MzsgYi9saWIvY29kZXRhZy5jCkBAIC0yNDAsNyAmIzQzOzI0MCw5IEBAIHN0YXRpYyBpbnQgY29kZXRhZ19tb2R1bGVfaW5pdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUsIHN0cnVjdCBtb2R1bGUgKm1vZCkKIAogCWlmIChlcnIgJmx0OyAwKSB7CiAJCWtmcmVlKGNtb2QpOwotCQlyZXR1cm4gZXJyOwomIzQzOwkJLyogLUVPUE5PVFNVUFAgbWVhbnMgd2UgY2FuIGxvYWQgdGhlIG1vZHVsZSB3aXRob3V0IGl0cyB0YWcuICovCiYjNDM7CQlpZiAoZXJyICE9IC1FT1BOT1RTVVBQKQomIzQzOwkJCXJldHVybiBlcnI7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zODgsNyAmIzQzOzM5MCwxMSBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpCiAJCQkmIzQzOyYjNDM7Y3R0eXBlLSZndDtjb250ZW50X2lkOwogCQl9CiAJCXVwX3dyaXRlKCZhbXA7Y3R0eXBlLSZndDttb2RfbG9jayk7Ci0JCWlmIChmb3VuZCAmYW1wOyZhbXA7IGN0dHlwZS0mZ3Q7ZGVzYy5mcmVlX3NlY3Rpb25fbWVtKQomIzQzOwkJLyoKJiM0MzsJCSAqIEEgbW9kdWxlIHdob3NlIG1vZHVsZV9sb2FkKCkgcmV0dXJuZWQgLUVPUE5PVFNVUFAgaXMgbm90CiYjNDM7CQkgKiBpbiB0aGUgaWRyIGJ1dCBtYXkgc3RpbGwgaG9sZCByZXNlcnZlZCBzZWN0aW9uIG1lbW9yeS4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGN0dHlwZS0mZ3Q7ZGVzYy5mcmVlX3NlY3Rpb25fbWVtKQogCQkJY3R0eXBlLSZndDtkZXNjLmZyZWVfc2VjdGlvbl9tZW0obW9kLCB0cnVlKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZhbXA7Y29kZXRhZ19sb2NrKTsKZGlmZiAtLWdpdCBhL21tL2FsbG9jX3RhZy5jIGIvbW0vYWxsb2NfdGFnLmMKaW5kZXggYjMzNDEwMzEwNDc3OS4uZjMwZWY4ZGQyNGM3MCAxMDA2NDQKLS0tIGEvbW0vYWxsb2NfdGFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vYWxsb2NfdGFnLmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2VxX2ZpbGUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zdHJpbmdfY2hvaWNlcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ZtYWxsb2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva21lbWxlYWsuaCZndDsKICNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2FsbG9jX3RhZy5oJmd0OwogCkBAIC01OTEsNiAmIzQzOzU5MiwxMyBAQCB2b2lkIHBnYWxsb2NfdGFnX3N3YXAoc3RydWN0IGZvbGlvICpuZXcsIHN0cnVjdCBmb2xpbyAqb2xkKQogCXB1dF9wYWdlX3RhZ19yZWYoaGFuZGxlX25ldyk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJcmVtb3ZlX3Byb2NfZW50cnkoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgTlVMTCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBERUNMQVJFX1dPUksocmVtb3ZlX2FsbG9jaW5mb193b3JrLCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUpOwomIzQzOwogc3RhdGljIHZvaWQgc2h1dGRvd25fbWVtX3Byb2ZpbGluZyhib29sIHJlbW92ZV9maWxlKQogewogCWlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSkKQEAgLTYwMCw3ICYjNDM7NjA4LDcgQEAgc3RhdGljIHZvaWQgc2h1dGRvd25fbWVtX3Byb2ZpbGluZyhib29sIHJlbW92ZV9maWxlKQogCQlyZXR1cm47CiAKIAlpZiAocmVtb3ZlX2ZpbGUpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KEFMTE9DSU5GT19GSUxFX05BTUUsIE5VTEwpOwomIzQzOwkJc2NoZWR1bGVfd29yaygmYW1wO3JlbW92ZV9hbGxvY2luZm9fd29yayk7CiAJbWVtX3Byb2ZpbGluZ19zdXBwb3J0ID0gZmFsc2U7CiB9CiAKQEAgLTk3NSw2ICYjNDM7OTgzLDEwIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgY29kZXRhZyAqc3RhcnQsIHN0cnVjdCBjb2RldGFnCiAJc3RydWN0IGFsbG9jX3RhZyAqc3RvcF90YWc7CiAJc3RydWN0IGFsbG9jX3RhZyAqdGFnOwogCiYjNDM7CS8qIFByb2ZpbGluZyBkaXNhYmxlZDogbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZ3MuICovCiYjNDM7CWlmICghbWVtX3Byb2ZpbGluZ19zdXBwb3J0KQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwogCS8qIHBlcmNwdSBjb3VudGVycyBmb3IgY29yZSBhbGxvY2F0aW9ucyBhcmUgYWxyZWFkeSBzdGF0aWNhbGx5IGFsbG9jYXRlZCAqLwogCWlmICghbW9kKQogCQlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY3OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgbWFraW5nIHNvbWUgcHJldHR5IHRhcmdldGVkIG1vZGlmaWNhdGlvbnMgdG8gb3VyIG1lbW9yeSB0YWdnaW5nIGFuZCBwcm9maWxpbmcgaW5mcmFzdHJ1Y3R1cmUuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggZ3JhY2VmdWxseSBoYW5kbGluZyBzY2VuYXJpb3Mgd2hlcmUgY2VydGFpbiBmZWF0dXJlcyBhcmVuJiMzOTt0IHN1cHBvcnRlZCDigJMgc3BlY2lmaWNhbGx5LCBjb2RlIHRhZ2dpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZy4KClNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBgY29kZXRhZ19tb2R1bGVfaW5pdGAsIGluIGBsaWIvY29kZXRhZy5jYCB0byBub3QgdGhyb3cgYW4gZXJyb3IgaWYgYC1FT1BOT1RTVVBQYCBpcyBlbmNvdW50ZXJlZC4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IHN1cHBvcnQgY29kZSB0YWdnaW5nLCB3ZSBzaG91bGRuJiMzOTt0IGZhaWwgdGhlIG1vZHVsZSBsb2FkLiBXZSBzaG91bGQgc2ltcGx5IHdvcmsgd2l0aG91dCB0YWdzLiBTaW1pbGFybHksIHRoZSBwYXRjaCBtb2RpZmllcyBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCB0byBlbnN1cmUgdGhhdCBtZW1vcnkgYWxsb2NhdGVkIGZvciBzZWN0aW9ucyBpcyBmcmVlZCBldmVuIGlmIHRoZSBtb2R1bGUgd2FzbiYjMzk7dCBmb3VuZCBpbiB0aGUgSURSLCB3aGljaCBtaWdodCBvY2N1ciBpZiB0aGUgbW9kdWxlIGxvYWQgcmV0dXJuZWQgdGhlIGAtRU9QTk9UU1VQUGAgZXJyb3IuIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gZW5zdXJlIHJlc291cmNlcyBhcmUgaGFuZGxlZCwgcmVnYXJkbGVzcyBvZiBsb2FkIHN0YXRlLgoKSW4gYG1tL2FsbG9jX3RhZy5jYCwgdGhlIGBsb2FkX21vZHVsZWAgZnVuY3Rpb24gYXBwZWFycyB0byBiZSB1cGRhdGVkIHRvIHJldHVybiBgLUVPUE5PVFNVUFBgIGlmIG1lbW9yeSBwcm9maWxpbmcgc3VwcG9ydCBpc24mIzM5O3QgYXZhaWxhYmxlIChgIW1lbV9wcm9maWxpbmdfc3VwcG9ydGApLiBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgZ29hbCBvZiBncmFjZWZ1bGx5IGRlZ3JhZGluZyBpZiB0aGUgZnVuY3Rpb25hbGl0eSBpc24mIzM5O3QgcHJlc2VudC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyB0aGUgY2xlYW51cCwgd2l0aCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2Agbm93IHNjaGVkdWxpbmcgYSB3b3JrIHF1ZXVlIChgcmVtb3ZlX2FsbG9jaW5mb193b3JrYCkgZm9yIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5IGluc3RlYWQgb2YgZG9pbmcgaXQgZGlyZWN0bHkuIFRoaXMgYXN5bmNocm9ub3VzIGFwcHJvYWNoIGxpa2VseSBwcmV2ZW50cyBwb3RlbnRpYWwgYmxvY2tpbmcgaW4gc2h1dGRvd24gcGF0aHMuCgpOb3csIGFzIGFuIGV4cGVydCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIFNvLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgZmlsZXMuIEkgaW1tZWRpYXRlbHkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgbGliL2NvZGV0YWcuY2AgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQ09ERV9UQUdHSU5HYCBpcyBkZWZpbmVkLCBhbmQgYG1tL2FsbG9jX3RhZy5jYCBvbmx5IGNvbXBpbGVzIHdpdGggYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYC4gSWYgdGhlc2UgYXJlIHNldCBjb3JyZWN0bHksIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB3aWxsIGhhbmRsZSB0aGVzZSBjb25kaXRpb25zLiBXaXRoIHRob3NlIHNldCBjb3JyZWN0bHksIHRoaXMgaXMgYSBjbGVhbiBhbmQgc3RyYWlnaHRmb3J3YXJkIHdheSBvZiBwcm92aWRpbmcgZm9yIHRob3NlIGVkZ2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0NPREVfVEFHR0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvTWFrZWZpbGU9MTk2PW9iai0kKENPTkZJR19GVU5DVElPTl9FUlJPUl9JTkpFQ1RJT04pICYjNDM7PSBlcnJvci1pbmplY3Qub1xubGliL01ha2VmaWxlLTE5Ny1cbmxpYi9NYWtlZmlsZToxOTg6b2JqLSQoQ09ORklHX0NPREVfVEFHR0lORykgJiM0Mzs9IGNvZGV0YWcub1xubGliL01ha2VmaWxlLTE5OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDcyCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93biBtZW50YWwgbXVzaW5nczoKCioqQW5hbHl6aW5nIGBtbS9hbGxvY190YWcuY2AqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byBgbW0vYWxsb2NfdGFnLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB0YWdnaW5nIG1hZ2ljIGhhcHBlbnMsIGFuZCBpdCYjMzk7cyBhbHdheXMgd29ydGggYSBkZWVwIGxvb2suIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdHJhY2tpbmcgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBvcmdhbml6aW5nIHRoaW5ncywgdGhlIHRyYWRlLW9mZnMgdGhleSYjMzk7dmUgbWFkZSBiZXR3ZWVuIG1ldGFkYXRhIG92ZXJoZWFkIGFuZCBsb29rdXAgc3BlZWQuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIGhhc2ggdGFibGUsIG9yIHNvbWV0aGluZyBtb3JlIHNvcGhpc3RpY2F0ZWQgbGlrZSBhIHRyZWUtYmFzZWQgc3RydWN0dXJlPyBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMsIHNvIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGUgY29sbGlzaW9uIGhhbmRsaW5nIHN0cmF0ZWdpZXMgaWYgdGhleSYjMzk7cmUgdXNpbmcgYSBoYXNoIHRhYmxlLgoKTmV4dCwgSSYjMzk7bSBjaGVja2luZyB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHBhdGhzLiBJJiMzOTttIGtlZW4gb24gdW5kZXJzdGFuZGluZyB0aGUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdXNlZC4gV2UmIzM5O3JlIGNsZWFybHkgZGVhbGluZyB3aXRoIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQgaW4gbW9zdCBzeXN0ZW1zLCBzbyBpcyB0aGlzIHVzaW5nIHNwaW5sb2NrcywgbXV0ZXhlcywgYXRvbWljIG9wZXJhdGlvbnM/IEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBsb2NrIGNvbnRlbnRpb24gaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgaG93IHRoZXNlIGNhbGxzIGFyZSBpbnRlZ3JhdGVkLCBpZiB0aGV5JiMzOTtyZSBpbmxpbmUgZnVuY3Rpb25zIG9yIGZ1bmN0aW9uIGNhbGxzLgoKSSYjMzk7bGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgdGFnZ2luZyBtZWNoYW5pc21zIHRoZW1zZWx2ZXMuIEhvdyBhcmUgdGhlc2UgdGFncyBhc3NvY2lhdGVkIHdpdGggbWVtb3J5IHJlZ2lvbnM/IElzIGl0IHN0b3JlZCBhbG9uZ3NpZGUgdGhlIGFsbG9jYXRpb24gbWV0YWRhdGEsIG9yIGlzIGl0IGluIGEgc2VwYXJhdGUsIGRlZGljYXRlZCBhcmVhPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb2YgdGhlIHRhZ2dpbmcgc3lzdGVtIG9uIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gcGVyZm9ybWFuY2U/IEhvdyBhcmUgdGhlIHRhZyB2YWx1ZXMgY2hvc2VuIGFuZCBob3cgY2FuIHRoZXkgYmUgdXNlZCB0byBkZWJ1ZyBhbGxvY2F0aW9ucy4KCkZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBsZWFrcyBvciBvdGhlciBhbGxvY2F0aW9uIHByb2JsZW1zIHdpdGhpbiB0aGUgdGFnIGltcGxlbWVudGF0aW9uIGl0c2VsZi4gSWYgdGhlIHRhZyBtYW5hZ2VtZW50IHN5c3RlbSBoYXMgYW4gZXJyb3IsIGl0IGlzIHBvc3NpYmxlIGZvciB0aGluZ3MgdG8gZ2V0IGxvc3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfdGFnLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xNDk9b2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgJiM0Mzs9IHRlc3RzL2xhenlfbW11X21vZGVfa3VuaXQub1xubW0vTWFrZWZpbGU6MTUwOm9iai0kKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKSAmIzQzOz0gYWxsb2NfdGFnLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTc1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIFByb2ZpbGluZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBpbiB0aGUgS2NvbmZpZyBmaWxlLiBUaGlzIGlzIGNydWNpYWw7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXRoZXIgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgc2V0dGluZyBpcyBmdW5kYW1lbnRhbC4gS25vd2luZyB0aGUgc3RhdHVzIG9mIHRoaXMgY29uZmlnIGlzIHRoZSBmaXJzdCBzdGVwIGluIGRlYnVnZ2luZyBvciBvcHRpbWl6aW5nIG1lbW9yeSB1c2FnZS4gVW5kZXJzdGFuZGluZyBpdHMgc3RhdGUgaW1tZWRpYXRlbHkgZGljdGF0ZXMgbXkgbmV4dCBhY3Rpb24gaW4gdGhlIHByb2plY3QuIEl0cyBpbXBhY3QgaXMgcHJldHR5IHNpZ25pZmljYW50IHdoZW4gZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNX0FMTE9DX1BST0ZJTElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnPTMxMT1jb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zMjMtXG5tbS9LY29uZmlnLmRlYnVnOjMyNDpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vS2NvbmZpZy5kZWJ1Zy0zMjUtXHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTMzNi1cbm1tL0tjb25maWcuZGVidWc6MzM3OmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0VOQUJMRURfQllfREVGQVVMVFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzgtXHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWctMzQxLVxubW0vS2NvbmZpZy5kZWJ1ZzozNDI6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbm1tL0tjb25maWcuZGVidWctMzQzLVx0Ym9vbCBcJiMzNDtNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzQwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBEZWJ1Z2dpbmcgS2VybmVsIENvbmZpZ3MqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGRlYnVnZ2luZyBvcHRpb25zIGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUuLi4gdGhlIGBtbS9LY29uZmlnLmRlYnVnYCBmaWxlIHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzcGVjaWZpYyBkZWJ1Z2dpbmcgc2V0dGluZ3MuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIGFyb3VuZCBsaW5lIDMyNC4gVGhhdCByYW5nZSBvZnRlbiBob2xkcyByZWxhdGVkIG9wdGlvbnMsIGFuZCBnaXZlbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBhIGxpa2VseSBzcG90IGZvciBhIHBhcnRpY3VsYXIgZmVhdHVyZSBvciBhbiBpbnRlcmNvbm5lY3RlZCBncm91cCBvZiBkZWJ1ZyBmbGFncyByZWxhdGVkIHRvIHRoZSBtZW1vcnkgbWFuYWdlci4gVGltZSB0byBmaXJlIHVwIHRoZSBlZGl0b3IgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQgaW4gdGhhdCBhcmVhLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGVpdGhlciBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBhIGdyb3VwIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjA6XHRcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cbiAzMjE6XHRcbiAzMjI6XHRcdCAgSWYgaW4gZG91YnQsIHNheSBOLlxuIDMyMzpcdFxuIDMyNDpcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXG4gMzI1Olx0XHRib29sIFwmIzM0O0VuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcJiMzNDtcbiAzMjY6XHRcdGRlZmF1bHQgblxuIDMyNzpcdFx0ZGVwZW5kcyBvbiBNTVVcbiAzMjg6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDMyOTpcdFx0c2VsZWN0IENPREVfVEFHR0lOR1xuIDMzMDpcdFx0c2VsZWN0IFBBR0VfRVhURU5TSU9OXG4gMzMxOlx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4gMzMyOlx0XHRoZWxwXG4gMzMzOlx0XHQgIFRyYWNrIGFsbG9jYXRpb24gc291cmNlIGNvZGUgYW5kIHJlY29yZCB0b3RhbCBhbGxvY2F0aW9uIHNpemVcbiAzMzQ6XHRcdCAgaW5pdGlhdGVkIGF0IHRoYXQgY29kZSBsb2NhdGlvbi4gVGhlIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byB0cmFja1xuIDMzNTpcdFx0ICBtZW1vcnkgbGVha3Mgd2l0aCBhIGxvdyBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IGltcGFjdC5cbiAzMzY6XHRcbiAzMzc6XHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcbiAzMzg6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XCYjMzQ7XG4gMzM5Olx0XHRkZWZhdWx0IHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgTWVtb3J5IFByb2ZpbGluZyBQYXRjaCoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgaW50cm9kdWNpbmcgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBhcmVhcywgbGV0JiMzOTtzIGJyZWFrIGl0IGRvd24uIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgbW9kaWZ5aW5nIHRoZSBgY29kZXRhZ2Agc3Vic3lzdGVtOiBJIHNlZSBjaGFuZ2VzIHRvIGBjb2RldGFnX21vZHVsZV9pbml0YCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgaW4gYGxpYi9jb2RldGFnLmNgLiBUaGF0IG1ha2VzIHNlbnNlLCBzaW5jZSBjb2RlIHRhZ3MgYXJlIGFsbCBhYm91dCBpZGVudGlmeWluZyB3aGVyZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGFuZCBmcmVlZCwgcHJlc3VtYWJseSBsaW5rZWQgdG8gYSBsb2FkZWQgbW9kdWxlLiBUaGVuIGluIGBtbS9hbGxvY190YWcuY2AsIHdlIGhhdmUgYGxvYWRfbW9kdWxlYCBhbmQgYHNodXRkb3duX21lbV9wcm9maWxpbmdgIGJlaW5nIG1vZGlmaWVkLgoKVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSBvbmVzIHdpdGhpbiB0aGUgY29kZSB0YWcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHN1Yi1zeXN0ZW1zLCBnb2luZyB0byBiZSB0cmlnZ2VyZWQgaW4gb3VyIHZpcnR1YWwgbWFjaGluZSBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQuCgpgY29kZXRhZ19tb2R1bGVfaW5pdGAgaXMgY2FsbGVkLCBvZiBjb3Vyc2UsIHdoZW4gYSBtb2R1bGUgaXMgbG9hZGVkIGludG8gdGhlIGtlcm5lbC4gYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgaXMgaXRzIGNvdW50ZXJwYXJ0LCB0cmlnZ2VyZWQgb24gbW9kdWxlIHVubG9hZC4gV2UmIzM5O3JlIG9idmlvdXNseSBpbnN0cnVtZW50aW5nIHRoZXNlIHBvaW50cy4KCk5vdywgYGxvYWRfbW9kdWxlYCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGNhbGxiYWNrIHJlZ2lzdGVyZWQgd2l0aGluIGBjb2RldGFnX3R5cGVfZGVzY2AsIGVzdGFibGlzaGVkIHZpYSBgYWxsb2NfdGFnX2luaXRgLiBTbywgaXQmIzM5O3MgdGllZCBpbnRvIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiB0YWdnaW5nIG1lY2hhbmlzbS4gVGhpcyBoYXMgdGhlIGhhbGxtYXJrcyBvZiBiZWluZyBwcm9wZXJseSBpbnRlZ3JhdGVkLgoKYHNodXRkb3duX21lbV9wcm9maWxpbmdgIGlzIHRoZSBvdGhlciBwaWVjZSwgYW5kIHRoaXMgaGFwcGVucyB3aGVuIG1lbW9yeSBwcm9maWxpbmcgaXMgYmVpbmcgZGlzYWJsZWQuIFNvIGl0IGlzIHRoZSBjb3VudGVycGFydCB0byB0aGUgZW5hYmxlZCBmdW5jdGlvbmFsaXR5LCBzbyBzaG91bGQgYmUgY2FsbGVkIHRvIHByb3Blcmx5IGNsZWFudXAuCgpPa2F5LCBsZXQmIzM5O3MgdmVyaWZ5IHRoYXQgbGFzdCBwb2ludCwgd2hlcmUgZXhhY3RseSBpcyB0aGF0IGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBmdW5jdGlvbiBjYWxsZWQ/IE5lZWQgdG8gdHJhY2UgdGhvc2UgY2FsbCBwYXRocy4gR290dGEgYmUgc3VyZSB0aG9zZSBjbGVhbnVwcyBhcmUgZG9uZSBwcm9wZXJseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2h1dGRvd25fbWVtX3Byb2ZpbGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jPTYwMD1zdGF0aWMgREVDTEFSRV9XT1JLKHJlbW92ZV9hbGxvY2luZm9fd29yaywgcmVtb3ZlX2FsbG9jaW5mb19maWxlKTtcbm1tL2FsbG9jX3RhZy5jLTYwMS1cbm1tL2FsbG9jX3RhZy5jOjYwMjpzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG5tbS9hbGxvY190YWcuYy02MDMte1xuLS1cbm1tL2FsbG9jX3RhZy5jPTYxNT12b2lkIF9faW5pdCBhbGxvY190YWdfc2VjX2luaXQodm9pZClcbi0tXG5tbS9hbGxvY190YWcuYy02MzItXHRpZiAoa2VybmVsX3RhZ3MuY291bnQgXHUwMDNlICgxVUwgXHUwMDNjXHUwMDNjIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKSkge1xubW0vYWxsb2NfdGFnLmM6NjMzOlx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGZhbHNlKTsgLyogYWxsb2NpbmZvIGZpbGUgZG9lcyBub3QgZXhpc3QgeWV0ICovXG5tbS9hbGxvY190YWcuYy02MzQtXHRcdHByX2VycihcJiMzNDslbHUgYWxsb2NhdGlvbiB0YWdzIGNhbm5vdCBiZSByZWZlcmVuY2VzIHVzaW5nICVkIGF2YWlsYWJsZSBwYWdlIGZsYWcgYml0cy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcblwmIzM0Oyxcbi0tXG5tbS9hbGxvY190YWcuYz04NDY9c3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxubW0vYWxsb2NfdGFnLmMtODY1LVx0aWYgKCFlbnN1cmVfYWxpZ25tZW50KGFsaWduLCBcdTAwMjZwcmVwZW5kKSkge1xubW0vYWxsb2NfdGFnLmM6ODY2Olx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xubW0vYWxsb2NfdGFnLmMtODY3LVx0XHRwcl9lcnIoXCYjMzQ7JXM6IGFsaWdubWVudCAlbHUgaXMgaW5jb21wYXRpYmxlIHdpdGggYWxsb2NhdGlvbiB0YWcgaW5kZXhpbmcuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cJiMzNDssXG4tLVxubW0vYWxsb2NfdGFnLmMtOTE1LVx0XHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICF0YWdzX2FkZHJlc3NhYmxlKCkpIHtcbm1tL2FsbG9jX3RhZy5jOjkxNjpcdFx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xubW0vYWxsb2NfdGFnLmMtOTE3LVx0XHRcdHByX3dhcm4oXCYjMzQ7V2l0aCBtb2R1bGUgJXMgdGhlcmUgYXJlIHRvbyBtYW55IHRhZ3MgdG8gZml0IGluICVkIHBhZ2UgZmxhZyBiaXRzLiBNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQhXFxuXCYjMzQ7LFxuLS1cbm1tL2FsbG9jX3RhZy5jLTkyMi1cdFx0aWYgKGdyb3dfcmVzKSB7XG5tbS9hbGxvY190YWcuYzo5MjM6XHRcdFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcbm1tL2FsbG9jX3RhZy5jLTkyNC1cdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXG5cJiMzNDssXG4tLVxubW0vYWxsb2NfdGFnLmM9MTMzND1zdGF0aWMgaW50IF9faW5pdCBhbGxvY190YWdfaW5pdCh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTEzNTctXHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gY3JlYXRlICVzIGZpbGVcXG5cJiMzNDssIEFMTE9DSU5GT19GSUxFX05BTUUpO1xubW0vYWxsb2NfdGFnLmM6MTM1ODpcdFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyhmYWxzZSk7XG5tbS9hbGxvY190YWcuYy0xMzU5LVx0XHRyZXR1cm4gLUVOT01FTTtcbi0tXG5tbS9hbGxvY190YWcuYy0xMzY0LVx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHJlc2VydmUgYWRkcmVzcyBzcGFjZSBmb3IgbW9kdWxlIHRhZ3MsIGVycm5vID0gJWRcXG5cJiMzNDssIHJlcyk7XG5tbS9hbGxvY190YWcuYzoxMzY1Olx0XHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xubW0vYWxsb2NfdGFnLmMtMTM2Ni1cdFx0cmV0dXJuIHJlcztcbi0tXG5tbS9hbGxvY190YWcuYy0xMzcyLVx0XHRmcmVlX21vZF90YWdzX21lbSgpO1xubW0vYWxsb2NfdGFnLmM6MTM3MzpcdFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcbm1tL2FsbG9jX3RhZy5jLTEzNzQtXHRcdHJldHVybiBQVFJfRVJSKGFsbG9jX3RhZ19jdHR5cGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjMwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjkyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBNb2R1bGUgVGFnZ2luZyBhbmQgTWVtb3J5IFByb2ZpbGluZyBGaXhlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBhZGRyZXNzaW5nIHNvbWUgc3VidGxlIGlzc3VlcyBpbiB0aGUga2VybmVsJiMzOTtzIG1vZHVsZSB0YWdnaW5nIGFuZCBtZW1vcnkgcHJvZmlsaW5nIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgaG93IG1vZHVsZXMgYXJlIGxvYWRlZCwgdW5sb2FkZWQsIGFuZCBwcm9maWxlZC4gVGhlIGNvcmUgY29uY2VybiBzZWVtcyB0byBiZSB0aGF0IGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBjYW4gYmUgaW52b2tlZCBmcm9tIGByZXNlcnZlX21vZHVsZV90YWdzYCBkdXJpbmcgbWVtb3J5IGNvbnRlbnRpb24gb3IgYWxsb2NhdGlvbiBmYWlsdXJlcywgYW5kIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gVGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGNhbGxlZCBgcmVtb3ZlX3Byb2NfZW50cnlgIGRpcmVjdGx5IGZyb20gYHNodXRkb3duX21lbV9wcm9maWxpbmdgLCB3aGljaCBpcyBhIGNsYXNzaWMgcmVjaXBlIGZvciBhIGtlcm5lbCBwYW5pYywgcmlnaHQ/IFRoZSBjb250ZXh0IG9mIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBtaWdodCBub3QgYWxsb3cgc2xlZXBpbmcgb3IgaG9sZGluZyBjZXJ0YWluIGxvY2tzLiBTbyB0aGUgZml4IGlzIHRvIHNjaGVkdWxlIHRoaXMgb3BlcmF0aW9uIGFzIGEgd29yayBpdGVtLCB3aGljaCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaC4KCk5leHQsIGl0IGhhbmRsZXMgYGxvYWRfbW9kdWxlYCByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gVGhpcyBtZWFucyB0aGUgbW9kdWxlIGxvYWQgd291bGRuJiMzOTt0IGZhaWwgY29tcGxldGVseSBpZiBwcm9maWxpbmcgaXMgZGlzYWJsZWQ7IGBjb2RldGFnX21vZHVsZV9pbml0YCBzaW1wbHkgc2tpcHMgdGhlIHRhZ2dpbmcgcHJvY2Vzcy4gSXQmIzM5O3MgYSBwcmFnbWF0aWMgc29sdXRpb24uIE5vdywgdGhlIGBjb2RldGFnX3VubG9hZF9tb2R1bGVgIGZ1bmN0aW9uIGFsc28gY2xlYXJzIG1lbW9yeSBldmVuIGlmIHRoZSBtb2R1bGUgd2FzbiYjMzk7dCBpbiB0aGUgSURSLCB3aGljaCBmaXhlcyBhIG1lbW9yeSBsZWFrIHdoZW4gYSBtb2R1bGUgaXMgbG9hZGVkIGJ1dCBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIFRoaXMgaXMgZ29vZCBob3VzZWtlZXBpbmcuCgpUaGlzIGlzIGEgY29yZSBrZXJuZWwgY2hhbmdlLCB0b3VjaGluZyBtb2R1bGUgbG9hZGluZyBhbmQgbWVtb3J5IHByb2ZpbGluZy4gR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLCBmdXp6aW5nIGlzIGFuIGFic29sdXRlIG11c3QuIFdlIG5lZWQgdG8gcmVhbGx5IHB1dCB0aGVzZSBuZXcgY29kZSBwYXRocyB0aHJvdWdoIHRoZWlyIHBhY2VzLgoKTGV0IG1lIHNlZSwgdGhlIGtleSBzeW1ib2xzIGhlcmUgYXJlIGBjb2RldGFnX21vZHVsZV9pbml0YCwgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAsIGFuZCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgKHRob3VnaCBpdCYjMzk7cyBzdGF0aWMpIGFuZCBgcmVtb3ZlX2FsbG9jaW5mb19maWxlYCAoYWxzbyBzdGF0aWMpLiBXYWl0IGEgc2Vjb25kLCBpcyBgY29kZXRhZ19tb2R1bGVfaW5pdGAgc3RhdGljPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdDsgaXQmIzM5O3MgYSBjcml0aWNhbCBlbnRyeSBwb2ludC4gTG9va3MgbGlrZSBhIHF1aWNrIHRyaXAgdG8gYGxpYi9jb2RldGFnLmNgIGlzIGluIG9yZGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RldGFnX21vZHVsZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL2NvZGV0YWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvY29kZXRhZy5jPTE4NT1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X21vZF9uYW1lKF9fbWF5YmVfdW51c2VkIHN0cnVjdCBtb2R1bGUgKm1vZClcbi0tXG5saWIvY29kZXRhZy5jLTE5My1cbmxpYi9jb2RldGFnLmM6MTk0OnN0YXRpYyBpbnQgY29kZXRhZ19tb2R1bGVfaW5pdChzdHJ1Y3QgY29kZXRhZ190eXBlICpjdHR5cGUsIHN0cnVjdCBtb2R1bGUgKm1vZClcbmxpYi9jb2RldGFnLmMtMTk1LXtcbi0tXG5saWIvY29kZXRhZy5jPTM0MD1pbnQgY29kZXRhZ19sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4tLVxubGliL2NvZGV0YWcuYy0zNDktXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0dHlwZSwgXHUwMDI2Y29kZXRhZ190eXBlcywgbGluaykge1xubGliL2NvZGV0YWcuYzozNTA6XHRcdHJldCA9IGNvZGV0YWdfbW9kdWxlX2luaXQoY3R0eXBlLCBtb2QpO1xubGliL2NvZGV0YWcuYy0zNTEtXHRcdGlmIChyZXQpXG4tLVxubGliL2NvZGV0YWcuYz00MDU9Y29kZXRhZ19yZWdpc3Rlcl90eXBlKGNvbnN0IHN0cnVjdCBjb2RldGFnX3R5cGVfZGVzYyAqZGVzYylcbi0tXG5saWIvY29kZXRhZy5jLTQxOS1cbmxpYi9jb2RldGFnLmM6NDIwOlx0ZXJyID0gY29kZXRhZ19tb2R1bGVfaW5pdChjdHR5cGUsIE5VTEwpO1xubGliL2NvZGV0YWcuYy00MjEtXHRpZiAodW5saWtlbHkoZXJyKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJvbSBhbiBleHBlcnQmIzM5O3MgcGVyc3BlY3RpdmU6CgoqKk1vZHVsZSBNYW5hZ2VtZW50IENvbmNlcm5zOiBTdGF0aWMgdnMuIEV4cG9ydGVkIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYC4gVGhlIGtleSBwb2ludCBoZXJlLCBhbmQgd2hhdCBpbW1lZGlhdGVseSBqdW1wcyBvdXQgYXQgbWUsIGlzIHRoYXQgdGhleSYjMzk7cmUgZWl0aGVyIGV4cG9ydGVkIG9yIG5vdCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBtZWFucyB0aGV5JiMzOTtyZSBleHBsaWNpdGx5IGludGVuZGVkIHRvIGJlIHZpc2libGUgb3V0c2lkZSBvZiB0aGVpciBpbW1lZGlhdGUgY29tcGlsYXRpb24gdW5pdC4gVGhpcyBoYXMgc29tZSBwcmV0dHkgc2lnbmlmaWNhbnQgaW1wbGljYXRpb25zIGluIGEgbW9kdWxhciBzeXN0ZW0uCgpJZiB0aGV5ICp3ZXJlbiYjMzk7dCogZXhwb3J0ZWQgb3Igc3RhdGljLCB0aGV5JiMzOTtkIGJlIGhpZGRlbiwgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYW5kIHdlIHdvdWxkbiYjMzk7dCBoYXZlIHRvIHdvcnJ5IGFib3V0IGV4dGVybmFsIGNvZGUgZGlyZWN0bHkgYWNjZXNzaW5nIG9yIGNhbGxpbmcgdGhlbS4gVGhpcyB3b3VsZCBiZSB0eXBpY2FsIGZvciBmdW5jdGlvbnMgdXNlZCBvbmx5IHdpdGhpbiB0aGUgbW9kdWxlLgoKQnV0IGJlY2F1c2UgdGhleSAqYXJlKiBleHBvc2VkLCB0aGlzIHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGRlc2lnbmVkIHRvIGJlIGEgcGFydCBvZiB0aGUgZXh0ZXJuYWwgbW9kdWxlIGludGVyZmFjZS4gVGhpcyBtYWtlcyBtZSBjb25zaWRlciBhIGZldyB0aGluZ3M6CgoqICAgKipEZXBlbmRlbmN5IE1hbmFnZW1lbnQ6KiogSG93IGFyZSB0aGVzZSBtb2R1bGVzIGxvYWRlZCBhbmQgdW5sb2FkZWQ/IElzIHRoZXJlIGEgZHluYW1pYyBsaW5rZXIgaW52b2x2ZWQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggc2hhcmVkIGxpYnJhcmllcywgZHluYW1pY2FsbHkgbG9hZGFibGUgbW9kdWxlcywgb3Igc29tZXRoaW5nIG1vcmUgY3VzdG9tPyBUaGVzZSBmdW5jdGlvbnMgd291bGQgbGlrZWx5IGJlIHRoZSBpbnRlcmZhY2UgcG9pbnRzIHRoZSBkeW5hbWljIGxvYWRlciB1c2VzIHRvIGluaXRpYWxpemUgYW5kIHNodXQgZG93biBtb2R1bGVzLgoKKiAgICoqQVBJIERlc2lnbjoqKiBXaGF0JiMzOTtzIHRoZSBkZXNpZ24gcmF0aW9uYWxlIGZvciB0aGVzZSBmdW5jdGlvbnM/IEFyZSB0aGV5IHBhcnQgb2YgYSBsYXJnZXIgQVBJIGZvciBtYW5hZ2luZyBjb2RlIG1vZHVsZXMsIG9yIGFyZSB0aGV5IGxvd2VyLWxldmVsIHByaW1pdGl2ZXM/IEtub3dpbmcgdGhpcyB3aWxsIGluZmx1ZW5jZSB0aGUgb3ZlcmFsbCBkZXNpZ24uCgoqICAgKipQb3RlbnRpYWwgZm9yIENvbmZsaWN0czoqKiBTaW5jZSB3ZSYjMzk7cmUgZXhwb3J0aW5nIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLCB3ZSBuZWVkIHRvIGJlIGV4dHJlbWVseSBjYXJlZnVsIGFib3V0IHBvdGVudGlhbCBuYW1lIGNvbGxpc2lvbnMsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGluIGEgc3lzdGVtIHdpdGggcG90ZW50aWFsbHkgbWFueSBtb2R1bGVzIGZyb20gbXVsdGlwbGUgc291cmNlcy4gV2UgbWlnaHQgbmVlZCB0byBjb25zaWRlciBzeW1ib2wgdmVyc2lvbmluZywgbmFtZXNwYWNlIG1hbmFnZW1lbnQsIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtIHRvIGF2b2lkIGNvbmZsaWN0cy4KCiogICAqKlNlY3VyaXR5IEltcGxpY2F0aW9uczoqKiBJZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGVudHJ5IHBvaW50cyB0byB0aGUgY29kZSB3aXRoaW4gYSBtb2R1bGUsIHdlIG5lZWQgdG8gY29uc2lkZXIgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBXaGF0IGFyZSB0aGUgdmFsaWRhdGlvbiBhbmQgYXV0aGVudGljYXRpb24gc2NoZW1lcz8gQXJlIHRoZXJlIHJpc2tzIG9mIG1hbGljaW91cyBtb2R1bGVzPwoKKiAgICoqVGhyZWFkIFNhZmV0eToqKiBEZXBlbmRpbmcgb24gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCwgd2UmIzM5O2xsIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHRocmVhZCBzYWZldHkuIElmIG11bHRpcGxlIHRocmVhZHMgbWlnaHQgbG9hZCBvciB1bmxvYWQgbW9kdWxlcyBjb25jdXJyZW50bHksIHdlIG5lZWQgYXBwcm9wcmlhdGUgbG9ja2luZyBtZWNoYW5pc21zIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBkYXRhIGNvcnJ1cHRpb24uCgpFc3NlbnRpYWxseSwgYnkgbWFraW5nIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgbm9uLXN0YXRpYywgdGhleSBhcmUgKnNpZ25hbGxpbmcqIHRoYXQgdGhleSBhcmUgaW1wb3J0YW50IGVudHJ5IHBvaW50cywgYW5kLCBJJiMzOTttIGFscmVhZHkgdGhpbmtpbmcgYWJvdXQgdGhlIGJpZ2dlciBjb250ZXh0IG9mIG1vZHVsZSBtYW5hZ2VtZW50LCBpbmNsdWRpbmcgZGVzaWduIGNob2ljZXMsIHBvdGVudGlhbCByaXNrcyBhbmQgaG93IHRvIG1hbmFnZSB0aGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2RldGFnX2xvYWRfbW9kdWxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bGliL2NvZGV0YWcuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvY29kZXRhZy5jPTMyND12b2lkIGNvZGV0YWdfbW9kdWxlX3JlcGxhY2VkKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHVsZSAqbmV3X21vZClcbi0tXG5saWIvY29kZXRhZy5jLTMzOS1cbmxpYi9jb2RldGFnLmM6MzQwOmludCBjb2RldGFnX2xvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZClcbmxpYi9jb2RldGFnLmMtMzQxLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk0NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBNb2R1bGUgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O20gcHJldHR5IHN1cmUgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoaXMsIHllYWg/IE1ha2VzIHNlbnNlLiBCdXQgd2FpdCBhIHNlYy4uLiBJIG5lZWQgdG8gY29uZmlybSBgY29kZXRhZ19sb2FkX21vZHVsZWAgaXMgc3BlY2lmaWNhbGx5IGNhbGxlZCAqZHVyaW5nKiBtb2R1bGUgbG9hZC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4uIExldCYjMzk7cyBkaWcgaW50byB0aGUgc291cmNlLCBzcGVjaWZpY2FsbHkgYGtlcm5lbC9tb2R1bGUvbWFpbi5jYC4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGZ1bmN0aW9uIGFuZCBob3cgaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZSBsb2FkaW5nIHByb2Nlc3MuIFRpbWUgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvZGV0YWdfbG9hZF9tb2R1bGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbW9kdWxlL21haW4uYz0zNDIyPXN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IGxvYWRfaW5mbyAqaW5mbywgY29uc3QgY2hhciBfX3VzZXIgKnVhcmdzLFxuLS1cbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1NzAtXG5rZXJuZWwvbW9kdWxlL21haW4uYzozNTcxOlx0aWYgKGNvZGV0YWdfbG9hZF9tb2R1bGUobW9kKSlcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1NzItXHRcdGdvdG8gc3lzZnNfY2xlYW51cDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODI4NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqRGl2aW5nIGludG8gdGhlIEFsbG9jYXRpb24gVGFnIEltcGxlbWVudGF0aW9uKioKClJpZ2h0LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgYWxsb2NhdGlvbiB0YWdnaW5nIG1lY2hhbmlzbS4gVGhlIG5hbWUgZGVmaW5pdGVseSByaW5ncyBhIGJlbGwuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgd2hldGhlciB0aGVyZSYjMzk7cyBhbiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBmb3IgdGhlc2UgdGFncywgc29tZXRoaW5nIGxpa2UgYGFsbG9jX3RhZ19pbml0YCBwZXJoYXBzPyBJJiMzOTtkIGV4cGVjdCBvbmUsIGl0JiMzOTtzIGZ1bmRhbWVudGFsIGZvciBhbnkgc3lzdGVtIGxpa2UgdGhpcy4KCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBmb2N1c2luZyBvbiBgbG9hZF9tb2R1bGVgIHdpdGhpbiBgbW0vYWxsb2NfdGFnLmNgLiBBbm5veWluZywgaXQmIzM5O3Mgc3RhdGljLCBzbyBpdOKAmXMgbGlrZWx5IG5vdCBkaXJlY3RseSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlICoqY29udGV4dCoqIG9mIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBsb2FkaW5nIHByb2Nlc3MgaW5mbHVlbmNlcyB0aGUgdGFnZ2VkIGFsbG9jYXRpb25zLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhhdCBmaWxlIG1vcmUgY2xvc2VseS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gYG1tL2FsbG9jX3RhZy5jYC4gSSYjMzk7bSBnb2luZyB0byBiZSBsb29raW5nIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgKnJlbGF0ZWQqIHRvIGBsb2FkX21vZHVsZWAuIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBlbnRyeSBwb2ludHMsIGhvdyB0aGVzZSB0YWdnZWQgYWxsb2NhdGlvbnMgYXJlIGluaXRpYWxpemVkLCBhbmQgaWYgdGhvc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCBgbG9hZF9tb2R1bGVgIHNvbWVob3cuIEkgc3VzcGVjdCB0aGVyZeKAmXMgZ29pbmcgdG8gYmUgYSBjaGFpbiBvZiBjYWxscyBvciBzb21lIGZvcm0gb2YgaW50ZXJhY3Rpb24gdGhhdOKAmXMgcmVsZXZhbnQuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb2FkX21vZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jPTkzMz1zdGF0aWMgdm9pZCByZWxlYXNlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgYm9vbCB1c2VkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTk3OC1cbm1tL2FsbG9jX3RhZy5jOjk3OTpzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZyAqc3RvcClcbm1tL2FsbG9jX3RhZy5jLTk4MC17XG4tLVxubW0vYWxsb2NfdGFnLmM9MTMzND1zdGF0aWMgaW50IF9faW5pdCBhbGxvY190YWdfaW5pdCh2b2lkKVxuLS1cbm1tL2FsbG9jX3RhZy5jLTEzNDItXHRcdC5mcmVlX3NlY3Rpb25fbWVtXHQ9IHJlbGVhc2VfbW9kdWxlX3RhZ3MsXG5tbS9hbGxvY190YWcuYzoxMzQzOlx0XHQubW9kdWxlX2xvYWRcdFx0PSBsb2FkX21vZHVsZSxcbm1tL2FsbG9jX3RhZy5jLTEzNDQtXHRcdC5tb2R1bGVfcmVwbGFjZWRcdD0gcmVwbGFjZV9tb2R1bGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4OTUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBNdXNpbmdzKioKCk9rYXksIHNvIGBsb2FkX21vZHVsZWAgaXMgdGhlIGtleSBjYWxsYmFjayBoZXJlOyB0aGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gV2hpY2ggbWVhbnMgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIHRyYWNraW5nIGRvd24gd2hhdCYjMzk7cyBnb2luZyBvbi4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZS4gQW5kIHRvIGdldCB0aGlzIHdob2xlIHRoaW5nIHdvcmtpbmcsIEkgcmVtZW1iZXIgSSBuZWVkIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgZW5hYmxlZCwgcmlnaHQ/IEFuZCBiZWNhdXNlIGBDT05GSUdfQ09ERV9UQUdHSU5HYCBpcyBhY3R1YWxseSAqc2VsZWN0ZWQqIGJ5IHRoYXQsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyB0aGUgcmVhbCBraW5ncGluIGNvbmZpZy4gCgpCdXQgd2FpdCBhIG1pbnV0ZSwgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGRlcGVuZHMgb24gYE1NVWAgYW5kIGBQUk9DX0ZTYC4uLiB0aGF0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LCBhbmQgd29ydGggbm90aW5nLiBBcmUgdGhlcmUgYW55IG90aGVyIGZsYWdzIEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgYW5kIHNlZSBpZiBgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR2AgaXMgcmVsZXZhbnQgaGVyZSBhcyB3ZWxsLiBHb3R0YSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcuZGVidWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMzc9Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZy5kZWJ1Zy0zNDEtXG5tbS9LY29uZmlnLmRlYnVnOjM0Mjpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubW0vS2NvbmZpZy5kZWJ1Zy0zNDMtXHRib29sIFwmIzM0O01lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Mzg3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmxlY3Rpbmcgb24gTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCwgcmVhbGlzdGljYWxseSwgd2UgZG9uJiMzOTt0ICpzdHJpY3RseSogbmVlZCB0aGF0IGBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHYCBmbGFnLiBJdCBzZWVtcyBsaWtlIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBieSBpdHNlbGYgc2hvdWxkIHByb3ZpZGUgZW5vdWdoIGluZm9ybWF0aW9uIGZvciBtb3N0IHNjZW5hcmlvcy4gSSYjMzk7bSBnb2luZyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLCB0aG91Z2guCgpMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgYXJlYXMgb2YgY29kZSB0aGF0IGFyZSByZWxldmFudCBoZXJlLiBJJiMzOTttIGN1cmlvdXMgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBtaWdodCBuZWVkIGF0dGVudGlvbi4gSG1tLCBgcGdhbGxvY190YWdfc3dhcGAgaXMgaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGFjdHVhbGx5IHRvdWNoIHRoYXQuIEl0JiMzOTtzIGp1c3QgdGhlcmUgZm9yIGNvbnRleHQsIG5vdGhpbmcgdG8gd29ycnkgYWJvdXQuCgpBbHJpZ2h0LCB0aGUgcGF0Y2ggKmRvZXMqIGFkZCBgcmVtb3ZlX2FsbG9jaW5mb19maWxlYCwgd2hpY2ggaXMgc3RhdGljLCBhbmQgbW9kaWZpZXMgdGhlIGV4aXN0aW5nIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBmdW5jdGlvbiwgYWxzbyBzdGF0aWMuIExldCBtZSBzZWUgd2hlcmUgYHNodXRkb3duX21lbV9wcm9maWxpbmdgIGdldHMgY2FsbGVkLiBBaCwgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGFsbG9jX3RhZ19zZWNfaW5pdGAsIGByZXNlcnZlX21vZHVsZV90YWdzYCwgYW5kIGBhbGxvY190YWdfaW5pdGAuIE5vdywgSSB3b25kZXIgaWYgYHJlc2VydmVfbW9kdWxlX3RhZ3NgIGlzIGNhbGxlZCBmcm9tIGBhbGxvY190YWdfbW9kdWxlX2luaXRgPyBJJiMzOTtkIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVzZXJ2ZV9tb2R1bGVfdGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jPTc4NT1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXG4tLVxubW0vYWxsb2NfdGFnLmMtODQ1LVxubW0vYWxsb2NfdGFnLmM6ODQ2OnN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxubW0vYWxsb2NfdGFnLmMtODQ3LVx0XHRcdFx0IHVuc2lnbmVkIGludCBwcmVwZW5kLCB1bnNpZ25lZCBsb25nIGFsaWduKVxuLS1cbm1tL2FsbG9jX3RhZy5jPTEzMzQ9c3RhdGljIGludCBfX2luaXQgYWxsb2NfdGFnX2luaXQodm9pZClcbi0tXG5tbS9hbGxvY190YWcuYy0xMzQwLVx0XHQubmVlZHNfc2VjdGlvbl9tZW1cdD0gbmVlZHNfc2VjdGlvbl9tZW0sXG5tbS9hbGxvY190YWcuYzoxMzQxOlx0XHQuYWxsb2Nfc2VjdGlvbl9tZW1cdD0gcmVzZXJ2ZV9tb2R1bGVfdGFncyxcbm1tL2FsbG9jX3RhZy5jLTEzNDItXHRcdC5mcmVlX3NlY3Rpb25fbWVtXHQ9IHJlbGVhc2VfbW9kdWxlX3RhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBNb2R1bGUgVGFnZ2luZyoqCgpBbHJpZ2h0LCBzbyBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AuLi4gcmlnaHQsIHRoYXQmIzM5O3MgYSBjYWxsYmFjayBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBjb2RldGFnX21vZHVsZV9pbml0YC4gR29vZC4gVGhhdCBwdXRzIGl0IGluIGNvbnRleHQuIFRoZSBrZXkgZW50cnkgcG9pbnRzIHRvIGZvY3VzIG9uIHNlZW0gdG8gYmUgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHkg4oCTIHRoZSBsb2FkIGFuZCB1bmxvYWQgaG9va3MuIFRoZXkmIzM5O3JlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZSBsb29rLiBOb3csIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2ssIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgY29kZXRhZ19sb2FkX21vZHVsZWAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIE5vIHBvaW50IGluIGRpZ2dpbmcgaW50byBhIG5vbi1leHBvcnRlZCBzeW1ib2wuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE3IDA3OjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9jb2RldGFnLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDM2MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBhIE1vZHVsZSBDYWxsKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJhY2luZyB0aGlzIGV4ZWN1dGlvbiBwYXRoIGFuZCBpdCBzZWVtcyB0aGlzIGZ1bmN0aW9uIGlzbiYjMzk7dCBleHBsaWNpdGx5IGV4cG9ydGVkLiBUaGF0JiMzOTtzIGZpbmUsIGJ1dCB3aGF0JiMzOTtzIHJlYWxseSB0aHJvd2luZyBtZSBpcyB0aGF0IGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBrZXJuZWwvbW9kdWxlL21haW4uY2AsIGFuZCB0aGF0JiMzOTtzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0JiMzOTtzIGRlZmluZWQuCgpIYW5nIG9uLi4uIEkgdGhpbmsgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkIGluIGBsaWIvY29kZXRhZy5jYC4gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQuIFdhaXQgYSBzZWNvbmQsIGNvdWxkIGl0IGhhdmUgYSBkZWNsYXJhdGlvbiBpbiBgaW5jbHVkZS9saW51eC9jb2RldGFnLmhgPyBUaGF0JiMzOTtzIHRoZSBtb3N0IGxpa2VseSBzcG90IGZvciBhbiBpbXBvcnQgaWYgaXQmIzM5O3Mgbm90IGJlaW5nIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIEdvdCB0byBjaGVjayB0aGF0IGluY2x1ZGUgZmlsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29kZXRhZ19sb2FkX21vZHVsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29kZXRhZy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29kZXRhZy5oPTk4PXZvaWQgY29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbW9kdWxlICpuZXdfbW9kKTtcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjk5OmludCBjb2RldGFnX2xvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCk7XG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC0xMDAtdm9pZCBjb2RldGFnX3VubG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaD0xMTI9c3RhdGljIGlubGluZSB2b2lkIGNvZGV0YWdfbW9kdWxlX3JlcGxhY2VkKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHVsZSAqbmV3X21vZCkge31cbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjExMzpzdGF0aWMgaW5saW5lIGludCBjb2RldGFnX2xvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkgeyByZXR1cm4gMDsgfVxuaW5jbHVkZS9saW51eC9jb2RldGFnLmgtMTE0LXN0YXRpYyBpbmxpbmUgdm9pZCBjb2RldGFnX3VubG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKSB7fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDg0MAoJCQkJCQkJb3V0cHV0OiA2NAoJCQkJCQkJdGhvdWdodHM6IDE1NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGb2N1c2luZyBvbiBNb2R1bGUgTG9hZGluZyBhbmQgVW5sb2FkaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgYXJlIGluZGVlZCB0aGUgY29ycmVjdCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLCBhcyBzdXNwZWN0ZWQuIFRoZXkgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBob29rcyByZWxhdGVkIHRvIG1vZHVsZSBpbnRlcmFjdGlvbi4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBsdXJraW5nIGFyb3VuZC4gSSBzZWUgYGFsbG9jX3RhZ19pbml0YCBpcyBtYXJrZWQgYXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHNvIHRoYXQmIzM5O3MgcHJvYmFibHkgbm90IHVzZWZ1bCBmb3IgdHJhY2tpbmcgbW9kdWxlIGxpZmV0aW1lIGFmdGVyIGluaXRpYWxpemF0aW9uLiBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgYW5kIGByZW1vdmVfYWxsb2NpbmZvX2ZpbGVgIGFyZSBib3RoIHN0YXRpYywgd2hpY2ggZ2VuZXJhbGx5IG1lYW5zIHRoZXkmIzM5O3JlIG5vdCBleHRlcm5hbGx5IHZpc2libGUgYW5kIGNhbiBiZSBzYWZlbHkgaWdub3JlZCBmb3IgdGhpcyBicm9hZGVyIG1vZHVsZSBsaWZlY3ljbGUgcGVyc3BlY3RpdmUuIFRoZXJlZm9yZSwgZm9jdXNpbmcgb24gYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBzZWVtcyBsaWtlIHRoZSBtb3N0IGVmZmVjdGl2ZSBhcHByb2FjaC4KCkhtbSwgSSBzZWUgYSBwb3RlbnRpYWwgY29tcGxpY2F0aW9uIHRob3VnaC4gVGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYGxvYWRfbW9kdWxlYCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGl0JiMzOTtzICpzdGF0aWMqLiBUaGF0JiMzOTtzIGEgYml0IG9mIGEgcmVkIGZsYWcsIG1lYW5pbmcgaXQgbWlnaHQgYmUgaGlkZGVuIGZyb20gZGlyZWN0IGludm9jYXRpb24gZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgaW4gYG1tL2FsbG9jX3RhZy5jYCB0aGF0IGNvdWxkIGFsc28gc2VydmUgYXMgcG90ZW50aWFsIGZvY3VzIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBtb2R1bGUgYmVoYXZpb3Igd2l0aGluIHRoYXQgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2ggaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XlthLXpBLVpfXVthLXpBLVowLTlfXSogW2EtekEtWl9dW2EtekEtWjAtOV9dKlxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2FsbG9jX3RhZy5jPTMzPXN0YXRpYyBib29sIG1lbV9wcm9maWxpbmdfc3VwcG9ydDtcbi0tXG5tbS9hbGxvY190YWcuYy0zOS0gKi9cbm1tL2FsbG9jX3RhZy5jOjQwOmJvb2wgbWVtX2FsbG9jX3Byb2ZpbGluZ19wZXJtYW5lbnRseV9kaXNhYmxlZCh2b2lkKVxubW0vYWxsb2NfdGFnLmMtNDEte1xuLS1cbm1tL2FsbG9jX3RhZy5jPTQ3Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIGFsbG9jaW5mb19wcm9jX29wcyA9IHtcbi0tXG5tbS9hbGxvY190YWcuYy00ODctXG5tbS9hbGxvY190YWcuYzo0ODg6c2l6ZV90IGFsbG9jX3RhZ190b3BfdXNlcnMoc3RydWN0IGNvZGV0YWdfYnl0ZXMgKnRhZ3MsIHNpemVfdCBjb3VudCwgYm9vbCBjYW5fc2xlZXApXG5tbS9hbGxvY190YWcuYy00ODkte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTUyOC1cbm1tL2FsbG9jX3RhZy5jOjUyOTp2b2lkIHBnYWxsb2NfdGFnX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXG5tbS9hbGxvY190YWcuYy01MzAte1xuLS1cbm1tL2FsbG9jX3RhZy5jLTU1NC1cbm1tL2FsbG9jX3RhZy5jOjU1NTp2b2lkIHBnYWxsb2NfdGFnX3N3YXAoc3RydWN0IGZvbGlvICpuZXcsIHN0cnVjdCBmb2xpbyAqb2xkKVxubW0vYWxsb2NfdGFnLmMtNTU2LXtcbi0tXG5tbS9hbGxvY190YWcuYz01OTU9c3RhdGljIHZvaWQgcmVtb3ZlX2FsbG9jaW5mb19maWxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5tbS9hbGxvY190YWcuYy01OTktXG5tbS9hbGxvY190YWcuYzo2MDA6c3RhdGljIERFQ0xBUkVfV09SSyhyZW1vdmVfYWxsb2NpbmZvX3dvcmssIHJlbW92ZV9hbGxvY2luZm9fZmlsZSk7XG5tbS9hbGxvY190YWcuYy02MDEtXG4tLVxubW0vYWxsb2NfdGFnLmM9MTE5MT1zdGF0aWMgYWxsb2NfdGFnX2FkZF9mdW5jIF9fcmN1ICphbGxvY190YWdfYWRkX2Vhcmx5X3Bmbl9wdHIgX19yZWZkYXRhID1cbi0tXG5tbS9hbGxvY190YWcuYy0xMTkzLVxubW0vYWxsb2NfdGFnLmM6MTE5NDp2b2lkIGFsbG9jX3RhZ19hZGRfZWFybHlfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG5tbS9hbGxvY190YWcuYy0xMTk1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NzMKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogMTAwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNb2R1bGUgTG9hZGluZyBhbmQgTWVtb3J5IFByb2ZpbGluZyBDaGFuZ2VzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgZHVlIHRvIHRoZWlyIGRpcmVjdCBpbnZvbHZlbWVudCBpbiBtb2R1bGUgaGFuZGxpbmcuIFRoZSBgYWxsb2NfdGFnX3RvcF91c2Vyc2AgZnVuY3Rpb24gaXMgcHJvYmFibHkgb25seSByZWxldmFudCBpbiB0aGUgY29udGV4dCBvZiByZWFkaW5nIHRoZSBwcm9jIGZpbGUsIHNvIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIG1vZHVsZSBsb2FkaW5nIGl0c2VsZi4KClJldmlld2luZyB0aGUgY29kZSBjaGFuZ2VzLCBpdCBsb29rcyBsaWtlIGEga2V5IGFkanVzdG1lbnQgaGFzIGJlZW4gbWFkZSBpbiBgY29kZXRhZ19tb2R1bGVfaW5pdGAuIE5vdywgaWYgbW9kdWxlIGluaXRpYWxpemF0aW9uIGZhaWxzIHdpdGggYC1FT1BOT1RTVVBQYCAoT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQpLCBpdCYjMzk7cyBubyBsb25nZXIgdHJlYXRlZCBhcyBhIGNyaXRpY2FsIGVycm9yLiBUaGlzIGluZGljYXRlcyB0aGF0IHRoZSBtb2R1bGUgY2FuIGJlIGxvYWRlZCBldmVuIHdpdGhvdXQgY2VydGFpbiBjb2RlIHRhZ2dpbmcgZmVhdHVyZXMgZW5hYmxlZC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBjb2RlIGhhcyBiZWVuIG1hZGUgbW9yZSByb2J1c3QgaW4gaGFuZGxpbmcgbW9kdWxlcyB0aGF0IG1pZ2h0IG5vdCBmdWxseSBzdXBwb3J0IHRoZSB0YWdnaW5nIG1lY2hhbmlzbS4KClRoZSBjb3JyZXNwb25kaW5nIGNoYW5nZSBpbiBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBhY2tub3dsZWRnZXMgdGhhdCBhIG1vZHVsZSBtaWdodCBiZSBwcmVzZW50IGRlc3BpdGUgYG1vZHVsZV9sb2FkKClgIHJldHVybmluZyBgLUVPUE5PVFNVUFBgLiBUaGUgYGZyZWVfc2VjdGlvbl9tZW1gIGNhbGwgaGFzIGJlZW4gZXhwYW5kZWQgdG8gZGVhbCB3aXRoIG1vZHVsZXMgaW4gdGhlIGlkciBvciB0aG9zZSB3aXRoIHJlc2VydmVkIHNlY3Rpb24gbWVtb3J5LgoKVHVybmluZyB0byB0aGUgYGFsbG9jX3RhZy5jYCBmaWxlLCBJIHNlZSB0aGUgY29kZSBhZGRyZXNzZXMgYSBidWcgcmVsYXRlZCB0byByZW1vdmluZyB0aGUgcHJvYyBlbnRyeS4gVGhlIGByZW1vdmVfcHJvY19lbnRyeWAgY2FsbCBoYXMgYmVlbiBtb3ZlZCB0byBhIHdvcmtxdWV1ZSwgbGlrZWx5IHRvIGF2b2lkIGlzc3VlcyB3aXRoIGNhbGxpbmcgaXQgZnJvbSBhbiBpbmFwcHJvcHJpYXRlIGNvbnRleHQuIEFkZGl0aW9uYWxseSwgbW9kdWxlIGxvYWRpbmcgaGFzIGJlZW4gdXBkYXRlZCB3aGVuIHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSWYgYG1lbV9wcm9maWxpbmdfc3VwcG9ydGAgaXMgZmFsc2UsIG1vZHVsZSBsb2FkaW5nIHdpbGwgcmV0dXJuIGAtRU9QTk9UU1VQUGAuCgpTbywgaW4gc3VtbWFyeSwgdGhlc2UgY2hhbmdlcyBhcmUgYWRkcmVzc2luZyB0aGUgaW50ZWdyYXRpb24gYmV0d2VlbiBtb2R1bGUgbG9hZGluZyBhbmQgbWVtb3J5IHByb2ZpbGluZy4gVGhlIGNoYW5nZXMgaGFuZGxlIGNhc2VzIHdoZXJlIGEgbW9kdWxlIG1pZ2h0IG5vdCBiZSBmdWxseSBjb21wYXRpYmxlIHdpdGggY29kZSB0YWdnaW5nLCBhbmQgcHJvdmlkZXMgc2FmZXIgaGFuZGxpbmcgb2YgcHJvYyBlbnRyeSByZW1vdmFsLgoKQXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgY2xlYXJseSBgQ09ORklHX01PRFVMRVNgIGlzIG5lY2Vzc2FyeSBmb3IgbW9kdWxlIGxvYWRpbmcgaW4gZ2VuZXJhbC4gSW4gdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcywgSSYjMzk7bGwgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGFsc28gZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TU9EVUxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvZGV0YWdfbG9hZF9tb2R1bGUmIzM0OywKICAgICYjMzQ7Y29kZXRhZ191bmxvYWRfbW9kdWxlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1vZHVsZSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgbG9naWMgaW4gYGxpYi9jb2RldGFnLmNgIGFuZCBgbW0vYWxsb2NfdGFnLmNgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGFsc28gY2hhbmdlcyBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgdG8gc2NoZWR1bGUgYSB3b3JrIGl0ZW0gZm9yIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5IGluc3RlYWQgb2YgZG9pbmcgaXQgZGlyZWN0bHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgbW9kdWxlIGxvYWQvdW5sb2FkIGFuZCBtZW1vcnkgcHJvZmlsaW5nIHNodXRkb3duLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgICAmIzM0O01PRFVMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb2RldGFnX2xvYWRfbW9kdWxlJiMzNDssCiAgICAmIzM0O2NvZGV0YWdfdW5sb2FkX21vZHVsZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtb2R1bGUgbG9hZGluZyBhbmQgdW5sb2FkaW5nIGxvZ2ljIGluIGBsaWIvY29kZXRhZy5jYCBhbmQgYG1tL2FsbG9jX3RhZy5jYCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkLiBJdCBhbHNvIGNoYW5nZXMgYHNodXRkb3duX21lbV9wcm9maWxpbmdgIHRvIHNjaGVkdWxlIGEgd29yayBpdGVtIGZvciByZW1vdmluZyB0aGUgcHJvYyBlbnRyeSBpbnN0ZWFkIG9mIGRvaW5nIGl0IGRpcmVjdGx5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZHVyaW5nIG1vZHVsZSBsb2FkL3VubG9hZCBhbmQgbWVtb3J5IHByb2ZpbGluZyBzaHV0ZG93biwgc28gaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTcgMDc6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoyMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIChhbGxvY190YWcpIGFuZCBjb2RldGFnIHN1YnN5c3RlbXMgdG8gaGFuZGxlIG1vZHVsZSBsb2FkaW5nIHdoZW4gbWVtb3J5IHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSB0byByZW1vdmUgdGhlIGFsbG9jaW5mbyBwcm9jIGVudHJ5IGFzeW5jaHJvbm91c2x5IGFuZCBjaGFuZ2VzIGVycm9yIGhhbmRsaW5nIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0byBhbGxvdyBtb2R1bGVzIHRvIGxvYWQgd2l0aG91dCB0YWdzIGJ5IHJldHVybmluZyAtRU9QTk9UU1VQUC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbnRyb2wgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjZWRkYjIwZGFkMzdhODNkYmZiNDEzMzk3MDE0MjNjOGMxY2IyNTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzoxOTowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2xpYi9jb2RldGFnLmMgYi9saWIvY29kZXRhZy5jCmluZGV4IGE5Y2RhNGM5NjJhMzAuLmEwYjYwMDcyMGFmYzEgMTAwNjQ0Ci0tLSBhL2xpYi9jb2RldGFnLmMKJiM0MzsmIzQzOyYjNDM7IGIvbGliL2NvZGV0YWcuYwpAQCAtMjQwLDcgJiM0MzsyNDAsOSBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiAKIAlpZiAoZXJyICZsdDsgMCkgewogCQlrZnJlZShjbW9kKTsKLQkJcmV0dXJuIGVycjsKJiM0MzsJCS8qIC1FT1BOT1RTVVBQIG1lYW5zIHdlIGNhbiBsb2FkIHRoZSBtb2R1bGUgd2l0aG91dCBpdHMgdGFnLiAqLwomIzQzOwkJaWYgKGVyciAhPSAtRU9QTk9UU1VQUCkKJiM0MzsJCQlyZXR1cm4gZXJyOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzg4LDcgJiM0MzszOTAsMTEgQEAgdm9pZCBjb2RldGFnX3VubG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKQogCQkJJiM0MzsmIzQzO2N0dHlwZS0mZ3Q7Y29udGVudF9pZDsKIAkJfQogCQl1cF93cml0ZSgmYW1wO2N0dHlwZS0mZ3Q7bW9kX2xvY2spOwotCQlpZiAoZm91bmQgJmFtcDsmYW1wOyBjdHR5cGUtJmd0O2Rlc2MuZnJlZV9zZWN0aW9uX21lbSkKJiM0MzsJCS8qCiYjNDM7CQkgKiBBIG1vZHVsZSB3aG9zZSBtb2R1bGVfbG9hZCgpIHJldHVybmVkIC1FT1BOT1RTVVBQIGlzIG5vdAomIzQzOwkJICogaW4gdGhlIGlkciBidXQgbWF5IHN0aWxsIGhvbGQgcmVzZXJ2ZWQgc2VjdGlvbiBtZW1vcnkuCiYjNDM7CQkgKi8KJiM0MzsJCWlmIChjdHR5cGUtJmd0O2Rlc2MuZnJlZV9zZWN0aW9uX21lbSkKIAkJCWN0dHlwZS0mZ3Q7ZGVzYy5mcmVlX3NlY3Rpb25fbWVtKG1vZCwgdHJ1ZSk7CiAJfQogCW11dGV4X3VubG9jaygmYW1wO2NvZGV0YWdfbG9jayk7CmRpZmYgLS1naXQgYS9tbS9hbGxvY190YWcuYyBiL21tL2FsbG9jX3RhZy5jCmluZGV4IGIzMzQxMDMxMDQ3NzkuLmYzMGVmOGRkMjRjNzAgMTAwNjQ0Ci0tLSBhL21tL2FsbG9jX3RhZy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2FsbG9jX3RhZy5jCkBAIC0xNSw2ICYjNDM7MTUsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nX2Nob2ljZXMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2ttZW1sZWFrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7dWFwaS9saW51eC9hbGxvY190YWcuaCZndDsKIApAQCAtNTkxLDYgJiM0Mzs1OTIsMTMgQEAgdm9pZCBwZ2FsbG9jX3RhZ19zd2FwKHN0cnVjdCBmb2xpbyAqbmV3LCBzdHJ1Y3QgZm9saW8gKm9sZCkKIAlwdXRfcGFnZV90YWdfcmVmKGhhbmRsZV9uZXcpOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcmVtb3ZlX2FsbG9jaW5mb19maWxlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKJiM0Mzt7CiYjNDM7CXJlbW92ZV9wcm9jX2VudHJ5KEFMTE9DSU5GT19GSUxFX05BTUUsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgREVDTEFSRV9XT1JLKHJlbW92ZV9hbGxvY2luZm9fd29yaywgcmVtb3ZlX2FsbG9jaW5mb19maWxlKTsKJiM0MzsKIHN0YXRpYyB2b2lkIHNodXRkb3duX21lbV9wcm9maWxpbmcoYm9vbCByZW1vdmVfZmlsZSkKIHsKIAlpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkpCkBAIC02MDAsNyAmIzQzOzYwOCw3IEBAIHN0YXRpYyB2b2lkIHNodXRkb3duX21lbV9wcm9maWxpbmcoYm9vbCByZW1vdmVfZmlsZSkKIAkJcmV0dXJuOwogCiAJaWYgKHJlbW92ZV9maWxlKQotCQlyZW1vdmVfcHJvY19lbnRyeShBTExPQ0lORk9fRklMRV9OQU1FLCBOVUxMKTsKJiM0MzsJCXNjaGVkdWxlX3dvcmsoJmFtcDtyZW1vdmVfYWxsb2NpbmZvX3dvcmspOwogCW1lbV9wcm9maWxpbmdfc3VwcG9ydCA9IGZhbHNlOwogfQogCkBAIC05NzUsNiAmIzQzOzk4MywxMCBAQCBzdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IGNvZGV0YWcgKnN0YXJ0LCBzdHJ1Y3QgY29kZXRhZwogCXN0cnVjdCBhbGxvY190YWcgKnN0b3BfdGFnOwogCXN0cnVjdCBhbGxvY190YWcgKnRhZzsKIAomIzQzOwkvKiBQcm9maWxpbmcgZGlzYWJsZWQ6IGxvYWQgdGhlIG1vZHVsZSB3aXRob3V0IGl0cyB0YWdzLiAqLwomIzQzOwlpZiAoIW1lbV9wcm9maWxpbmdfc3VwcG9ydCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKIAkvKiBwZXJjcHUgY291bnRlcnMgZm9yIGNvcmUgYWxsb2NhdGlvbnMgYXJlIGFscmVhZHkgc3RhdGljYWxseSBhbGxvY2F0ZWQgKi8KIAlpZiAoIW1vZCkKIAkJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc2CgkJCQkJCQlvdXRwdXQ6IDE5NgoJCQkJCQkJdGhvdWdodHM6IDQxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIG92ZXIgdGhpcyBwYXRjaC4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBmb2N1cyBpcyBvbiBlbmhhbmNpbmcgdGhlIG1lbW9yeSBwcm9maWxpbmcgYW5kIG1vZHVsZSBtYW5hZ2VtZW50IGFzcGVjdHMgd2l0aGluIHRoZSBrZXJuZWwuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBgbGliL2NvZGV0YWcuY2AgYW5kIGBtbS9hbGxvY190YWcuY2AuCgpJbiBgbGliL2NvZGV0YWcuY2AsIHRoZSBjaGFuZ2VzIHJlZmluZSBob3cgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB1bmxvYWRlZC4gVGhlIGBjb2RldGFnX21vZHVsZV9pbml0YCBmdW5jdGlvbiBub3cgaGFuZGxlcyBjYXNlcyB3aGVyZSBhIG1vZHVsZSBtaWdodCBub3QgYmUgc3VwcG9ydGVkLCByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gTW9yZSBpbXBvcnRhbnRseSwgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gZnJlZSByZXNlcnZlZCBzZWN0aW9uIG1lbW9yeSBldmVuIGlmIHRoZSBtb2R1bGUgd2FzbiYjMzk7dCBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCAoIGBmb3VuZGAgaXMgZmFsc2UgKSwgYWRkcmVzc2luZyBhIHBvdGVudGlhbCBtZW1vcnkgbGVhayBpZiB0aGUgbG9hZCBmYWlsZWQuCgpPdmVyIGluIGBtbS9hbGxvY190YWcuY2AsIGEgd29ya3F1ZXVlIGl0ZW0sIGByZW1vdmVfYWxsb2NpbmZvX2ZpbGVgLCBoYXMgYmVlbiBpbnRyb2R1Y2VkLiBUaGlzIGlzIHJlc3BvbnNpYmxlIGZvciBzYWZlbHkgcmVtb3ZpbmcgdGhlIGBBTExPQ0lORk9fRklMRV9OQU1FYCBwcm9jIGVudHJ5LiBJbnN0ZWFkIG9mIGRpcmVjdGx5IGNhbGxpbmcgYHJlbW92ZV9wcm9jX2VudHJ5YCBkdXJpbmcgc2h1dGRvd24sIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBub3cgc2NoZWR1bGVzIHRoaXMgd29yay4gVGhlIGBsb2FkX21vZHVsZWAgZnVuY3Rpb24gYWxzbyBub3cgcmV0dXJucyBgLUVPUE5PVFNVUFBgIGlmIG1lbW9yeSBwcm9maWxpbmcgaXNuJiMzOTt0IHN1cHBvcnRlZCwgZnVydGhlciBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcuCgpUaGUgcGF0Y2ggc2VlbXMgZm9jdXNlZCBvbiBpbXByb3ZlZCBlcnJvciBoYW5kbGluZywgd29ya3F1ZXVlIHV0aWxpemF0aW9uIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LCBhbmQgYSBtb3JlIHJvYnVzdCBtb2R1bGUgdW5sb2FkaW5nIHByb2Nlc3MuIFRoZXJlIGFyZSBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGV4cG9zZWQgdG8gdXNlciBzcGFjZSwgc28gbm8gbmV3IEFQSXMgdG8gd29ycnkgYWJvdXQuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgb3IgaW5mb3JtYXRpb24gbGVha3MsIHdoaWNoIGlzIGdvb2QuCgpJJiMzOTt2ZSB0YWtlbiBhIGNsb3NlciBsb29rIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gYHJlbW92ZV9hbGxvY2luZm9fd29ya2AgaXMgYSBzdGF0aWNhbGx5IGluaXRpYWxpemVkIGBERUNMQVJFX1dPUktgLCBzbyBubyBwcm9ibGVtcyB0aGVyZS4gYGxvYWRfbW9kdWxlYCByZXR1cm5zIGAtRU9QTk9UU1VQUGAgYXMgZXhwZWN0ZWQsIGFuZCBgY29kZXRhZ19tb2R1bGVfaW5pdGAgcHJvcGVybHkgY2hlY2tzIHRoaXMgZXJyb3IgY29kZS4gTW9zdCBpbXBvcnRhbnRseSwgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgY2FsbHMgYGZyZWVfc2VjdGlvbl9tZW1gIHJlZ2FyZGxlc3Mgb2Ygc3VjY2Vzcy4gVGhpcyBhbGxheWVkIG15IHN1c3BpY2lvbnMuCgpTaW5jZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLCB0aGUgZXhpc3RpbmcgS0FTQU4vTE9DS0RFUCBjaGVja3MgYW5kIG90aGVyIGJ1ZyBkZXRlY3Rpb24gbWV0aG9kcyBhcmUgc3VmZmljaWVudC4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNyAwNzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIChhbGxvY190YWcpIGFuZCBjb2RldGFnIHN1YnN5c3RlbXMgdG8gaGFuZGxlIG1vZHVsZSBsb2FkaW5nIHdoZW4gbWVtb3J5IHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSB0byByZW1vdmUgdGhlIGFsbG9jaW5mbyBwcm9jIGVudHJ5IGFzeW5jaHJvbm91c2x5IGFuZCBjaGFuZ2VzIGVycm9yIGhhbmRsaW5nIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0byBhbGxvdyBtb2R1bGVzIHRvIGxvYWQgd2l0aG91dCB0YWdzIGJ5IHJldHVybmluZyAtRU9QTk9UU1VQUC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbnRyb2wgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIChhbGxvY190YWcpIGFuZCBjb2RldGFnIHN1YnN5c3RlbXMgdG8gaGFuZGxlIG1vZHVsZSBsb2FkaW5nIHdoZW4gbWVtb3J5IHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSB0byByZW1vdmUgdGhlIGFsbG9jaW5mbyBwcm9jIGVudHJ5IGFzeW5jaHJvbm91c2x5IGFuZCBjaGFuZ2VzIGVycm9yIGhhbmRsaW5nIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0byBhbGxvdyBtb2R1bGVzIHRvIGxvYWQgd2l0aG91dCB0YWdzIGJ5IHJldHVybmluZyAtRU9QTk9UU1VQUC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbnRyb2wgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjAzLjE5NDcwNzQ1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDgzNjYyNTg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJNT0RVTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29kZXRhZ19sb2FkX21vZHVsZVwiLFxuICAgIFwiY29kZXRhZ191bmxvYWRfbW9kdWxlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIChhbGxvY190YWcpIGFuZCBjb2RldGFnIHN1YnN5c3RlbXMgdG8gaGFuZGxlIG1vZHVsZSBsb2FkaW5nIHdoZW4gbWVtb3J5IHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgaW50cm9kdWNlcyBhIHdvcmtxdWV1ZSB0byByZW1vdmUgdGhlIGFsbG9jaW5mbyBwcm9jIGVudHJ5IGFzeW5jaHJvbm91c2x5IGFuZCBjaGFuZ2VzIGVycm9yIGhhbmRsaW5nIGluIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0byBhbGxvdyBtb2R1bGVzIHRvIGxvYWQgd2l0aG91dCB0YWdzIGJ5IHJldHVybmluZyAtRU9QTk9UU1VQUC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGNvbnRyb2wgZmxvdywgZXJyb3IgaGFuZGxpbmcsIGFuZCB3b3JrcXVldWUgc2NoZWR1bGluZy4gVGhleSBkbyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXJzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIHVzZS1hZnRlci1mcmVlLCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2VzLCBvciBtZW1vcnkgbGVha3MpIHdvdWxkIGJlIGNhdWdodCBieSBzdGFuZGFyZCBLQVNBTiBvciBvdGhlciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MsIHNvIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9kdWxlIGxvYWRpbmcgYW5kIHVubG9hZGluZyBsb2dpYyBpbiBgbGliL2NvZGV0YWcuY2AgYW5kIGBtbS9hbGxvY190YWcuY2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgYWxzbyBjaGFuZ2VzIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCB0byBzY2hlZHVsZSBhIHdvcmsgaXRlbSBmb3IgcmVtb3ZpbmcgdGhlIHByb2MgZW50cnkgaW5zdGVhZCBvZiBkb2luZyBpdCBkaXJlY3RseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBtb2R1bGUgbG9hZC91bmxvYWQgYW5kIG1lbW9yeSBwcm9maWxpbmcgc2h1dGRvd24sIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjAzLjE5NDcxMzYxNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5Nzg0MDc3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJjZWRkYjIwZGFkMzdhODNkYmZiNDEzMzk3MDE0MjNjOGMxY2IyNTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTcgMDc6MTk6MDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbGliL2NvZGV0YWcuYyBiL2xpYi9jb2RldGFnLmNcXG5pbmRleCBhOWNkYTRjOTYyYTMwLi5hMGI2MDA3MjBhZmMxIDEwMDY0NFxcbi0tLSBhL2xpYi9jb2RldGFnLmNcXG4rKysgYi9saWIvY29kZXRhZy5jXFxuQEAgLTI0MCw3ICsyNDAsOSBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxuIFxcbiBcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRrZnJlZShjbW9kKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0LyogLUVPUE5PVFNVUFAgbWVhbnMgd2UgY2FuIGxvYWQgdGhlIG1vZHVsZSB3aXRob3V0IGl0cyB0YWcuICovXFxuK1xcdFxcdGlmIChlcnIgIT0gLUVPUE5PVFNVUFApXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0zODgsNyArMzkwLDExIEBAIHZvaWQgY29kZXRhZ191bmxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZClcXG4gXFx0XFx0XFx0KytjdHR5cGUtXFx1MDAzZWNvbnRlbnRfaWQ7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dXBfd3JpdGUoXFx1MDAyNmN0dHlwZS1cXHUwMDNlbW9kX2xvY2spO1xcbi1cXHRcXHRpZiAoZm91bmQgXFx1MDAyNlxcdTAwMjYgY3R0eXBlLVxcdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEEgbW9kdWxlIHdob3NlIG1vZHVsZV9sb2FkKCkgcmV0dXJuZWQgLUVPUE5PVFNVUFAgaXMgbm90XFxuK1xcdFxcdCAqIGluIHRoZSBpZHIgYnV0IG1heSBzdGlsbCBob2xkIHJlc2VydmVkIHNlY3Rpb24gbWVtb3J5LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGN0dHlwZS1cXHUwMDNlZGVzYy5mcmVlX3NlY3Rpb25fbWVtKVxcbiBcXHRcXHRcXHRjdHR5cGUtXFx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbShtb2QsIHRydWUpO1xcbiBcXHR9XFxuIFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29kZXRhZ19sb2NrKTtcXG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xcbmluZGV4IGIzMzQxMDMxMDQ3NzkuLmYzMGVmOGRkMjRjNzAgMTAwNjQ0XFxuLS0tIGEvbW0vYWxsb2NfdGFnLmNcXG4rKysgYi9tbS9hbGxvY190YWcuY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXFfZmlsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva21lbWxlYWsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VhcGkvbGludXgvYWxsb2NfdGFnLmhcXHUwMDNlXFxuIFxcbkBAIC01OTEsNiArNTkyLDEzIEBAIHZvaWQgcGdhbGxvY190YWdfc3dhcChzdHJ1Y3QgZm9saW8gKm5ldywgc3RydWN0IGZvbGlvICpvbGQpXFxuIFxcdHB1dF9wYWdlX3RhZ19yZWYoaGFuZGxlX25ldyk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJlbW92ZV9hbGxvY2luZm9fZmlsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0cmVtb3ZlX3Byb2NfZW50cnkoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgTlVMTCk7XFxuK31cXG4rXFxuK3N0YXRpYyBERUNMQVJFX1dPUksocmVtb3ZlX2FsbG9jaW5mb193b3JrLCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUpO1xcbitcXG4gc3RhdGljIHZvaWQgc2h1dGRvd25fbWVtX3Byb2ZpbGluZyhib29sIHJlbW92ZV9maWxlKVxcbiB7XFxuIFxcdGlmIChtZW1fYWxsb2NfcHJvZmlsaW5nX2VuYWJsZWQoKSlcXG5AQCAtNjAwLDcgKzYwOCw3IEBAIHN0YXRpYyB2b2lkIHNodXRkb3duX21lbV9wcm9maWxpbmcoYm9vbCByZW1vdmVfZmlsZSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0aWYgKHJlbW92ZV9maWxlKVxcbi1cXHRcXHRyZW1vdmVfcHJvY19lbnRyeShBTExPQ0lORk9fRklMRV9OQU1FLCBOVUxMKTtcXG4rXFx0XFx0c2NoZWR1bGVfd29yayhcXHUwMDI2cmVtb3ZlX2FsbG9jaW5mb193b3JrKTtcXG4gXFx0bWVtX3Byb2ZpbGluZ19zdXBwb3J0ID0gZmFsc2U7XFxuIH1cXG4gXFxuQEAgLTk3NSw2ICs5ODMsMTAgQEAgc3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWdcXG4gXFx0c3RydWN0IGFsbG9jX3RhZyAqc3RvcF90YWc7XFxuIFxcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcXG4gXFxuK1xcdC8qIFByb2ZpbGluZyBkaXNhYmxlZDogbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZ3MuICovXFxuK1xcdGlmICghbWVtX3Byb2ZpbGluZ19zdXBwb3J0KVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbiBcXHQvKiBwZXJjcHUgY291bnRlcnMgZm9yIGNvcmUgYWxsb2NhdGlvbnMgYXJlIGFscmVhZHkgc3RhdGljYWxseSBhbGxvY2F0ZWQgKi9cXG4gXFx0aWYgKCFtb2QpXFxuIFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTowNC40OTMxNzI1OTFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDA3Mzk0MTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJNT0RVTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29kZXRhZ19sb2FkX21vZHVsZVwiLFxuICAgIFwiY29kZXRhZ191bmxvYWRfbW9kdWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9kdWxlIGxvYWRpbmcgYW5kIHVubG9hZGluZyBsb2dpYyBpbiBgbGliL2NvZGV0YWcuY2AgYW5kIGBtbS9hbGxvY190YWcuY2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgYWxzbyBjaGFuZ2VzIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCB0byBzY2hlZHVsZSBhIHdvcmsgaXRlbSBmb3IgcmVtb3ZpbmcgdGhlIHByb2MgZW50cnkgaW5zdGVhZCBvZiBkb2luZyBpdCBkaXJlY3RseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBtb2R1bGUgbG9hZC91bmxvYWQgYW5kIG1lbW9yeSBwcm9maWxpbmcgc2h1dGRvd24sIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjZWRkYjIwZGFkMzdhODNkYmZiNDEzMzk3MDE0MjNjOGMxY2IyNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzoxOTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2xpYi9jb2RldGFnLmMgYi9saWIvY29kZXRhZy5jXG5pbmRleCBhOWNkYTRjOTYyYTMwLi5hMGI2MDA3MjBhZmMxIDEwMDY0NFxuLS0tIGEvbGliL2NvZGV0YWcuY1xuKysrIGIvbGliL2NvZGV0YWcuY1xuQEAgLTI0MCw3ICsyNDAsOSBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlKGNtb2QpO1xuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHQvKiAtRU9QTk9UU1VQUCBtZWFucyB3ZSBjYW4gbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZy4gKi9cbitcdFx0aWYgKGVyciAhPSAtRU9QTk9UU1VQUClcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMzg4LDcgKzM5MCwxMSBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXHRcdFx0KytjdHR5cGUtXHUwMDNlY29udGVudF9pZDtcbiBcdFx0fVxuIFx0XHR1cF93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuLVx0XHRpZiAoZm91bmQgXHUwMDI2XHUwMDI2IGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXG4rXHRcdC8qXG4rXHRcdCAqIEEgbW9kdWxlIHdob3NlIG1vZHVsZV9sb2FkKCkgcmV0dXJuZWQgLUVPUE5PVFNVUFAgaXMgbm90XG4rXHRcdCAqIGluIHRoZSBpZHIgYnV0IG1heSBzdGlsbCBob2xkIHJlc2VydmVkIHNlY3Rpb24gbWVtb3J5LlxuK1x0XHQgKi9cbitcdFx0aWYgKGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXG4gXHRcdFx0Y3R0eXBlLVx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbShtb2QsIHRydWUpO1xuIFx0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvZGV0YWdfbG9jayk7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggYjMzNDEwMzEwNDc3OS4uZjMwZWY4ZGQyNGM3MCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTE1LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva21lbWxlYWsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYWxsb2NfdGFnLmhcdTAwM2VcbiBcbkBAIC01OTEsNiArNTkyLDEzIEBAIHZvaWQgcGdhbGxvY190YWdfc3dhcChzdHJ1Y3QgZm9saW8gKm5ldywgc3RydWN0IGZvbGlvICpvbGQpXG4gXHRwdXRfcGFnZV90YWdfcmVmKGhhbmRsZV9uZXcpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHJlbW92ZV9wcm9jX2VudHJ5KEFMTE9DSU5GT19GSUxFX05BTUUsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgREVDTEFSRV9XT1JLKHJlbW92ZV9hbGxvY2luZm9fd29yaywgcmVtb3ZlX2FsbG9jaW5mb19maWxlKTtcbitcbiBzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG4ge1xuIFx0aWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpKVxuQEAgLTYwMCw3ICs2MDgsNyBAQCBzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChyZW1vdmVfZmlsZSlcbi1cdFx0cmVtb3ZlX3Byb2NfZW50cnkoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgTlVMTCk7XG4rXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cmVtb3ZlX2FsbG9jaW5mb193b3JrKTtcbiBcdG1lbV9wcm9maWxpbmdfc3VwcG9ydCA9IGZhbHNlO1xuIH1cbiBcbkBAIC05NzUsNiArOTgzLDEwIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgY29kZXRhZyAqc3RhcnQsIHN0cnVjdCBjb2RldGFnXG4gXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdG9wX3RhZztcbiBcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcbiBcbitcdC8qIFByb2ZpbGluZyBkaXNhYmxlZDogbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZ3MuICovXG4rXHRpZiAoIW1lbV9wcm9maWxpbmdfc3VwcG9ydClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuIFx0LyogcGVyY3B1IGNvdW50ZXJzIGZvciBjb3JlIGFsbG9jYXRpb25zIGFyZSBhbHJlYWR5IHN0YXRpY2FsbHkgYWxsb2NhdGVkICovXG4gXHRpZiAoIW1vZClcbiBcdFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTowNC40OTMxNzM3NDJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MjU0MjU3NDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIFRoaXMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgbWFraW5nIHNvbWUgcHJldHR5IHRhcmdldGVkIG1vZGlmaWNhdGlvbnMgdG8gb3VyIG1lbW9yeSB0YWdnaW5nIGFuZCBwcm9maWxpbmcgaW5mcmFzdHJ1Y3R1cmUuIE15IGluaXRpYWwgcmVhZCB0ZWxscyBtZSBpdCdzIGRlYWxpbmcgd2l0aCBncmFjZWZ1bGx5IGhhbmRsaW5nIHNjZW5hcmlvcyB3aGVyZSBjZXJ0YWluIGZlYXR1cmVzIGFyZW4ndCBzdXBwb3J0ZWQg4oCTIHNwZWNpZmljYWxseSwgY29kZSB0YWdnaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcuXG5cblNwZWNpZmljYWxseSwgaXQgc2VlbXMgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lLCBgY29kZXRhZ19tb2R1bGVfaW5pdGAsIGluIGBsaWIvY29kZXRhZy5jYCB0byBub3QgdGhyb3cgYW4gZXJyb3IgaWYgYC1FT1BOT1RTVVBQYCBpcyBlbmNvdW50ZXJlZC4gVGhpcyBtYWtlcyBzZW5zZTsgaWYgdGhlIGhhcmR3YXJlIGRvZXNuJ3Qgc3VwcG9ydCBjb2RlIHRhZ2dpbmcsIHdlIHNob3VsZG4ndCBmYWlsIHRoZSBtb2R1bGUgbG9hZC4gV2Ugc2hvdWxkIHNpbXBseSB3b3JrIHdpdGhvdXQgdGFncy4gU2ltaWxhcmx5LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgdG8gZW5zdXJlIHRoYXQgbWVtb3J5IGFsbG9jYXRlZCBmb3Igc2VjdGlvbnMgaXMgZnJlZWQgZXZlbiBpZiB0aGUgbW9kdWxlIHdhc24ndCBmb3VuZCBpbiB0aGUgSURSLCB3aGljaCBtaWdodCBvY2N1ciBpZiB0aGUgbW9kdWxlIGxvYWQgcmV0dXJuZWQgdGhlIGAtRU9QTk9UU1VQUGAgZXJyb3IuIEl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gZW5zdXJlIHJlc291cmNlcyBhcmUgaGFuZGxlZCwgcmVnYXJkbGVzcyBvZiBsb2FkIHN0YXRlLlxuXG5JbiBgbW0vYWxsb2NfdGFnLmNgLCB0aGUgYGxvYWRfbW9kdWxlYCBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIHVwZGF0ZWQgdG8gcmV0dXJuIGAtRU9QTk9UU1VQUGAgaWYgbWVtb3J5IHByb2ZpbGluZyBzdXBwb3J0IGlzbid0IGF2YWlsYWJsZSAoYCFtZW1fcHJvZmlsaW5nX3N1cHBvcnRgKS4gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGdvYWwgb2YgZ3JhY2VmdWxseSBkZWdyYWRpbmcgaWYgdGhlIGZ1bmN0aW9uYWxpdHkgaXNuJ3QgcHJlc2VudC4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyB0aGUgY2xlYW51cCwgd2l0aCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2Agbm93IHNjaGVkdWxpbmcgYSB3b3JrIHF1ZXVlIChgcmVtb3ZlX2FsbG9jaW5mb193b3JrYCkgZm9yIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5IGluc3RlYWQgb2YgZG9pbmcgaXQgZGlyZWN0bHkuIFRoaXMgYXN5bmNocm9ub3VzIGFwcHJvYWNoIGxpa2VseSBwcmV2ZW50cyBwb3RlbnRpYWwgYmxvY2tpbmcgaW4gc2h1dGRvd24gcGF0aHMuXG5cbk5vdywgYXMgYW4gZXhwZXJ0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gU28sIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBmaWxlcy4gSSBpbW1lZGlhdGVseSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBsaWIvY29kZXRhZy5jYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19DT0RFX1RBR0dJTkdgIGlzIGRlZmluZWQsIGFuZCBgbW0vYWxsb2NfdGFnLmNgIG9ubHkgY29tcGlsZXMgd2l0aCBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgLiBJZiB0aGVzZSBhcmUgc2V0IGNvcnJlY3RseSwgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHdpbGwgaGFuZGxlIHRoZXNlIGNvbmRpdGlvbnMuIFdpdGggdGhvc2Ugc2V0IGNvcnJlY3RseSwgdGhpcyBpcyBhIGNsZWFuIGFuZCBzdHJhaWdodGZvcndhcmQgd2F5IG9mIHByb3ZpZGluZyBmb3IgdGhvc2UgZWRnZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY3OSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjEwLjc0NzQzMzcwNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Mjg0NzQ1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ09ERV9UQUdHSU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvTWFrZWZpbGU9MTk2PW9iai0kKENPTkZJR19GVU5DVElPTl9FUlJPUl9JTkpFQ1RJT04pICs9IGVycm9yLWluamVjdC5vXFxubGliL01ha2VmaWxlLTE5Ny1cXG5saWIvTWFrZWZpbGU6MTk4Om9iai0kKENPTkZJR19DT0RFX1RBR0dJTkcpICs9IGNvZGV0YWcub1xcbmxpYi9NYWtlZmlsZS0xOTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjEwLjc5MDI4NTAyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMzEwMTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd24gbWVudGFsIG11c2luZ3M6XG5cbioqQW5hbHl6aW5nIGBtbS9hbGxvY190YWcuY2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYG1tL2FsbG9jX3RhZy5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gdGFnZ2luZyBtYWdpYyBoYXBwZW5zLCBhbmQgaXQncyBhbHdheXMgd29ydGggYSBkZWVwIGxvb2suIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdHJhY2tpbmcgdGhlIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGV5J3JlIG9yZ2FuaXppbmcgdGhpbmdzLCB0aGUgdHJhZGUtb2ZmcyB0aGV5J3ZlIG1hZGUgYmV0d2VlbiBtZXRhZGF0YSBvdmVyaGVhZCBhbmQgbG9va3VwIHNwZWVkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBoYXNoIHRhYmxlLCBvciBzb21ldGhpbmcgbW9yZSBzb3BoaXN0aWNhdGVkIGxpa2UgYSB0cmVlLWJhc2VkIHN0cnVjdHVyZT8gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBJJ2xsIGJlIHNjcnV0aW5pemluZyB0aGUgY29sbGlzaW9uIGhhbmRsaW5nIHN0cmF0ZWdpZXMgaWYgdGhleSdyZSB1c2luZyBhIGhhc2ggdGFibGUuXG5cbk5leHQsIEknbSBjaGVja2luZyB0aGUgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHBhdGhzLiBJJ20ga2VlbiBvbiB1bmRlcnN0YW5kaW5nIHRoZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB1c2VkLiBXZSdyZSBjbGVhcmx5IGRlYWxpbmcgd2l0aCBhIG11bHRpLXRocmVhZGVkIGVudmlyb25tZW50IGluIG1vc3Qgc3lzdGVtcywgc28gaXMgdGhpcyB1c2luZyBzcGlubG9ja3MsIG11dGV4ZXMsIGF0b21pYyBvcGVyYXRpb25zPyBJJ2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBib3R0bGVuZWNrcywgcmFjZSBjb25kaXRpb25zLCBvciBsb2NrIGNvbnRlbnRpb24gaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCBob3cgdGhlc2UgY2FsbHMgYXJlIGludGVncmF0ZWQsIGlmIHRoZXkncmUgaW5saW5lIGZ1bmN0aW9ucyBvciBmdW5jdGlvbiBjYWxscy5cblxuSSdsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB0YWdnaW5nIG1lY2hhbmlzbXMgdGhlbXNlbHZlcy4gSG93IGFyZSB0aGVzZSB0YWdzIGFzc29jaWF0ZWQgd2l0aCBtZW1vcnkgcmVnaW9ucz8gSXMgaXQgc3RvcmVkIGFsb25nc2lkZSB0aGUgYWxsb2NhdGlvbiBtZXRhZGF0YSwgb3IgaXMgaXQgaW4gYSBzZXBhcmF0ZSwgZGVkaWNhdGVkIGFyZWE/IFdoYXQncyB0aGUgaW1wYWN0IG9mIHRoZSB0YWdnaW5nIHN5c3RlbSBvbiB0aGUgb3ZlcmFsbCBhbGxvY2F0aW9uIHBlcmZvcm1hbmNlPyBIb3cgYXJlIHRoZSB0YWcgdmFsdWVzIGNob3NlbiBhbmQgaG93IGNhbiB0aGV5IGJlIHVzZWQgdG8gZGVidWcgYWxsb2NhdGlvbnMuXG5cbkZpbmFsbHksIEknbGwgYmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBmb3IgbWVtb3J5IGxlYWtzIG9yIG90aGVyIGFsbG9jYXRpb24gcHJvYmxlbXMgd2l0aGluIHRoZSB0YWcgaW1wbGVtZW50YXRpb24gaXRzZWxmLiBJZiB0aGUgdGFnIG1hbmFnZW1lbnQgc3lzdGVtIGhhcyBhbiBlcnJvciwgaXQgaXMgcG9zc2libGUgZm9yIHRoaW5ncyB0byBnZXQgbG9zdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ3MiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjE1LjIxMzM4ODc1N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDE5MDE0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY190YWcub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xNDk9b2JqLSQoQ09ORklHX0xBWllfTU1VX01PREVfS1VOSVRfVEVTVCkgKz0gdGVzdHMvbGF6eV9tbXVfbW9kZV9rdW5pdC5vXFxubW0vTWFrZWZpbGU6MTUwOm9iai0kKENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HKSArPSBhbGxvY190YWcub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOToxNS4yNTc1ODI2MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTk0MDk5Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaW4gdGhlIEtjb25maWcgZmlsZS4gVGhpcyBpcyBjcnVjaWFsOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBlbmFibGVkIG9yIGRpc2FibGVkLiBUaGlzIHNldHRpbmcgaXMgZnVuZGFtZW50YWwuIEtub3dpbmcgdGhlIHN0YXR1cyBvZiB0aGlzIGNvbmZpZyBpcyB0aGUgZmlyc3Qgc3RlcCBpbiBkZWJ1Z2dpbmcgb3Igb3B0aW1pemluZyBtZW1vcnkgdXNhZ2UuIFVuZGVyc3RhbmRpbmcgaXRzIHN0YXRlIGltbWVkaWF0ZWx5IGRpY3RhdGVzIG15IG5leHQgYWN0aW9uIGluIHRoZSBwcm9qZWN0LiBJdHMgaW1wYWN0IGlzIHByZXR0eSBzaWduaWZpY2FudCB3aGVuIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOToxOC44NTE2ODM3ODZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNDc3OTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZy5kZWJ1Zz0zMTE9Y29uZmlnIFBFUl9WTUFfTE9DS19TVEFUU1xcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMjMtXFxubW0vS2NvbmZpZy5kZWJ1ZzozMjQ6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG5tbS9LY29uZmlnLmRlYnVnLTMyNS1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzYtXFxubW0vS2NvbmZpZy5kZWJ1ZzozMzc6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMzgtXFx0Ym9vbCBcXFwiRW5hYmxlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDEtXFxubW0vS2NvbmZpZy5kZWJ1ZzozNDI6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5tbS9LY29uZmlnLmRlYnVnLTM0My1cXHRib29sIFxcXCJNZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxlciBkZWJ1Z2dpbmdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjIwLjg1NjQ2ODEyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDI3NzE4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gRGVidWdnaW5nIEtlcm5lbCBDb25maWdzKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGRlYnVnZ2luZyBvcHRpb25zIGluIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24uIExldCdzIHNlZS4uLiB0aGUgYG1tL0tjb25maWcuZGVidWdgIGZpbGUgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGludG8gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHNwZWNpZmljIGRlYnVnZ2luZyBzZXR0aW5ncy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHplcm8gaW4gYXJvdW5kIGxpbmUgMzI0LiBUaGF0IHJhbmdlIG9mdGVuIGhvbGRzIHJlbGF0ZWQgb3B0aW9ucywgYW5kIGdpdmVuIG15IGV4cGVyaWVuY2UsIGl0J3MgYSBsaWtlbHkgc3BvdCBmb3IgYSBwYXJ0aWN1bGFyIGZlYXR1cmUgb3IgYW4gaW50ZXJjb25uZWN0ZWQgZ3JvdXAgb2YgZGVidWcgZmxhZ3MgcmVsYXRlZCB0byB0aGUgbWVtb3J5IG1hbmFnZXIuIFRpbWUgdG8gZmlyZSB1cCB0aGUgZWRpdG9yIGFuZCBzZWUgd2hhdCdzIHdoYXQgaW4gdGhhdCBhcmVhLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGEgZ3JvdXAgcmVsYXRlZCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzQwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6MjQuMzk5MjQyNjYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWcuZGVidWdcIixcbiAgXCJGaXJzdExpbmVcIjogMzIwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIwOlxcdFxcdCAgb3ZlcmhlYWQgaW4gdGhlIHBhZ2UgZmF1bHQgcGF0aC5cXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0ICBJZiBpbiBkb3VidCwgc2F5IE4uXFxuIDMyMzpcXHRcXG4gMzI0OlxcdGNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXFxuIDMyNTpcXHRcXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXFxcIlxcbiAzMjY6XFx0XFx0ZGVmYXVsdCBuXFxuIDMyNzpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbiAzMjg6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDMyOTpcXHRcXHRzZWxlY3QgQ09ERV9UQUdHSU5HXFxuIDMzMDpcXHRcXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG4gMzMxOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4gMzMyOlxcdFxcdGhlbHBcXG4gMzMzOlxcdFxcdCAgVHJhY2sgYWxsb2NhdGlvbiBzb3VyY2UgY29kZSBhbmQgcmVjb3JkIHRvdGFsIGFsbG9jYXRpb24gc2l6ZVxcbiAzMzQ6XFx0XFx0ICBpbml0aWF0ZWQgYXQgdGhhdCBjb2RlIGxvY2F0aW9uLiBUaGUgbWVjaGFuaXNtIGNhbiBiZSB1c2VkIHRvIHRyYWNrXFxuIDMzNTpcXHRcXHQgIG1lbW9yeSBsZWFrcyB3aXRoIGEgbG93IHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgaW1wYWN0LlxcbiAzMzY6XFx0XFxuIDMzNzpcXHRjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG4gMzM4OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgYnkgZGVmYXVsdFxcXCJcXG4gMzM5OlxcdFxcdGRlZmF1bHQgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOToyNC4zOTkzMTUwNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NjYzMzc3MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBNZW1vcnkgUHJvZmlsaW5nIFBhdGNoKipcblxuT2theSwgc28gd2UncmUgaW50cm9kdWNpbmcgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGtleSBhcmVhcywgbGV0J3MgYnJlYWsgaXQgZG93bi4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHdlJ3JlIG1vZGlmeWluZyB0aGUgYGNvZGV0YWdgIHN1YnN5c3RlbTogSSBzZWUgY2hhbmdlcyB0byBgY29kZXRhZ19tb2R1bGVfaW5pdGAgYW5kIGBjb2RldGFnX3VubG9hZF9tb2R1bGVgIGluIGBsaWIvY29kZXRhZy5jYC4gVGhhdCBtYWtlcyBzZW5zZSwgc2luY2UgY29kZSB0YWdzIGFyZSBhbGwgYWJvdXQgaWRlbnRpZnlpbmcgd2hlcmUgbWVtb3J5IGlzIGFsbG9jYXRlZCBhbmQgZnJlZWQsIHByZXN1bWFibHkgbGlua2VkIHRvIGEgbG9hZGVkIG1vZHVsZS4gVGhlbiBpbiBgbW0vYWxsb2NfdGFnLmNgLCB3ZSBoYXZlIGBsb2FkX21vZHVsZWAgYW5kIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBiZWluZyBtb2RpZmllZC5cblxuVGhlIGNyaXRpY2FsIHF1ZXN0aW9uIG5vdyBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRoZSBvbmVzIHdpdGhpbiB0aGUgY29kZSB0YWcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIHN1Yi1zeXN0ZW1zLCBnb2luZyB0byBiZSB0cmlnZ2VyZWQgaW4gb3VyIHZpcnR1YWwgbWFjaGluZSBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoYXQuXG5cbmBjb2RldGFnX21vZHVsZV9pbml0YCBpcyBjYWxsZWQsIG9mIGNvdXJzZSwgd2hlbiBhIG1vZHVsZSBpcyBsb2FkZWQgaW50byB0aGUga2VybmVsLiBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBpcyBpdHMgY291bnRlcnBhcnQsIHRyaWdnZXJlZCBvbiBtb2R1bGUgdW5sb2FkLiBXZSdyZSBvYnZpb3VzbHkgaW5zdHJ1bWVudGluZyB0aGVzZSBwb2ludHMuXG5cbk5vdywgYGxvYWRfbW9kdWxlYCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBpdCdzIGEgY2FsbGJhY2sgcmVnaXN0ZXJlZCB3aXRoaW4gYGNvZGV0YWdfdHlwZV9kZXNjYCwgZXN0YWJsaXNoZWQgdmlhIGBhbGxvY190YWdfaW5pdGAuIFNvLCBpdCdzIHRpZWQgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gdGFnZ2luZyBtZWNoYW5pc20uIFRoaXMgaGFzIHRoZSBoYWxsbWFya3Mgb2YgYmVpbmcgcHJvcGVybHkgaW50ZWdyYXRlZC5cblxuYHNodXRkb3duX21lbV9wcm9maWxpbmdgIGlzIHRoZSBvdGhlciBwaWVjZSwgYW5kIHRoaXMgaGFwcGVucyB3aGVuIG1lbW9yeSBwcm9maWxpbmcgaXMgYmVpbmcgZGlzYWJsZWQuIFNvIGl0IGlzIHRoZSBjb3VudGVycGFydCB0byB0aGUgZW5hYmxlZCBmdW5jdGlvbmFsaXR5LCBzbyBzaG91bGQgYmUgY2FsbGVkIHRvIHByb3Blcmx5IGNsZWFudXAuXG5cbk9rYXksIGxldCdzIHZlcmlmeSB0aGF0IGxhc3QgcG9pbnQsIHdoZXJlIGV4YWN0bHkgaXMgdGhhdCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgZnVuY3Rpb24gY2FsbGVkPyBOZWVkIHRvIHRyYWNlIHRob3NlIGNhbGwgcGF0aHMuIEdvdHRhIGJlIHN1cmUgdGhvc2UgY2xlYW51cHMgYXJlIGRvbmUgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MzEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTozMS4wNjI2OTQzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMzOTQzNzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2h1dGRvd25fbWVtX3Byb2ZpbGluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9hbGxvY190YWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9hbGxvY190YWcuYz02MDA9c3RhdGljIERFQ0xBUkVfV09SSyhyZW1vdmVfYWxsb2NpbmZvX3dvcmssIHJlbW92ZV9hbGxvY2luZm9fZmlsZSk7XFxubW0vYWxsb2NfdGFnLmMtNjAxLVxcbm1tL2FsbG9jX3RhZy5jOjYwMjpzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXFxubW0vYWxsb2NfdGFnLmMtNjAzLXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTYxNT12b2lkIF9faW5pdCBhbGxvY190YWdfc2VjX2luaXQodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTYzMi1cXHRpZiAoa2VybmVsX3RhZ3MuY291bnQgXFx1MDAzZSAoMVVMIFxcdTAwM2NcXHUwMDNjIE5SX1VOVVNFRF9QQUdFRkxBR19CSVRTKSkge1xcbm1tL2FsbG9jX3RhZy5jOjYzMzpcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGZhbHNlKTsgLyogYWxsb2NpbmZvIGZpbGUgZG9lcyBub3QgZXhpc3QgeWV0ICovXFxubW0vYWxsb2NfdGFnLmMtNjM0LVxcdFxcdHByX2VycihcXFwiJWx1IGFsbG9jYXRpb24gdGFncyBjYW5ub3QgYmUgcmVmZXJlbmNlcyB1c2luZyAlZCBhdmFpbGFibGUgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuLS1cXG5tbS9hbGxvY190YWcuYz04NDY9c3RhdGljIHZvaWQgKnJlc2VydmVfbW9kdWxlX3RhZ3Moc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIHNpemUsXFxuLS1cXG5tbS9hbGxvY190YWcuYy04NjUtXFx0aWYgKCFlbnN1cmVfYWxpZ25tZW50KGFsaWduLCBcXHUwMDI2cHJlcGVuZCkpIHtcXG5tbS9hbGxvY190YWcuYzo4NjY6XFx0XFx0c2h1dGRvd25fbWVtX3Byb2ZpbGluZyh0cnVlKTtcXG5tbS9hbGxvY190YWcuYy04NjctXFx0XFx0cHJfZXJyKFxcXCIlczogYWxpZ25tZW50ICVsdSBpcyBpbmNvbXBhdGlibGUgd2l0aCBhbGxvY2F0aW9uIHRhZyBpbmRleGluZy4gTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGRpc2FibGVkIVxcXFxuXFxcIixcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTkxNS1cXHRcXHRpZiAobWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIXRhZ3NfYWRkcmVzc2FibGUoKSkge1xcbm1tL2FsbG9jX3RhZy5jOjkxNjpcXHRcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xcbm1tL2FsbG9jX3RhZy5jLTkxNy1cXHRcXHRcXHRwcl93YXJuKFxcXCJXaXRoIG1vZHVsZSAlcyB0aGVyZSBhcmUgdG9vIG1hbnkgdGFncyB0byBmaXQgaW4gJWQgcGFnZSBmbGFnIGJpdHMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuLS1cXG5tbS9hbGxvY190YWcuYy05MjItXFx0XFx0aWYgKGdyb3dfcmVzKSB7XFxubW0vYWxsb2NfdGFnLmM6OTIzOlxcdFxcdFxcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XFxubW0vYWxsb2NfdGFnLmMtOTI0LVxcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsb2NhdGlvbiB0YWdzIGluIHRoZSBtb2R1bGUgJXMuIE1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZCFcXFxcblxcXCIsXFxuLS1cXG5tbS9hbGxvY190YWcuYz0xMzM0PXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMzU3LVxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIGNyZWF0ZSAlcyBmaWxlXFxcXG5cXFwiLCBBTExPQ0lORk9fRklMRV9OQU1FKTtcXG5tbS9hbGxvY190YWcuYzoxMzU4OlxcdFxcdHNodXRkb3duX21lbV9wcm9maWxpbmcoZmFsc2UpO1xcbm1tL2FsbG9jX3RhZy5jLTEzNTktXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMzY0LVxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHJlc2VydmUgYWRkcmVzcyBzcGFjZSBmb3IgbW9kdWxlIHRhZ3MsIGVycm5vID0gJWRcXFxcblxcXCIsIHJlcyk7XFxubW0vYWxsb2NfdGFnLmM6MTM2NTpcXHRcXHRzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKHRydWUpO1xcbm1tL2FsbG9jX3RhZy5jLTEzNjYtXFx0XFx0cmV0dXJuIHJlcztcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEzNzItXFx0XFx0ZnJlZV9tb2RfdGFnc19tZW0oKTtcXG5tbS9hbGxvY190YWcuYzoxMzczOlxcdFxcdHNodXRkb3duX21lbV9wcm9maWxpbmcodHJ1ZSk7XFxubW0vYWxsb2NfdGFnLmMtMTM3NC1cXHRcXHRyZXR1cm4gUFRSX0VSUihhbGxvY190YWdfY3R0eXBlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6MzEuMTA2MDk0NDU1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg1MjM0MDczMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2VybmVsIE1vZHVsZSBUYWdnaW5nIGFuZCBNZW1vcnkgUHJvZmlsaW5nIEZpeGVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJdCBsb29rcyBsaWtlIHdlJ3JlIGFkZHJlc3Npbmcgc29tZSBzdWJ0bGUgaXNzdWVzIGluIHRoZSBrZXJuZWwncyBtb2R1bGUgdGFnZ2luZyBhbmQgbWVtb3J5IHByb2ZpbGluZyBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGhvdyBtb2R1bGVzIGFyZSBsb2FkZWQsIHVubG9hZGVkLCBhbmQgcHJvZmlsZWQuIFRoZSBjb3JlIGNvbmNlcm4gc2VlbXMgdG8gYmUgdGhhdCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgY2FuIGJlIGludm9rZWQgZnJvbSBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgZHVyaW5nIG1lbW9yeSBjb250ZW50aW9uIG9yIGFsbG9jYXRpb24gZmFpbHVyZXMsIGFuZCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuIFRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBjYWxsZWQgYHJlbW92ZV9wcm9jX2VudHJ5YCBkaXJlY3RseSBmcm9tIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCwgd2hpY2ggaXMgYSBjbGFzc2ljIHJlY2lwZSBmb3IgYSBrZXJuZWwgcGFuaWMsIHJpZ2h0PyBUaGUgY29udGV4dCBvZiBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgbWlnaHQgbm90IGFsbG93IHNsZWVwaW5nIG9yIGhvbGRpbmcgY2VydGFpbiBsb2Nrcy4gU28gdGhlIGZpeCBpcyB0byBzY2hlZHVsZSB0aGlzIG9wZXJhdGlvbiBhcyBhIHdvcmsgaXRlbSwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2guXG5cbk5leHQsIGl0IGhhbmRsZXMgYGxvYWRfbW9kdWxlYCByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gVGhpcyBtZWFucyB0aGUgbW9kdWxlIGxvYWQgd291bGRuJ3QgZmFpbCBjb21wbGV0ZWx5IGlmIHByb2ZpbGluZyBpcyBkaXNhYmxlZDsgYGNvZGV0YWdfbW9kdWxlX2luaXRgIHNpbXBseSBza2lwcyB0aGUgdGFnZ2luZyBwcm9jZXNzLiBJdCdzIGEgcHJhZ21hdGljIHNvbHV0aW9uLiBOb3csIHRoZSBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBmdW5jdGlvbiBhbHNvIGNsZWFycyBtZW1vcnkgZXZlbiBpZiB0aGUgbW9kdWxlIHdhc24ndCBpbiB0aGUgSURSLCB3aGljaCBmaXhlcyBhIG1lbW9yeSBsZWFrIHdoZW4gYSBtb2R1bGUgaXMgbG9hZGVkIGJ1dCBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIFRoaXMgaXMgZ29vZCBob3VzZWtlZXBpbmcuXG5cblRoaXMgaXMgYSBjb3JlIGtlcm5lbCBjaGFuZ2UsIHRvdWNoaW5nIG1vZHVsZSBsb2FkaW5nIGFuZCBtZW1vcnkgcHJvZmlsaW5nLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMsIGZ1enppbmcgaXMgYW4gYWJzb2x1dGUgbXVzdC4gV2UgbmVlZCB0byByZWFsbHkgcHV0IHRoZXNlIG5ldyBjb2RlIHBhdGhzIHRocm91Z2ggdGhlaXIgcGFjZXMuXG5cbkxldCBtZSBzZWUsIHRoZSBrZXkgc3ltYm9scyBoZXJlIGFyZSBgY29kZXRhZ19tb2R1bGVfaW5pdGAsIGBjb2RldGFnX3VubG9hZF9tb2R1bGVgLCBhbmQgYHNodXRkb3duX21lbV9wcm9maWxpbmdgICh0aG91Z2ggaXQncyBzdGF0aWMpIGFuZCBgcmVtb3ZlX2FsbG9jaW5mb19maWxlYCAoYWxzbyBzdGF0aWMpLiBXYWl0IGEgc2Vjb25kLCBpcyBgY29kZXRhZ19tb2R1bGVfaW5pdGAgc3RhdGljPyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhhdDsgaXQncyBhIGNyaXRpY2FsIGVudHJ5IHBvaW50LiBMb29rcyBsaWtlIGEgcXVpY2sgdHJpcCB0byBgbGliL2NvZGV0YWcuY2AgaXMgaW4gb3JkZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyMzAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6MzkuNjI5NTA0Mzk0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzUzODI3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb2RldGFnX21vZHVsZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImxpYi9jb2RldGFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL2NvZGV0YWcuYz0xODU9c3RhdGljIGNvbnN0IGNoYXIgKmdldF9tb2RfbmFtZShfX21heWJlX3VudXNlZCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5saWIvY29kZXRhZy5jLTE5My1cXG5saWIvY29kZXRhZy5jOjE5NDpzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxubGliL2NvZGV0YWcuYy0xOTUte1xcbi0tXFxubGliL2NvZGV0YWcuYz0zNDA9aW50IGNvZGV0YWdfbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxubGliL2NvZGV0YWcuYy0zNDktXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHR5cGUsIFxcdTAwMjZjb2RldGFnX3R5cGVzLCBsaW5rKSB7XFxubGliL2NvZGV0YWcuYzozNTA6XFx0XFx0cmV0ID0gY29kZXRhZ19tb2R1bGVfaW5pdChjdHR5cGUsIG1vZCk7XFxubGliL2NvZGV0YWcuYy0zNTEtXFx0XFx0aWYgKHJldClcXG4tLVxcbmxpYi9jb2RldGFnLmM9NDA1PWNvZGV0YWdfcmVnaXN0ZXJfdHlwZShjb25zdCBzdHJ1Y3QgY29kZXRhZ190eXBlX2Rlc2MgKmRlc2MpXFxuLS1cXG5saWIvY29kZXRhZy5jLTQxOS1cXG5saWIvY29kZXRhZy5jOjQyMDpcXHRlcnIgPSBjb2RldGFnX21vZHVsZV9pbml0KGN0dHlwZSwgTlVMTCk7XFxubGliL2NvZGV0YWcuYy00MjEtXFx0aWYgKHVubGlrZWx5KGVycikpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6MzkuNjczMDQ2NjY5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MzY1NzA4ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKk1vZHVsZSBNYW5hZ2VtZW50IENvbmNlcm5zOiBTdGF0aWMgdnMuIEV4cG9ydGVkIEZ1bmN0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHR3byBmdW5jdGlvbnMsIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAuIFRoZSBrZXkgcG9pbnQgaGVyZSwgYW5kIHdoYXQgaW1tZWRpYXRlbHkganVtcHMgb3V0IGF0IG1lLCBpcyB0aGF0IHRoZXkncmUgZWl0aGVyIGV4cG9ydGVkIG9yIG5vdCBkZWNsYXJlZCBgc3RhdGljYC4gVGhhdCBtZWFucyB0aGV5J3JlIGV4cGxpY2l0bHkgaW50ZW5kZWQgdG8gYmUgdmlzaWJsZSBvdXRzaWRlIG9mIHRoZWlyIGltbWVkaWF0ZSBjb21waWxhdGlvbiB1bml0LiBUaGlzIGhhcyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgaW4gYSBtb2R1bGFyIHN5c3RlbS5cblxuSWYgdGhleSAqd2VyZW4ndCogZXhwb3J0ZWQgb3Igc3RhdGljLCB0aGV5J2QgYmUgaGlkZGVuLCBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBhbmQgd2Ugd291bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBleHRlcm5hbCBjb2RlIGRpcmVjdGx5IGFjY2Vzc2luZyBvciBjYWxsaW5nIHRoZW0uIFRoaXMgd291bGQgYmUgdHlwaWNhbCBmb3IgZnVuY3Rpb25zIHVzZWQgb25seSB3aXRoaW4gdGhlIG1vZHVsZS5cblxuQnV0IGJlY2F1c2UgdGhleSAqYXJlKiBleHBvc2VkLCB0aGlzIHN1Z2dlc3RzIHRoZXkncmUgZGVzaWduZWQgdG8gYmUgYSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBtb2R1bGUgaW50ZXJmYWNlLiBUaGlzIG1ha2VzIG1lIGNvbnNpZGVyIGEgZmV3IHRoaW5nczpcblxuKiAgICoqRGVwZW5kZW5jeSBNYW5hZ2VtZW50OioqIEhvdyBhcmUgdGhlc2UgbW9kdWxlcyBsb2FkZWQgYW5kIHVubG9hZGVkPyBJcyB0aGVyZSBhIGR5bmFtaWMgbGlua2VyIGludm9sdmVkPyBBcmUgd2UgZGVhbGluZyB3aXRoIHNoYXJlZCBsaWJyYXJpZXMsIGR5bmFtaWNhbGx5IGxvYWRhYmxlIG1vZHVsZXMsIG9yIHNvbWV0aGluZyBtb3JlIGN1c3RvbT8gVGhlc2UgZnVuY3Rpb25zIHdvdWxkIGxpa2VseSBiZSB0aGUgaW50ZXJmYWNlIHBvaW50cyB0aGUgZHluYW1pYyBsb2FkZXIgdXNlcyB0byBpbml0aWFsaXplIGFuZCBzaHV0IGRvd24gbW9kdWxlcy5cblxuKiAgICoqQVBJIERlc2lnbjoqKiBXaGF0J3MgdGhlIGRlc2lnbiByYXRpb25hbGUgZm9yIHRoZXNlIGZ1bmN0aW9ucz8gQXJlIHRoZXkgcGFydCBvZiBhIGxhcmdlciBBUEkgZm9yIG1hbmFnaW5nIGNvZGUgbW9kdWxlcywgb3IgYXJlIHRoZXkgbG93ZXItbGV2ZWwgcHJpbWl0aXZlcz8gS25vd2luZyB0aGlzIHdpbGwgaW5mbHVlbmNlIHRoZSBvdmVyYWxsIGRlc2lnbi5cblxuKiAgICoqUG90ZW50aWFsIGZvciBDb25mbGljdHM6KiogU2luY2Ugd2UncmUgZXhwb3J0aW5nIHRoZXNlIGZ1bmN0aW9uIG5hbWVzLCB3ZSBuZWVkIHRvIGJlIGV4dHJlbWVseSBjYXJlZnVsIGFib3V0IHBvdGVudGlhbCBuYW1lIGNvbGxpc2lvbnMsIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGluIGEgc3lzdGVtIHdpdGggcG90ZW50aWFsbHkgbWFueSBtb2R1bGVzIGZyb20gbXVsdGlwbGUgc291cmNlcy4gV2UgbWlnaHQgbmVlZCB0byBjb25zaWRlciBzeW1ib2wgdmVyc2lvbmluZywgbmFtZXNwYWNlIG1hbmFnZW1lbnQsIG9yIHNvbWUgb3RoZXIgbWVjaGFuaXNtIHRvIGF2b2lkIGNvbmZsaWN0cy5cblxuKiAgICoqU2VjdXJpdHkgSW1wbGljYXRpb25zOioqIElmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW50cnkgcG9pbnRzIHRvIHRoZSBjb2RlIHdpdGhpbiBhIG1vZHVsZSwgd2UgbmVlZCB0byBjb25zaWRlciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIFdoYXQgYXJlIHRoZSB2YWxpZGF0aW9uIGFuZCBhdXRoZW50aWNhdGlvbiBzY2hlbWVzPyBBcmUgdGhlcmUgcmlza3Mgb2YgbWFsaWNpb3VzIG1vZHVsZXM/XG5cbiogICAqKlRocmVhZCBTYWZldHk6KiogRGVwZW5kaW5nIG9uIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQsIHdlJ2xsIG5lZWQgdG8gdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHRocmVhZCBzYWZldHkuIElmIG11bHRpcGxlIHRocmVhZHMgbWlnaHQgbG9hZCBvciB1bmxvYWQgbW9kdWxlcyBjb25jdXJyZW50bHksIHdlIG5lZWQgYXBwcm9wcmlhdGUgbG9ja2luZyBtZWNoYW5pc21zIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBkYXRhIGNvcnJ1cHRpb24uXG5cbkVzc2VudGlhbGx5LCBieSBtYWtpbmcgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBub24tc3RhdGljLCB0aGV5IGFyZSAqc2lnbmFsbGluZyogdGhhdCB0aGV5IGFyZSBpbXBvcnRhbnQgZW50cnkgcG9pbnRzLCBhbmQsIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHRoZSBiaWdnZXIgY29udGV4dCBvZiBtb2R1bGUgbWFuYWdlbWVudCwgaW5jbHVkaW5nIGRlc2lnbiBjaG9pY2VzLCBwb3RlbnRpYWwgcmlza3MgYW5kIGhvdyB0byBtYW5hZ2UgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI3NCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjQ0LjYwOTYyMDEzNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxMTE1NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29kZXRhZ19sb2FkX21vZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvY29kZXRhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImxpYi9jb2RldGFnLmM9MzI0PXZvaWQgY29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbW9kdWxlICpuZXdfbW9kKVxcbi0tXFxubGliL2NvZGV0YWcuYy0zMzktXFxubGliL2NvZGV0YWcuYzozNDA6aW50IGNvZGV0YWdfbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKVxcbmxpYi9jb2RldGFnLmMtMzQxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6NDQuNjUzNzM2NDU5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDI3Mjc2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1vZHVsZSBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyBJJ20gcHJldHR5IHN1cmUgYGNvZGV0YWdfbG9hZF9tb2R1bGVgIGFuZCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBhcmUgdGhlIGtleSBlbnRyeSBwb2ludHMgZm9yIHRoaXMsIHllYWg/IE1ha2VzIHNlbnNlLiBCdXQgd2FpdCBhIHNlYy4uLiBJIG5lZWQgdG8gY29uZmlybSBgY29kZXRhZ19sb2FkX21vZHVsZWAgaXMgc3BlY2lmaWNhbGx5IGNhbGxlZCAqZHVyaW5nKiBtb2R1bGUgbG9hZC4gSSBuZWVkIHRvIGJlIGNlcnRhaW4uIExldCdzIGRpZyBpbnRvIHRoZSBzb3VyY2UsIHNwZWNpZmljYWxseSBga2VybmVsL21vZHVsZS9tYWluLmNgLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBmdW5jdGlvbiBhbmQgaG93IGl0J3MgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZSBsb2FkaW5nIHByb2Nlc3MuIFRpbWUgdG8gY29uZmlybSBteSBpbml0aWFsIGh5cG90aGVzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc5NDcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTo0Ny44OTY0NjU4NzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNjQ1OTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvZGV0YWdfbG9hZF9tb2R1bGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL21vZHVsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL21vZHVsZS9tYWluLmM9MzQyMj1zdGF0aWMgaW50IGxvYWRfbW9kdWxlKHN0cnVjdCBsb2FkX2luZm8gKmluZm8sIGNvbnN0IGNoYXIgX191c2VyICp1YXJncyxcXG4tLVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1NzAtXFxua2VybmVsL21vZHVsZS9tYWluLmM6MzU3MTpcXHRpZiAoY29kZXRhZ19sb2FkX21vZHVsZShtb2QpKVxcbmtlcm5lbC9tb2R1bGUvbWFpbi5jLTM1NzItXFx0XFx0Z290byBzeXNmc19jbGVhbnVwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTo0Ny45NDAxMTkwNjlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ0NTQ4MDcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipEaXZpbmcgaW50byB0aGUgQWxsb2NhdGlvbiBUYWcgSW1wbGVtZW50YXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgYWxsb2NhdGlvbiB0YWdnaW5nIG1lY2hhbmlzbS4gVGhlIG5hbWUgZGVmaW5pdGVseSByaW5ncyBhIGJlbGwuIE5vdywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgd2hldGhlciB0aGVyZSdzIGFuIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGVzZSB0YWdzLCBzb21ldGhpbmcgbGlrZSBgYWxsb2NfdGFnX2luaXRgIHBlcmhhcHM/IEknZCBleHBlY3Qgb25lLCBpdCdzIGZ1bmRhbWVudGFsIGZvciBhbnkgc3lzdGVtIGxpa2UgdGhpcy5cblxuT2theSwgc28gdGhlIHBhdGNoIGlzIGZvY3VzaW5nIG9uIGBsb2FkX21vZHVsZWAgd2l0aGluIGBtbS9hbGxvY190YWcuY2AuIEFubm95aW5nLCBpdCdzIHN0YXRpYywgc28gaXTigJlzIGxpa2VseSBub3QgZGlyZWN0bHkgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSAqKmNvbnRleHQqKiBvZiBob3cgdGhhdCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgbG9hZGluZyBwcm9jZXNzIGluZmx1ZW5jZXMgdGhlIHRhZ2dlZCBhbGxvY2F0aW9ucy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhhdCBmaWxlIG1vcmUgY2xvc2VseS4gSSdsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vYWxsb2NfdGFnLmNgLiBJJ20gZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgZnVuY3Rpb25zIHRoYXQgYXJlICpyZWxhdGVkKiB0byBgbG9hZF9tb2R1bGVgLiBJIG5lZWQgdG8gdHJhY2sgZG93biB0aGUgZW50cnkgcG9pbnRzLCBob3cgdGhlc2UgdGFnZ2VkIGFsbG9jYXRpb25zIGFyZSBpbml0aWFsaXplZCwgYW5kIGlmIHRob3NlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggYGxvYWRfbW9kdWxlYCBzb21laG93LiBJIHN1c3BlY3QgdGhlcmXigJlzIGdvaW5nIHRvIGJlIGEgY2hhaW4gb2YgY2FsbHMgb3Igc29tZSBmb3JtIG9mIGludGVyYWN0aW9uIHRoYXTigJlzIHJlbGV2YW50LiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjg2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MTk6NTIuMzg1NjAxODE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAxMDM5NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2FkX21vZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9hbGxvY190YWcuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9hbGxvY190YWcuYz05MzM9c3RhdGljIHZvaWQgcmVsZWFzZV9tb2R1bGVfdGFncyhzdHJ1Y3QgbW9kdWxlICptb2QsIGJvb2wgdXNlZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTk3OC1cXG5tbS9hbGxvY190YWcuYzo5Nzk6c3RhdGljIGludCBsb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QsIHN0cnVjdCBjb2RldGFnICpzdGFydCwgc3RydWN0IGNvZGV0YWcgKnN0b3ApXFxubW0vYWxsb2NfdGFnLmMtOTgwLXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTEzMzQ9c3RhdGljIGludCBfX2luaXQgYWxsb2NfdGFnX2luaXQodm9pZClcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTEzNDItXFx0XFx0LmZyZWVfc2VjdGlvbl9tZW1cXHQ9IHJlbGVhc2VfbW9kdWxlX3RhZ3MsXFxubW0vYWxsb2NfdGFnLmM6MTM0MzpcXHRcXHQubW9kdWxlX2xvYWRcXHRcXHQ9IGxvYWRfbW9kdWxlLFxcbm1tL2FsbG9jX3RhZy5jLTEzNDQtXFx0XFx0Lm1vZHVsZV9yZXBsYWNlZFxcdD0gcmVwbGFjZV9tb2R1bGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjE5OjUyLjQyODYxNjQ1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTEzNzUxMzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gTXVzaW5ncyoqXG5cbk9rYXksIHNvIGBsb2FkX21vZHVsZWAgaXMgdGhlIGtleSBjYWxsYmFjayBoZXJlOyB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBXaGljaCBtZWFucyBgY29kZXRhZ19sb2FkX21vZHVsZWAgYW5kIGBjb2RldGFnX3VubG9hZF9tb2R1bGVgIGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCBmb3IgdHJhY2tpbmcgZG93biB3aGF0J3MgZ29pbmcgb24uIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aG9zZS4gQW5kIHRvIGdldCB0aGlzIHdob2xlIHRoaW5nIHdvcmtpbmcsIEkgcmVtZW1iZXIgSSBuZWVkIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgZW5hYmxlZCwgcmlnaHQ/IEFuZCBiZWNhdXNlIGBDT05GSUdfQ09ERV9UQUdHSU5HYCBpcyBhY3R1YWxseSAqc2VsZWN0ZWQqIGJ5IHRoYXQsIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyB0aGUgcmVhbCBraW5ncGluIGNvbmZpZy4gXG5cbkJ1dCB3YWl0IGEgbWludXRlLCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVwZW5kcyBvbiBgTU1VYCBhbmQgYFBST0NfRlNgLi4uIHRoYXQncyBhIGtleSByZXF1aXJlbWVudCwgYW5kIHdvcnRoIG5vdGluZy4gQXJlIHRoZXJlIGFueSBvdGhlciBmbGFncyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIGFuZCBzZWUgaWYgYE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdgIGlzIHJlbGV2YW50IGhlcmUgYXMgd2VsbC4gR290dGEgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg5NSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTo1Ny4zNDIzNzA0NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNTUyOTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnLmRlYnVnPTMzNz1jb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19FTkFCTEVEX0JZX0RFRkFVTFRcXG4tLVxcbm1tL0tjb25maWcuZGVidWctMzQxLVxcbm1tL0tjb25maWcuZGVidWc6MzQyOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vS2NvbmZpZy5kZWJ1Zy0zNDMtXFx0Ym9vbCBcXFwiTWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoxOTo1Ny4zOTM5Mjc0MjJaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxMzE3OTg5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZsZWN0aW5nIG9uIE1lbW9yeSBBbGxvY2F0aW9uIFByb2ZpbGluZyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgcGF0Y2ggYW5kLCByZWFsaXN0aWNhbGx5LCB3ZSBkb24ndCAqc3RyaWN0bHkqIG5lZWQgdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR2AgZmxhZy4gSXQgc2VlbXMgbGlrZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYnkgaXRzZWxmIHNob3VsZCBwcm92aWRlIGVub3VnaCBpbmZvcm1hdGlvbiBmb3IgbW9zdCBzY2VuYXJpb3MuIEknbSBnb2luZyB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLCB0aG91Z2guXG5cbkxldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGFyZWFzIG9mIGNvZGUgdGhhdCBhcmUgcmVsZXZhbnQgaGVyZS4gSSdtIGN1cmlvdXMgaWYgYW55IG90aGVyIGZ1bmN0aW9ucyBtaWdodCBuZWVkIGF0dGVudGlvbi4gSG1tLCBgcGdhbGxvY190YWdfc3dhcGAgaXMgaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGl0IGxvb2tzIGxpa2UgdGhlIHBhdGNoIGRvZXNuJ3QgYWN0dWFsbHkgdG91Y2ggdGhhdC4gSXQncyBqdXN0IHRoZXJlIGZvciBjb250ZXh0LCBub3RoaW5nIHRvIHdvcnJ5IGFib3V0LlxuXG5BbHJpZ2h0LCB0aGUgcGF0Y2ggKmRvZXMqIGFkZCBgcmVtb3ZlX2FsbG9jaW5mb19maWxlYCwgd2hpY2ggaXMgc3RhdGljLCBhbmQgbW9kaWZpZXMgdGhlIGV4aXN0aW5nIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBmdW5jdGlvbiwgYWxzbyBzdGF0aWMuIExldCBtZSBzZWUgd2hlcmUgYHNodXRkb3duX21lbV9wcm9maWxpbmdgIGdldHMgY2FsbGVkLiBBaCwgaXQncyBjYWxsZWQgZnJvbSBgYWxsb2NfdGFnX3NlY19pbml0YCwgYHJlc2VydmVfbW9kdWxlX3RhZ3NgLCBhbmQgYGFsbG9jX3RhZ19pbml0YC4gTm93LCBJIHdvbmRlciBpZiBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AgaXMgY2FsbGVkIGZyb20gYGFsbG9jX3RhZ19tb2R1bGVfaW5pdGA/IEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkzODcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MjA6MDIuNjA3MTA5Njc4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjI2NTU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZXNlcnZlX21vZHVsZV90YWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2FsbG9jX3RhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2FsbG9jX3RhZy5jPTc4NT1zdGF0aWMgaW50IHZtX21vZHVsZV90YWdzX3BvcHVsYXRlKHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy04NDUtXFxubW0vYWxsb2NfdGFnLmM6ODQ2OnN0YXRpYyB2b2lkICpyZXNlcnZlX21vZHVsZV90YWdzKHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBzaXplLFxcbm1tL2FsbG9jX3RhZy5jLTg0Ny1cXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHByZXBlbmQsIHVuc2lnbmVkIGxvbmcgYWxpZ24pXFxuLS1cXG5tbS9hbGxvY190YWcuYz0xMzM0PXN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3RhZ19pbml0KHZvaWQpXFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMzQwLVxcdFxcdC5uZWVkc19zZWN0aW9uX21lbVxcdD0gbmVlZHNfc2VjdGlvbl9tZW0sXFxubW0vYWxsb2NfdGFnLmM6MTM0MTpcXHRcXHQuYWxsb2Nfc2VjdGlvbl9tZW1cXHQ9IHJlc2VydmVfbW9kdWxlX3RhZ3MsXFxubW0vYWxsb2NfdGFnLmMtMTM0Mi1cXHRcXHQuZnJlZV9zZWN0aW9uX21lbVxcdD0gcmVsZWFzZV9tb2R1bGVfdGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MjA6MDIuNjQ5Mzc4NzMzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNTY4OTM5MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgTW9kdWxlIFRhZ2dpbmcqKlxuXG5BbHJpZ2h0LCBzbyBgcmVzZXJ2ZV9tb2R1bGVfdGFnc2AuLi4gcmlnaHQsIHRoYXQncyBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgaXQncyBjYWxsZWQgZnJvbSBgY29kZXRhZ19tb2R1bGVfaW5pdGAuIEdvb2QuIFRoYXQgcHV0cyBpdCBpbiBjb250ZXh0LiBUaGUga2V5IGVudHJ5IHBvaW50cyB0byBmb2N1cyBvbiBzZWVtIHRvIGJlIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoaXMga2luZCBvZiBmdW5jdGlvbmFsaXR5IOKAkyB0aGUgbG9hZCBhbmQgdW5sb2FkIGhvb2tzLiBUaGV5J3JlIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZSBsb29rLiBOb3csIGp1c3QgYSBxdWljayBzYW5pdHkgY2hlY2ssIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgY29kZXRhZ19sb2FkX21vZHVsZWAgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIE5vIHBvaW50IGluIGRpZ2dpbmcgaW50byBhIG5vbi1leHBvcnRlZCBzeW1ib2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MjA6MDYuNzA2Mjc1NzY5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDUxNjkyNCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvY29kZXRhZy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoyMDowNi43NTA3OTkyMTRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ4NTc5MzYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYSBNb2R1bGUgQ2FsbCoqXG5cbkFscmlnaHQsIHNvIEknbSB0cmFjaW5nIHRoaXMgZXhlY3V0aW9uIHBhdGggYW5kIGl0IHNlZW1zIHRoaXMgZnVuY3Rpb24gaXNuJ3QgZXhwbGljaXRseSBleHBvcnRlZC4gVGhhdCdzIGZpbmUsIGJ1dCB3aGF0J3MgcmVhbGx5IHRocm93aW5nIG1lIGlzIHRoYXQgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBga2VybmVsL21vZHVsZS9tYWluLmNgLCBhbmQgdGhhdCdzIG5vdCBhIHN0YXRpYyBmdW5jdGlvbi4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0J3MgZGVmaW5lZC5cblxuSGFuZyBvbi4uLiBJIHRoaW5rIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCBpbiBgbGliL2NvZGV0YWcuY2AuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0LiBXYWl0IGEgc2Vjb25kLCBjb3VsZCBpdCBoYXZlIGEgZGVjbGFyYXRpb24gaW4gYGluY2x1ZGUvbGludXgvY29kZXRhZy5oYD8gVGhhdCdzIHRoZSBtb3N0IGxpa2VseSBzcG90IGZvciBhbiBpbXBvcnQgaWYgaXQncyBub3QgYmVpbmcgZXhwbGljaXRseSBleHBvcnRlZC4gR290IHRvIGNoZWNrIHRoYXQgaW5jbHVkZSBmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDM2MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjIwOjEzLjIzNjU5NTI2NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM0ODA2ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29kZXRhZ19sb2FkX21vZHVsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2NvZGV0YWcuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2NvZGV0YWcuaD05OD12b2lkIGNvZGV0YWdfbW9kdWxlX3JlcGxhY2VkKHN0cnVjdCBtb2R1bGUgKm1vZCwgc3RydWN0IG1vZHVsZSAqbmV3X21vZCk7XFxuaW5jbHVkZS9saW51eC9jb2RldGFnLmg6OTk6aW50IGNvZGV0YWdfbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKTtcXG5pbmNsdWRlL2xpbnV4L2NvZGV0YWcuaC0xMDAtdm9pZCBjb2RldGFnX3VubG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oPTExMj1zdGF0aWMgaW5saW5lIHZvaWQgY29kZXRhZ19tb2R1bGVfcmVwbGFjZWQoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgbW9kdWxlICpuZXdfbW9kKSB7fVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oOjExMzpzdGF0aWMgaW5saW5lIGludCBjb2RldGFnX2xvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkgeyByZXR1cm4gMDsgfVxcbmluY2x1ZGUvbGludXgvY29kZXRhZy5oLTExNC1zdGF0aWMgaW5saW5lIHZvaWQgY29kZXRhZ191bmxvYWRfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkge31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MjA6MTMuMjgwMDc4MDk5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTU2NzQ0OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIE1vZHVsZSBMb2FkaW5nIGFuZCBVbmxvYWRpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgYXJlIGluZGVlZCB0aGUgY29ycmVjdCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFuYWx5c2lzLCBhcyBzdXNwZWN0ZWQuIFRoZXkgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBob29rcyByZWxhdGVkIHRvIG1vZHVsZSBpbnRlcmFjdGlvbi5cblxuTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55IG90aGVyIHJlbGV2YW50IGZ1bmN0aW9ucyBsdXJraW5nIGFyb3VuZC4gSSBzZWUgYGFsbG9jX3RhZ19pbml0YCBpcyBtYXJrZWQgYXMgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHNvIHRoYXQncyBwcm9iYWJseSBub3QgdXNlZnVsIGZvciB0cmFja2luZyBtb2R1bGUgbGlmZXRpbWUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCBhbmQgYHJlbW92ZV9hbGxvY2luZm9fZmlsZWAgYXJlIGJvdGggc3RhdGljLCB3aGljaCBnZW5lcmFsbHkgbWVhbnMgdGhleSdyZSBub3QgZXh0ZXJuYWxseSB2aXNpYmxlIGFuZCBjYW4gYmUgc2FmZWx5IGlnbm9yZWQgZm9yIHRoaXMgYnJvYWRlciBtb2R1bGUgbGlmZWN5Y2xlIHBlcnNwZWN0aXZlLiBUaGVyZWZvcmUsIGZvY3VzaW5nIG9uIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgc2VlbXMgbGlrZSB0aGUgbW9zdCBlZmZlY3RpdmUgYXBwcm9hY2guXG5cbkhtbSwgSSBzZWUgYSBwb3RlbnRpYWwgY29tcGxpY2F0aW9uIHRob3VnaC4gVGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgYGxvYWRfbW9kdWxlYCB3aXRoaW4gYG1tL2FsbG9jX3RhZy5jYCwgYnV0IGl0J3MgKnN0YXRpYyouIFRoYXQncyBhIGJpdCBvZiBhIHJlZCBmbGFnLCBtZWFuaW5nIGl0IG1pZ2h0IGJlIGhpZGRlbiBmcm9tIGRpcmVjdCBpbnZvY2F0aW9uIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJ3QgYW55ICpub24tc3RhdGljKiBmdW5jdGlvbnMgaW4gYG1tL2FsbG9jX3RhZy5jYCB0aGF0IGNvdWxkIGFsc28gc2VydmUgYXMgcG90ZW50aWFsIGZvY3VzIHBvaW50cyBmb3IgdW5kZXJzdGFuZGluZyBtb2R1bGUgYmVoYXZpb3Igd2l0aGluIHRoYXQgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgY29udGV4dC4gSSBuZWVkIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2ggaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA4NDAsIk91dHB1dFRva2VucyI6NjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTdUMDc6MjA6MjMuNDM2ODM3NTcxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzcwNTI1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vYWxsb2NfdGFnLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vYWxsb2NfdGFnLmM9MzM9c3RhdGljIGJvb2wgbWVtX3Byb2ZpbGluZ19zdXBwb3J0O1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtMzktICovXFxubW0vYWxsb2NfdGFnLmM6NDA6Ym9vbCBtZW1fYWxsb2NfcHJvZmlsaW5nX3Blcm1hbmVudGx5X2Rpc2FibGVkKHZvaWQpXFxubW0vYWxsb2NfdGFnLmMtNDEte1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9NDc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgYWxsb2NpbmZvX3Byb2Nfb3BzID0ge1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNDg3LVxcbm1tL2FsbG9jX3RhZy5jOjQ4ODpzaXplX3QgYWxsb2NfdGFnX3RvcF91c2VycyhzdHJ1Y3QgY29kZXRhZ19ieXRlcyAqdGFncywgc2l6ZV90IGNvdW50LCBib29sIGNhbl9zbGVlcClcXG5tbS9hbGxvY190YWcuYy00ODkte1xcbi0tXFxubW0vYWxsb2NfdGFnLmMtNTI4LVxcbm1tL2FsbG9jX3RhZy5jOjUyOTp2b2lkIHBnYWxsb2NfdGFnX3NwbGl0KHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBvbGRfb3JkZXIsIGludCBuZXdfb3JkZXIpXFxubW0vYWxsb2NfdGFnLmMtNTMwLXtcXG4tLVxcbm1tL2FsbG9jX3RhZy5jLTU1NC1cXG5tbS9hbGxvY190YWcuYzo1NTU6dm9pZCBwZ2FsbG9jX3RhZ19zd2FwKHN0cnVjdCBmb2xpbyAqbmV3LCBzdHJ1Y3QgZm9saW8gKm9sZClcXG5tbS9hbGxvY190YWcuYy01NTYte1xcbi0tXFxubW0vYWxsb2NfdGFnLmM9NTk1PXN0YXRpYyB2b2lkIHJlbW92ZV9hbGxvY2luZm9fZmlsZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5tbS9hbGxvY190YWcuYy01OTktXFxubW0vYWxsb2NfdGFnLmM6NjAwOnN0YXRpYyBERUNMQVJFX1dPUksocmVtb3ZlX2FsbG9jaW5mb193b3JrLCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUpO1xcbm1tL2FsbG9jX3RhZy5jLTYwMS1cXG4tLVxcbm1tL2FsbG9jX3RhZy5jPTExOTE9c3RhdGljIGFsbG9jX3RhZ19hZGRfZnVuYyBfX3JjdSAqYWxsb2NfdGFnX2FkZF9lYXJseV9wZm5fcHRyIF9fcmVmZGF0YSA9XFxuLS1cXG5tbS9hbGxvY190YWcuYy0xMTkzLVxcbm1tL2FsbG9jX3RhZy5jOjExOTQ6dm9pZCBhbGxvY190YWdfYWRkX2Vhcmx5X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbm1tL2FsbG9jX3RhZy5jLTExOTUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoyMDoyMy40ODA1NDQ3OTZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMTIzODE3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgTW9kdWxlIExvYWRpbmcgYW5kIE1lbW9yeSBQcm9maWxpbmcgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhlc2UgY2hhbmdlcywgSSBzZWUgdGhhdCB0aGUgcHJpbWFyeSBmb2N1cyBpcyBkZWZpbml0ZWx5IG9uIGBjb2RldGFnX2xvYWRfbW9kdWxlYCBhbmQgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgZHVlIHRvIHRoZWlyIGRpcmVjdCBpbnZvbHZlbWVudCBpbiBtb2R1bGUgaGFuZGxpbmcuIFRoZSBgYWxsb2NfdGFnX3RvcF91c2Vyc2AgZnVuY3Rpb24gaXMgcHJvYmFibHkgb25seSByZWxldmFudCBpbiB0aGUgY29udGV4dCBvZiByZWFkaW5nIHRoZSBwcm9jIGZpbGUsIHNvIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIG1vZHVsZSBsb2FkaW5nIGl0c2VsZi5cblxuUmV2aWV3aW5nIHRoZSBjb2RlIGNoYW5nZXMsIGl0IGxvb2tzIGxpa2UgYSBrZXkgYWRqdXN0bWVudCBoYXMgYmVlbiBtYWRlIGluIGBjb2RldGFnX21vZHVsZV9pbml0YC4gTm93LCBpZiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbHMgd2l0aCBgLUVPUE5PVFNVUFBgIChPcGVyYXRpb24gbm90IHN1cHBvcnRlZCksIGl0J3Mgbm8gbG9uZ2VyIHRyZWF0ZWQgYXMgYSBjcml0aWNhbCBlcnJvci4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgbW9kdWxlIGNhbiBiZSBsb2FkZWQgZXZlbiB3aXRob3V0IGNlcnRhaW4gY29kZSB0YWdnaW5nIGZlYXR1cmVzIGVuYWJsZWQuIFRoaXMgc3VnZ2VzdHMgdGhhdCB0aGUgY29kZSBoYXMgYmVlbiBtYWRlIG1vcmUgcm9idXN0IGluIGhhbmRsaW5nIG1vZHVsZXMgdGhhdCBtaWdodCBub3QgZnVsbHkgc3VwcG9ydCB0aGUgdGFnZ2luZyBtZWNoYW5pc20uXG5cblRoZSBjb3JyZXNwb25kaW5nIGNoYW5nZSBpbiBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBhY2tub3dsZWRnZXMgdGhhdCBhIG1vZHVsZSBtaWdodCBiZSBwcmVzZW50IGRlc3BpdGUgYG1vZHVsZV9sb2FkKClgIHJldHVybmluZyBgLUVPUE5PVFNVUFBgLiBUaGUgYGZyZWVfc2VjdGlvbl9tZW1gIGNhbGwgaGFzIGJlZW4gZXhwYW5kZWQgdG8gZGVhbCB3aXRoIG1vZHVsZXMgaW4gdGhlIGlkciBvciB0aG9zZSB3aXRoIHJlc2VydmVkIHNlY3Rpb24gbWVtb3J5LlxuXG5UdXJuaW5nIHRvIHRoZSBgYWxsb2NfdGFnLmNgIGZpbGUsIEkgc2VlIHRoZSBjb2RlIGFkZHJlc3NlcyBhIGJ1ZyByZWxhdGVkIHRvIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5LiBUaGUgYHJlbW92ZV9wcm9jX2VudHJ5YCBjYWxsIGhhcyBiZWVuIG1vdmVkIHRvIGEgd29ya3F1ZXVlLCBsaWtlbHkgdG8gYXZvaWQgaXNzdWVzIHdpdGggY2FsbGluZyBpdCBmcm9tIGFuIGluYXBwcm9wcmlhdGUgY29udGV4dC4gQWRkaXRpb25hbGx5LCBtb2R1bGUgbG9hZGluZyBoYXMgYmVlbiB1cGRhdGVkIHdoZW4gcHJvZmlsaW5nIGlzIGRpc2FibGVkLiBJZiBgbWVtX3Byb2ZpbGluZ19zdXBwb3J0YCBpcyBmYWxzZSwgbW9kdWxlIGxvYWRpbmcgd2lsbCByZXR1cm4gYC1FT1BOT1RTVVBQYC5cblxuU28sIGluIHN1bW1hcnksIHRoZXNlIGNoYW5nZXMgYXJlIGFkZHJlc3NpbmcgdGhlIGludGVncmF0aW9uIGJldHdlZW4gbW9kdWxlIGxvYWRpbmcgYW5kIG1lbW9yeSBwcm9maWxpbmcuIFRoZSBjaGFuZ2VzIGhhbmRsZSBjYXNlcyB3aGVyZSBhIG1vZHVsZSBtaWdodCBub3QgYmUgZnVsbHkgY29tcGF0aWJsZSB3aXRoIGNvZGUgdGFnZ2luZywgYW5kIHByb3ZpZGVzIHNhZmVyIGhhbmRsaW5nIG9mIHByb2MgZW50cnkgcmVtb3ZhbC5cblxuQXMgZm9yIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgY2xlYXJseSBgQ09ORklHX01PRFVMRVNgIGlzIG5lY2Vzc2FyeSBmb3IgbW9kdWxlIGxvYWRpbmcgaW4gZ2VuZXJhbC4gSW4gdGhlIGNvbnRleHQgb2YgdGhlc2UgY2hhbmdlcywgSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgYWxzbyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTg3MywiT3V0cHV0VG9rZW5zIjoxNTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjIwOjM0LjQ5MjkyODQ3NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MTc1MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1fQUxMT0NfUFJPRklMSU5HXCIsXG4gICAgXCJNT0RVTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29kZXRhZ19sb2FkX21vZHVsZVwiLFxuICAgIFwiY29kZXRhZ191bmxvYWRfbW9kdWxlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbW9kdWxlIGxvYWRpbmcgYW5kIHVubG9hZGluZyBsb2dpYyBpbiBgbGliL2NvZGV0YWcuY2AgYW5kIGBtbS9hbGxvY190YWcuY2AgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBkaXNhYmxlZC4gSXQgYWxzbyBjaGFuZ2VzIGBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nYCB0byBzY2hlZHVsZSBhIHdvcmsgaXRlbSBmb3IgcmVtb3ZpbmcgdGhlIHByb2MgZW50cnkgaW5zdGVhZCBvZiBkb2luZyBpdCBkaXJlY3RseS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGR1cmluZyBtb2R1bGUgbG9hZC91bmxvYWQgYW5kIG1lbW9yeSBwcm9maWxpbmcgc2h1dGRvd24sIHNvIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTU9EVUxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvZGV0YWdfbG9hZF9tb2R1bGVcIixcbiAgICBcImNvZGV0YWdfdW5sb2FkX21vZHVsZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1vZHVsZSBsb2FkaW5nIGFuZCB1bmxvYWRpbmcgbG9naWMgaW4gYGxpYi9jb2RldGFnLmNgIGFuZCBgbW0vYWxsb2NfdGFnLmNgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGFsc28gY2hhbmdlcyBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2AgdG8gc2NoZWR1bGUgYSB3b3JrIGl0ZW0gZm9yIHJlbW92aW5nIHRoZSBwcm9jIGVudHJ5IGluc3RlYWQgb2YgZG9pbmcgaXQgZGlyZWN0bHkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBkdXJpbmcgbW9kdWxlIGxvYWQvdW5sb2FkIGFuZCBtZW1vcnkgcHJvZmlsaW5nIHNodXRkb3duLCBzbyBpdCBpcyB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoyMDozNC41NjcxMTY3NzRaIiwiU2VxIjozMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NjQyMDY2NjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoyMDozNC41Njc2OTAxNDNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ2MzYyOTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyAoYWxsb2NfdGFnKSBhbmQgY29kZXRhZyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBtb2R1bGUgbG9hZGluZyB3aGVuIG1lbW9yeSBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSB3b3JrcXVldWUgdG8gcmVtb3ZlIHRoZSBhbGxvY2luZm8gcHJvYyBlbnRyeSBhc3luY2hyb25vdXNseSBhbmQgY2hhbmdlcyBlcnJvciBoYW5kbGluZyBpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdG8gYWxsb3cgbW9kdWxlcyB0byBsb2FkIHdpdGhvdXQgdGFncyBieSByZXR1cm5pbmcgLUVPUE5PVFNVUFAuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb250cm9sIGZsb3csIGVycm9yIGhhbmRsaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJjZWRkYjIwZGFkMzdhODNkYmZiNDEzMzk3MDE0MjNjOGMxY2IyNTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxNyAwNzoxOTowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2xpYi9jb2RldGFnLmMgYi9saWIvY29kZXRhZy5jXG5pbmRleCBhOWNkYTRjOTYyYTMwLi5hMGI2MDA3MjBhZmMxIDEwMDY0NFxuLS0tIGEvbGliL2NvZGV0YWcuY1xuKysrIGIvbGliL2NvZGV0YWcuY1xuQEAgLTI0MCw3ICsyNDAsOSBAQCBzdGF0aWMgaW50IGNvZGV0YWdfbW9kdWxlX2luaXQoc3RydWN0IGNvZGV0YWdfdHlwZSAqY3R0eXBlLCBzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGtmcmVlKGNtb2QpO1xuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHQvKiAtRU9QTk9UU1VQUCBtZWFucyB3ZSBjYW4gbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZy4gKi9cbitcdFx0aWYgKGVyciAhPSAtRU9QTk9UU1VQUClcbitcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuIFx0cmV0dXJuIDA7XG5AQCAtMzg4LDcgKzM5MCwxMSBAQCB2b2lkIGNvZGV0YWdfdW5sb2FkX21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpXG4gXHRcdFx0KytjdHR5cGUtXHUwMDNlY29udGVudF9pZDtcbiBcdFx0fVxuIFx0XHR1cF93cml0ZShcdTAwMjZjdHR5cGUtXHUwMDNlbW9kX2xvY2spO1xuLVx0XHRpZiAoZm91bmQgXHUwMDI2XHUwMDI2IGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXG4rXHRcdC8qXG4rXHRcdCAqIEEgbW9kdWxlIHdob3NlIG1vZHVsZV9sb2FkKCkgcmV0dXJuZWQgLUVPUE5PVFNVUFAgaXMgbm90XG4rXHRcdCAqIGluIHRoZSBpZHIgYnV0IG1heSBzdGlsbCBob2xkIHJlc2VydmVkIHNlY3Rpb24gbWVtb3J5LlxuK1x0XHQgKi9cbitcdFx0aWYgKGN0dHlwZS1cdTAwM2VkZXNjLmZyZWVfc2VjdGlvbl9tZW0pXG4gXHRcdFx0Y3R0eXBlLVx1MDAzZWRlc2MuZnJlZV9zZWN0aW9uX21lbShtb2QsIHRydWUpO1xuIFx0fVxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvZGV0YWdfbG9jayk7XG5kaWZmIC0tZ2l0IGEvbW0vYWxsb2NfdGFnLmMgYi9tbS9hbGxvY190YWcuY1xuaW5kZXggYjMzNDEwMzEwNDc3OS4uZjMwZWY4ZGQyNGM3MCAxMDA2NDRcbi0tLSBhL21tL2FsbG9jX3RhZy5jXG4rKysgYi9tbS9hbGxvY190YWcuY1xuQEAgLTE1LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2Nob2ljZXMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ZtYWxsb2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva21lbWxlYWsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvYWxsb2NfdGFnLmhcdTAwM2VcbiBcbkBAIC01OTEsNiArNTkyLDEzIEBAIHZvaWQgcGdhbGxvY190YWdfc3dhcChzdHJ1Y3QgZm9saW8gKm5ldywgc3RydWN0IGZvbGlvICpvbGQpXG4gXHRwdXRfcGFnZV90YWdfcmVmKGhhbmRsZV9uZXcpO1xuIH1cbiBcbitzdGF0aWMgdm9pZCByZW1vdmVfYWxsb2NpbmZvX2ZpbGUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHJlbW92ZV9wcm9jX2VudHJ5KEFMTE9DSU5GT19GSUxFX05BTUUsIE5VTEwpO1xuK31cbitcbitzdGF0aWMgREVDTEFSRV9XT1JLKHJlbW92ZV9hbGxvY2luZm9fd29yaywgcmVtb3ZlX2FsbG9jaW5mb19maWxlKTtcbitcbiBzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG4ge1xuIFx0aWYgKG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpKVxuQEAgLTYwMCw3ICs2MDgsNyBAQCBzdGF0aWMgdm9pZCBzaHV0ZG93bl9tZW1fcHJvZmlsaW5nKGJvb2wgcmVtb3ZlX2ZpbGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChyZW1vdmVfZmlsZSlcbi1cdFx0cmVtb3ZlX3Byb2NfZW50cnkoQUxMT0NJTkZPX0ZJTEVfTkFNRSwgTlVMTCk7XG4rXHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2cmVtb3ZlX2FsbG9jaW5mb193b3JrKTtcbiBcdG1lbV9wcm9maWxpbmdfc3VwcG9ydCA9IGZhbHNlO1xuIH1cbiBcbkBAIC05NzUsNiArOTgzLDEwIEBAIHN0YXRpYyBpbnQgbG9hZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgY29kZXRhZyAqc3RhcnQsIHN0cnVjdCBjb2RldGFnXG4gXHRzdHJ1Y3QgYWxsb2NfdGFnICpzdG9wX3RhZztcbiBcdHN0cnVjdCBhbGxvY190YWcgKnRhZztcbiBcbitcdC8qIFByb2ZpbGluZyBkaXNhYmxlZDogbG9hZCB0aGUgbW9kdWxlIHdpdGhvdXQgaXRzIHRhZ3MuICovXG4rXHRpZiAoIW1lbV9wcm9maWxpbmdfc3VwcG9ydClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuIFx0LyogcGVyY3B1IGNvdW50ZXJzIGZvciBjb3JlIGFsbG9jYXRpb25zIGFyZSBhbHJlYWR5IHN0YXRpY2FsbHkgYWxsb2NhdGVkICovXG4gXHRpZiAoIW1vZClcbiBcdFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xN1QwNzoyMDozNC41Njc2OTEwNjNaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ2MzYwOTIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIENoYW5nZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGxvb2tlZCBvdmVyIHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gZm9jdXMgaXMgb24gZW5oYW5jaW5nIHRoZSBtZW1vcnkgcHJvZmlsaW5nIGFuZCBtb2R1bGUgbWFuYWdlbWVudCBhc3BlY3RzIHdpdGhpbiB0aGUga2VybmVsLiBTcGVjaWZpY2FsbHksIGl0IHRvdWNoZXMgYGxpYi9jb2RldGFnLmNgIGFuZCBgbW0vYWxsb2NfdGFnLmNgLlxuXG5JbiBgbGliL2NvZGV0YWcuY2AsIHRoZSBjaGFuZ2VzIHJlZmluZSBob3cgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCB1bmxvYWRlZC4gVGhlIGBjb2RldGFnX21vZHVsZV9pbml0YCBmdW5jdGlvbiBub3cgaGFuZGxlcyBjYXNlcyB3aGVyZSBhIG1vZHVsZSBtaWdodCBub3QgYmUgc3VwcG9ydGVkLCByZXR1cm5pbmcgYC1FT1BOT1RTVVBQYC4gTW9yZSBpbXBvcnRhbnRseSwgYGNvZGV0YWdfdW5sb2FkX21vZHVsZWAgaGFzIGJlZW4gbW9kaWZpZWQgdG8gZnJlZSByZXNlcnZlZCBzZWN0aW9uIG1lbW9yeSBldmVuIGlmIHRoZSBtb2R1bGUgd2Fzbid0IHN1Y2Nlc3NmdWxseSByZWdpc3RlcmVkICggYGZvdW5kYCBpcyBmYWxzZSApLCBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIGlmIHRoZSBsb2FkIGZhaWxlZC5cblxuT3ZlciBpbiBgbW0vYWxsb2NfdGFnLmNgLCBhIHdvcmtxdWV1ZSBpdGVtLCBgcmVtb3ZlX2FsbG9jaW5mb19maWxlYCwgaGFzIGJlZW4gaW50cm9kdWNlZC4gVGhpcyBpcyByZXNwb25zaWJsZSBmb3Igc2FmZWx5IHJlbW92aW5nIHRoZSBgQUxMT0NJTkZPX0ZJTEVfTkFNRWAgcHJvYyBlbnRyeS4gSW5zdGVhZCBvZiBkaXJlY3RseSBjYWxsaW5nIGByZW1vdmVfcHJvY19lbnRyeWAgZHVyaW5nIHNodXRkb3duLCBgc2h1dGRvd25fbWVtX3Byb2ZpbGluZ2Agbm93IHNjaGVkdWxlcyB0aGlzIHdvcmsuIFRoZSBgbG9hZF9tb2R1bGVgIGZ1bmN0aW9uIGFsc28gbm93IHJldHVybnMgYC1FT1BOT1RTVVBQYCBpZiBtZW1vcnkgcHJvZmlsaW5nIGlzbid0IHN1cHBvcnRlZCwgZnVydGhlciBpbXByb3ZpbmcgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIGltcHJvdmVkIGVycm9yIGhhbmRsaW5nLCB3b3JrcXVldWUgdXRpbGl6YXRpb24gZm9yIHJlc291cmNlIG1hbmFnZW1lbnQsIGFuZCBhIG1vcmUgcm9idXN0IG1vZHVsZSB1bmxvYWRpbmcgcHJvY2Vzcy4gVGhlcmUgYXJlIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBzbyBubyBuZXcgQVBJcyB0byB3b3JyeSBhYm91dC4gSSBkb24ndCBzZWUgYW55IG9idmlvdXMgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIG9yIGluZm9ybWF0aW9uIGxlYWtzLCB3aGljaCBpcyBnb29kLlxuXG5JJ3ZlIHRha2VuIGEgY2xvc2VyIGxvb2sgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBgcmVtb3ZlX2FsbG9jaW5mb193b3JrYCBpcyBhIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgYERFQ0xBUkVfV09SS2AsIHNvIG5vIHByb2JsZW1zIHRoZXJlLiBgbG9hZF9tb2R1bGVgIHJldHVybnMgYC1FT1BOT1RTVVBQYCBhcyBleHBlY3RlZCwgYW5kIGBjb2RldGFnX21vZHVsZV9pbml0YCBwcm9wZXJseSBjaGVja3MgdGhpcyBlcnJvciBjb2RlLiBNb3N0IGltcG9ydGFudGx5LCBgY29kZXRhZ191bmxvYWRfbW9kdWxlYCBjYWxscyBgZnJlZV9zZWN0aW9uX21lbWAgcmVnYXJkbGVzcyBvZiBzdWNjZXNzLiBUaGlzIGFsbGF5ZWQgbXkgc3VzcGljaW9ucy5cblxuU2luY2UgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcywgdGhlIGV4aXN0aW5nIEtBU0FOL0xPQ0tERVAgY2hlY2tzIGFuZCBvdGhlciBidWcgZGV0ZWN0aW9uIG1ldGhvZHMgYXJlIHN1ZmZpY2llbnQuIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLiBUaGVyZWZvcmUsIEkgd2lsbCBzZXQgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc2LCJPdXRwdXRUb2tlbnMiOjE5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE3VDA3OjIwOjQ0LjAzMTMwMjk5OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyAoYWxsb2NfdGFnKSBhbmQgY29kZXRhZyBzdWJzeXN0ZW1zIHRvIGhhbmRsZSBtb2R1bGUgbG9hZGluZyB3aGVuIG1lbW9yeSBwcm9maWxpbmcgaXMgZGlzYWJsZWQuIEl0IGludHJvZHVjZXMgYSB3b3JrcXVldWUgdG8gcmVtb3ZlIHRoZSBhbGxvY2luZm8gcHJvYyBlbnRyeSBhc3luY2hyb25vdXNseSBhbmQgY2hhbmdlcyBlcnJvciBoYW5kbGluZyBpbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gdG8gYWxsb3cgbW9kdWxlcyB0byBsb2FkIHdpdGhvdXQgdGFncyBieSByZXR1cm5pbmcgLUVPUE5PVFNVUFAuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBjb250cm9sIGZsb3csIGVycm9yIGhhbmRsaW5nLCBhbmQgd29ya3F1ZXVlIHNjaGVkdWxpbmcuIFRoZXkgZG8gbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyB1c2UtYWZ0ZXItZnJlZSwgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlcywgb3IgbWVtb3J5IGxlYWtzKSB3b3VsZCBiZSBjYXVnaHQgYnkgc3RhbmRhcmQgS0FTQU4gb3Igb3RoZXIgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLCBzbyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgKGFsbG9jX3RhZykgYW5kIGNvZGV0YWcgc3Vic3lzdGVtcyB0byBoYW5kbGUgbW9kdWxlIGxvYWRpbmcgd2hlbiBtZW1vcnkgcHJvZmlsaW5nIGlzIGRpc2FibGVkLiBJdCBpbnRyb2R1Y2VzIGEgd29ya3F1ZXVlIHRvIHJlbW92ZSB0aGUgYWxsb2NpbmZvIHByb2MgZW50cnkgYXN5bmNocm9ub3VzbHkgYW5kIGNoYW5nZXMgZXJyb3IgaGFuZGxpbmcgaW4gbW9kdWxlIGluaXRpYWxpemF0aW9uIHRvIGFsbG93IG1vZHVsZXMgdG8gbG9hZCB3aXRob3V0IHRhZ3MgYnkgcmV0dXJuaW5nIC1FT1BOT1RTVVBQLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgY29udHJvbCBmbG93LCBlcnJvciBoYW5kbGluZywgYW5kIHdvcmtxdWV1ZSBzY2hlZHVsaW5nLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgdXNlLWFmdGVyLWZyZWUsIG51bGwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIG9yIG1lbW9yeSBsZWFrcykgd291bGQgYmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIEtBU0FOIG9yIG90aGVyIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcywgc28gYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhf49b[1] Phase: Succeeded StartedAt: 2026-08-17 07:21:07 +0000 UTC FinishedAt: 2026-08-17 07:21:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-17 07:21:07 +0000 UTC FinishedAt: 2026-08-17 07:21:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2] Phase: Succeeded StartedAt: 2026-08-17 07:21:07 +0000 UTC FinishedAt: 2026-08-17 11:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-17 07:21:07 +0000 UTC FinishedAt: 2026-08-17 11:05:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-17 07:21:07 +0000 UTC FinishedAt: 2026-08-17 07:21:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-17 07:21:07 +0000 UTC FinishedAt: 2026-08-17 07:21:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhf49b/series-workflowhf49b-convert-artifact-2898112591/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-17 07:21:36 +0000 UTC FinishedAt: 2026-08-17 07:37:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-17 07:21:36 +0000 UTC FinishedAt: 2026-08-17 07:37:54 +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:*623c8898-6d50-4524-aeab-9d64b3786da4,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-workflowhf49b/series-workflowhf49b-convert-artifact-2898112591/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": "6b872525-2e2c-41f0-938b-d049f29200fe", "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-workflowhf49b/series-workflowhf49b-build-action-1849720725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-17 07:21:36 +0000 UTC FinishedAt: 2026-08-17 07:37:44 +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:*623c8898-6d50-4524-aeab-9d64b3786da4,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-workflowhf49b/series-workflowhf49b-convert-artifact-2898112591/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": "6b872525-2e2c-41f0-938b-d049f29200fe", "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-workflowhf49b/series-workflowhf49b-build-action-1849720725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-17 07:37:54 +0000 UTC FinishedAt: 2026-08-17 07:37:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-17 07:37:54 +0000 UTC FinishedAt: 2026-08-17 07:37:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-17 07:37:54 +0000 UTC FinishedAt: 2026-08-17 07:38:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-17 07:37:54 +0000 UTC FinishedAt: 2026-08-17 07:37:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhf49b/series-workflowhf49b-convert-artifact-85110686/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-17 07:38:05 +0000 UTC FinishedAt: 2026-08-17 07:40:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-17 07:38:05 +0000 UTC FinishedAt: 2026-08-17 07:40:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b872525-2e2c-41f0-938b-d049f29200fe,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-workflowhf49b/series-workflowhf49b-build-action-1849720725/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-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-17 07:40:16 +0000 UTC FinishedAt: 2026-08-17 07:40:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-17 07:40:16 +0000 UTC FinishedAt: 2026-08-17 07:40:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-17 07:40:16 +0000 UTC FinishedAt: 2026-08-17 08:00:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-17 07:40:16 +0000 UTC FinishedAt: 2026-08-17 08:00:17 +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:*623c8898-6d50-4524-aeab-9d64b3786da4,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-workflowhf49b/series-workflowhf49b-convert-artifact-85110686/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": "b9cc660b-8076-40fa-883e-e0570933273b", "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-workflowhf49b/series-workflowhf49b-build-action-218914162/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-17 07:40:16 +0000 UTC FinishedAt: 2026-08-17 07:59:55 +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:*623c8898-6d50-4524-aeab-9d64b3786da4,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-workflowhf49b/series-workflowhf49b-convert-artifact-85110686/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": "b9cc660b-8076-40fa-883e-e0570933273b", "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-workflowhf49b/series-workflowhf49b-build-action-218914162/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-17 08:00:17 +0000 UTC FinishedAt: 2026-08-17 08:00:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-17 08:00:17 +0000 UTC FinishedAt: 2026-08-17 08:00:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-17 08:00:17 +0000 UTC FinishedAt: 2026-08-17 08:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-17 08:00:17 +0000 UTC FinishedAt: 2026-08-17 08:02:10 +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:*b9cc660b-8076-40fa-883e-e0570933273b,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-workflowhf49b/series-workflowhf49b-build-action-218914162/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-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-17 08:02:20 +0000 UTC FinishedAt: 2026-08-17 11:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-17 08:02:20 +0000 UTC FinishedAt: 2026-08-17 11:05:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*6b872525-2e2c-41f0-938b-d049f29200fe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b9cc660b-8076-40fa-883e-e0570933273b,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-workflowhf49b/series-workflowhf49b-build-action-1849720725/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-workflowhf49b/series-workflowhf49b-build-action-218914162/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-17 08:02:20 +0000 UTC FinishedAt: 2026-08-17 08:02:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-17 08:02:20 +0000 UTC FinishedAt: 2026-08-17 08:02:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhf49b/series-workflowhf49b-convert-artifact-3807505059/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-17 08:02:20 +0000 UTC FinishedAt: 2026-08-17 08:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-17 08:02:20 +0000 UTC FinishedAt: 2026-08-17 08:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-17 08:02:20 +0000 UTC FinishedAt: 2026-08-17 08:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-17 08:02:30 +0000 UTC FinishedAt: 2026-08-17 11:05:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhf49b[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["codetag_load_module","codetag_unload_module"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"4b65683fd25fe596b5b5947d934bb176413d077b","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MODULES"],"series_id":"79f5630d-8a00-45dc-ad50-4368fb96e196","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-17 08:02:30 +0000 UTC FinishedAt: 2026-08-17 11:05:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6b872525-2e2c-41f0-938b-d049f29200fe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b9cc660b-8076-40fa-883e-e0570933273b,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-workflowhf49b/series-workflowhf49b-build-action-1849720725/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-workflowhf49b/series-workflowhf49b-build-action-218914162/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-workflowhf49b/series-workflowhf49b-convert-artifact-3807505059/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,}