Name: series-workflowx7nsp Phase: Running StartedAt: 2026-07-11 02:51:55 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[0] Phase: Succeeded StartedAt: 2026-07-11 02:51:55 +0000 UTC FinishedAt: 2026-07-11 03:22:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 02:51:55 +0000 UTC FinishedAt: 2026-07-11 03:22:31 +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": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "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": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "series_id": "fc9949b1-43c3-4bc8-816d-bd01d5772dd4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "do_mremap" ], "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+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fbXJlbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBhbGxvdyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnQgc2hyaW5raW5nIGZpbGUtYmFja2VkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBmb3Igbm9tbXUgYXJjaGl0ZWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYG1yZW1hcGAgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM0OTFjY2ZlNWNlNGNhYTNkMTE3OWEzNjc1N2RhMjUwMDgzZjYxMDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAwMzoyMDoyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuY1xuaW5kZXggODUyZWM5YmQwNTA1OTIuLmM4ZWZmYmZmYTBmMDFjIDEwMDY0NFxuLS0tIGEvbW0vbm9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbm9tbXUuY1xuQEAgLTE1OTcsOCAmIzQzOzE1OTcsMjYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fbXJlbWFwKHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmIChuZXdfbGVuIFx1MDAzZSB2bWEtXHUwMDNldm1fcmVnaW9uLVx1MDAzZXZtX2VuZCAtIHZtYS1cdTAwM2V2bV9yZWdpb24tXHUwMDNldm1fc3RhcnQpXG4gXHRcdHJldHVybiAodW5zaWduZWQgbG9uZykgLUVOT01FTTtcbiBcbiYjNDM7XHQvKiBsaWtlIGRvX211bm1hcCgpLCB3ZSYjMzk7cmUgYWxsb3dlZCB0byBzaHJpbmsgYW4gYW5vbnltb3VzIFZNQSBidXQgbm90IGEgZmlsZS1iYWNrZWQgb25lICovXG4mIzQzO1x0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuJiM0MztcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKSAtRUlOVkFMO1xuJiM0MztcbiBcdC8qIGFsbCBjaGVja3MgY29tcGxldGUgLSBkbyBpdCAqL1xuLVx0dm1hLVx1MDAzZXZtX2VuZCA9IHZtYS1cdTAwM2V2bV9zdGFydCAmIzQzOyBuZXdfbGVuO1xuJiM0MztcdGlmIChuZXdfbGVuIFx1MDAzYyBvbGRfbGVuKSB7XG4mIzQzO1x0XHQvKiBzaHJpbmsgb25seSBoYXBwZW5zIGFkZHIgJiM0MzsgbmV3X2xlbiBhbmQgb2xkX2xlbiBhcmUgaW4gZGlmZmVyZW50IHBhZ2VzICovXG4mIzQzO1x0XHRWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LVx1MDAzZW1tLCBhZGRyKTtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogdm1pX3Nocmlua192bWEoKSBuZWVkcyBmcm9tL3RvIHBvaW50ZXJzIHRvIGJlIHJlbW92ZWQsXG4mIzQzO1x0XHQgKiAobWFpbmx5IHVzZWQgaW4gbXVubWFwKSBzbywgc3BlY2lmeSB0aGVtLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSB2bWlfc2hyaW5rX3ZtYShcdTAwMjZ2bWksIHZtYSwgYWRkciAmIzQzOyBuZXdfbGVuLCBhZGRyICYjNDM7IG9sZF9sZW4pO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKSByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIHdoZW4gdGhlcmUgYXJlIG5vIHNocmluaywgdXBkYXRlIHZtYS4gICovXG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fZW5kID0gdm1hLVx1MDAzZXZtX3N0YXJ0ICYjNDM7IG5ld19sZW47XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHZtYS1cdTAwM2V2bV9zdGFydDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19tcmVtYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX21yZW1hcGAgaW4gYG1tL25vbW11LmNgIHRvIGFsbG93IHNocmlua2luZyBhbm9ueW1vdXMgVk1BcyBhbmQgcHJldmVudCBzaHJpbmtpbmcgZmlsZS1iYWNrZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBub21tdSBhcmNoaXRlY3R1cmVzIGFuZCBpcyByZWFjaGFibGUgdmlhIHRoZSBgbXJlbWFwYCBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNDkxY2NmZTVjZTRjYWEzZDExNzlhMzY3NTdkYTI1MDA4M2Y2MTAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMDM6MjA6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCA4NTJlYzliZDA1MDU5Mi4uYzhlZmZiZmZhMGYwMWMgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbm9tbXUuYwpAQCAtMTU5Nyw4ICYjNDM7MTU5NywyNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkb19tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLAogCWlmIChuZXdfbGVuICZndDsgdm1hLSZndDt2bV9yZWdpb24tJmd0O3ZtX2VuZCAtIHZtYS0mZ3Q7dm1fcmVnaW9uLSZndDt2bV9zdGFydCkKIAkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSAtRU5PTUVNOwogCiYjNDM7CS8qIGxpa2UgZG9fbXVubWFwKCksIHdlJiMzOTtyZSBhbGxvd2VkIHRvIHNocmluayBhbiBhbm9ueW1vdXMgVk1BIGJ1dCBub3QgYSBmaWxlLWJhY2tlZCBvbmUgKi8KJiM0MzsJaWYgKHZtYS0mZ3Q7dm1fZmlsZSkKJiM0MzsJCXJldHVybiAodW5zaWduZWQgbG9uZykgLUVJTlZBTDsKJiM0MzsKIAkvKiBhbGwgY2hlY2tzIGNvbXBsZXRlIC0gZG8gaXQgKi8KLQl2bWEtJmd0O3ZtX2VuZCA9IHZtYS0mZ3Q7dm1fc3RhcnQgJiM0MzsgbmV3X2xlbjsKJiM0MzsJaWYgKG5ld19sZW4gJmx0OyBvbGRfbGVuKSB7CiYjNDM7CQkvKiBzaHJpbmsgb25seSBoYXBwZW5zIGFkZHIgJiM0MzsgbmV3X2xlbiBhbmQgb2xkX2xlbiBhcmUgaW4gZGlmZmVyZW50IHBhZ2VzICovCiYjNDM7CQlWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LSZndDttbSwgYWRkcik7CiYjNDM7CQlpbnQgcmV0OwomIzQzOwomIzQzOwkJLyogdm1pX3Nocmlua192bWEoKSBuZWVkcyBmcm9tL3RvIHBvaW50ZXJzIHRvIGJlIHJlbW92ZWQsCiYjNDM7CQkgKiAobWFpbmx5IHVzZWQgaW4gbXVubWFwKSBzbywgc3BlY2lmeSB0aGVtLgomIzQzOwkJICovCiYjNDM7CQlyZXQgPSB2bWlfc2hyaW5rX3ZtYSgmYW1wO3ZtaSwgdm1hLCBhZGRyICYjNDM7IG5ld19sZW4sIGFkZHIgJiM0Mzsgb2xkX2xlbik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIHdoZW4gdGhlcmUgYXJlIG5vIHNocmluaywgdXBkYXRlIHZtYS4gICovCiYjNDM7CQl2bWEtJmd0O3ZtX2VuZCA9IHZtYS0mZ3Q7dm1fc3RhcnQgJiM0MzsgbmV3X2xlbjsKJiM0MzsJfQogCXJldHVybiB2bWEtJmd0O3ZtX3N0YXJ0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgUGF0Y2ggaW4gYG1tL25vbW11LmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBkb19tcmVtYXBgIHdpdGhpbiBgbW0vbm9tbXUuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYHZtaV9zaHJpbmtfdm1hYCB0byBzaHJpbmsgYW5vbnltb3VzIFZNQXMgd2hpbGUgZXhwbGljaXRseSBhdm9pZGluZyBhbnkgc2hyaW5rYWdlIG9uIGZpbGUtYmFja2VkIG9uZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBgbW0vbm9tbXUuY2AuLi4gdGhhdCYjMzk7cyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzICpub3QqIHNldC4mIzM0OyBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgdGhpcyBhcHBsaWVzIHRvIGFyY2hpdGVjdHVyZXMgKndpdGhvdXQqIGEgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdC4KCk15IG5leHQgbWVudGFsIHN0ZXAgaXMgdG8gY29uc2lkZXIgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggb3VyIGZ1enppbmcgZWZmb3J0cy4gU3l6a2FsbGVyIGdlbmVyYWxseSB0YXJnZXRzIHN5c3RlbXMgd2l0aCBhbiBNTVUsIGxpa2UgeDg2XzY0IG9yIGFybTY0LiBJIGtub3cgaXQgKmNhbiogYmUgY29uZmlndXJlZCB0byB0ZXN0IG5vbW11IGFyY2hpdGVjdHVyZXMsIHRob3VnaCBpdCYjMzk7cyBsZXNzIGZyZXF1ZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgbm90IGEgZmFsc2UgcG9zaXRpdmUgZm9yIHRoZSBmdXp6aW5nLgoKTm93LCB3YWl0IGEgc2Vjb25kLiBUaGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBzYXkgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLiBTcGVjaWZpY2FsbHksIGlmIHRoZSBwYXRjaCBhZmZlY3RzICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFRoYXQmIzM5O3MgdGhlIGNydXghIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIGBub21tdWAgYWNjZXNzaWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VPyBBbmQgdGhlIGFuc3dlciBpcyB5ZXMuIFFFTVUgKmRvZXMqIHN1cHBvcnQgbm9tbXUgYXJjaGl0ZWN0dXJlcy4gSSBrbm93IHRoYXQgUUVNVSBzdXBwb3J0cyBtNjhrLCBSSVNDLVYgbm9tbXUsIGFuZCBBUk0gbm9tbXUsIHdoaWNoIG1lYW5zIHdlIGNhbiB0ZXN0IHRoZXNlIHRoaW5ncyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKT2theSwgc28gU3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzb21lIG5vbW11IHRhcmdldHMuIEJ1dCBpdCBkb2VzIHJlcXVpcmUgYCFDT05GSUdfTU1VYC4gVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBtbS9ub21tdS5jYCBpdHNlbGYgYW5kIGl0cyBgS2NvbmZpZ2AgZmlsZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9tbXUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTM0PUNGTEFHU19pbml0LW1tLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxubW0vTWFrZWZpbGUtMzUtXG5tbS9NYWtlZmlsZTozNjptbXUteVx0XHRcdDo9IG5vbW11Lm9cbm1tL01ha2VmaWxlLTM3LW1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBtbXUteSA6PSBub21tdS5vYCBBc3NpZ25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFzc2lnbm1lbnQ6IGBtbXUteSA6PSBub21tdS5vYCBhbmQgbXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCAmIzM0O1dhaXQsIHRoYXQgZG9lc24mIzM5O3QgZmVlbCByaWdodC4mIzM0OyBNeSBleHBlcnRpc2UgaXMgdGVsbGluZyBtZSB0aGF0IGBtbXUteWAgdHlwaWNhbGx5IGltcGxpZXMgdGhlICpwcmVzZW5jZSogb2YgYW4gTU1VIChNZW1vcnkgTWFuYWdlbWVudCBVbml0KSwgbm90IGl0cyAqYWJzZW5jZSouIFRoZSBhc3NpZ25tZW50IHNlZW1zIGJhY2t3YXJkLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBpc3N1ZSBvciBhIGNvbmRpdGlvbmFsIGJ1aWxkIHNpdHVhdGlvbi4gVGhlIGNvcmUgb2YgbXkgY29uZnVzaW9uIGlzIHRoYXQgJiMzOTt5JiMzOTsgaW4gdGhlIE1ha2VmaWxlIHdvcmxkIGdlbmVyYWxseSBtZWFucyAmIzM5O2luY2x1ZGUgdGhpcyBmaWxlJiMzOTsgd2hpY2gsIGlmIHRoaXMgaXMgdHJ1bHkgdGhlIGNhc2UsIHN1Z2dlc3RzIHRoYXQgaWYgYW4gTU1VIGlzICpub3QqIHByZXNlbnQsIHdlIGFyZSBzdGlsbCAqaW5jbHVkaW5nKiBgbm9tbXUub2AgLS0gZG9lc24mIzM5O3QgdGhhdCBpbXBseSB3ZSBzaG91bGQgYmUgbmFtaW5nIGl0IGBub21tdS15YCBhbmQgdGhlbiBpdCAqcmVwbGFjZXMqIGBtbXUub2A/CgpUaGUgbmV4dCBzdGVwIGlzIG9idmlvdXM6IEkgbmVlZCB0byB2ZXJpZnkgaG93IGBtbXUteWAgaXMgYWN0dWFsbHkgdXNlZC4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBsb2dpYywgSSYjMzk7bGwganVtcCByaWdodCBpbnRvIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBsb29rIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYXNzaWdubWVudCBpcyBpbnRlcnByZXRlZCB3aXRoaW4gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgaXQgaXMgZW1wbG95ZWQuIFRoYXQgTWFrZWZpbGUgaXMgbXkga2V5IHRvIHVubG9ja2luZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRLQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxuICAzMTpcdEtDT1ZfSU5TVFJVTUVOVF92bXN0YXQubyA6PSBuXG4gIDMyOlx0S0NPVl9JTlNUUlVNRU5UX2ZhaWxzbGFiLm8gOj0gblxuICAzMzpcdFxuICAzNDpcdENGTEFHU19pbml0LW1tLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuICAzNTpcdFxuICAzNjpcdG1tdS15XHRcdFx0Oj0gbm9tbXUub1xuICAzNzpcdG1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4gIDM4Olx0XHRcdFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcbiAgMzk6XHRcdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbiAgNDA6XHRcdFx0XHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cbiAgNDE6XHRcbiAgNDI6XHRcbiAgNDM6XHRpZmRlZiBDT05GSUdfQ1JPU1NfTUVNT1JZX0FUVEFDSFxuICA0NDpcdG1tdS0kKENPTkZJR19NTVUpXHQmIzQzOz0gcHJvY2Vzc192bV9hY2Nlc3Mub1xuICA0NTpcdGVuZGlmXG4gIDQ2Olx0XG4gIDQ3Olx0aWZkZWYgQ09ORklHXzY0QklUXG4gIDQ4Olx0bW11LSQoQ09ORklHX01NVSlcdCYjNDM7PSBtc2VhbC5vXG4gIDQ5Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipNYWtlZmlsZSBMb2dpYyBmb3IgTU1VIEluY2x1c2lvbioqCgpPa2F5LCBzbyB0aGUgYG1tdS15IDo9IG5vbW11Lm9gIGFuZCBgbW11LSQoQ09ORklHX01NVSkgOj0gLi4uYCBsaW5lcyBhcmUgaG93IHRoaXMgcHJvamVjdCBoYW5kbGVzIGluY2x1ZGluZyBNTVUtc3BlY2lmaWMgb2JqZWN0IGZpbGVzLiBUaGF0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIHN0cmF0ZWd5LiAgRXNzZW50aWFsbHksIHRoZSB2YWx1ZSBvZiB0aGUgYG1tdS15YCB2YXJpYWJsZSBjaGFuZ2VzIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgYENPTkZJR19NTVVgIHZhcmlhYmxlLiAgVGhlbiwgbGlrZWx5LCB0aGVyZSYjMzk7cyBhIHN1YnNlcXVlbnQgbGluZSwgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYG9iai15ICYjNDM7PSAkKG1tdS15KWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlY2lzaW9uIGdldHMgYmFrZWQgaW50byB0aGUgZmluYWwgYnVpbGQuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGFwcHJvYWNoIHdpdGhpbiBNYWtlZmlsZXMsIHVzaW5nIHZhcmlhYmxlIGV4cGFuc2lvbiB0byBkcml2ZSB0aGUgaW5jbHVzaW9uLiBMZXQmIzM5O3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBpcyByaWdodDsgSSYjMzk7bGwgc2NhbiB0aHJvdWdoIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoaXMgZXhwZWN0ZWQgcGF0dGVybi4gSSBuZWVkIHRvIHZlcmlmeSBob3cgYG1tdS15YCBpcyBhY3R1YWxseSB1c2VkIGFuZCBpZiBgQ09ORklHX01NVWAgaXMgcHJvcGVybHkgZXZhbHVhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XG4gIDUxOlx0b2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG4gIDUyOlx0XHRcdFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcbiAgNTM6XHRcdFx0XHQgICByZWFkYWhlYWQubyBmb2xpby5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxuICA1NDpcdFx0XHRcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcbiAgNTU6XHRcdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxuICA1NjpcdFx0XHRcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXG4gIDU3Olx0XHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG4gIDU4Olx0XHRcdFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vICQobW11LXkpXG4gIDU5Olx0XG4gIDYwOlx0IyBHaXZlICYjMzk7cGFnZV9hbGxvYyYjMzk7IGl0cyBvd24gbW9kdWxlLXBhcmFtZXRlciBuYW1lc3BhY2VcbiAgNjE6XHRwYWdlLWFsbG9jLXkgOj0gcGFnZV9hbGxvYy5vXG4gIDYyOlx0cGFnZS1hbGxvYy0kKENPTkZJR19TSFVGRkxFX1BBR0VfQUxMT0NBVE9SKSAmIzQzOz0gc2h1ZmZsZS5vXG4gIDYzOlx0XG4gIDY0Olx0IyBHaXZlICYjMzk7bWVtb3J5X2hvdHBsdWcmIzM5OyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXG4gIDY1Olx0bWVtb3J5LWhvdHBsdWctJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpICYjNDM7PSBtZW1vcnlfaG90cGx1Zy5vXG4gIDY2Olx0XG4gIDY3Olx0b2JqLXkgJiM0Mzs9IHBhZ2UtYWxsb2Mub1xuICA2ODpcdG9iai15ICYjNDM7PSBwYWdlX2ZyYWdfY2FjaGUub1xuICA2OTpcdG9iai15ICYjNDM7PSBpbml0LW1tLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mjg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpc3NlY3RpbmcgdGhlIE9iamVjdCBGaWxlIENvbXBpbGF0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIHN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IHRoaXMgbGluZTogYG9iai15ICYjNDM7PSAuLi4gJChtbXUteSlgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBpZiBgQ09ORklHX01NVWAgaXMgc2V0LCB0aGVuIGBtbXUteWAgZXhwYW5kcyB0byBgbm9tbXUub2AuIEJ1dCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gSXQmIzM5O3MgYWN0dWFsbHk6IGBtbXUteSA6PSBub21tdS5vYCBhdCBmaXJzdC4gVGhlbiBJIHNlZSB0aGlzOiBgbW11LSQoQ09ORklHX01NVSkgOj0gaGlnaG1lbS5vIC4uLmAuCgpTbywgKmlmKiBgQ09ORklHX01NVWAgaXMgc2V0LCBkb2VzIHRoYXQgbWVhbiBgbW11LXlgIGJlY29tZXMgKmJvdGgqIGBub21tdS5vYCBhbmQgYGhpZ2htZW0ubyAuLi5gPyBObywgbm8sIEkmIzM5O20gb3ZlcnRoaW5raW5nIGl0LiBJdCYjMzk7cyBtb3JlIGxpa2UgdGhpczogYG1tdS0kKENPTkZJR19NTVUpYCBpcyBhIGNvbmRpdGlvbmFsIGFwcGVuZC4gSXQgbWVhbnMgdGhhdCAqaWYqIGBDT05GSUdfTU1VYCBpcyBlcXVhbCB0byAmIzM5O3kmIzM5OywgdGhlbiBgaGlnaG1lbS5vIC4uLmAgaXMgKmFwcGVuZGVkKiB0byB0aGUgYG1tdS15YCB2YXJpYWJsZSwgd2hpY2ggY3VycmVudGx5IGhvbGRzIGBub21tdS5vYC4KCk5vdywgaWYgYENPTkZJR19NTVVgIGlzIHNldCB0byAmIzM5O3kmIzM5OywgZG9lcyB0aGF0IG1lYW4gYG5vbW11Lm9gICpzdGlsbCogZ2V0cyBjb21waWxlZD8gVGhlIGxvZ2ljIHNlZW1zIHRvIGJlIGFkZGluZyBoaWdobWVtLm8gdG8gbW11LXkgaWYgQ09ORklHX01NVSBpcyBvbiwgYnV0IGl0IGlzbiYjMzk7dCBjbGVhciBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCBub21tdS5vLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEJlc3QgdG8gbG9vayBhdCB0aGUgc291cmNlIGNvZGUgZm9yIGBtbS9ub21tdS5jYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBvciB0byBlbnN1cmUgdGhhdCB0aGF0IGZpbGUgZG9lc24mIzM5O3QgZ2V0IGNvbXBpbGVkIGF0IGFsbCBpZiB0aGUgTU1VIGlzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbm9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqICBsaW51eC9tbS9ub21tdS5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiAgUmVwbGFjZW1lbnQgY29kZSBmb3IgbW0gZnVuY3Rpb25zIHRvIHN1cHBvcnQgQ1BVJiMzOTtzIHRoYXQgZG9uJiMzOTt0XG4gICA2Olx0ICogIGhhdmUgYW55IGZvcm0gb2YgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCAodGh1cyBubyB2aXJ0dWFsIG1lbW9yeSkuXG4gICA3Olx0ICpcbiAgIDg6XHQgKiAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbm9tbXUtbW1hcC5yc3RcbiAgIDk6XHQgKlxuICAxMDpcdCAqICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBEYXZpZCBIb3dlbGxzIFx1MDAzY2Rob3dlbGxzQHJlZGhhdC5jb21cdTAwM2VcbiAgMTE6XHQgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMgRGF2aWQgTWNDdWxsb3VnaCBcdTAwM2NkYXZpZG1Ac25hcGdlYXIuY29tXHUwMDNlXG4gIDEyOlx0ICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIEQgSmVmZiBEaW9ubmUgXHUwMDNjamVmZkB1Q2xpbnV4Lm9yZ1x1MDAzZVxuICAxMzpcdCAqICBDb3B5cmlnaHQgKGMpIDIwMDIgICAgICBHcmVnIFVuZ2VyZXIgXHUwMDNjZ2VyZ0BzbmFwZ2Vhci5jb21cdTAwM2VcbiAgMTQ6XHQgKiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgUGF1bCBNdW5kdCBcdTAwM2NsZXRoYWxAbGludXgtc2gub3JnXHUwMDNlXG4gIDE1Olx0ICovXG4gIDE2Olx0XG4gIDE3Olx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcJiMzNDs6IFwmIzM0OyBmbXRcbiAgMTg6XHRcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI0NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLYnVpbGQgQ29udW5kcnVtKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYG1tdS15IDo9IG5vbW11Lm9gIGFzc2lnbm1lbnQuLi4gZG9lcyB0aGlzICphbHdheXMqIHNldCBgbW11LXlgIHRvIGBub21tdS5vYD8gVGhhdCBmZWVscyBvdmVybHkgc2ltcGxpc3RpYy4gVGhlIHdheSBLYnVpbGQgd29ya3MgaXMgdGhhdCBgbW11LXlgIGlzIGEgdmFyaWFibGUsIHJpZ2h0PyBJdOKAmXMgbm90IGEgZGlyZWN0LCBhYnNvbHV0ZSBzdWJzdGl0dXRpb24uCgpTbywgaWYgYENPTkZJR19NTVVgIGlzIHNldCB0byAmIzM5O3kmIzM5Oywgd2hpY2ggbWVhbnMgdGhlIE1NVSAqaXMqIGVuYWJsZWQsIHRoZW4gYG1tdS15YCBzaG91bGQgZXhwYW5kIGludG8gc29tZXRoaW5nICptb3JlKiB0aGFuIGp1c3QgYG5vbW11Lm9gLCBzb21ldGhpbmcgbGlrZSBgbm9tbXUubyBoaWdobWVtLm8gLi4uYCBwb3RlbnRpYWxseT8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGxvZ2ljIGluIG15IG1pbmQuCgpUbyBiZSBjZXJ0YWluLCBsZXQmIzM5O3Mgc3RvcCBhbmQgdmVyaWZ5IHdoZXRoZXIgYG5vbW11LmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkLCBldmVuIHdoZW4gYENPTkZJR19NTVVgICppcyogY29uZmlndXJlZCB3aXRoICYjMzk7eSYjMzk7LiBUaGF0JiMzOTtzIHRoZSBrZXkgdGVzdCBoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub21tdS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTM0PUNGTEFHU19pbml0LW1tLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxubW0vTWFrZWZpbGUtMzUtXG5tbS9NYWtlZmlsZTozNjptbXUteVx0XHRcdDo9IG5vbW11Lm9cbm1tL01ha2VmaWxlLTM3LW1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2ODUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqQ2hlY2tpbmcgQ29tcGlsYXRpb24gb2YgYG5vbW11LmNgIHdpdGggTU1VIEVuYWJsZWQqKgoKT2theSwgaG9sZCBvbi4gQmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIHZlcmlmeSBhIGZ1bmRhbWVudGFsIGFzc3VtcHRpb24uIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoYXQgYG5vbW11LmNgIGlzIGFjdHVhbGx5IGJ1aWx0IGludG8gdGhlIGtlcm5lbCB3aGVuIHRoZSBgQ09ORklHX01NVT15YCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQuIEl0IHNlZW1zIGNvdW50ZXItaW50dWl0aXZlLCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcuIEkgaGF2ZSBhbiBpbmtsaW5nLCBidXQgSSBjYW4mIzM5O3Qgb3BlcmF0ZSBvbiBhbiBhc3N1bXB0aW9uLgoKQWxyaWdodCwgdGltZSB0byByZXZpc2l0IGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbXBpbGF0aW9uIGxvZ2ljIGZvciBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcyByZXNpZGVzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbHMgYXJlIHN0cnVjdHVyZWQgaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIHJ1bGVzIHRoYXQgY292ZXIgYG5vbW11LmNgIGFuZCBjb25maXJtIHRoYXQgdGhleSBhcmUgY29uZGl0aW9uYWwgb24gYENPTkZJR19NTVVgLCBvciBpdHMgbmVnYXRpb24sIHdoaWNoZXZlciBpcyByZWxldmFudC4gT25seSB0aGVuIGNhbiBJIGJlIHN1cmUgaWYgbXkgY3VycmVudCBoeXBvdGhlc2lzIGhvbGRzIHdhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdEtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4gIDMxOlx0S0NPVl9JTlNUUlVNRU5UX3Ztc3RhdC5vIDo9IG5cbiAgMzI6XHRLQ09WX0lOU1RSVU1FTlRfZmFpbHNsYWIubyA6PSBuXG4gIDMzOlx0XG4gIDM0Olx0Q0ZMQUdTX2luaXQtbW0ubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0XG4gIDM1Olx0XG4gIDM2Olx0bW11LXlcdFx0XHQ6PSBub21tdS5vXG4gIDM3Olx0bW11LSQoQ09ORklHX01NVSlcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcbiAgMzg6XHRcdFx0XHQgICBtbG9jay5vIG1tYXAubyBtbXVfZ2F0aGVyLm8gbXByb3RlY3QubyBtcmVtYXAubyBcXFxuICAzOTpcdFx0XHRcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxuICA0MDpcdFx0XHRcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xuICA0MTpcdFxuICA0MjpcdFxuICA0MzpcdGlmZGVmIENPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIXG4gIDQ0Olx0bW11LSQoQ09ORklHX01NVSlcdCYjNDM7PSBwcm9jZXNzX3ZtX2FjY2Vzcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA4OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLYnVpbGQgYW5kIERldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbml0aWFsbHksIEkgd2FzIGEgYml0IHB1enpsZWQgYnkgdGhpcyBLYnVpbGQgbG9naWMuIElmIGBDT05GSUdfTU1VPXlgLCB0aGVuIGBtbXUteWAgaXMgc2V0IHRvIGBub21tdS5vYCwgd2hpY2ggc2VlbXMgY291bnRlcmludHVpdGl2ZS4gQnV0IHdhaXQsIGl0IHVzZXMgYDo9YCwgc28gaXQmIzM5O3MgYW4gYXNzaWdubWVudC4gVGhlbiwgdGhlIG5leHQgbGluZSBvdmVyd3JpdGVzIGl0IHdpdGggYGhpZ2htZW0uby4uLmAgd2hlbiBgQ09ORklHX01NVT15YC4gU28gZWZmZWN0aXZlbHksIGlmIGBDT05GSUdfTU1VYCAqaXMqIHNldCwgYG1tdS15YCBiZWNvbWVzIGBoaWdobWVtLm8gLi4uYC4gSWYgYENPTkZJR19NTVVgIGlzICpub3QqIHNldCwgdGhlbiBgbW11LXlgIHJlbWFpbnMgYG5vbW11Lm9gLiBUaGF0JiMzOTtzIGEgY2xldmVyIHRyaWNrLCBhY3R1YWxseS4KCk15IHRob3VnaHQgaXMsIHRoZXJlZm9yZSwgaWYgSSBhbSBjb3JyZWN0LCB0aGVuIGBub21tdS5jYCBpcyAqb25seSogY29tcGlsZWQgd2hlbiBgIUNPTkZJR19NTVVgLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBkaXNjYXJkIHBhdGNoZXMgdGhhdCBvbmx5IHRvdWNoIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuIEhvd2V2ZXIsIFFFTVUgKmRvZXMqIHN1cHBvcnQgYG5vbW11YCB0YXJnZXRzIChtNjhrLCByaXNjdiwgYXJtKSwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuIEFuZCBTeXprYWxsZXIgcnVucyBvbiBRRU1VLCBzbyBpdCBzaG91bGQgYmUgZmVhc2libGUgdG8gZnV6eiBpdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBTeXprYWxsZXIgYWxyZWFkeSB0ZXN0cyBgbm9tbXVgLCBhbmQgeWVzLCBpdCBkb2VzLCB1c2luZyBgc3l6LWV4ZWN1dG9yYCBmb3IgYG5vbW11YC4gVGhhdCBtZWFucyB3ZSBhcmUgZ29vZCBvbiB0aGUgJiMzNDtyZWFjaGFiaWxpdHkmIzM0OyBmcm9udC4KClNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYG1tL25vbW11LmNgLCBzcGVjaWZpY2FsbHkgYGRvX21yZW1hcGAsIGFuZCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIChhbGxvd2luZyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnRpbmcgZmlsZS1iYWNrZWQgVk1BcyksIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGxvZ2ljIGluIHRoZSBwYXRjaCwgd2hpY2ggYWRkcyB0aGlzOgpgYGBjCgkvKiBsaWtlIGRvX211bm1hcCgpLCB3ZSYjMzk7cmUgYWxsb3dlZCB0byBzaHJpbmsgYW4gYW5vbnltb3VzIFZNQSBidXQgbm90IGEgZmlsZS1iYWNrZWQgb25lICovCglpZiAodm1hLSZndDt2bV9maWxlKQoJCXJldHVybiAodW5zaWduZWQgbG9uZykgLUVJTlZBTDsKCgkvKiBhbGwgY2hlY2tzIGNvbXBsZXRlIC0gZG8gaXQgKi8KCWlmIChuZXdfbGVuICZsdDsgb2xkX2xlbikgewoJCS8qIHNocmluayBvbmx5IGhhcHBlbnMgYWRkciAmIzQzOyBuZXdfbGVuIGFuZCBvbGRfbGVuIGFyZSBpbiBkaWZmZXJlbnQgcGFnZXMgKi8KCQlWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LSZndDttbSwgYWRkcik7CgkJaW50IHJldDsKCgkJLyogdm1pX3Nocmlua192bWEoKSBuZWVkcyBmcm9tL3RvIHBvaW50ZXJzIHRvIGJlIHJlbW92ZWQsCgkJICogKG1haW5seSB1c2VkIGluIG11bm1hcCkgc28sIHNwZWNpZnkgdGhlbS4KCQkgKi8KCQlyZXQgPSB2bWlfc2hyaW5rX3ZtYSgmYW1wO3ZtaSwgdm1hLCBhZGRyICYjNDM7IG5ld19sZW4sIGFkZHIgJiM0Mzsgb2xkX2xlbik7CgkJaWYgKHJldCAmbHQ7IDApCgkJCXJldHVybiAodW5zaWduZWQgbG9uZykgcmV0OwoJfSBlbHNlIHsKCQkvKiB3aGVuIHRoZXJlIGFyZSBubyBzaHJpbmssIHVwZGF0ZSB2bWEuICAqLwoJCXZtYS0mZ3Q7dm1fZW5kID0gdm1hLSZndDt2bV9zdGFydCAmIzQzOyBuZXdfbGVuOwoJfQpgYGAKCk5vdywgdGhlIGNvbmZpZyEgV2hhdCBjb25maWcocykgZG8gSSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlPyBUaGlzIHJlcXVpcmVzIGAhQ09ORklHX01NVWAsIGhvd2V2ZXIgSSBjYW4mIzM5O3Qgc3BlY2lmeSBhIG5lZ2F0aXZlIGNvbmZpZyBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IGl0JiMzOTtzIHRvIGV4cGxpY2l0bHkgZW5hYmxlLCBzbyBJIG1pZ2h0IGp1c3QgbGVhdmUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5LiBJcyB0aGVyZSBhIGBDT05GSUdfTk9NTVVgPyBQcm9iYWJseSBub3QuIFRoZSBhYnNlbmNlIG9mIGBDT05GSUdfTU1VYCBpcyBsaWtlbHkgdGhlIGtleS4gSSB3aWxsIGNvbmZpcm0gaWYgdGhlcmUgaXMgYSBgQ09ORklHX05PTU1VYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5PTU1VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz00PWNvbmZpZyBNTVVcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTgtXG5hcmNoL3NoL21tL0tjb25maWc6MTk6Y29uZmlnIE5PTU1VXG5hcmNoL3NoL21tL0tjb25maWctMjAtXHRkZWZfYm9vbCAhTU1VXG4tLVxubW0vS2NvbmZpZz03ODA9Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxuLS1cbm1tL0tjb25maWctNzg0LVxubW0vS2NvbmZpZzo3ODU6Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1Ncbm1tL0tjb25maWctNzg2LVx0aW50IFwmIzM0O1R1cm4gb24gbW1hcCgpIGV4Y2VzcyBzcGFjZSB0cmltbWluZyBiZWZvcmUgYm9vdGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDU3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTk9NTVUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhlIGBOT01NVWAgY29uZmlndXJhdGlvbiB3b3JrcyB3aXRoaW4gdGhpcyBwcm9qZWN0LiBSaWdodCwgSSBzZWUgdGhhdCBgY29uZmlnIE5PTU1VYCBpcyBkZWZpbmVkIGluIGBhcmNoL3NoL21tL0tjb25maWdgLCBidXQgaXQmIzM5O3MgcmVhbGx5IGp1c3QgYSBgZGVmX2Jvb2wgIU1NVWAuIFNvLCBiYXNpY2FsbHksIGBOT01NVWAgaXMgaW1wbGljaXRseSBzZXQgd2hlbiB3ZSBkb24mIzM5O3QgaGF2ZSBhbiBNTVUuIEludGVyZXN0aW5nLgoKSSB3YXMgZXhwZWN0aW5nIGEgbW9yZSBkaXJlY3QgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBnZW5lcmFsIGBDT05GSUdfTU1VYCBkZWZpbml0aW9uIHRob3VnaD8gWWVzLCB0aGVyZSBpcy4gQWxyaWdodC4KClNvLCBzaW5jZSB0aGVyZSBpc24mIzM5O3QgYSBzaW5nbGUgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gKmVuYWJsZSogdGhlIHJlbGV2YW50IGNvZGUgZm9yIHRoZSBOT01NVSwgd2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBgQ09ORklHX01NVWAsIEkmIzM5O2xsIGxlYXZlIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBlbXB0eS4gVGhlcmUmIzM5O3Mgbm8gc2luZ2xlIGNvbmZpZyB0byBleHBsaWNpdGx5ICYjMzQ7ZW5hYmxlJiMzNDsgdGhpcyBiZWhhdmlvci4gSXQmIzM5O3MgbW9yZSBhYm91dCBleGNsdXNpb24uCgpOb3csIHdhaXQgYSBzZWNvbmQsIHRoZXJlIG1pZ2h0IGJlIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIG1ha2Ugc3VyZS4gVGhlIGZ1bmN0aW9uIHRoYXQgSSYjMzk7bSBjdXJyZW50bHkgbG9va2luZyBhdCBpcyBgZG9fbXJlbWFwYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgZnVuY3Rpb24uCgpPa2F5LCBsZXQmIzM5O3MgZ28gY2hlY2sgdGhlIGRlZmluaXRpb24gZm9yIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX21yZW1hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL25vbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbm9tbXUuYz0xNTM1PXZvaWQgZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL25vbW11LmMtMTU2OC0gKi9cbm1tL25vbW11LmM6MTU2OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb19tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbm9tbXUuYy0xNTcwLVx0XHRcdHVuc2lnbmVkIGxvbmcgb2xkX2xlbiwgdW5zaWduZWQgbG9uZyBuZXdfbGVuLFxuLS1cbm1tL25vbW11LmM9MTYyMz1TWVNDQUxMX0RFRklORTUobXJlbWFwLCB1bnNpZ25lZCBsb25nLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBvbGRfbGVuLFxuLS1cbm1tL25vbW11LmMtMTYyOS1cdG1tYXBfd3JpdGVfbG9jayhjdXJyZW50LVx1MDAzZW1tKTtcbm1tL25vbW11LmM6MTYzMDpcdHJldCA9IGRvX21yZW1hcChhZGRyLCBvbGRfbGVuLCBuZXdfbGVuLCBmbGFncywgbmV3X2FkZHIpO1xubW0vbm9tbXUuYy0xNjMxLVx0bW1hcF93cml0ZV91bmxvY2soY3VycmVudC1cdTAwM2VtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NDAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbXJlbWFwYCBTeXN0ZW0gQ2FsbCBpbiBhIE5vLU1NVSBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgbXJlbWFwYCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgTm8tTU1VIGVudmlyb25tZW50LiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUgaXMgYGRvX21yZW1hcGAsIHdoaWNoIGlzIGRpcmVjdGx5IGNhbGxlZCBieSBgc3lzX21yZW1hcGAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIGVpdGhlciBgZG9fbXJlbWFwYCBvciBgc3lzX21yZW1hcGAgYXMgdGhlIGZvY3VzIHN5bWJvbCBmb3IgbXkgYW5hbHlzaXMuIEdpdmVuIHRoYXQgYGRvX21yZW1hcGAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGl0IHNlZW1zIGxpa2UgYSBwYXJ0aWN1bGFybHkgZ29vZCBjaG9pY2UuIEFsdGhvdWdoIGl0JiMzOTtzIGludGVybmFsLCBTeXprYWxsZXIgY2FuIHN0aWxsIGludGVyYWN0IHdpdGggaXQgaWYgd2UgcHJvdmlkZSBpdCB0aGUgc3ltYm9sLCBldmVuIGlmIGl0JiMzOTtzIHN0YXRpYyEgQW5kIG9mIGNvdXJzZSwgdGhlIGBzeXNfbXJlbWFwYCBzeXN0ZW0gY2FsbCBpcyBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIHRvbywgZXNwZWNpYWxseSBpZiBpdCBwb2ludHMgdG8gYSBwbGF0Zm9ybSBzcGVjaWZpYyB2ZXJzaW9uIGxpa2UgYF9faWEzMl9zeXNfbXJlbWFwYCAvIGBfX3g2NF9zeXNfbXJlbWFwYCAodGhvdWdoIGluIHRoaXMgY29udGV4dCwgdGhhdCB3b3VsZCBsaWtlbHkganVzdCBiZSBgc3lzX21yZW1hcGApLiBVbHRpbWF0ZWx5LCBJJiMzOTtsbCBnbyB3aXRoIGBkb19tcmVtYXBgIGZvciBub3cuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgcGVydGluZW50LiBTcGVjaWZpY2FsbHksIGlzIGB2bWlfc2hyaW5rX3ZtYWAgYXZhaWxhYmxlIGluIHRoZSBOby1NTVUgY29uZmlndXJhdGlvbj8gQmFzZWQgb24gd2hhdCBJJiMzOTttIHNlZWluZywgaXQgYXBwZWFycyBpbiBgbW0vdm1hLmNgIG9yIHBlcmhhcHMgYG1tL21tYXAuY2Agd2hpY2ggbWlnaHQgYmUgY29tcGlsZWQgZm9yIE5vLU1NVSBzZXR1cHMuIEFjdHVhbGx5LCBJIHdhcyByaWdodCB0aGUgZmlyc3QgdGltZSwgYHZtYS5jYCBpcyBjb25kaXRpb25hbGl6ZWQgYnkgdGhlIGBDT05GSUdfTU1VYCBLY29uZmlnIG9wdGlvbi4gTGV0IG1lIGp1c3QgcXVpY2tseSBnbyBiYWNrIHRvIGBtbS9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIEkgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTM3PW1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4tLVxubW0vTWFrZWZpbGUtMzktXHRcdFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXG5tbS9NYWtlZmlsZTo0MDpcdFx0XHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cbm1tL01ha2VmaWxlLTQxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTIxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkRpZ2dpbmcgaW50byB0aGF0IGB2bWEub2AgRGVwZW5kZW5jeSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3QgcmVhbGl6ZWQgc29tZXRoaW5nIGFib3V0IHRoYXQgYHZtYS5vYCBmaWxlLiBJdCYjMzk7cyBuZXN0bGVkIGluIGBtbXUtJChDT05GSUdfTU1VKWAsIG1lYW5pbmcgaXQmIzM5O3Mgb25seSBnZXR0aW5nIGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzIHNldCB0byAmIzM5O3kmIzM5Oy4gVGhhdCYjMzk7cyBhIGNydWNpYWwgZGV0YWlsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IHJlc3RyaWN0aW9uIGluIG1pbmQuIFRoZSBwcm9ibGVtIGlzLCB0aGlzIHBhdGNoIGlzIHJlZmVyZW5jaW5nIGB2bWlfc2hyaW5rX3ZtYWAsIHdoaWNoIGlzIGEgZnVuY3Rpb24gd2l0aGluIGBtbS9ub21tdS5jYCwgYW5kIHRoYXQgc2VlbXMgaW5jb21wYXRpYmxlIGdpdmVuIHRoZSBjb250ZXh0IGFib3ZlLgoKTm93IEkmIzM5O20gcmVhbGx5IGdldHRpbmcgY29uZnVzZWQuIFdoZXJlIGlzIGB2bWlfc2hyaW5rX3ZtYWAgZXZlbiBkZWZpbmVkPyBBbmQgaG93IGNvdWxkIGl0IHBvc3NpYmx5IGJlIHVzZWQgaWYgdGhlIG1vZHVsZSBpcyByZXN0cmljdGVkIGJ5IGEgZmVhdHVyZSB0aGF0IGlzIGluIHRoZSBvcHBvc2l0ZSBjb250ZXh0PyBJIG5lZWQgdG8gZmluZCBpdHMgb3JpZ2luIGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGNvbm5lY3Rpb24uIFRoZXJlJiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIG5vdCBhZGRpbmcgdXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1pX3Nocmlua192bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbm9tbXUuYz0xMzI5PXN0YXRpYyBpbnQgc3BsaXRfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbm9tbXUuYy0xNDEwLSAqL1xubW0vbm9tbXUuYzoxNDExOnN0YXRpYyBpbnQgdm1pX3Nocmlua192bWEoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxubW0vbm9tbXUuYy0xNDEyLVx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ub21tdS5jPTE0NTM9aW50IGRvX211bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwgc3RydWN0IGxpc3RfaGVhZCAqdWYpXG4tLVxubW0vbm9tbXUuYy0xNTAzLVx0XHR9XG5tbS9ub21tdS5jOjE1MDQ6XHRcdHJldHVybiB2bWlfc2hyaW5rX3ZtYShcdTAwMjZ2bWksIHZtYSwgc3RhcnQsIGVuZCk7XG5tbS9ub21tdS5jLTE1MDUtXHR9XG4tLVxubW0vbm9tbXUuYz0xNTY5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX21yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbm9tbXUuYy0xNjA5LVxubW0vbm9tbXUuYzoxNjEwOlx0XHQvKiB2bWlfc2hyaW5rX3ZtYSgpIG5lZWRzIGZyb20vdG8gcG9pbnRlcnMgdG8gYmUgcmVtb3ZlZCxcbm1tL25vbW11LmMtMTYxMS1cdFx0ICogKG1haW5seSB1c2VkIGluIG11bm1hcCkgc28sIHNwZWNpZnkgdGhlbS5cbm1tL25vbW11LmMtMTYxMi1cdFx0ICovXG5tbS9ub21tdS5jOjE2MTM6XHRcdHJldCA9IHZtaV9zaHJpbmtfdm1hKFx1MDAyNnZtaSwgdm1hLCBhZGRyICYjNDM7IG5ld19sZW4sIGFkZHIgJiM0Mzsgb2xkX2xlbik7XG5tbS9ub21tdS5jLTE2MTQtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgdm1pX3Nocmlua192bWFgKioKClJpZ2h0LCBzbyBJIHNlZSB0aGF0IGB2bWlfc2hyaW5rX3ZtYWAgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSBmdW5jdGlvbjsgaXQmIzM5O3MgYWN0dWFsbHkgZGVmaW5lZCByaWdodCB0aGVyZSBpbiBgbW0vbm9tbXUuY2AuIEV4Y2VsbGVudC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBpbW1lbnNlbHkuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nLiBUaW1lIHRvIGNoZWNrIG91dCB0aGUgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBqdW1wIHRvIGxpbmUgMTQxMSBpbiBgbW0vbm9tbXUuY2AgYW5kIGRpZyBpbnRvIGl0LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYywgb3IgdGhlIHRyb3VibGUsIGxpa2VseSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL25vbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MTA6XHQgKi9cbjE0MTE6XHRzdGF0aWMgaW50IHZtaV9zaHJpbmtfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbjE0MTI6XHRcdFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4xNDEzOlx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bylcbjE0MTQ6XHR7XG4xNDE1Olx0XHRzdHJ1Y3Qgdm1fcmVnaW9uICpyZWdpb247XG4xNDE2Olx0XG4xNDE3Olx0XHQvKiBhZGp1c3QgdGhlIFZNQSYjMzk7cyBwb2ludGVycywgd2hpY2ggbWF5IHJlcG9zaXRpb24gaXQgaW4gdGhlIE1NJiMzOTtzIHRyZWVcbjE0MTg6XHRcdCAqIGFuZCBsaXN0ICovXG4xNDE5Olx0XHRpZiAoZnJvbSBcdTAwM2Ugdm1hLVx1MDAzZXZtX3N0YXJ0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjMwCgkJCQkJCQlvdXRwdXQ6IDk2CgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBgbXJlbWFwYCBQYXRjaCBmb3IgTm9NTVUgQXJjaGl0ZWN0dXJlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5uZWQgZG93biB0aGUgbG9jYXRpb24gb2YgYHZtaV9zaHJpbmtfdm1hYCDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBpbiBgbm9tbXUuY2AsIGFzIGV4cGVjdGVkLiBOb3csIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFsdGVycyBgZG9fbXJlbWFwYCB3aXRoaW4gYG1tL25vbW11LmNgLiBHaXZlbiB0aGF0IGBtcmVtYXBgIGlzIGEgc3lzY2FsbCBhbmQgaXMgYWNjZXNzaWJsZSBvbiBOb01NVSBhcmNoaXRlY3R1cmVzLCBJJiMzOTtkIHNheSB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZXJlZm9yZSwgaXMgaXQgZnV6ei13b3J0aHk/IEFic29sdXRlbHksIHllcy4KCk15IHByaW1hcnkgZm9jdXMgc3ltYm9sIG5lZWRzIHRvIGJlIGBkb19tcmVtYXBgIGl0c2VsZiwgdGhvdWdoIEkgY291bGQgYWxzbyBjb25zaWRlciBgc3lzX21yZW1hcGAsIHdoaWNoIGlzIGltcGxlbWVudGVkIHZpYSBgU1lTQ0FMTF9ERUZJTkU1KG1yZW1hcCwgLi4uKWAgaW4gdGhlIHN5c2NhbGwgdGFibGUuIEhvd2V2ZXIsIHNpbmNlIGBkb19tcmVtYXBgIGlzIHRoZSBhY3R1YWwgZnVuY3Rpb24gYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQsIGl0JiMzOTtzIHRoZSBtb3JlIHByZWNpc2UgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFNpbmNlIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgTm9NTVUgY2FzZSwgdGhhdCBtZWFucyBgQ09ORklHX01NVWAgaXMgKm5vdCogZW5hYmxlZC4gVGhlcmUgaXNuJiMzOTt0IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gKmVuYWJsZSogdGhpcyBwYXRjaDsgaXQmIzM5O3MgYSBjb25zZXF1ZW5jZSBvZiB0aGUgYWJzZW5jZSBvZiBgQ09ORklHX01NVWAuIFRodXMsIGBFbmFibGVDb25maWdzYCByZW1haW5zIGVtcHR5LiBJIGNoZWNrZWQgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMsIGJ1dCB0aGVyZSBhcmVuJiMzOTt0LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBjb25maXJtIHRoYXQgYGRvX21yZW1hcGAgaXMgaW5kZWVkIHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuIFllcywgaXQmIzM5O3MgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIGFsdGVyZWQgYnkgdGhlIHBhdGNoLgoKSGVyZSYjMzk7cyBteSBkaXN0aWxsZWQgcmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX21yZW1hcGAgaW4gYG1tL25vbW11LmNgIHRvIGhhbmRsZSB0aGUgc2hyaW5raW5nIG9mIGFub255bW91cyBWTUFzIGFuZCB0byBwcmV2ZW50IHNocmlua2luZyBmaWxlLWJhY2tlZCBWTUFzLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2Ygc3lzdGVtcyB3aXRob3V0IGFuIE1NVS4gSXQmIzM5O3MgcmVhY2hlZCBieSB3YXkgb2YgdGhlIGBtcmVtYXBgIHN5c2NhbGwuCgpUaGVyZWZvcmU6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtkb19tcmVtYXAmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKEJlY2F1c2UgaXQgcmVxdWlyZXMgYCFDT05GSUdfTU1VYCkKCk9uZSBsYXN0IHF1aWNrIGNoZWNrOiBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IG9ubHkgYGRvX21yZW1hcGAgaGFzIGJlZW4gY2hhbmdlZC4KCk5vdywgSSYjMzk7bSBjb25maWRlbnQgZW5vdWdoIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX21yZW1hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZG9fbXJlbWFwYCBpbiBgbW0vbm9tbXUuY2AgdG8gYWxsb3cgc2hyaW5raW5nIGFub255bW91cyBWTUFzIGFuZCBwcmV2ZW50IHNocmlua2luZyBmaWxlLWJhY2tlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgZm9yIG5vbW11IGFyY2hpdGVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBtcmVtYXBgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fbXJlbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBhbGxvdyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnQgc2hyaW5raW5nIGZpbGUtYmFja2VkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBmb3Igbm9tbXUgYXJjaGl0ZWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYG1yZW1hcGAgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIwOjI1LjY3OTEyOTAwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMDA5OTg0NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX21yZW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBhbGxvdyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnQgc2hyaW5raW5nIGZpbGUtYmFja2VkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBmb3Igbm9tbXUgYXJjaGl0ZWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYG1yZW1hcGAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6MjUuNjc5MTM0MjU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ5ODk3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjNDkxY2NmZTVjZTRjYWEzZDExNzlhMzY3NTdkYTI1MDA4M2Y2MTAyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDAzOjIwOjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jXFxuaW5kZXggODUyZWM5YmQwNTA1OTIuLmM4ZWZmYmZmYTBmMDFjIDEwMDY0NFxcbi0tLSBhL21tL25vbW11LmNcXG4rKysgYi9tbS9ub21tdS5jXFxuQEAgLTE1OTcsOCArMTU5NywyNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkb19tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRpZiAobmV3X2xlbiBcXHUwMDNlIHZtYS1cXHUwMDNldm1fcmVnaW9uLVxcdTAwM2V2bV9lbmQgLSB2bWEtXFx1MDAzZXZtX3JlZ2lvbi1cXHUwMDNldm1fc3RhcnQpXFxuIFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZykgLUVOT01FTTtcXG4gXFxuK1xcdC8qIGxpa2UgZG9fbXVubWFwKCksIHdlJ3JlIGFsbG93ZWQgdG8gc2hyaW5rIGFuIGFub255bW91cyBWTUEgYnV0IG5vdCBhIGZpbGUtYmFja2VkIG9uZSAqL1xcbitcXHRpZiAodm1hLVxcdTAwM2V2bV9maWxlKVxcbitcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC1FSU5WQUw7XFxuK1xcbiBcXHQvKiBhbGwgY2hlY2tzIGNvbXBsZXRlIC0gZG8gaXQgKi9cXG4tXFx0dm1hLVxcdTAwM2V2bV9lbmQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0ICsgbmV3X2xlbjtcXG4rXFx0aWYgKG5ld19sZW4gXFx1MDAzYyBvbGRfbGVuKSB7XFxuK1xcdFxcdC8qIHNocmluayBvbmx5IGhhcHBlbnMgYWRkciArIG5ld19sZW4gYW5kIG9sZF9sZW4gYXJlIGluIGRpZmZlcmVudCBwYWdlcyAqL1xcbitcXHRcXHRWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LVxcdTAwM2VtbSwgYWRkcik7XFxuK1xcdFxcdGludCByZXQ7XFxuK1xcbitcXHRcXHQvKiB2bWlfc2hyaW5rX3ZtYSgpIG5lZWRzIGZyb20vdG8gcG9pbnRlcnMgdG8gYmUgcmVtb3ZlZCxcXG4rXFx0XFx0ICogKG1haW5seSB1c2VkIGluIG11bm1hcCkgc28sIHNwZWNpZnkgdGhlbS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IHZtaV9zaHJpbmtfdm1hKFxcdTAwMjZ2bWksIHZtYSwgYWRkciArIG5ld19sZW4sIGFkZHIgKyBvbGRfbGVuKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZykgcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiB3aGVuIHRoZXJlIGFyZSBubyBzaHJpbmssIHVwZGF0ZSB2bWEuICAqL1xcbitcXHRcXHR2bWEtXFx1MDAzZXZtX2VuZCA9IHZtYS1cXHUwMDNldm1fc3RhcnQgKyBuZXdfbGVuO1xcbitcXHR9XFxuIFxcdHJldHVybiB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMDoyNi4wNzQ5MjI1ODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjE0MTg1NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX21yZW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBhbGxvdyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnQgc2hyaW5raW5nIGZpbGUtYmFja2VkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBmb3Igbm9tbXUgYXJjaGl0ZWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYG1yZW1hcGAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNDkxY2NmZTVjZTRjYWEzZDExNzlhMzY3NTdkYTI1MDA4M2Y2MTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDM6MjA6MjQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuY1xuaW5kZXggODUyZWM5YmQwNTA1OTIuLmM4ZWZmYmZmYTBmMDFjIDEwMDY0NFxuLS0tIGEvbW0vbm9tbXUuY1xuKysrIGIvbW0vbm9tbXUuY1xuQEAgLTE1OTcsOCArMTU5NywyNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkb19tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aWYgKG5ld19sZW4gXHUwMDNlIHZtYS1cdTAwM2V2bV9yZWdpb24tXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3JlZ2lvbi1cdTAwM2V2bV9zdGFydClcbiBcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKSAtRU5PTUVNO1xuIFxuK1x0LyogbGlrZSBkb19tdW5tYXAoKSwgd2UncmUgYWxsb3dlZCB0byBzaHJpbmsgYW4gYW5vbnltb3VzIFZNQSBidXQgbm90IGEgZmlsZS1iYWNrZWQgb25lICovXG4rXHRpZiAodm1hLVx1MDAzZXZtX2ZpbGUpXG4rXHRcdHJldHVybiAodW5zaWduZWQgbG9uZykgLUVJTlZBTDtcbitcbiBcdC8qIGFsbCBjaGVja3MgY29tcGxldGUgLSBkbyBpdCAqL1xuLVx0dm1hLVx1MDAzZXZtX2VuZCA9IHZtYS1cdTAwM2V2bV9zdGFydCArIG5ld19sZW47XG4rXHRpZiAobmV3X2xlbiBcdTAwM2Mgb2xkX2xlbikge1xuK1x0XHQvKiBzaHJpbmsgb25seSBoYXBwZW5zIGFkZHIgKyBuZXdfbGVuIGFuZCBvbGRfbGVuIGFyZSBpbiBkaWZmZXJlbnQgcGFnZXMgKi9cbitcdFx0Vk1BX0lURVJBVE9SKHZtaSwgY3VycmVudC1cdTAwM2VtbSwgYWRkcik7XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdC8qIHZtaV9zaHJpbmtfdm1hKCkgbmVlZHMgZnJvbS90byBwb2ludGVycyB0byBiZSByZW1vdmVkLFxuK1x0XHQgKiAobWFpbmx5IHVzZWQgaW4gbXVubWFwKSBzbywgc3BlY2lmeSB0aGVtLlxuK1x0XHQgKi9cbitcdFx0cmV0ID0gdm1pX3Nocmlua192bWEoXHUwMDI2dm1pLCB2bWEsIGFkZHIgKyBuZXdfbGVuLCBhZGRyICsgb2xkX2xlbik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKSByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiB3aGVuIHRoZXJlIGFyZSBubyBzaHJpbmssIHVwZGF0ZSB2bWEuICAqL1xuK1x0XHR2bWEtXHUwMDNldm1fZW5kID0gdm1hLVx1MDAzZXZtX3N0YXJ0ICsgbmV3X2xlbjtcbitcdH1cbiBcdHJldHVybiB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6MjYuMDc0OTI0MjEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwNDI0Mjc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQYXRjaCBpbiBgbW0vbm9tbXUuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBkb19tcmVtYXBgIHdpdGhpbiBgbW0vbm9tbXUuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYHZtaV9zaHJpbmtfdm1hYCB0byBzaHJpbmsgYW5vbnltb3VzIFZNQXMgd2hpbGUgZXhwbGljaXRseSBhdm9pZGluZyBhbnkgc2hyaW5rYWdlIG9uIGZpbGUtYmFja2VkIG9uZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBgbW0vbm9tbXUuY2AuLi4gdGhhdCdzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgKm5vdCogc2V0LlwiIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCB0aGlzIGFwcGxpZXMgdG8gYXJjaGl0ZWN0dXJlcyAqd2l0aG91dCogYSBNZW1vcnkgTWFuYWdlbWVudCBVbml0LlxuXG5NeSBuZXh0IG1lbnRhbCBzdGVwIGlzIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG91ciBmdXp6aW5nIGVmZm9ydHMuIFN5emthbGxlciBnZW5lcmFsbHkgdGFyZ2V0cyBzeXN0ZW1zIHdpdGggYW4gTU1VLCBsaWtlIHg4Nl82NCBvciBhcm02NC4gSSBrbm93IGl0ICpjYW4qIGJlIGNvbmZpZ3VyZWQgdG8gdGVzdCBub21tdSBhcmNoaXRlY3R1cmVzLCB0aG91Z2ggaXQncyBsZXNzIGZyZXF1ZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgbm90IGEgZmFsc2UgcG9zaXRpdmUgZm9yIHRoZSBmdXp6aW5nLlxuXG5Ob3csIHdhaXQgYSBzZWNvbmQuIFRoZSBpbnN0cnVjdGlvbnMgSSBoYXZlIHNheSBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIFNwZWNpZmljYWxseSwgaWYgdGhlIHBhdGNoIGFmZmVjdHMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhhdCdzIHRoZSBjcnV4ISBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyBgbm9tbXVgIGFjY2Vzc2libGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVT8gQW5kIHRoZSBhbnN3ZXIgaXMgeWVzLiBRRU1VICpkb2VzKiBzdXBwb3J0IG5vbW11IGFyY2hpdGVjdHVyZXMuIEkga25vdyB0aGF0IFFFTVUgc3VwcG9ydHMgbTY4aywgUklTQy1WIG5vbW11LCBhbmQgQVJNIG5vbW11LCB3aGljaCBtZWFucyB3ZSBjYW4gdGVzdCB0aGVzZSB0aGluZ3MgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuT2theSwgc28gU3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzb21lIG5vbW11IHRhcmdldHMuIEJ1dCBpdCBkb2VzIHJlcXVpcmUgYCFDT05GSUdfTU1VYC4gVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBtbS9ub21tdS5jYCBpdHNlbGYgYW5kIGl0cyBgS2NvbmZpZ2AgZmlsZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMDozMS44NzkxNzA2OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0NjkwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9tbXUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0zND1DRkxBR1NfaW5pdC1tbS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxcbm1tL01ha2VmaWxlLTM1LVxcbm1tL01ha2VmaWxlOjM2Om1tdS15XFx0XFx0XFx0Oj0gbm9tbXUub1xcbm1tL01ha2VmaWxlLTM3LW1tdS0kKENPTkZJR19NTVUpXFx0Oj0gaGlnaG1lbS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIwOjMxLjkzMzY0NDI4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTAzMzY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYG1tdS15IDo9IG5vbW11Lm9gIEFzc2lnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFzc2lnbm1lbnQ6IGBtbXUteSA6PSBub21tdS5vYCBhbmQgbXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCBcIldhaXQsIHRoYXQgZG9lc24ndCBmZWVsIHJpZ2h0LlwiIE15IGV4cGVydGlzZSBpcyB0ZWxsaW5nIG1lIHRoYXQgYG1tdS15YCB0eXBpY2FsbHkgaW1wbGllcyB0aGUgKnByZXNlbmNlKiBvZiBhbiBNTVUgKE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQpLCBub3QgaXRzICphYnNlbmNlKi4gVGhlIGFzc2lnbm1lbnQgc2VlbXMgYmFja3dhcmQuIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGlzc3VlIG9yIGEgY29uZGl0aW9uYWwgYnVpbGQgc2l0dWF0aW9uLiBUaGUgY29yZSBvZiBteSBjb25mdXNpb24gaXMgdGhhdCAneScgaW4gdGhlIE1ha2VmaWxlIHdvcmxkIGdlbmVyYWxseSBtZWFucyAnaW5jbHVkZSB0aGlzIGZpbGUnIHdoaWNoLCBpZiB0aGlzIGlzIHRydWx5IHRoZSBjYXNlLCBzdWdnZXN0cyB0aGF0IGlmIGFuIE1NVSBpcyAqbm90KiBwcmVzZW50LCB3ZSBhcmUgc3RpbGwgKmluY2x1ZGluZyogYG5vbW11Lm9gIC0tIGRvZXNuJ3QgdGhhdCBpbXBseSB3ZSBzaG91bGQgYmUgbmFtaW5nIGl0IGBub21tdS15YCBhbmQgdGhlbiBpdCAqcmVwbGFjZXMqIGBtbXUub2A/XG5cblRoZSBuZXh0IHN0ZXAgaXMgb2J2aW91czogSSBuZWVkIHRvIHZlcmlmeSBob3cgYG1tdS15YCBpcyBhY3R1YWxseSB1c2VkLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLCBJJ2xsIGp1bXAgcmlnaHQgaW50byB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBsb29rIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYXNzaWdubWVudCBpcyBpbnRlcnByZXRlZCB3aXRoaW4gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgaXQgaXMgZW1wbG95ZWQuIFRoYXQgTWFrZWZpbGUgaXMgbXkga2V5IHRvIHVubG9ja2luZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMDozNS40ODM5ODMyMjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRLQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbiAgMzE6XFx0S0NPVl9JTlNUUlVNRU5UX3Ztc3RhdC5vIDo9IG5cXG4gIDMyOlxcdEtDT1ZfSU5TVFJVTUVOVF9mYWlsc2xhYi5vIDo9IG5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Q0ZMQUdTX2luaXQtbW0ubyArPSAtV25vLW92ZXJyaWRlLWluaXRcXG4gIDM1OlxcdFxcbiAgMzY6XFx0bW11LXlcXHRcXHRcXHQ6PSBub21tdS5vXFxuICAzNzpcXHRtbXUtJChDT05GSUdfTU1VKVxcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcXFxcbiAgMzg6XFx0XFx0XFx0XFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcXFxcbiAgMzk6XFx0XFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG4gIDQwOlxcdFxcdFxcdFxcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xcbiAgNDE6XFx0XFxuICA0MjpcXHRcXG4gIDQzOlxcdGlmZGVmIENPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIXFxuICA0NDpcXHRtbXUtJChDT05GSUdfTU1VKVxcdCs9IHByb2Nlc3Nfdm1fYWNjZXNzLm9cXG4gIDQ1OlxcdGVuZGlmXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGlmZGVmIENPTkZJR182NEJJVFxcbiAgNDg6XFx0bW11LSQoQ09ORklHX01NVSlcXHQrPSBtc2VhbC5vXFxuICA0OTpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMDozNS40ODQwNDM5MTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMxNzA3MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKk1ha2VmaWxlIExvZ2ljIGZvciBNTVUgSW5jbHVzaW9uKipcblxuT2theSwgc28gdGhlIGBtbXUteSA6PSBub21tdS5vYCBhbmQgYG1tdS0kKENPTkZJR19NTVUpIDo9IC4uLmAgbGluZXMgYXJlIGhvdyB0aGlzIHByb2plY3QgaGFuZGxlcyBpbmNsdWRpbmcgTU1VLXNwZWNpZmljIG9iamVjdCBmaWxlcy4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY29yZSBzdHJhdGVneS4gIEVzc2VudGlhbGx5LCB0aGUgdmFsdWUgb2YgdGhlIGBtbXUteWAgdmFyaWFibGUgY2hhbmdlcyBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIGBDT05GSUdfTU1VYCB2YXJpYWJsZS4gIFRoZW4sIGxpa2VseSwgdGhlcmUncyBhIHN1YnNlcXVlbnQgbGluZSwgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYG9iai15ICs9ICQobW11LXkpYC4gVGhhdCdzIHdoZXJlIHRoZSBkZWNpc2lvbiBnZXRzIGJha2VkIGludG8gdGhlIGZpbmFsIGJ1aWxkLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBhcHByb2FjaCB3aXRoaW4gTWFrZWZpbGVzLCB1c2luZyB2YXJpYWJsZSBleHBhbnNpb24gdG8gZHJpdmUgdGhlIGluY2x1c2lvbi4gTGV0J3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBpcyByaWdodDsgSSdsbCBzY2FuIHRocm91Z2ggdGhlIGNvZGUgYW5kIGNvbmZpcm0gdGhpcyBleHBlY3RlZCBwYXR0ZXJuLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgbW11LXlgIGlzIGFjdHVhbGx5IHVzZWQgYW5kIGlmIGBDT05GSUdfTU1VYCBpcyBwcm9wZXJseSBldmFsdWF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIwOjM4LjYxNTc1MzM1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXG4gIDUxOlxcdG9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxuICA1MjpcXHRcXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxuICA1MzpcXHRcXHRcXHRcXHQgICByZWFkYWhlYWQubyBmb2xpby5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxcXFxuICA1NDpcXHRcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG4gIDU1OlxcdFxcdFxcdFxcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXFxcXG4gIDU2OlxcdFxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG4gIDU3OlxcdFxcdFxcdFxcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxcXFxuICA1ODpcXHRcXHRcXHRcXHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcXG4gIDU5OlxcdFxcbiAgNjA6XFx0IyBHaXZlICdwYWdlX2FsbG9jJyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXFxuICA2MTpcXHRwYWdlLWFsbG9jLXkgOj0gcGFnZV9hbGxvYy5vXFxuICA2MjpcXHRwYWdlLWFsbG9jLSQoQ09ORklHX1NIVUZGTEVfUEFHRV9BTExPQ0FUT1IpICs9IHNodWZmbGUub1xcbiAgNjM6XFx0XFxuICA2NDpcXHQjIEdpdmUgJ21lbW9yeV9ob3RwbHVnJyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXFxuICA2NTpcXHRtZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgKz0gbWVtb3J5X2hvdHBsdWcub1xcbiAgNjY6XFx0XFxuICA2NzpcXHRvYmoteSArPSBwYWdlLWFsbG9jLm9cXG4gIDY4OlxcdG9iai15ICs9IHBhZ2VfZnJhZ19jYWNoZS5vXFxuICA2OTpcXHRvYmoteSArPSBpbml0LW1tLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6MzguNjE1ODY3NDM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMDg4MzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXNzZWN0aW5nIHRoZSBPYmplY3QgRmlsZSBDb21waWxhdGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVpbGQgc3lzdGVtIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhpcyBsaW5lOiBgb2JqLXkgKz0gLi4uICQobW11LXkpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgaWYgYENPTkZJR19NTVVgIGlzIHNldCwgdGhlbiBgbW11LXlgIGV4cGFuZHMgdG8gYG5vbW11Lm9gLiBCdXQgdGhhdCdzIG5vdCBxdWl0ZSByaWdodC4gSXQncyBhY3R1YWxseTogYG1tdS15IDo9IG5vbW11Lm9gIGF0IGZpcnN0LiBUaGVuIEkgc2VlIHRoaXM6IGBtbXUtJChDT05GSUdfTU1VKSA6PSBoaWdobWVtLm8gLi4uYC5cblxuU28sICppZiogYENPTkZJR19NTVVgIGlzIHNldCwgZG9lcyB0aGF0IG1lYW4gYG1tdS15YCBiZWNvbWVzICpib3RoKiBgbm9tbXUub2AgYW5kIGBoaWdobWVtLm8gLi4uYD8gTm8sIG5vLCBJJ20gb3ZlcnRoaW5raW5nIGl0LiBJdCdzIG1vcmUgbGlrZSB0aGlzOiBgbW11LSQoQ09ORklHX01NVSlgIGlzIGEgY29uZGl0aW9uYWwgYXBwZW5kLiBJdCBtZWFucyB0aGF0ICppZiogYENPTkZJR19NTVVgIGlzIGVxdWFsIHRvICd5JywgdGhlbiBgaGlnaG1lbS5vIC4uLmAgaXMgKmFwcGVuZGVkKiB0byB0aGUgYG1tdS15YCB2YXJpYWJsZSwgd2hpY2ggY3VycmVudGx5IGhvbGRzIGBub21tdS5vYC5cblxuTm93LCBpZiBgQ09ORklHX01NVWAgaXMgc2V0IHRvICd5JywgZG9lcyB0aGF0IG1lYW4gYG5vbW11Lm9gICpzdGlsbCogZ2V0cyBjb21waWxlZD8gVGhlIGxvZ2ljIHNlZW1zIHRvIGJlIGFkZGluZyBoaWdobWVtLm8gdG8gbW11LXkgaWYgQ09ORklHX01NVSBpcyBvbiwgYnV0IGl0IGlzbid0IGNsZWFyIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIG5vbW11Lm8uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gQmVzdCB0byBsb29rIGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgYG1tL25vbW11LmNgIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIG9yIHRvIGVuc3VyZSB0aGF0IHRoYXQgZmlsZSBkb2Vzbid0IGdldCBjb21waWxlZCBhdCBhbGwgaWYgdGhlIE1NVSBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjg2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6NDMuMDM2NzUzMjE3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ub21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqICBsaW51eC9tbS9ub21tdS5jXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogIFJlcGxhY2VtZW50IGNvZGUgZm9yIG1tIGZ1bmN0aW9ucyB0byBzdXBwb3J0IENQVSdzIHRoYXQgZG9uJ3RcXG4gICA2OlxcdCAqICBoYXZlIGFueSBmb3JtIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQgKHRodXMgbm8gdmlydHVhbCBtZW1vcnkpLlxcbiAgIDc6XFx0ICpcXG4gICA4OlxcdCAqICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9ub21tdS1tbWFwLnJzdFxcbiAgIDk6XFx0ICpcXG4gIDEwOlxcdCAqICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBEYXZpZCBIb3dlbGxzIFxcdTAwM2NkaG93ZWxsc0ByZWRoYXQuY29tXFx1MDAzZVxcbiAgMTE6XFx0ICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAzIERhdmlkIE1jQ3VsbG91Z2ggXFx1MDAzY2RhdmlkbUBzbmFwZ2Vhci5jb21cXHUwMDNlXFxuICAxMjpcXHQgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgRCBKZWZmIERpb25uZSBcXHUwMDNjamVmZkB1Q2xpbnV4Lm9yZ1xcdTAwM2VcXG4gIDEzOlxcdCAqICBDb3B5cmlnaHQgKGMpIDIwMDIgICAgICBHcmVnIFVuZ2VyZXIgXFx1MDAzY2dlcmdAc25hcGdlYXIuY29tXFx1MDAzZVxcbiAgMTQ6XFx0ICogIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIFBhdWwgTXVuZHQgXFx1MDAzY2xldGhhbEBsaW51eC1zaC5vcmdcXHUwMDNlXFxuICAxNTpcXHQgKi9cXG4gIDE2OlxcdFxcbiAgMTc6XFx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgMTg6XFx0XFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6NDMuMDM2ODgzMDM3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODA5MDQ1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2J1aWxkIENvbnVuZHJ1bSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYG1tdS15IDo9IG5vbW11Lm9gIGFzc2lnbm1lbnQuLi4gZG9lcyB0aGlzICphbHdheXMqIHNldCBgbW11LXlgIHRvIGBub21tdS5vYD8gVGhhdCBmZWVscyBvdmVybHkgc2ltcGxpc3RpYy4gVGhlIHdheSBLYnVpbGQgd29ya3MgaXMgdGhhdCBgbW11LXlgIGlzIGEgdmFyaWFibGUsIHJpZ2h0PyBJdOKAmXMgbm90IGEgZGlyZWN0LCBhYnNvbHV0ZSBzdWJzdGl0dXRpb24uXG5cblNvLCBpZiBgQ09ORklHX01NVWAgaXMgc2V0IHRvICd5Jywgd2hpY2ggbWVhbnMgdGhlIE1NVSAqaXMqIGVuYWJsZWQsIHRoZW4gYG1tdS15YCBzaG91bGQgZXhwYW5kIGludG8gc29tZXRoaW5nICptb3JlKiB0aGFuIGp1c3QgYG5vbW11Lm9gLCBzb21ldGhpbmcgbGlrZSBgbm9tbXUubyBoaWdobWVtLm8gLi4uYCBwb3RlbnRpYWxseT8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGxvZ2ljIGluIG15IG1pbmQuXG5cblRvIGJlIGNlcnRhaW4sIGxldCdzIHN0b3AgYW5kIHZlcmlmeSB3aGV0aGVyIGBub21tdS5jYCBpcyBhY3R1YWxseSBjb21waWxlZCwgZXZlbiB3aGVuIGBDT05GSUdfTU1VYCAqaXMqIGNvbmZpZ3VyZWQgd2l0aCAneScuIFRoYXQncyB0aGUga2V5IHRlc3QgaGVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI0NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIwOjQ2LjkxNzc4OTkxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0OTY5MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vbW11Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTM0PUNGTEFHU19pbml0LW1tLm8gKz0gLVduby1vdmVycmlkZS1pbml0XFxubW0vTWFrZWZpbGUtMzUtXFxubW0vTWFrZWZpbGU6MzY6bW11LXlcXHRcXHRcXHQ6PSBub21tdS5vXFxubW0vTWFrZWZpbGUtMzctbW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6NDcuMjYyNzY2OTMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTYzOTk0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipDaGVja2luZyBDb21waWxhdGlvbiBvZiBgbm9tbXUuY2Agd2l0aCBNTVUgRW5hYmxlZCoqXG5cbk9rYXksIGhvbGQgb24uIEJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byB2ZXJpZnkgYSBmdW5kYW1lbnRhbCBhc3N1bXB0aW9uLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGF0IGBub21tdS5jYCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgd2hlbiB0aGUgYENPTkZJR19NTVU9eWAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgc2V0LiBJdCBzZWVtcyBjb3VudGVyLWludHVpdGl2ZSwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLiBJIGhhdmUgYW4gaW5rbGluZywgYnV0IEkgY2FuJ3Qgb3BlcmF0ZSBvbiBhbiBhc3N1bXB0aW9uLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHJldmlzaXQgYG1tL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBjb21waWxhdGlvbiBsb2dpYyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMgcmVzaWRlcy4gTGV0J3Mgc2VlIGhvdyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbHMgYXJlIHN0cnVjdHVyZWQgaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIHJ1bGVzIHRoYXQgY292ZXIgYG5vbW11LmNgIGFuZCBjb25maXJtIHRoYXQgdGhleSBhcmUgY29uZGl0aW9uYWwgb24gYENPTkZJR19NTVVgLCBvciBpdHMgbmVnYXRpb24sIHdoaWNoZXZlciBpcyByZWxldmFudC4gT25seSB0aGVuIGNhbiBJIGJlIHN1cmUgaWYgbXkgY3VycmVudCBoeXBvdGhlc2lzIGhvbGRzIHdhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njg1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6NTAuNzE5MTY4NDAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRLQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbiAgMzE6XFx0S0NPVl9JTlNUUlVNRU5UX3Ztc3RhdC5vIDo9IG5cXG4gIDMyOlxcdEtDT1ZfSU5TVFJVTUVOVF9mYWlsc2xhYi5vIDo9IG5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Q0ZMQUdTX2luaXQtbW0ubyArPSAtV25vLW92ZXJyaWRlLWluaXRcXG4gIDM1OlxcdFxcbiAgMzY6XFx0bW11LXlcXHRcXHRcXHQ6PSBub21tdS5vXFxuICAzNzpcXHRtbXUtJChDT05GSUdfTU1VKVxcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcXFxcbiAgMzg6XFx0XFx0XFx0XFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcXFxcbiAgMzk6XFx0XFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG4gIDQwOlxcdFxcdFxcdFxcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xcbiAgNDE6XFx0XFxuICA0MjpcXHRcXG4gIDQzOlxcdGlmZGVmIENPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIXFxuICA0NDpcXHRtbXUtJChDT05GSUdfTU1VKVxcdCs9IHByb2Nlc3Nfdm1fYWNjZXNzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6NTAuNzE5MjgxODYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjczMDU5OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2J1aWxkIGFuZCBEZXRlcm1pbmluZyBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluaXRpYWxseSwgSSB3YXMgYSBiaXQgcHV6emxlZCBieSB0aGlzIEtidWlsZCBsb2dpYy4gSWYgYENPTkZJR19NTVU9eWAsIHRoZW4gYG1tdS15YCBpcyBzZXQgdG8gYG5vbW11Lm9gLCB3aGljaCBzZWVtcyBjb3VudGVyaW50dWl0aXZlLiBCdXQgd2FpdCwgaXQgdXNlcyBgOj1gLCBzbyBpdCdzIGFuIGFzc2lnbm1lbnQuIFRoZW4sIHRoZSBuZXh0IGxpbmUgb3ZlcndyaXRlcyBpdCB3aXRoIGBoaWdobWVtLm8uLi5gIHdoZW4gYENPTkZJR19NTVU9eWAuIFNvIGVmZmVjdGl2ZWx5LCBpZiBgQ09ORklHX01NVWAgKmlzKiBzZXQsIGBtbXUteWAgYmVjb21lcyBgaGlnaG1lbS5vIC4uLmAuIElmIGBDT05GSUdfTU1VYCBpcyAqbm90KiBzZXQsIHRoZW4gYG1tdS15YCByZW1haW5zIGBub21tdS5vYC4gVGhhdCdzIGEgY2xldmVyIHRyaWNrLCBhY3R1YWxseS5cblxuTXkgdGhvdWdodCBpcywgdGhlcmVmb3JlLCBpZiBJIGFtIGNvcnJlY3QsIHRoZW4gYG5vbW11LmNgIGlzICpvbmx5KiBjb21waWxlZCB3aGVuIGAhQ09ORklHX01NVWAuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gZGlzY2FyZCBwYXRjaGVzIHRoYXQgb25seSB0b3VjaCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBIb3dldmVyLCBRRU1VICpkb2VzKiBzdXBwb3J0IGBub21tdWAgdGFyZ2V0cyAobTY4aywgcmlzY3YsIGFybSksIHNvIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIEFuZCBTeXprYWxsZXIgcnVucyBvbiBRRU1VLCBzbyBpdCBzaG91bGQgYmUgZmVhc2libGUgdG8gZnV6eiBpdC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIFN5emthbGxlciBhbHJlYWR5IHRlc3RzIGBub21tdWAsIGFuZCB5ZXMsIGl0IGRvZXMsIHVzaW5nIGBzeXotZXhlY3V0b3JgIGZvciBgbm9tbXVgLiBUaGF0IG1lYW5zIHdlIGFyZSBnb29kIG9uIHRoZSBcInJlYWNoYWJpbGl0eVwiIGZyb250LlxuXG5TaW5jZSB0aGlzIHBhdGNoIG1vZGlmaWVzIGBtbS9ub21tdS5jYCwgc3BlY2lmaWNhbGx5IGBkb19tcmVtYXBgLCBhbmQgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIChhbGxvd2luZyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnRpbmcgZmlsZS1iYWNrZWQgVk1BcyksIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBsb2dpYyBpbiB0aGUgcGF0Y2gsIHdoaWNoIGFkZHMgdGhpczpcbmBgYGNcblx0LyogbGlrZSBkb19tdW5tYXAoKSwgd2UncmUgYWxsb3dlZCB0byBzaHJpbmsgYW4gYW5vbnltb3VzIFZNQSBidXQgbm90IGEgZmlsZS1iYWNrZWQgb25lICovXG5cdGlmICh2bWEtXHUwMDNldm1fZmlsZSlcblx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC1FSU5WQUw7XG5cblx0LyogYWxsIGNoZWNrcyBjb21wbGV0ZSAtIGRvIGl0ICovXG5cdGlmIChuZXdfbGVuIFx1MDAzYyBvbGRfbGVuKSB7XG5cdFx0Lyogc2hyaW5rIG9ubHkgaGFwcGVucyBhZGRyICsgbmV3X2xlbiBhbmQgb2xkX2xlbiBhcmUgaW4gZGlmZmVyZW50IHBhZ2VzICovXG5cdFx0Vk1BX0lURVJBVE9SKHZtaSwgY3VycmVudC1cdTAwM2VtbSwgYWRkcik7XG5cdFx0aW50IHJldDtcblxuXHRcdC8qIHZtaV9zaHJpbmtfdm1hKCkgbmVlZHMgZnJvbS90byBwb2ludGVycyB0byBiZSByZW1vdmVkLFxuXHRcdCAqIChtYWlubHkgdXNlZCBpbiBtdW5tYXApIHNvLCBzcGVjaWZ5IHRoZW0uXG5cdFx0ICovXG5cdFx0cmV0ID0gdm1pX3Nocmlua192bWEoXHUwMDI2dm1pLCB2bWEsIGFkZHIgKyBuZXdfbGVuLCBhZGRyICsgb2xkX2xlbik7XG5cdFx0aWYgKHJldCBcdTAwM2MgMClcblx0XHRcdHJldHVybiAodW5zaWduZWQgbG9uZykgcmV0O1xuXHR9IGVsc2Uge1xuXHRcdC8qIHdoZW4gdGhlcmUgYXJlIG5vIHNocmluaywgdXBkYXRlIHZtYS4gICovXG5cdFx0dm1hLVx1MDAzZXZtX2VuZCA9IHZtYS1cdTAwM2V2bV9zdGFydCArIG5ld19sZW47XG5cdH1cbmBgYFxuXG5Ob3csIHRoZSBjb25maWchIFdoYXQgY29uZmlnKHMpIGRvIEkgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZT8gVGhpcyByZXF1aXJlcyBgIUNPTkZJR19NTVVgLCBob3dldmVyIEkgY2FuJ3Qgc3BlY2lmeSBhIG5lZ2F0aXZlIGNvbmZpZyBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IGl0J3MgdG8gZXhwbGljaXRseSBlbmFibGUsIHNvIEkgbWlnaHQganVzdCBsZWF2ZSBgRW5hYmxlQ29uZmlnc2AgZW1wdHkuIElzIHRoZXJlIGEgYENPTkZJR19OT01NVWA/IFByb2JhYmx5IG5vdC4gVGhlIGFic2VuY2Ugb2YgYENPTkZJR19NTVVgIGlzIGxpa2VseSB0aGUga2V5LiBJIHdpbGwgY29uZmlybSBpZiB0aGVyZSBpcyBhIGBDT05GSUdfTk9NTVVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjE6MDEuMzkyMzQzOTA4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQyNDU0MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOT01NVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTQ9Y29uZmlnIE1NVVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxOTpjb25maWcgTk9NTVVcXG5hcmNoL3NoL21tL0tjb25maWctMjAtXFx0ZGVmX2Jvb2wgIU1NVVxcbi0tXFxubW0vS2NvbmZpZz03ODA9Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxcbi0tXFxubW0vS2NvbmZpZy03ODQtXFxubW0vS2NvbmZpZzo3ODU6Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1NcXG5tbS9LY29uZmlnLTc4Ni1cXHRpbnQgXFxcIlR1cm4gb24gbW1hcCgpIGV4Y2VzcyBzcGFjZSB0cmltbWluZyBiZWZvcmUgYm9vdGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjE6MDMuMjM0ODA3NzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODE4OTUzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOT01NVSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgdGhlIGBOT01NVWAgY29uZmlndXJhdGlvbiB3b3JrcyB3aXRoaW4gdGhpcyBwcm9qZWN0LiBSaWdodCwgSSBzZWUgdGhhdCBgY29uZmlnIE5PTU1VYCBpcyBkZWZpbmVkIGluIGBhcmNoL3NoL21tL0tjb25maWdgLCBidXQgaXQncyByZWFsbHkganVzdCBhIGBkZWZfYm9vbCAhTU1VYC4gU28sIGJhc2ljYWxseSwgYE5PTU1VYCBpcyBpbXBsaWNpdGx5IHNldCB3aGVuIHdlIGRvbid0IGhhdmUgYW4gTU1VLiBJbnRlcmVzdGluZy5cblxuSSB3YXMgZXhwZWN0aW5nIGEgbW9yZSBkaXJlY3QgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBnZW5lcmFsIGBDT05GSUdfTU1VYCBkZWZpbml0aW9uIHRob3VnaD8gWWVzLCB0aGVyZSBpcy4gQWxyaWdodC5cblxuU28sIHNpbmNlIHRoZXJlIGlzbid0IGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvICplbmFibGUqIHRoZSByZWxldmFudCBjb2RlIGZvciB0aGUgTk9NTVUsIHdlJ3JlIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBgQ09ORklHX01NVWAsIEknbGwgbGVhdmUgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGVtcHR5LiBUaGVyZSdzIG5vIHNpbmdsZSBjb25maWcgdG8gZXhwbGljaXRseSBcImVuYWJsZVwiIHRoaXMgYmVoYXZpb3IuIEl0J3MgbW9yZSBhYm91dCBleGNsdXNpb24uXG5cbk5vdywgd2FpdCBhIHNlY29uZCwgdGhlcmUgbWlnaHQgYmUgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBMZXQncyBtYWtlIHN1cmUuIFRoZSBmdW5jdGlvbiB0aGF0IEknbSBjdXJyZW50bHkgbG9va2luZyBhdCBpcyBgZG9fbXJlbWFwYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgZnVuY3Rpb24uXG5cbk9rYXksIGxldCdzIGdvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciBgZG9fbXJlbWFwYCBpbiBgbW0vbm9tbXUuY2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjE6MDcuNDE2NzA1MTA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI1OTczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19tcmVtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbm9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ub21tdS5jPTE1MzU9dm9pZCBleGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9ub21tdS5jLTE1NjgtICovXFxubW0vbm9tbXUuYzoxNTY5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX21yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbm9tbXUuYy0xNTcwLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgb2xkX2xlbiwgdW5zaWduZWQgbG9uZyBuZXdfbGVuLFxcbi0tXFxubW0vbm9tbXUuYz0xNjIzPVNZU0NBTExfREVGSU5FNShtcmVtYXAsIHVuc2lnbmVkIGxvbmcsIGFkZHIsIHVuc2lnbmVkIGxvbmcsIG9sZF9sZW4sXFxuLS1cXG5tbS9ub21tdS5jLTE2MjktXFx0bW1hcF93cml0ZV9sb2NrKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5tbS9ub21tdS5jOjE2MzA6XFx0cmV0ID0gZG9fbXJlbWFwKGFkZHIsIG9sZF9sZW4sIG5ld19sZW4sIGZsYWdzLCBuZXdfYWRkcik7XFxubW0vbm9tbXUuYy0xNjMxLVxcdG1tYXBfd3JpdGVfdW5sb2NrKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjE6MDcuNDc1OTc0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzM4NzMzODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbXJlbWFwYCBTeXN0ZW0gQ2FsbCBpbiBhIE5vLU1NVSBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYG1yZW1hcGAgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIE5vLU1NVSBlbnZpcm9ubWVudC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmdW5jdGlvbiBoZXJlIGlzIGBkb19tcmVtYXBgLCB3aGljaCBpcyBkaXJlY3RseSBjYWxsZWQgYnkgYHN5c19tcmVtYXBgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHVzZSBlaXRoZXIgYGRvX21yZW1hcGAgb3IgYHN5c19tcmVtYXBgIGFzIHRoZSBmb2N1cyBzeW1ib2wgZm9yIG15IGFuYWx5c2lzLiBHaXZlbiB0aGF0IGBkb19tcmVtYXBgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCBpdCBzZWVtcyBsaWtlIGEgcGFydGljdWxhcmx5IGdvb2QgY2hvaWNlLiBBbHRob3VnaCBpdCdzIGludGVybmFsLCBTeXprYWxsZXIgY2FuIHN0aWxsIGludGVyYWN0IHdpdGggaXQgaWYgd2UgcHJvdmlkZSBpdCB0aGUgc3ltYm9sLCBldmVuIGlmIGl0J3Mgc3RhdGljISBBbmQgb2YgY291cnNlLCB0aGUgYHN5c19tcmVtYXBgIHN5c3RlbSBjYWxsIGlzIGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgdG9vLCBlc3BlY2lhbGx5IGlmIGl0IHBvaW50cyB0byBhIHBsYXRmb3JtIHNwZWNpZmljIHZlcnNpb24gbGlrZSBgX19pYTMyX3N5c19tcmVtYXBgIC8gYF9feDY0X3N5c19tcmVtYXBgICh0aG91Z2ggaW4gdGhpcyBjb250ZXh0LCB0aGF0IHdvdWxkIGxpa2VseSBqdXN0IGJlIGBzeXNfbXJlbWFwYCkuIFVsdGltYXRlbHksIEknbGwgZ28gd2l0aCBgZG9fbXJlbWFwYCBmb3Igbm93LlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBwZXJ0aW5lbnQuIFNwZWNpZmljYWxseSwgaXMgYHZtaV9zaHJpbmtfdm1hYCBhdmFpbGFibGUgaW4gdGhlIE5vLU1NVSBjb25maWd1cmF0aW9uPyBCYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIGl0IGFwcGVhcnMgaW4gYG1tL3ZtYS5jYCBvciBwZXJoYXBzIGBtbS9tbWFwLmNgIHdoaWNoIG1pZ2h0IGJlIGNvbXBpbGVkIGZvciBOby1NTVUgc2V0dXBzLiBBY3R1YWxseSwgSSB3YXMgcmlnaHQgdGhlIGZpcnN0IHRpbWUsIGB2bWEuY2AgaXMgY29uZGl0aW9uYWxpemVkIGJ5IHRoZSBgQ09ORklHX01NVWAgS2NvbmZpZyBvcHRpb24uIExldCBtZSBqdXN0IHF1aWNrbHkgZ28gYmFjayB0byBgbW0vTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBJIGRpZG4ndCBtaXNzIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc0MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMToxMi42MDk4NDk5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MDA3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTM3PW1tdS0kKENPTkZJR19NTVUpXFx0Oj0gaGlnaG1lbS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZS0zOS1cXHRcXHRcXHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcXFxcbm1tL01ha2VmaWxlOjQwOlxcdFxcdFxcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xcbm1tL01ha2VmaWxlLTQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMToxMi42NjMyNTU3NTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5MDU4ODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqRGlnZ2luZyBpbnRvIHRoYXQgYHZtYS5vYCBEZXBlbmRlbmN5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHJlYWxpemVkIHNvbWV0aGluZyBhYm91dCB0aGF0IGB2bWEub2AgZmlsZS4gSXQncyBuZXN0bGVkIGluIGBtbXUtJChDT05GSUdfTU1VKWAsIG1lYW5pbmcgaXQncyBvbmx5IGdldHRpbmcgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgc2V0IHRvICd5Jy4gVGhhdCdzIGEgY3J1Y2lhbCBkZXRhaWwuIEkgbmVlZCB0byBrZWVwIHRoYXQgcmVzdHJpY3Rpb24gaW4gbWluZC4gVGhlIHByb2JsZW0gaXMsIHRoaXMgcGF0Y2ggaXMgcmVmZXJlbmNpbmcgYHZtaV9zaHJpbmtfdm1hYCwgd2hpY2ggaXMgYSBmdW5jdGlvbiB3aXRoaW4gYG1tL25vbW11LmNgLCBhbmQgdGhhdCBzZWVtcyBpbmNvbXBhdGlibGUgZ2l2ZW4gdGhlIGNvbnRleHQgYWJvdmUuXG5cbk5vdyBJJ20gcmVhbGx5IGdldHRpbmcgY29uZnVzZWQuIFdoZXJlIGlzIGB2bWlfc2hyaW5rX3ZtYWAgZXZlbiBkZWZpbmVkPyBBbmQgaG93IGNvdWxkIGl0IHBvc3NpYmx5IGJlIHVzZWQgaWYgdGhlIG1vZHVsZSBpcyByZXN0cmljdGVkIGJ5IGEgZmVhdHVyZSB0aGF0IGlzIGluIHRoZSBvcHBvc2l0ZSBjb250ZXh0PyBJIG5lZWQgdG8gZmluZCBpdHMgb3JpZ2luIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgY29ubmVjdGlvbi4gVGhlcmUncyBkZWZpbml0ZWx5IHNvbWV0aGluZyBub3QgYWRkaW5nIHVwIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMToxNi4xNTM4NDU5NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTkyNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtaV9zaHJpbmtfdm1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ub21tdS5jPTEzMjk9c3RhdGljIGludCBzcGxpdF92bWEoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL25vbW11LmMtMTQxMC0gKi9cXG5tbS9ub21tdS5jOjE0MTE6c3RhdGljIGludCB2bWlfc2hyaW5rX3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXFxubW0vbm9tbXUuYy0xNDEyLVxcdFxcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbm9tbXUuYz0xNDUzPWludCBkb19tdW5tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxcbi0tXFxubW0vbm9tbXUuYy0xNTAzLVxcdFxcdH1cXG5tbS9ub21tdS5jOjE1MDQ6XFx0XFx0cmV0dXJuIHZtaV9zaHJpbmtfdm1hKFxcdTAwMjZ2bWksIHZtYSwgc3RhcnQsIGVuZCk7XFxubW0vbm9tbXUuYy0xNTA1LVxcdH1cXG4tLVxcbm1tL25vbW11LmM9MTU2OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb19tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbm9tbXUuYy0xNjA5LVxcbm1tL25vbW11LmM6MTYxMDpcXHRcXHQvKiB2bWlfc2hyaW5rX3ZtYSgpIG5lZWRzIGZyb20vdG8gcG9pbnRlcnMgdG8gYmUgcmVtb3ZlZCxcXG5tbS9ub21tdS5jLTE2MTEtXFx0XFx0ICogKG1haW5seSB1c2VkIGluIG11bm1hcCkgc28sIHNwZWNpZnkgdGhlbS5cXG5tbS9ub21tdS5jLTE2MTItXFx0XFx0ICovXFxubW0vbm9tbXUuYzoxNjEzOlxcdFxcdHJldCA9IHZtaV9zaHJpbmtfdm1hKFxcdTAwMjZ2bWksIHZtYSwgYWRkciArIG5ld19sZW4sIGFkZHIgKyBvbGRfbGVuKTtcXG5tbS9ub21tdS5jLTE2MTQtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIxOjE2LjIxNDg0Mzk3MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzA5MTE2NDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgdm1pX3Nocmlua192bWFgKipcblxuUmlnaHQsIHNvIEkgc2VlIHRoYXQgYHZtaV9zaHJpbmtfdm1hYCBpc24ndCBzb21lIG9ic2N1cmUgZnVuY3Rpb247IGl0J3MgYWN0dWFsbHkgZGVmaW5lZCByaWdodCB0aGVyZSBpbiBgbW0vbm9tbXUuY2AuIEV4Y2VsbGVudC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBpbW1lbnNlbHkuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcuIFRpbWUgdG8gY2hlY2sgb3V0IHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3MganVtcCB0byBsaW5lIDE0MTEgaW4gYG1tL25vbW11LmNgIGFuZCBkaWcgaW50byBpdC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYywgb3IgdGhlIHRyb3VibGUsIGxpa2VseSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIxOjM5LjMwNjAxMTQ3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbm9tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdCAqL1xcbjE0MTE6XFx0c3RhdGljIGludCB2bWlfc2hyaW5rX3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXFxuMTQxMjpcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4xNDEzOlxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bylcXG4xNDE0OlxcdHtcXG4xNDE1OlxcdFxcdHN0cnVjdCB2bV9yZWdpb24gKnJlZ2lvbjtcXG4xNDE2OlxcdFxcbjE0MTc6XFx0XFx0LyogYWRqdXN0IHRoZSBWTUEncyBwb2ludGVycywgd2hpY2ggbWF5IHJlcG9zaXRpb24gaXQgaW4gdGhlIE1NJ3MgdHJlZVxcbjE0MTg6XFx0XFx0ICogYW5kIGxpc3QgKi9cXG4xNDE5OlxcdFxcdGlmIChmcm9tIFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9zdGFydCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMTozOS4zMDYxMTg5NDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4Mjk1OTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgYG1yZW1hcGAgUGF0Y2ggZm9yIE5vTU1VIEFyY2hpdGVjdHVyZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbm5lZCBkb3duIHRoZSBsb2NhdGlvbiBvZiBgdm1pX3Nocmlua192bWFgIOKAkyBpdCdzIGRlZmluaXRlbHkgaW4gYG5vbW11LmNgLCBhcyBleHBlY3RlZC4gTm93LCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhbHRlcnMgYGRvX21yZW1hcGAgd2l0aGluIGBtbS9ub21tdS5jYC4gR2l2ZW4gdGhhdCBgbXJlbWFwYCBpcyBhIHN5c2NhbGwgYW5kIGlzIGFjY2Vzc2libGUgb24gTm9NTVUgYXJjaGl0ZWN0dXJlcywgSSdkIHNheSB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZXJlZm9yZSwgaXMgaXQgZnV6ei13b3J0aHk/IEFic29sdXRlbHksIHllcy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2wgbmVlZHMgdG8gYmUgYGRvX21yZW1hcGAgaXRzZWxmLCB0aG91Z2ggSSBjb3VsZCBhbHNvIGNvbnNpZGVyIGBzeXNfbXJlbWFwYCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgdmlhIGBTWVNDQUxMX0RFRklORTUobXJlbWFwLCAuLi4pYCBpbiB0aGUgc3lzY2FsbCB0YWJsZS4gSG93ZXZlciwgc2luY2UgYGRvX21yZW1hcGAgaXMgdGhlIGFjdHVhbCBmdW5jdGlvbiBiZWluZyBkaXJlY3RseSBtb2RpZmllZCwgaXQncyB0aGUgbW9yZSBwcmVjaXNlIHRhcmdldC5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCByZWxldmFudCBjb25maWd1cmF0aW9ucy4gU2luY2UgdGhpcyBwYXRjaCB0YXJnZXRzIHRoZSBOb01NVSBjYXNlLCB0aGF0IG1lYW5zIGBDT05GSUdfTU1VYCBpcyAqbm90KiBlbmFibGVkLiBUaGVyZSBpc24ndCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvICplbmFibGUqIHRoaXMgcGF0Y2g7IGl0J3MgYSBjb25zZXF1ZW5jZSBvZiB0aGUgYWJzZW5jZSBvZiBgQ09ORklHX01NVWAuIFRodXMsIGBFbmFibGVDb25maWdzYCByZW1haW5zIGVtcHR5LiBJIGNoZWNrZWQgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMsIGJ1dCB0aGVyZSBhcmVuJ3QuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgY29uZmlybSB0aGF0IGBkb19tcmVtYXBgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlLiBZZXMsIGl0J3MgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIGFsdGVyZWQgYnkgdGhlIHBhdGNoLlxuXG5IZXJlJ3MgbXkgZGlzdGlsbGVkIHJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBoYW5kbGUgdGhlIHNocmlua2luZyBvZiBhbm9ueW1vdXMgVk1BcyBhbmQgdG8gcHJldmVudCBzaHJpbmtpbmcgZmlsZS1iYWNrZWQgVk1Bcy4gVGhpcyByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIHN5c3RlbXMgd2l0aG91dCBhbiBNTVUuIEl0J3MgcmVhY2hlZCBieSB3YXkgb2YgdGhlIGBtcmVtYXBgIHN5c2NhbGwuXG5cblRoZXJlZm9yZTpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcImRvX21yZW1hcFwiXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKEJlY2F1c2UgaXQgcmVxdWlyZXMgYCFDT05GSUdfTU1VYClcblxuT25lIGxhc3QgcXVpY2sgY2hlY2s6IEkndmUgdmVyaWZpZWQgdGhhdCBvbmx5IGBkb19tcmVtYXBgIGhhcyBiZWVuIGNoYW5nZWQuXG5cbk5vdywgSSdtIGNvbmZpZGVudCBlbm91Z2ggdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzMCwiT3V0cHV0VG9rZW5zIjo5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIxOjQ2LjY4OTA4MDY2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19tcmVtYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZG9fbXJlbWFwYCBpbiBgbW0vbm9tbXUuY2AgdG8gYWxsb3cgc2hyaW5raW5nIGFub255bW91cyBWTUFzIGFuZCBwcmV2ZW50IHNocmlua2luZyBmaWxlLWJhY2tlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgZm9yIG5vbW11IGFyY2hpdGVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBtcmVtYXBgIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fbXJlbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX21yZW1hcGAgaW4gYG1tL25vbW11LmNgIHRvIGFsbG93IHNocmlua2luZyBhbm9ueW1vdXMgVk1BcyBhbmQgcHJldmVudCBzaHJpbmtpbmcgZmlsZS1iYWNrZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBub21tdSBhcmNoaXRlY3R1cmVzIGFuZCBpcyByZWFjaGFibGUgdmlhIHRoZSBgbXJlbWFwYCBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowx7nsp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 02:51:55 +0000 UTC FinishedAt: 2026-07-11 03:21:48 +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": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "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": "1e692e85500fd3a971da0241f044f4572b2be8b6", "config_name": "upstream-apparmor-kasan.config", "series_id": "fc9949b1-43c3-4bc8-816d-bd01d5772dd4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "do_mremap" ], "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+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fbXJlbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBhbGxvdyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnQgc2hyaW5raW5nIGZpbGUtYmFja2VkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBmb3Igbm9tbXUgYXJjaGl0ZWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYG1yZW1hcGAgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGM0OTFjY2ZlNWNlNGNhYTNkMTE3OWEzNjc1N2RhMjUwMDgzZjYxMDJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAwMzoyMDoyNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuY1xuaW5kZXggODUyZWM5YmQwNTA1OTIuLmM4ZWZmYmZmYTBmMDFjIDEwMDY0NFxuLS0tIGEvbW0vbm9tbXUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vbm9tbXUuY1xuQEAgLTE1OTcsOCAmIzQzOzE1OTcsMjYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZG9fbXJlbWFwKHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdGlmIChuZXdfbGVuIFx1MDAzZSB2bWEtXHUwMDNldm1fcmVnaW9uLVx1MDAzZXZtX2VuZCAtIHZtYS1cdTAwM2V2bV9yZWdpb24tXHUwMDNldm1fc3RhcnQpXG4gXHRcdHJldHVybiAodW5zaWduZWQgbG9uZykgLUVOT01FTTtcbiBcbiYjNDM7XHQvKiBsaWtlIGRvX211bm1hcCgpLCB3ZSYjMzk7cmUgYWxsb3dlZCB0byBzaHJpbmsgYW4gYW5vbnltb3VzIFZNQSBidXQgbm90IGEgZmlsZS1iYWNrZWQgb25lICovXG4mIzQzO1x0aWYgKHZtYS1cdTAwM2V2bV9maWxlKVxuJiM0MztcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKSAtRUlOVkFMO1xuJiM0MztcbiBcdC8qIGFsbCBjaGVja3MgY29tcGxldGUgLSBkbyBpdCAqL1xuLVx0dm1hLVx1MDAzZXZtX2VuZCA9IHZtYS1cdTAwM2V2bV9zdGFydCAmIzQzOyBuZXdfbGVuO1xuJiM0MztcdGlmIChuZXdfbGVuIFx1MDAzYyBvbGRfbGVuKSB7XG4mIzQzO1x0XHQvKiBzaHJpbmsgb25seSBoYXBwZW5zIGFkZHIgJiM0MzsgbmV3X2xlbiBhbmQgb2xkX2xlbiBhcmUgaW4gZGlmZmVyZW50IHBhZ2VzICovXG4mIzQzO1x0XHRWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LVx1MDAzZW1tLCBhZGRyKTtcbiYjNDM7XHRcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogdm1pX3Nocmlua192bWEoKSBuZWVkcyBmcm9tL3RvIHBvaW50ZXJzIHRvIGJlIHJlbW92ZWQsXG4mIzQzO1x0XHQgKiAobWFpbmx5IHVzZWQgaW4gbXVubWFwKSBzbywgc3BlY2lmeSB0aGVtLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyZXQgPSB2bWlfc2hyaW5rX3ZtYShcdTAwMjZ2bWksIHZtYSwgYWRkciAmIzQzOyBuZXdfbGVuLCBhZGRyICYjNDM7IG9sZF9sZW4pO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKSByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIHdoZW4gdGhlcmUgYXJlIG5vIHNocmluaywgdXBkYXRlIHZtYS4gICovXG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fZW5kID0gdm1hLVx1MDAzZXZtX3N0YXJ0ICYjNDM7IG5ld19sZW47XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHZtYS1cdTAwM2V2bV9zdGFydDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkb19tcmVtYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX21yZW1hcGAgaW4gYG1tL25vbW11LmNgIHRvIGFsbG93IHNocmlua2luZyBhbm9ueW1vdXMgVk1BcyBhbmQgcHJldmVudCBzaHJpbmtpbmcgZmlsZS1iYWNrZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBub21tdSBhcmNoaXRlY3R1cmVzIGFuZCBpcyByZWFjaGFibGUgdmlhIHRoZSBgbXJlbWFwYCBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjNDkxY2NmZTVjZTRjYWEzZDExNzlhMzY3NTdkYTI1MDA4M2Y2MTAyCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBKdWwgMTEgMDM6MjA6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCA4NTJlYzliZDA1MDU5Mi4uYzhlZmZiZmZhMGYwMWMgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbm9tbXUuYwpAQCAtMTU5Nyw4ICYjNDM7MTU5NywyNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkb19tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLAogCWlmIChuZXdfbGVuICZndDsgdm1hLSZndDt2bV9yZWdpb24tJmd0O3ZtX2VuZCAtIHZtYS0mZ3Q7dm1fcmVnaW9uLSZndDt2bV9zdGFydCkKIAkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSAtRU5PTUVNOwogCiYjNDM7CS8qIGxpa2UgZG9fbXVubWFwKCksIHdlJiMzOTtyZSBhbGxvd2VkIHRvIHNocmluayBhbiBhbm9ueW1vdXMgVk1BIGJ1dCBub3QgYSBmaWxlLWJhY2tlZCBvbmUgKi8KJiM0MzsJaWYgKHZtYS0mZ3Q7dm1fZmlsZSkKJiM0MzsJCXJldHVybiAodW5zaWduZWQgbG9uZykgLUVJTlZBTDsKJiM0MzsKIAkvKiBhbGwgY2hlY2tzIGNvbXBsZXRlIC0gZG8gaXQgKi8KLQl2bWEtJmd0O3ZtX2VuZCA9IHZtYS0mZ3Q7dm1fc3RhcnQgJiM0MzsgbmV3X2xlbjsKJiM0MzsJaWYgKG5ld19sZW4gJmx0OyBvbGRfbGVuKSB7CiYjNDM7CQkvKiBzaHJpbmsgb25seSBoYXBwZW5zIGFkZHIgJiM0MzsgbmV3X2xlbiBhbmQgb2xkX2xlbiBhcmUgaW4gZGlmZmVyZW50IHBhZ2VzICovCiYjNDM7CQlWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LSZndDttbSwgYWRkcik7CiYjNDM7CQlpbnQgcmV0OwomIzQzOwomIzQzOwkJLyogdm1pX3Nocmlua192bWEoKSBuZWVkcyBmcm9tL3RvIHBvaW50ZXJzIHRvIGJlIHJlbW92ZWQsCiYjNDM7CQkgKiAobWFpbmx5IHVzZWQgaW4gbXVubWFwKSBzbywgc3BlY2lmeSB0aGVtLgomIzQzOwkJICovCiYjNDM7CQlyZXQgPSB2bWlfc2hyaW5rX3ZtYSgmYW1wO3ZtaSwgdm1hLCBhZGRyICYjNDM7IG5ld19sZW4sIGFkZHIgJiM0Mzsgb2xkX2xlbik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIHdoZW4gdGhlcmUgYXJlIG5vIHNocmluaywgdXBkYXRlIHZtYS4gICovCiYjNDM7CQl2bWEtJmd0O3ZtX2VuZCA9IHZtYS0mZ3Q7dm1fc3RhcnQgJiM0MzsgbmV3X2xlbjsKJiM0MzsJfQogCXJldHVybiB2bWEtJmd0O3ZtX3N0YXJ0OwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNzIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQb3RlbnRpYWwgSW1wYWN0IG9mIGEgUGF0Y2ggaW4gYG1tL25vbW11LmNgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBkb19tcmVtYXBgIHdpdGhpbiBgbW0vbm9tbXUuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYHZtaV9zaHJpbmtfdm1hYCB0byBzaHJpbmsgYW5vbnltb3VzIFZNQXMgd2hpbGUgZXhwbGljaXRseSBhdm9pZGluZyBhbnkgc2hyaW5rYWdlIG9uIGZpbGUtYmFja2VkIG9uZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBgbW0vbm9tbXUuY2AuLi4gdGhhdCYjMzk7cyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzICpub3QqIHNldC4mIzM0OyBUaGF0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoYXQgdGhpcyBhcHBsaWVzIHRvIGFyY2hpdGVjdHVyZXMgKndpdGhvdXQqIGEgTWVtb3J5IE1hbmFnZW1lbnQgVW5pdC4KCk15IG5leHQgbWVudGFsIHN0ZXAgaXMgdG8gY29uc2lkZXIgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggb3VyIGZ1enppbmcgZWZmb3J0cy4gU3l6a2FsbGVyIGdlbmVyYWxseSB0YXJnZXRzIHN5c3RlbXMgd2l0aCBhbiBNTVUsIGxpa2UgeDg2XzY0IG9yIGFybTY0LiBJIGtub3cgaXQgKmNhbiogYmUgY29uZmlndXJlZCB0byB0ZXN0IG5vbW11IGFyY2hpdGVjdHVyZXMsIHRob3VnaCBpdCYjMzk7cyBsZXNzIGZyZXF1ZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgbm90IGEgZmFsc2UgcG9zaXRpdmUgZm9yIHRoZSBmdXp6aW5nLgoKTm93LCB3YWl0IGEgc2Vjb25kLiBUaGUgaW5zdHJ1Y3Rpb25zIEkgaGF2ZSBzYXkgSSBuZWVkIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzLiBTcGVjaWZpY2FsbHksIGlmIHRoZSBwYXRjaCBhZmZlY3RzICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFRoYXQmIzM5O3MgdGhlIGNydXghIFRoZSBxdWVzdGlvbiBub3cgaXM6IGlzIGBub21tdWAgYWNjZXNzaWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VPyBBbmQgdGhlIGFuc3dlciBpcyB5ZXMuIFFFTVUgKmRvZXMqIHN1cHBvcnQgbm9tbXUgYXJjaGl0ZWN0dXJlcy4gSSBrbm93IHRoYXQgUUVNVSBzdXBwb3J0cyBtNjhrLCBSSVNDLVYgbm9tbXUsIGFuZCBBUk0gbm9tbXUsIHdoaWNoIG1lYW5zIHdlIGNhbiB0ZXN0IHRoZXNlIHRoaW5ncyBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKT2theSwgc28gU3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzb21lIG5vbW11IHRhcmdldHMuIEJ1dCBpdCBkb2VzIHJlcXVpcmUgYCFDT05GSUdfTU1VYC4gVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBtbS9ub21tdS5jYCBpdHNlbGYgYW5kIGl0cyBgS2NvbmZpZ2AgZmlsZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bm9tbXUubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTM0PUNGTEFHU19pbml0LW1tLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxubW0vTWFrZWZpbGUtMzUtXG5tbS9NYWtlZmlsZTozNjptbXUteVx0XHRcdDo9IG5vbW11Lm9cbm1tL01ha2VmaWxlLTM3LW1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5NAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIGBtbXUteSA6PSBub21tdS5vYCBBc3NpZ25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGFzc2lnbm1lbnQ6IGBtbXUteSA6PSBub21tdS5vYCBhbmQgbXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCAmIzM0O1dhaXQsIHRoYXQgZG9lc24mIzM5O3QgZmVlbCByaWdodC4mIzM0OyBNeSBleHBlcnRpc2UgaXMgdGVsbGluZyBtZSB0aGF0IGBtbXUteWAgdHlwaWNhbGx5IGltcGxpZXMgdGhlICpwcmVzZW5jZSogb2YgYW4gTU1VIChNZW1vcnkgTWFuYWdlbWVudCBVbml0KSwgbm90IGl0cyAqYWJzZW5jZSouIFRoZSBhc3NpZ25tZW50IHNlZW1zIGJhY2t3YXJkLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBpc3N1ZSBvciBhIGNvbmRpdGlvbmFsIGJ1aWxkIHNpdHVhdGlvbi4gVGhlIGNvcmUgb2YgbXkgY29uZnVzaW9uIGlzIHRoYXQgJiMzOTt5JiMzOTsgaW4gdGhlIE1ha2VmaWxlIHdvcmxkIGdlbmVyYWxseSBtZWFucyAmIzM5O2luY2x1ZGUgdGhpcyBmaWxlJiMzOTsgd2hpY2gsIGlmIHRoaXMgaXMgdHJ1bHkgdGhlIGNhc2UsIHN1Z2dlc3RzIHRoYXQgaWYgYW4gTU1VIGlzICpub3QqIHByZXNlbnQsIHdlIGFyZSBzdGlsbCAqaW5jbHVkaW5nKiBgbm9tbXUub2AgLS0gZG9lc24mIzM5O3QgdGhhdCBpbXBseSB3ZSBzaG91bGQgYmUgbmFtaW5nIGl0IGBub21tdS15YCBhbmQgdGhlbiBpdCAqcmVwbGFjZXMqIGBtbXUub2A/CgpUaGUgbmV4dCBzdGVwIGlzIG9idmlvdXM6IEkgbmVlZCB0byB2ZXJpZnkgaG93IGBtbXUteWAgaXMgYWN0dWFsbHkgdXNlZC4gVG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25kaXRpb25hbCBsb2dpYywgSSYjMzk7bGwganVtcCByaWdodCBpbnRvIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0JiMzOTtzIHdoZXJlIEkgbmVlZCB0byBsb29rIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYXNzaWdubWVudCBpcyBpbnRlcnByZXRlZCB3aXRoaW4gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgaXQgaXMgZW1wbG95ZWQuIFRoYXQgTWFrZWZpbGUgaXMgbXkga2V5IHRvIHVubG9ja2luZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzA6XHRLQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxuICAzMTpcdEtDT1ZfSU5TVFJVTUVOVF92bXN0YXQubyA6PSBuXG4gIDMyOlx0S0NPVl9JTlNUUlVNRU5UX2ZhaWxzbGFiLm8gOj0gblxuICAzMzpcdFxuICAzNDpcdENGTEFHU19pbml0LW1tLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxuICAzNTpcdFxuICAzNjpcdG1tdS15XHRcdFx0Oj0gbm9tbXUub1xuICAzNzpcdG1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4gIDM4Olx0XHRcdFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcbiAgMzk6XHRcdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbiAgNDA6XHRcdFx0XHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cbiAgNDE6XHRcbiAgNDI6XHRcbiAgNDM6XHRpZmRlZiBDT05GSUdfQ1JPU1NfTUVNT1JZX0FUVEFDSFxuICA0NDpcdG1tdS0kKENPTkZJR19NTVUpXHQmIzQzOz0gcHJvY2Vzc192bV9hY2Nlc3Mub1xuICA0NTpcdGVuZGlmXG4gIDQ2Olx0XG4gIDQ3Olx0aWZkZWYgQ09ORklHXzY0QklUXG4gIDQ4Olx0bW11LSQoQ09ORklHX01NVSlcdCYjNDM7PSBtc2VhbC5vXG4gIDQ5Olx0ZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTk0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOgoKKipNYWtlZmlsZSBMb2dpYyBmb3IgTU1VIEluY2x1c2lvbioqCgpPa2F5LCBzbyB0aGUgYG1tdS15IDo9IG5vbW11Lm9gIGFuZCBgbW11LSQoQ09ORklHX01NVSkgOj0gLi4uYCBsaW5lcyBhcmUgaG93IHRoaXMgcHJvamVjdCBoYW5kbGVzIGluY2x1ZGluZyBNTVUtc3BlY2lmaWMgb2JqZWN0IGZpbGVzLiBUaGF0IHNlZW1zIHRvIGJlIHRoZSBjb3JlIHN0cmF0ZWd5LiAgRXNzZW50aWFsbHksIHRoZSB2YWx1ZSBvZiB0aGUgYG1tdS15YCB2YXJpYWJsZSBjaGFuZ2VzIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgYENPTkZJR19NTVVgIHZhcmlhYmxlLiAgVGhlbiwgbGlrZWx5LCB0aGVyZSYjMzk7cyBhIHN1YnNlcXVlbnQgbGluZSwgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYG9iai15ICYjNDM7PSAkKG1tdS15KWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlY2lzaW9uIGdldHMgYmFrZWQgaW50byB0aGUgZmluYWwgYnVpbGQuIFRoaXMgaXMgYSBwcmV0dHkgc3RhbmRhcmQgY29uZGl0aW9uYWwgaW5jbHVzaW9uIGFwcHJvYWNoIHdpdGhpbiBNYWtlZmlsZXMsIHVzaW5nIHZhcmlhYmxlIGV4cGFuc2lvbiB0byBkcml2ZSB0aGUgaW5jbHVzaW9uLiBMZXQmIzM5O3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBpcyByaWdodDsgSSYjMzk7bGwgc2NhbiB0aHJvdWdoIHRoZSBjb2RlIGFuZCBjb25maXJtIHRoaXMgZXhwZWN0ZWQgcGF0dGVybi4gSSBuZWVkIHRvIHZlcmlmeSBob3cgYG1tdS15YCBpcyBhY3R1YWxseSB1c2VkIGFuZCBpZiBgQ09ORklHX01NVWAgaXMgcHJvcGVybHkgZXZhbHVhdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDUwOlx0XG4gIDUxOlx0b2JqLXlcdFx0XHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXG4gIDUyOlx0XHRcdFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcbiAgNTM6XHRcdFx0XHQgICByZWFkYWhlYWQubyBmb2xpby5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxuICA1NDpcdFx0XHRcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcbiAgNTU6XHRcdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxuICA1NjpcdFx0XHRcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXG4gIDU3Olx0XHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG4gIDU4Olx0XHRcdFx0ICAgZGVidWcubyBndXAubyBtbWFwX2xvY2subyB2bWFfaW5pdC5vICQobW11LXkpXG4gIDU5Olx0XG4gIDYwOlx0IyBHaXZlICYjMzk7cGFnZV9hbGxvYyYjMzk7IGl0cyBvd24gbW9kdWxlLXBhcmFtZXRlciBuYW1lc3BhY2VcbiAgNjE6XHRwYWdlLWFsbG9jLXkgOj0gcGFnZV9hbGxvYy5vXG4gIDYyOlx0cGFnZS1hbGxvYy0kKENPTkZJR19TSFVGRkxFX1BBR0VfQUxMT0NBVE9SKSAmIzQzOz0gc2h1ZmZsZS5vXG4gIDYzOlx0XG4gIDY0Olx0IyBHaXZlICYjMzk7bWVtb3J5X2hvdHBsdWcmIzM5OyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXG4gIDY1Olx0bWVtb3J5LWhvdHBsdWctJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpICYjNDM7PSBtZW1vcnlfaG90cGx1Zy5vXG4gIDY2Olx0XG4gIDY3Olx0b2JqLXkgJiM0Mzs9IHBhZ2UtYWxsb2Mub1xuICA2ODpcdG9iai15ICYjNDM7PSBwYWdlX2ZyYWdfY2FjaGUub1xuICA2OTpcdG9iai15ICYjNDM7PSBpbml0LW1tLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mjg2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRpc3NlY3RpbmcgdGhlIE9iamVjdCBGaWxlIENvbXBpbGF0aW9uIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJ1aWxkIHN5c3RlbSBsb2dpYywgc3BlY2lmaWNhbGx5IHRoaXMgbGluZTogYG9iai15ICYjNDM7PSAuLi4gJChtbXUteSlgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzLCBpZiBgQ09ORklHX01NVWAgaXMgc2V0LCB0aGVuIGBtbXUteWAgZXhwYW5kcyB0byBgbm9tbXUub2AuIEJ1dCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSByaWdodC4gSXQmIzM5O3MgYWN0dWFsbHk6IGBtbXUteSA6PSBub21tdS5vYCBhdCBmaXJzdC4gVGhlbiBJIHNlZSB0aGlzOiBgbW11LSQoQ09ORklHX01NVSkgOj0gaGlnaG1lbS5vIC4uLmAuCgpTbywgKmlmKiBgQ09ORklHX01NVWAgaXMgc2V0LCBkb2VzIHRoYXQgbWVhbiBgbW11LXlgIGJlY29tZXMgKmJvdGgqIGBub21tdS5vYCBhbmQgYGhpZ2htZW0ubyAuLi5gPyBObywgbm8sIEkmIzM5O20gb3ZlcnRoaW5raW5nIGl0LiBJdCYjMzk7cyBtb3JlIGxpa2UgdGhpczogYG1tdS0kKENPTkZJR19NTVUpYCBpcyBhIGNvbmRpdGlvbmFsIGFwcGVuZC4gSXQgbWVhbnMgdGhhdCAqaWYqIGBDT05GSUdfTU1VYCBpcyBlcXVhbCB0byAmIzM5O3kmIzM5OywgdGhlbiBgaGlnaG1lbS5vIC4uLmAgaXMgKmFwcGVuZGVkKiB0byB0aGUgYG1tdS15YCB2YXJpYWJsZSwgd2hpY2ggY3VycmVudGx5IGhvbGRzIGBub21tdS5vYC4KCk5vdywgaWYgYENPTkZJR19NTVVgIGlzIHNldCB0byAmIzM5O3kmIzM5OywgZG9lcyB0aGF0IG1lYW4gYG5vbW11Lm9gICpzdGlsbCogZ2V0cyBjb21waWxlZD8gVGhlIGxvZ2ljIHNlZW1zIHRvIGJlIGFkZGluZyBoaWdobWVtLm8gdG8gbW11LXkgaWYgQ09ORklHX01NVSBpcyBvbiwgYnV0IGl0IGlzbiYjMzk7dCBjbGVhciBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCBub21tdS5vLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgYW5kIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIEJlc3QgdG8gbG9vayBhdCB0aGUgc291cmNlIGNvZGUgZm9yIGBtbS9ub21tdS5jYCB0byBzZWUgaWYgdGhlcmUgaXMgYW55IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLCBvciB0byBlbnN1cmUgdGhhdCB0aGF0IGZpbGUgZG9lc24mIzM5O3QgZ2V0IGNvbXBpbGVkIGF0IGFsbCBpZiB0aGUgTU1VIGlzIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbm9tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQvKlxuICAgMzpcdCAqICBsaW51eC9tbS9ub21tdS5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiAgUmVwbGFjZW1lbnQgY29kZSBmb3IgbW0gZnVuY3Rpb25zIHRvIHN1cHBvcnQgQ1BVJiMzOTtzIHRoYXQgZG9uJiMzOTt0XG4gICA2Olx0ICogIGhhdmUgYW55IGZvcm0gb2YgbWVtb3J5IG1hbmFnZW1lbnQgdW5pdCAodGh1cyBubyB2aXJ0dWFsIG1lbW9yeSkuXG4gICA3Olx0ICpcbiAgIDg6XHQgKiAgU2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbm9tbXUtbW1hcC5yc3RcbiAgIDk6XHQgKlxuICAxMDpcdCAqICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBEYXZpZCBIb3dlbGxzIFx1MDAzY2Rob3dlbGxzQHJlZGhhdC5jb21cdTAwM2VcbiAgMTE6XHQgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMgRGF2aWQgTWNDdWxsb3VnaCBcdTAwM2NkYXZpZG1Ac25hcGdlYXIuY29tXHUwMDNlXG4gIDEyOlx0ICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIEQgSmVmZiBEaW9ubmUgXHUwMDNjamVmZkB1Q2xpbnV4Lm9yZ1x1MDAzZVxuICAxMzpcdCAqICBDb3B5cmlnaHQgKGMpIDIwMDIgICAgICBHcmVnIFVuZ2VyZXIgXHUwMDNjZ2VyZ0BzbmFwZ2Vhci5jb21cdTAwM2VcbiAgMTQ6XHQgKiAgQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgUGF1bCBNdW5kdCBcdTAwM2NsZXRoYWxAbGludXgtc2gub3JnXHUwMDNlXG4gIDE1Olx0ICovXG4gIDE2Olx0XG4gIDE3Olx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcJiMzNDs6IFwmIzM0OyBmbXRcbiAgMTg6XHRcbiAgMTk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9leHBvcnQuaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTI0NgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDExMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLYnVpbGQgQ29udW5kcnVtKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYG1tdS15IDo9IG5vbW11Lm9gIGFzc2lnbm1lbnQuLi4gZG9lcyB0aGlzICphbHdheXMqIHNldCBgbW11LXlgIHRvIGBub21tdS5vYD8gVGhhdCBmZWVscyBvdmVybHkgc2ltcGxpc3RpYy4gVGhlIHdheSBLYnVpbGQgd29ya3MgaXMgdGhhdCBgbW11LXlgIGlzIGEgdmFyaWFibGUsIHJpZ2h0PyBJdOKAmXMgbm90IGEgZGlyZWN0LCBhYnNvbHV0ZSBzdWJzdGl0dXRpb24uCgpTbywgaWYgYENPTkZJR19NTVVgIGlzIHNldCB0byAmIzM5O3kmIzM5Oywgd2hpY2ggbWVhbnMgdGhlIE1NVSAqaXMqIGVuYWJsZWQsIHRoZW4gYG1tdS15YCBzaG91bGQgZXhwYW5kIGludG8gc29tZXRoaW5nICptb3JlKiB0aGFuIGp1c3QgYG5vbW11Lm9gLCBzb21ldGhpbmcgbGlrZSBgbm9tbXUubyBoaWdobWVtLm8gLi4uYCBwb3RlbnRpYWxseT8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGxvZ2ljIGluIG15IG1pbmQuCgpUbyBiZSBjZXJ0YWluLCBsZXQmIzM5O3Mgc3RvcCBhbmQgdmVyaWZ5IHdoZXRoZXIgYG5vbW11LmNgIGlzIGFjdHVhbGx5IGNvbXBpbGVkLCBldmVuIHdoZW4gYENPTkZJR19NTVVgICppcyogY29uZmlndXJlZCB3aXRoICYjMzk7eSYjMzk7LiBUaGF0JiMzOTtzIHRoZSBrZXkgdGVzdCBoZXJlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub21tdS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTM0PUNGTEFHU19pbml0LW1tLm8gJiM0Mzs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxubW0vTWFrZWZpbGUtMzUtXG5tbS9NYWtlZmlsZTozNjptbXUteVx0XHRcdDo9IG5vbW11Lm9cbm1tL01ha2VmaWxlLTM3LW1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2ODUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDoKCioqQ2hlY2tpbmcgQ29tcGlsYXRpb24gb2YgYG5vbW11LmNgIHdpdGggTU1VIEVuYWJsZWQqKgoKT2theSwgaG9sZCBvbi4gQmVmb3JlIEkgcHJvY2VlZCwgSSBuZWVkIHRvIHZlcmlmeSBhIGZ1bmRhbWVudGFsIGFzc3VtcHRpb24uIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBzdXJlIHRoYXQgYG5vbW11LmNgIGlzIGFjdHVhbGx5IGJ1aWx0IGludG8gdGhlIGtlcm5lbCB3aGVuIHRoZSBgQ09ORklHX01NVT15YCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQuIEl0IHNlZW1zIGNvdW50ZXItaW50dWl0aXZlLCBhbmQgSSBuZWVkIHRvIHNvbGlkaWZ5IG15IHVuZGVyc3RhbmRpbmcuIEkgaGF2ZSBhbiBpbmtsaW5nLCBidXQgSSBjYW4mIzM5O3Qgb3BlcmF0ZSBvbiBhbiBhc3N1bXB0aW9uLgoKQWxyaWdodCwgdGltZSB0byByZXZpc2l0IGBtbS9NYWtlZmlsZWAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGNvbXBpbGF0aW9uIGxvZ2ljIGZvciBtZW1vcnkgbWFuYWdlbWVudCBmaWxlcyByZXNpZGVzLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbHMgYXJlIHN0cnVjdHVyZWQgaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIHJ1bGVzIHRoYXQgY292ZXIgYG5vbW11LmNgIGFuZCBjb25maXJtIHRoYXQgdGhleSBhcmUgY29uZGl0aW9uYWwgb24gYENPTkZJR19NTVVgLCBvciBpdHMgbmVnYXRpb24sIHdoaWNoZXZlciBpcyByZWxldmFudC4gT25seSB0aGVuIGNhbiBJIGJlIHN1cmUgaWYgbXkgY3VycmVudCBoeXBvdGhlc2lzIGhvbGRzIHdhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAzMDpcdEtDT1ZfSU5TVFJVTUVOVF9tbXpvbmUubyA6PSBuXG4gIDMxOlx0S0NPVl9JTlNUUlVNRU5UX3Ztc3RhdC5vIDo9IG5cbiAgMzI6XHRLQ09WX0lOU1RSVU1FTlRfZmFpbHNsYWIubyA6PSBuXG4gIDMzOlx0XG4gIDM0Olx0Q0ZMQUdTX2luaXQtbW0ubyAmIzQzOz0gLVduby1vdmVycmlkZS1pbml0XG4gIDM1Olx0XG4gIDM2Olx0bW11LXlcdFx0XHQ6PSBub21tdS5vXG4gIDM3Olx0bW11LSQoQ09ORklHX01NVSlcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcbiAgMzg6XHRcdFx0XHQgICBtbG9jay5vIG1tYXAubyBtbXVfZ2F0aGVyLm8gbXByb3RlY3QubyBtcmVtYXAubyBcXFxuICAzOTpcdFx0XHRcdCAgIG1zeW5jLm8gcGFnZV92bWFfbWFwcGVkLm8gcGFnZXdhbGsubyBcXFxuICA0MDpcdFx0XHRcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xuICA0MTpcdFxuICA0MjpcdFxuICA0MzpcdGlmZGVmIENPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIXG4gIDQ0Olx0bW11LSQoQ09ORklHX01NVSlcdCYjNDM7PSBwcm9jZXNzX3ZtX2FjY2Vzcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyMzUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiA4OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLYnVpbGQgYW5kIERldGVybWluaW5nIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJbml0aWFsbHksIEkgd2FzIGEgYml0IHB1enpsZWQgYnkgdGhpcyBLYnVpbGQgbG9naWMuIElmIGBDT05GSUdfTU1VPXlgLCB0aGVuIGBtbXUteWAgaXMgc2V0IHRvIGBub21tdS5vYCwgd2hpY2ggc2VlbXMgY291bnRlcmludHVpdGl2ZS4gQnV0IHdhaXQsIGl0IHVzZXMgYDo9YCwgc28gaXQmIzM5O3MgYW4gYXNzaWdubWVudC4gVGhlbiwgdGhlIG5leHQgbGluZSBvdmVyd3JpdGVzIGl0IHdpdGggYGhpZ2htZW0uby4uLmAgd2hlbiBgQ09ORklHX01NVT15YC4gU28gZWZmZWN0aXZlbHksIGlmIGBDT05GSUdfTU1VYCAqaXMqIHNldCwgYG1tdS15YCBiZWNvbWVzIGBoaWdobWVtLm8gLi4uYC4gSWYgYENPTkZJR19NTVVgIGlzICpub3QqIHNldCwgdGhlbiBgbW11LXlgIHJlbWFpbnMgYG5vbW11Lm9gLiBUaGF0JiMzOTtzIGEgY2xldmVyIHRyaWNrLCBhY3R1YWxseS4KCk15IHRob3VnaHQgaXMsIHRoZXJlZm9yZSwgaWYgSSBhbSBjb3JyZWN0LCB0aGVuIGBub21tdS5jYCBpcyAqb25seSogY29tcGlsZWQgd2hlbiBgIUNPTkZJR19NTVVgLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGJlIHRlc3RlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBkaXNjYXJkIHBhdGNoZXMgdGhhdCBvbmx5IHRvdWNoIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMuIEhvd2V2ZXIsIFFFTVUgKmRvZXMqIHN1cHBvcnQgYG5vbW11YCB0YXJnZXRzIChtNjhrLCByaXNjdiwgYXJtKSwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSByZWFjaGFibGUuIEFuZCBTeXprYWxsZXIgcnVucyBvbiBRRU1VLCBzbyBpdCBzaG91bGQgYmUgZmVhc2libGUgdG8gZnV6eiBpdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiBTeXprYWxsZXIgYWxyZWFkeSB0ZXN0cyBgbm9tbXVgLCBhbmQgeWVzLCBpdCBkb2VzLCB1c2luZyBgc3l6LWV4ZWN1dG9yYCBmb3IgYG5vbW11YC4gVGhhdCBtZWFucyB3ZSBhcmUgZ29vZCBvbiB0aGUgJiMzNDtyZWFjaGFiaWxpdHkmIzM0OyBmcm9udC4KClNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYG1tL25vbW11LmNgLCBzcGVjaWZpY2FsbHkgYGRvX21yZW1hcGAsIGFuZCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIChhbGxvd2luZyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnRpbmcgZmlsZS1iYWNrZWQgVk1BcyksIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGxvZ2ljIGluIHRoZSBwYXRjaCwgd2hpY2ggYWRkcyB0aGlzOgpgYGBjCgkvKiBsaWtlIGRvX211bm1hcCgpLCB3ZSYjMzk7cmUgYWxsb3dlZCB0byBzaHJpbmsgYW4gYW5vbnltb3VzIFZNQSBidXQgbm90IGEgZmlsZS1iYWNrZWQgb25lICovCglpZiAodm1hLSZndDt2bV9maWxlKQoJCXJldHVybiAodW5zaWduZWQgbG9uZykgLUVJTlZBTDsKCgkvKiBhbGwgY2hlY2tzIGNvbXBsZXRlIC0gZG8gaXQgKi8KCWlmIChuZXdfbGVuICZsdDsgb2xkX2xlbikgewoJCS8qIHNocmluayBvbmx5IGhhcHBlbnMgYWRkciAmIzQzOyBuZXdfbGVuIGFuZCBvbGRfbGVuIGFyZSBpbiBkaWZmZXJlbnQgcGFnZXMgKi8KCQlWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LSZndDttbSwgYWRkcik7CgkJaW50IHJldDsKCgkJLyogdm1pX3Nocmlua192bWEoKSBuZWVkcyBmcm9tL3RvIHBvaW50ZXJzIHRvIGJlIHJlbW92ZWQsCgkJICogKG1haW5seSB1c2VkIGluIG11bm1hcCkgc28sIHNwZWNpZnkgdGhlbS4KCQkgKi8KCQlyZXQgPSB2bWlfc2hyaW5rX3ZtYSgmYW1wO3ZtaSwgdm1hLCBhZGRyICYjNDM7IG5ld19sZW4sIGFkZHIgJiM0Mzsgb2xkX2xlbik7CgkJaWYgKHJldCAmbHQ7IDApCgkJCXJldHVybiAodW5zaWduZWQgbG9uZykgcmV0OwoJfSBlbHNlIHsKCQkvKiB3aGVuIHRoZXJlIGFyZSBubyBzaHJpbmssIHVwZGF0ZSB2bWEuICAqLwoJCXZtYS0mZ3Q7dm1fZW5kID0gdm1hLSZndDt2bV9zdGFydCAmIzQzOyBuZXdfbGVuOwoJfQpgYGAKCk5vdywgdGhlIGNvbmZpZyEgV2hhdCBjb25maWcocykgZG8gSSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlPyBUaGlzIHJlcXVpcmVzIGAhQ09ORklHX01NVWAsIGhvd2V2ZXIgSSBjYW4mIzM5O3Qgc3BlY2lmeSBhIG5lZ2F0aXZlIGNvbmZpZyBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IGl0JiMzOTtzIHRvIGV4cGxpY2l0bHkgZW5hYmxlLCBzbyBJIG1pZ2h0IGp1c3QgbGVhdmUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5LiBJcyB0aGVyZSBhIGBDT05GSUdfTk9NTVVgPyBQcm9iYWJseSBub3QuIFRoZSBhYnNlbmNlIG9mIGBDT05GSUdfTU1VYCBpcyBsaWtlbHkgdGhlIGtleS4gSSB3aWxsIGNvbmZpcm0gaWYgdGhlcmUgaXMgYSBgQ09ORklHX05PTU1VYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5PTU1VJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz00PWNvbmZpZyBNTVVcbi0tXG5hcmNoL3NoL21tL0tjb25maWctMTgtXG5hcmNoL3NoL21tL0tjb25maWc6MTk6Y29uZmlnIE5PTU1VXG5hcmNoL3NoL21tL0tjb25maWctMjAtXHRkZWZfYm9vbCAhTU1VXG4tLVxubW0vS2NvbmZpZz03ODA9Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxuLS1cbm1tL0tjb25maWctNzg0LVxubW0vS2NvbmZpZzo3ODU6Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1Ncbm1tL0tjb25maWctNzg2LVx0aW50IFwmIzM0O1R1cm4gb24gbW1hcCgpIGV4Y2VzcyBzcGFjZSB0cmltbWluZyBiZWZvcmUgYm9vdGluZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MDU3CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTk9NTVUgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhlIGBOT01NVWAgY29uZmlndXJhdGlvbiB3b3JrcyB3aXRoaW4gdGhpcyBwcm9qZWN0LiBSaWdodCwgSSBzZWUgdGhhdCBgY29uZmlnIE5PTU1VYCBpcyBkZWZpbmVkIGluIGBhcmNoL3NoL21tL0tjb25maWdgLCBidXQgaXQmIzM5O3MgcmVhbGx5IGp1c3QgYSBgZGVmX2Jvb2wgIU1NVWAuIFNvLCBiYXNpY2FsbHksIGBOT01NVWAgaXMgaW1wbGljaXRseSBzZXQgd2hlbiB3ZSBkb24mIzM5O3QgaGF2ZSBhbiBNTVUuIEludGVyZXN0aW5nLgoKSSB3YXMgZXhwZWN0aW5nIGEgbW9yZSBkaXJlY3QgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBnZW5lcmFsIGBDT05GSUdfTU1VYCBkZWZpbml0aW9uIHRob3VnaD8gWWVzLCB0aGVyZSBpcy4gQWxyaWdodC4KClNvLCBzaW5jZSB0aGVyZSBpc24mIzM5O3QgYSBzaW5nbGUgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gKmVuYWJsZSogdGhlIHJlbGV2YW50IGNvZGUgZm9yIHRoZSBOT01NVSwgd2UmIzM5O3JlIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBgQ09ORklHX01NVWAsIEkmIzM5O2xsIGxlYXZlIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBlbXB0eS4gVGhlcmUmIzM5O3Mgbm8gc2luZ2xlIGNvbmZpZyB0byBleHBsaWNpdGx5ICYjMzQ7ZW5hYmxlJiMzNDsgdGhpcyBiZWhhdmlvci4gSXQmIzM5O3MgbW9yZSBhYm91dCBleGNsdXNpb24uCgpOb3csIHdhaXQgYSBzZWNvbmQsIHRoZXJlIG1pZ2h0IGJlIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBJIHNob3VsZCBiZSBhd2FyZSBvZi4gTGV0JiMzOTtzIG1ha2Ugc3VyZS4gVGhlIGZ1bmN0aW9uIHRoYXQgSSYjMzk7bSBjdXJyZW50bHkgbG9va2luZyBhdCBpcyBgZG9fbXJlbWFwYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgZnVuY3Rpb24uCgpPa2F5LCBsZXQmIzM5O3MgZ28gY2hlY2sgdGhlIGRlZmluaXRpb24gZm9yIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RvX21yZW1hcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL25vbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbm9tbXUuYz0xNTM1PXZvaWQgZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL25vbW11LmMtMTU2OC0gKi9cbm1tL25vbW11LmM6MTU2OTpzdGF0aWMgdW5zaWduZWQgbG9uZyBkb19tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbm9tbXUuYy0xNTcwLVx0XHRcdHVuc2lnbmVkIGxvbmcgb2xkX2xlbiwgdW5zaWduZWQgbG9uZyBuZXdfbGVuLFxuLS1cbm1tL25vbW11LmM9MTYyMz1TWVNDQUxMX0RFRklORTUobXJlbWFwLCB1bnNpZ25lZCBsb25nLCBhZGRyLCB1bnNpZ25lZCBsb25nLCBvbGRfbGVuLFxuLS1cbm1tL25vbW11LmMtMTYyOS1cdG1tYXBfd3JpdGVfbG9jayhjdXJyZW50LVx1MDAzZW1tKTtcbm1tL25vbW11LmM6MTYzMDpcdHJldCA9IGRvX21yZW1hcChhZGRyLCBvbGRfbGVuLCBuZXdfbGVuLCBmbGFncywgbmV3X2FkZHIpO1xubW0vbm9tbXUuYy0xNjMxLVx0bW1hcF93cml0ZV91bmxvY2soY3VycmVudC1cdTAwM2VtbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3NDAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbXJlbWFwYCBTeXN0ZW0gQ2FsbCBpbiBhIE5vLU1NVSBDb250ZXh0KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBgbXJlbWFwYCBpcyBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgd2l0aGluIGEgTm8tTU1VIGVudmlyb25tZW50LiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGZ1bmN0aW9uIGhlcmUgaXMgYGRvX21yZW1hcGAsIHdoaWNoIGlzIGRpcmVjdGx5IGNhbGxlZCBieSBgc3lzX21yZW1hcGAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdXNlIGVpdGhlciBgZG9fbXJlbWFwYCBvciBgc3lzX21yZW1hcGAgYXMgdGhlIGZvY3VzIHN5bWJvbCBmb3IgbXkgYW5hbHlzaXMuIEdpdmVuIHRoYXQgYGRvX21yZW1hcGAgaXMgZGVjbGFyZWQgYHN0YXRpY2AsIGl0IHNlZW1zIGxpa2UgYSBwYXJ0aWN1bGFybHkgZ29vZCBjaG9pY2UuIEFsdGhvdWdoIGl0JiMzOTtzIGludGVybmFsLCBTeXprYWxsZXIgY2FuIHN0aWxsIGludGVyYWN0IHdpdGggaXQgaWYgd2UgcHJvdmlkZSBpdCB0aGUgc3ltYm9sLCBldmVuIGlmIGl0JiMzOTtzIHN0YXRpYyEgQW5kIG9mIGNvdXJzZSwgdGhlIGBzeXNfbXJlbWFwYCBzeXN0ZW0gY2FsbCBpcyBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIHRvbywgZXNwZWNpYWxseSBpZiBpdCBwb2ludHMgdG8gYSBwbGF0Zm9ybSBzcGVjaWZpYyB2ZXJzaW9uIGxpa2UgYF9faWEzMl9zeXNfbXJlbWFwYCAvIGBfX3g2NF9zeXNfbXJlbWFwYCAodGhvdWdoIGluIHRoaXMgY29udGV4dCwgdGhhdCB3b3VsZCBsaWtlbHkganVzdCBiZSBgc3lzX21yZW1hcGApLiBVbHRpbWF0ZWx5LCBJJiMzOTtsbCBnbyB3aXRoIGBkb19tcmVtYXBgIGZvciBub3cuCgpOb3csIGxldCBtZSBkb3VibGUtY2hlY2sgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcgcGVydGluZW50LiBTcGVjaWZpY2FsbHksIGlzIGB2bWlfc2hyaW5rX3ZtYWAgYXZhaWxhYmxlIGluIHRoZSBOby1NTVUgY29uZmlndXJhdGlvbj8gQmFzZWQgb24gd2hhdCBJJiMzOTttIHNlZWluZywgaXQgYXBwZWFycyBpbiBgbW0vdm1hLmNgIG9yIHBlcmhhcHMgYG1tL21tYXAuY2Agd2hpY2ggbWlnaHQgYmUgY29tcGlsZWQgZm9yIE5vLU1NVSBzZXR1cHMuIEFjdHVhbGx5LCBJIHdhcyByaWdodCB0aGUgZmlyc3QgdGltZSwgYHZtYS5jYCBpcyBjb25kaXRpb25hbGl6ZWQgYnkgdGhlIGBDT05GSUdfTU1VYCBLY29uZmlnIG9wdGlvbi4gTGV0IG1lIGp1c3QgcXVpY2tseSBnbyBiYWNrIHRvIGBtbS9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIEkgZGlkbiYjMzk7dCBtaXNzIHNvbWV0aGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTM3PW1tdS0kKENPTkZJR19NTVUpXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXG4tLVxubW0vTWFrZWZpbGUtMzktXHRcdFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXG5tbS9NYWtlZmlsZTo0MDpcdFx0XHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cbm1tL01ha2VmaWxlLTQxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTIxCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkRpZ2dpbmcgaW50byB0aGF0IGB2bWEub2AgRGVwZW5kZW5jeSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGp1c3QgcmVhbGl6ZWQgc29tZXRoaW5nIGFib3V0IHRoYXQgYHZtYS5vYCBmaWxlLiBJdCYjMzk7cyBuZXN0bGVkIGluIGBtbXUtJChDT05GSUdfTU1VKWAsIG1lYW5pbmcgaXQmIzM5O3Mgb25seSBnZXR0aW5nIGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgIGlzIHNldCB0byAmIzM5O3kmIzM5Oy4gVGhhdCYjMzk7cyBhIGNydWNpYWwgZGV0YWlsLiBJIG5lZWQgdG8ga2VlcCB0aGF0IHJlc3RyaWN0aW9uIGluIG1pbmQuIFRoZSBwcm9ibGVtIGlzLCB0aGlzIHBhdGNoIGlzIHJlZmVyZW5jaW5nIGB2bWlfc2hyaW5rX3ZtYWAsIHdoaWNoIGlzIGEgZnVuY3Rpb24gd2l0aGluIGBtbS9ub21tdS5jYCwgYW5kIHRoYXQgc2VlbXMgaW5jb21wYXRpYmxlIGdpdmVuIHRoZSBjb250ZXh0IGFib3ZlLgoKTm93IEkmIzM5O20gcmVhbGx5IGdldHRpbmcgY29uZnVzZWQuIFdoZXJlIGlzIGB2bWlfc2hyaW5rX3ZtYWAgZXZlbiBkZWZpbmVkPyBBbmQgaG93IGNvdWxkIGl0IHBvc3NpYmx5IGJlIHVzZWQgaWYgdGhlIG1vZHVsZSBpcyByZXN0cmljdGVkIGJ5IGEgZmVhdHVyZSB0aGF0IGlzIGluIHRoZSBvcHBvc2l0ZSBjb250ZXh0PyBJIG5lZWQgdG8gZmluZCBpdHMgb3JpZ2luIGFuZCBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIGNvbm5lY3Rpb24uIFRoZXJlJiMzOTtzIGRlZmluaXRlbHkgc29tZXRoaW5nIG5vdCBhZGRpbmcgdXAgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1pX3Nocmlua192bWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbm9tbXUuYz0xMzI5PXN0YXRpYyBpbnQgc3BsaXRfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbm9tbXUuYy0xNDEwLSAqL1xubW0vbm9tbXUuYzoxNDExOnN0YXRpYyBpbnQgdm1pX3Nocmlua192bWEoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLFxubW0vbm9tbXUuYy0xNDEyLVx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9ub21tdS5jPTE0NTM9aW50IGRvX211bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZV90IGxlbiwgc3RydWN0IGxpc3RfaGVhZCAqdWYpXG4tLVxubW0vbm9tbXUuYy0xNTAzLVx0XHR9XG5tbS9ub21tdS5jOjE1MDQ6XHRcdHJldHVybiB2bWlfc2hyaW5rX3ZtYShcdTAwMjZ2bWksIHZtYSwgc3RhcnQsIGVuZCk7XG5tbS9ub21tdS5jLTE1MDUtXHR9XG4tLVxubW0vbm9tbXUuYz0xNTY5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX21yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbm9tbXUuYy0xNjA5LVxubW0vbm9tbXUuYzoxNjEwOlx0XHQvKiB2bWlfc2hyaW5rX3ZtYSgpIG5lZWRzIGZyb20vdG8gcG9pbnRlcnMgdG8gYmUgcmVtb3ZlZCxcbm1tL25vbW11LmMtMTYxMS1cdFx0ICogKG1haW5seSB1c2VkIGluIG11bm1hcCkgc28sIHNwZWNpZnkgdGhlbS5cbm1tL25vbW11LmMtMTYxMi1cdFx0ICovXG5tbS9ub21tdS5jOjE2MTM6XHRcdHJldCA9IHZtaV9zaHJpbmtfdm1hKFx1MDAyNnZtaSwgdm1hLCBhZGRyICYjNDM7IG5ld19sZW4sIGFkZHIgJiM0Mzsgb2xkX2xlbik7XG5tbS9ub21tdS5jLTE2MTQtXHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjUwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgdm1pX3Nocmlua192bWFgKioKClJpZ2h0LCBzbyBJIHNlZSB0aGF0IGB2bWlfc2hyaW5rX3ZtYWAgaXNuJiMzOTt0IHNvbWUgb2JzY3VyZSBmdW5jdGlvbjsgaXQmIzM5O3MgYWN0dWFsbHkgZGVmaW5lZCByaWdodCB0aGVyZSBpbiBgbW0vbm9tbXUuY2AuIEV4Y2VsbGVudC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBpbW1lbnNlbHkuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nLiBUaW1lIHRvIGNoZWNrIG91dCB0aGUgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBqdW1wIHRvIGxpbmUgMTQxMSBpbiBgbW0vbm9tbXUuY2AgYW5kIGRpZyBpbnRvIGl0LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBtYWdpYywgb3IgdGhlIHRyb3VibGUsIGxpa2VseSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAwMzoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL25vbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MTA6XHQgKi9cbjE0MTE6XHRzdGF0aWMgaW50IHZtaV9zaHJpbmtfdm1hKHN0cnVjdCB2bWFfaXRlcmF0b3IgKnZtaSxcbjE0MTI6XHRcdFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4xNDEzOlx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bylcbjE0MTQ6XHR7XG4xNDE1Olx0XHRzdHJ1Y3Qgdm1fcmVnaW9uICpyZWdpb247XG4xNDE2Olx0XG4xNDE3Olx0XHQvKiBhZGp1c3QgdGhlIFZNQSYjMzk7cyBwb2ludGVycywgd2hpY2ggbWF5IHJlcG9zaXRpb24gaXQgaW4gdGhlIE1NJiMzOTtzIHRyZWVcbjE0MTg6XHRcdCAqIGFuZCBsaXN0ICovXG4xNDE5Olx0XHRpZiAoZnJvbSBcdTAwM2Ugdm1hLVx1MDAzZXZtX3N0YXJ0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDAzOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjMwCgkJCQkJCQlvdXRwdXQ6IDk2CgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBgbXJlbWFwYCBQYXRjaCBmb3IgTm9NTVUgQXJjaGl0ZWN0dXJlcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBwaW5uZWQgZG93biB0aGUgbG9jYXRpb24gb2YgYHZtaV9zaHJpbmtfdm1hYCDigJMgaXQmIzM5O3MgZGVmaW5pdGVseSBpbiBgbm9tbXUuY2AsIGFzIGV4cGVjdGVkLiBOb3csIHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFsdGVycyBgZG9fbXJlbWFwYCB3aXRoaW4gYG1tL25vbW11LmNgLiBHaXZlbiB0aGF0IGBtcmVtYXBgIGlzIGEgc3lzY2FsbCBhbmQgaXMgYWNjZXNzaWJsZSBvbiBOb01NVSBhcmNoaXRlY3R1cmVzLCBJJiMzOTtkIHNheSB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZXJlZm9yZSwgaXMgaXQgZnV6ei13b3J0aHk/IEFic29sdXRlbHksIHllcy4KCk15IHByaW1hcnkgZm9jdXMgc3ltYm9sIG5lZWRzIHRvIGJlIGBkb19tcmVtYXBgIGl0c2VsZiwgdGhvdWdoIEkgY291bGQgYWxzbyBjb25zaWRlciBgc3lzX21yZW1hcGAsIHdoaWNoIGlzIGltcGxlbWVudGVkIHZpYSBgU1lTQ0FMTF9ERUZJTkU1KG1yZW1hcCwgLi4uKWAgaW4gdGhlIHN5c2NhbGwgdGFibGUuIEhvd2V2ZXIsIHNpbmNlIGBkb19tcmVtYXBgIGlzIHRoZSBhY3R1YWwgZnVuY3Rpb24gYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQsIGl0JiMzOTtzIHRoZSBtb3JlIHByZWNpc2UgdGFyZ2V0LgoKTm93LCBsZXQmIzM5O3MgdGhpbmsgYWJvdXQgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFNpbmNlIHRoaXMgcGF0Y2ggdGFyZ2V0cyB0aGUgTm9NTVUgY2FzZSwgdGhhdCBtZWFucyBgQ09ORklHX01NVWAgaXMgKm5vdCogZW5hYmxlZC4gVGhlcmUgaXNuJiMzOTt0IGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gKmVuYWJsZSogdGhpcyBwYXRjaDsgaXQmIzM5O3MgYSBjb25zZXF1ZW5jZSBvZiB0aGUgYWJzZW5jZSBvZiBgQ09ORklHX01NVWAuIFRodXMsIGBFbmFibGVDb25maWdzYCByZW1haW5zIGVtcHR5LiBJIGNoZWNrZWQgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMsIGJ1dCB0aGVyZSBhcmVuJiMzOTt0LgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIGxldCBtZSBjb25maXJtIHRoYXQgYGRvX21yZW1hcGAgaXMgaW5kZWVkIHRoZSBwcmltYXJ5IGZvY3VzIGhlcmUuIFllcywgaXQmIzM5O3MgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIGFsdGVyZWQgYnkgdGhlIHBhdGNoLgoKSGVyZSYjMzk7cyBteSBkaXN0aWxsZWQgcmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX21yZW1hcGAgaW4gYG1tL25vbW11LmNgIHRvIGhhbmRsZSB0aGUgc2hyaW5raW5nIG9mIGFub255bW91cyBWTUFzIGFuZCB0byBwcmV2ZW50IHNocmlua2luZyBmaWxlLWJhY2tlZCBWTUFzLiBUaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2Ygc3lzdGVtcyB3aXRob3V0IGFuIE1NVS4gSXQmIzM5O3MgcmVhY2hlZCBieSB3YXkgb2YgdGhlIGBtcmVtYXBgIHN5c2NhbGwuCgpUaGVyZWZvcmU6CgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtkb19tcmVtYXAmIzM0O11gCiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKEJlY2F1c2UgaXQgcmVxdWlyZXMgYCFDT05GSUdfTU1VYCkKCk9uZSBsYXN0IHF1aWNrIGNoZWNrOiBJJiMzOTt2ZSB2ZXJpZmllZCB0aGF0IG9ubHkgYGRvX21yZW1hcGAgaGFzIGJlZW4gY2hhbmdlZC4KCk5vdywgSSYjMzk7bSBjb25maWRlbnQgZW5vdWdoIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMDM6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RvX21yZW1hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZG9fbXJlbWFwYCBpbiBgbW0vbm9tbXUuY2AgdG8gYWxsb3cgc2hyaW5raW5nIGFub255bW91cyBWTUFzIGFuZCBwcmV2ZW50IHNocmlua2luZyBmaWxlLWJhY2tlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgZm9yIG5vbW11IGFyY2hpdGVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBtcmVtYXBgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZG9fbXJlbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBhbGxvdyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnQgc2hyaW5raW5nIGZpbGUtYmFja2VkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBmb3Igbm9tbXUgYXJjaGl0ZWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYG1yZW1hcGAgc3lzY2FsbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIwOjI1LjY3OTEyOTAwN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMDA5OTg0NjczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX21yZW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBhbGxvdyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnQgc2hyaW5raW5nIGZpbGUtYmFja2VkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBmb3Igbm9tbXUgYXJjaGl0ZWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYG1yZW1hcGAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6MjUuNjc5MTM0MjU3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTQ5ODk3NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjNDkxY2NmZTVjZTRjYWEzZDExNzlhMzY3NTdkYTI1MDA4M2Y2MTAyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgSnVsIDExIDAzOjIwOjI0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jXFxuaW5kZXggODUyZWM5YmQwNTA1OTIuLmM4ZWZmYmZmYTBmMDFjIDEwMDY0NFxcbi0tLSBhL21tL25vbW11LmNcXG4rKysgYi9tbS9ub21tdS5jXFxuQEAgLTE1OTcsOCArMTU5NywyNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkb19tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXHRpZiAobmV3X2xlbiBcXHUwMDNlIHZtYS1cXHUwMDNldm1fcmVnaW9uLVxcdTAwM2V2bV9lbmQgLSB2bWEtXFx1MDAzZXZtX3JlZ2lvbi1cXHUwMDNldm1fc3RhcnQpXFxuIFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZykgLUVOT01FTTtcXG4gXFxuK1xcdC8qIGxpa2UgZG9fbXVubWFwKCksIHdlJ3JlIGFsbG93ZWQgdG8gc2hyaW5rIGFuIGFub255bW91cyBWTUEgYnV0IG5vdCBhIGZpbGUtYmFja2VkIG9uZSAqL1xcbitcXHRpZiAodm1hLVxcdTAwM2V2bV9maWxlKVxcbitcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC1FSU5WQUw7XFxuK1xcbiBcXHQvKiBhbGwgY2hlY2tzIGNvbXBsZXRlIC0gZG8gaXQgKi9cXG4tXFx0dm1hLVxcdTAwM2V2bV9lbmQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0ICsgbmV3X2xlbjtcXG4rXFx0aWYgKG5ld19sZW4gXFx1MDAzYyBvbGRfbGVuKSB7XFxuK1xcdFxcdC8qIHNocmluayBvbmx5IGhhcHBlbnMgYWRkciArIG5ld19sZW4gYW5kIG9sZF9sZW4gYXJlIGluIGRpZmZlcmVudCBwYWdlcyAqL1xcbitcXHRcXHRWTUFfSVRFUkFUT1Iodm1pLCBjdXJyZW50LVxcdTAwM2VtbSwgYWRkcik7XFxuK1xcdFxcdGludCByZXQ7XFxuK1xcbitcXHRcXHQvKiB2bWlfc2hyaW5rX3ZtYSgpIG5lZWRzIGZyb20vdG8gcG9pbnRlcnMgdG8gYmUgcmVtb3ZlZCxcXG4rXFx0XFx0ICogKG1haW5seSB1c2VkIGluIG11bm1hcCkgc28sIHNwZWNpZnkgdGhlbS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IHZtaV9zaHJpbmtfdm1hKFxcdTAwMjZ2bWksIHZtYSwgYWRkciArIG5ld19sZW4sIGFkZHIgKyBvbGRfbGVuKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAodW5zaWduZWQgbG9uZykgcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiB3aGVuIHRoZXJlIGFyZSBubyBzaHJpbmssIHVwZGF0ZSB2bWEuICAqL1xcbitcXHRcXHR2bWEtXFx1MDAzZXZtX2VuZCA9IHZtYS1cXHUwMDNldm1fc3RhcnQgKyBuZXdfbGVuO1xcbitcXHR9XFxuIFxcdHJldHVybiB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMDoyNi4wNzQ5MjI1ODNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjE0MTg1NTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRvX21yZW1hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBhbGxvdyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnQgc2hyaW5raW5nIGZpbGUtYmFja2VkIFZNQXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBtZW1vcnkgbWFuYWdlbWVudCBmb3Igbm9tbXUgYXJjaGl0ZWN0dXJlcyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYG1yZW1hcGAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNDkxY2NmZTVjZTRjYWEzZDExNzlhMzY3NTdkYTI1MDA4M2Y2MTAyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTEgMDM6MjA6MjQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuY1xuaW5kZXggODUyZWM5YmQwNTA1OTIuLmM4ZWZmYmZmYTBmMDFjIDEwMDY0NFxuLS0tIGEvbW0vbm9tbXUuY1xuKysrIGIvbW0vbm9tbXUuY1xuQEAgLTE1OTcsOCArMTU5NywyNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBkb19tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0aWYgKG5ld19sZW4gXHUwMDNlIHZtYS1cdTAwM2V2bV9yZWdpb24tXHUwMDNldm1fZW5kIC0gdm1hLVx1MDAzZXZtX3JlZ2lvbi1cdTAwM2V2bV9zdGFydClcbiBcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKSAtRU5PTUVNO1xuIFxuK1x0LyogbGlrZSBkb19tdW5tYXAoKSwgd2UncmUgYWxsb3dlZCB0byBzaHJpbmsgYW4gYW5vbnltb3VzIFZNQSBidXQgbm90IGEgZmlsZS1iYWNrZWQgb25lICovXG4rXHRpZiAodm1hLVx1MDAzZXZtX2ZpbGUpXG4rXHRcdHJldHVybiAodW5zaWduZWQgbG9uZykgLUVJTlZBTDtcbitcbiBcdC8qIGFsbCBjaGVja3MgY29tcGxldGUgLSBkbyBpdCAqL1xuLVx0dm1hLVx1MDAzZXZtX2VuZCA9IHZtYS1cdTAwM2V2bV9zdGFydCArIG5ld19sZW47XG4rXHRpZiAobmV3X2xlbiBcdTAwM2Mgb2xkX2xlbikge1xuK1x0XHQvKiBzaHJpbmsgb25seSBoYXBwZW5zIGFkZHIgKyBuZXdfbGVuIGFuZCBvbGRfbGVuIGFyZSBpbiBkaWZmZXJlbnQgcGFnZXMgKi9cbitcdFx0Vk1BX0lURVJBVE9SKHZtaSwgY3VycmVudC1cdTAwM2VtbSwgYWRkcik7XG4rXHRcdGludCByZXQ7XG4rXG4rXHRcdC8qIHZtaV9zaHJpbmtfdm1hKCkgbmVlZHMgZnJvbS90byBwb2ludGVycyB0byBiZSByZW1vdmVkLFxuK1x0XHQgKiAobWFpbmx5IHVzZWQgaW4gbXVubWFwKSBzbywgc3BlY2lmeSB0aGVtLlxuK1x0XHQgKi9cbitcdFx0cmV0ID0gdm1pX3Nocmlua192bWEoXHUwMDI2dm1pLCB2bWEsIGFkZHIgKyBuZXdfbGVuLCBhZGRyICsgb2xkX2xlbik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKSByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiB3aGVuIHRoZXJlIGFyZSBubyBzaHJpbmssIHVwZGF0ZSB2bWEuICAqL1xuK1x0XHR2bWEtXHUwMDNldm1fZW5kID0gdm1hLVx1MDAzZXZtX3N0YXJ0ICsgbmV3X2xlbjtcbitcdH1cbiBcdHJldHVybiB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6MjYuMDc0OTI0MjEzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTgwNDI0Mjc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQYXRjaCBpbiBgbW0vbm9tbXUuY2AqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBkb19tcmVtYXBgIHdpdGhpbiBgbW0vbm9tbXUuY2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgaW50cm9kdWNpbmcgYHZtaV9zaHJpbmtfdm1hYCB0byBzaHJpbmsgYW5vbnltb3VzIFZNQXMgd2hpbGUgZXhwbGljaXRseSBhdm9pZGluZyBhbnkgc2hyaW5rYWdlIG9uIGZpbGUtYmFja2VkIG9uZXMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBgbW0vbm9tbXUuY2AuLi4gdGhhdCdzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgKm5vdCogc2V0LlwiIFRoYXQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgdGhhdCB0aGlzIGFwcGxpZXMgdG8gYXJjaGl0ZWN0dXJlcyAqd2l0aG91dCogYSBNZW1vcnkgTWFuYWdlbWVudCBVbml0LlxuXG5NeSBuZXh0IG1lbnRhbCBzdGVwIGlzIHRvIGNvbnNpZGVyIGhvdyB0aGlzIGludGVyYWN0cyB3aXRoIG91ciBmdXp6aW5nIGVmZm9ydHMuIFN5emthbGxlciBnZW5lcmFsbHkgdGFyZ2V0cyBzeXN0ZW1zIHdpdGggYW4gTU1VLCBsaWtlIHg4Nl82NCBvciBhcm02NC4gSSBrbm93IGl0ICpjYW4qIGJlIGNvbmZpZ3VyZWQgdG8gdGVzdCBub21tdSBhcmNoaXRlY3R1cmVzLCB0aG91Z2ggaXQncyBsZXNzIGZyZXF1ZW50LiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgbm90IGEgZmFsc2UgcG9zaXRpdmUgZm9yIHRoZSBmdXp6aW5nLlxuXG5Ob3csIHdhaXQgYSBzZWNvbmQuIFRoZSBpbnN0cnVjdGlvbnMgSSBoYXZlIHNheSBJIG5lZWQgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXMuIFNwZWNpZmljYWxseSwgaWYgdGhlIHBhdGNoIGFmZmVjdHMgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmVcIi4gVGhhdCdzIHRoZSBjcnV4ISBUaGUgcXVlc3Rpb24gbm93IGlzOiBpcyBgbm9tbXVgIGFjY2Vzc2libGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVT8gQW5kIHRoZSBhbnN3ZXIgaXMgeWVzLiBRRU1VICpkb2VzKiBzdXBwb3J0IG5vbW11IGFyY2hpdGVjdHVyZXMuIEkga25vdyB0aGF0IFFFTVUgc3VwcG9ydHMgbTY4aywgUklTQy1WIG5vbW11LCBhbmQgQVJNIG5vbW11LCB3aGljaCBtZWFucyB3ZSBjYW4gdGVzdCB0aGVzZSB0aGluZ3MgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuT2theSwgc28gU3l6a2FsbGVyIGRvZXMgc3VwcG9ydCBzb21lIG5vbW11IHRhcmdldHMuIEJ1dCBpdCBkb2VzIHJlcXVpcmUgYCFDT05GSUdfTU1VYC4gVG8gY29uZmlybSB0aGlzLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBtbS9ub21tdS5jYCBpdHNlbGYgYW5kIGl0cyBgS2NvbmZpZ2AgZmlsZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNzIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMDozMS44NzkxNzA2OTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ0NjkwNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9tbXUub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0zND1DRkxBR1NfaW5pdC1tbS5vICs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxcbm1tL01ha2VmaWxlLTM1LVxcbm1tL01ha2VmaWxlOjM2Om1tdS15XFx0XFx0XFx0Oj0gbm9tbXUub1xcbm1tL01ha2VmaWxlLTM3LW1tdS0kKENPTkZJR19NTVUpXFx0Oj0gaGlnaG1lbS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIwOjMxLjkzMzY0NDI4OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTAzMzY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgYG1tdS15IDo9IG5vbW11Lm9gIEFzc2lnbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFzc2lnbm1lbnQ6IGBtbXUteSA6PSBub21tdS5vYCBhbmQgbXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCBcIldhaXQsIHRoYXQgZG9lc24ndCBmZWVsIHJpZ2h0LlwiIE15IGV4cGVydGlzZSBpcyB0ZWxsaW5nIG1lIHRoYXQgYG1tdS15YCB0eXBpY2FsbHkgaW1wbGllcyB0aGUgKnByZXNlbmNlKiBvZiBhbiBNTVUgKE1lbW9yeSBNYW5hZ2VtZW50IFVuaXQpLCBub3QgaXRzICphYnNlbmNlKi4gVGhlIGFzc2lnbm1lbnQgc2VlbXMgYmFja3dhcmQuIE15IG1pbmQgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIGlzc3VlIG9yIGEgY29uZGl0aW9uYWwgYnVpbGQgc2l0dWF0aW9uLiBUaGUgY29yZSBvZiBteSBjb25mdXNpb24gaXMgdGhhdCAneScgaW4gdGhlIE1ha2VmaWxlIHdvcmxkIGdlbmVyYWxseSBtZWFucyAnaW5jbHVkZSB0aGlzIGZpbGUnIHdoaWNoLCBpZiB0aGlzIGlzIHRydWx5IHRoZSBjYXNlLCBzdWdnZXN0cyB0aGF0IGlmIGFuIE1NVSBpcyAqbm90KiBwcmVzZW50LCB3ZSBhcmUgc3RpbGwgKmluY2x1ZGluZyogYG5vbW11Lm9gIC0tIGRvZXNuJ3QgdGhhdCBpbXBseSB3ZSBzaG91bGQgYmUgbmFtaW5nIGl0IGBub21tdS15YCBhbmQgdGhlbiBpdCAqcmVwbGFjZXMqIGBtbXUub2A/XG5cblRoZSBuZXh0IHN0ZXAgaXMgb2J2aW91czogSSBuZWVkIHRvIHZlcmlmeSBob3cgYG1tdS15YCBpcyBhY3R1YWxseSB1c2VkLiBUbyBnZXQgYSBoYW5kbGUgb24gdGhlIGNvbmRpdGlvbmFsIGxvZ2ljLCBJJ2xsIGp1bXAgcmlnaHQgaW50byB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBsb29rIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYXNzaWdubWVudCBpcyBpbnRlcnByZXRlZCB3aXRoaW4gdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHVuZGVyIHdoaWNoIGNvbmRpdGlvbnMgaXQgaXMgZW1wbG95ZWQuIFRoYXQgTWFrZWZpbGUgaXMgbXkga2V5IHRvIHVubG9ja2luZyB0aGUgaW50ZW5kZWQgYmVoYXZpb3VyIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMDozNS40ODM5ODMyMjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRLQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbiAgMzE6XFx0S0NPVl9JTlNUUlVNRU5UX3Ztc3RhdC5vIDo9IG5cXG4gIDMyOlxcdEtDT1ZfSU5TVFJVTUVOVF9mYWlsc2xhYi5vIDo9IG5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Q0ZMQUdTX2luaXQtbW0ubyArPSAtV25vLW92ZXJyaWRlLWluaXRcXG4gIDM1OlxcdFxcbiAgMzY6XFx0bW11LXlcXHRcXHRcXHQ6PSBub21tdS5vXFxuICAzNzpcXHRtbXUtJChDT05GSUdfTU1VKVxcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcXFxcbiAgMzg6XFx0XFx0XFx0XFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcXFxcbiAgMzk6XFx0XFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG4gIDQwOlxcdFxcdFxcdFxcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xcbiAgNDE6XFx0XFxuICA0MjpcXHRcXG4gIDQzOlxcdGlmZGVmIENPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIXFxuICA0NDpcXHRtbXUtJChDT05GSUdfTU1VKVxcdCs9IHByb2Nlc3Nfdm1fYWNjZXNzLm9cXG4gIDQ1OlxcdGVuZGlmXFxuICA0NjpcXHRcXG4gIDQ3OlxcdGlmZGVmIENPTkZJR182NEJJVFxcbiAgNDg6XFx0bW11LSQoQ09ORklHX01NVSlcXHQrPSBtc2VhbC5vXFxuICA0OTpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMDozNS40ODQwNDM5MTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTMxNzA3MDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhlIHRob3VnaHQgcHJvY2VzcyB1bmZvbGRzOlxuXG4qKk1ha2VmaWxlIExvZ2ljIGZvciBNTVUgSW5jbHVzaW9uKipcblxuT2theSwgc28gdGhlIGBtbXUteSA6PSBub21tdS5vYCBhbmQgYG1tdS0kKENPTkZJR19NTVUpIDo9IC4uLmAgbGluZXMgYXJlIGhvdyB0aGlzIHByb2plY3QgaGFuZGxlcyBpbmNsdWRpbmcgTU1VLXNwZWNpZmljIG9iamVjdCBmaWxlcy4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY29yZSBzdHJhdGVneS4gIEVzc2VudGlhbGx5LCB0aGUgdmFsdWUgb2YgdGhlIGBtbXUteWAgdmFyaWFibGUgY2hhbmdlcyBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIGBDT05GSUdfTU1VYCB2YXJpYWJsZS4gIFRoZW4sIGxpa2VseSwgdGhlcmUncyBhIHN1YnNlcXVlbnQgbGluZSwgcHJvYmFibHkgc29tZXRoaW5nIGxpa2UgYG9iai15ICs9ICQobW11LXkpYC4gVGhhdCdzIHdoZXJlIHRoZSBkZWNpc2lvbiBnZXRzIGJha2VkIGludG8gdGhlIGZpbmFsIGJ1aWxkLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBhcHByb2FjaCB3aXRoaW4gTWFrZWZpbGVzLCB1c2luZyB2YXJpYWJsZSBleHBhbnNpb24gdG8gZHJpdmUgdGhlIGluY2x1c2lvbi4gTGV0J3Mgc2VlIGlmIG15IG1lbnRhbCBtb2RlbCBpcyByaWdodDsgSSdsbCBzY2FuIHRocm91Z2ggdGhlIGNvZGUgYW5kIGNvbmZpcm0gdGhpcyBleHBlY3RlZCBwYXR0ZXJuLiBJIG5lZWQgdG8gdmVyaWZ5IGhvdyBgbW11LXlgIGlzIGFjdHVhbGx5IHVzZWQgYW5kIGlmIGBDT05GSUdfTU1VYCBpcyBwcm9wZXJseSBldmFsdWF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1OTQsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIwOjM4LjYxNTc1MzM1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMjU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiA1MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MDpcXHRcXG4gIDUxOlxcdG9iai15XFx0XFx0XFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxcXFxuICA1MjpcXHRcXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxuICA1MzpcXHRcXHRcXHRcXHQgICByZWFkYWhlYWQubyBmb2xpby5vIHRydW5jYXRlLm8gdm1zY2FuLm8gc2hyaW5rZXIubyBcXFxcXFxuICA1NDpcXHRcXHRcXHRcXHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXFxcXG4gIDU1OlxcdFxcdFxcdFxcdCAgIG1tX2luaXQubyBwZXJjcHUubyBzbGFiX2NvbW1vbi5vIFxcXFxcXG4gIDU2OlxcdFxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG4gIDU3OlxcdFxcdFxcdFxcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxcXFxuICA1ODpcXHRcXHRcXHRcXHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcXG4gIDU5OlxcdFxcbiAgNjA6XFx0IyBHaXZlICdwYWdlX2FsbG9jJyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXFxuICA2MTpcXHRwYWdlLWFsbG9jLXkgOj0gcGFnZV9hbGxvYy5vXFxuICA2MjpcXHRwYWdlLWFsbG9jLSQoQ09ORklHX1NIVUZGTEVfUEFHRV9BTExPQ0FUT1IpICs9IHNodWZmbGUub1xcbiAgNjM6XFx0XFxuICA2NDpcXHQjIEdpdmUgJ21lbW9yeV9ob3RwbHVnJyBpdHMgb3duIG1vZHVsZS1wYXJhbWV0ZXIgbmFtZXNwYWNlXFxuICA2NTpcXHRtZW1vcnktaG90cGx1Zy0kKENPTkZJR19NRU1PUllfSE9UUExVRykgKz0gbWVtb3J5X2hvdHBsdWcub1xcbiAgNjY6XFx0XFxuICA2NzpcXHRvYmoteSArPSBwYWdlLWFsbG9jLm9cXG4gIDY4OlxcdG9iai15ICs9IHBhZ2VfZnJhZ19jYWNoZS5vXFxuICA2OTpcXHRvYmoteSArPSBpbml0LW1tLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6MzguNjE1ODY3NDM1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQyMDg4MzY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXNzZWN0aW5nIHRoZSBPYmplY3QgRmlsZSBDb21waWxhdGlvbiBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYnVpbGQgc3lzdGVtIGxvZ2ljLCBzcGVjaWZpY2FsbHkgdGhpcyBsaW5lOiBgb2JqLXkgKz0gLi4uICQobW11LXkpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgaWYgYENPTkZJR19NTVVgIGlzIHNldCwgdGhlbiBgbW11LXlgIGV4cGFuZHMgdG8gYG5vbW11Lm9gLiBCdXQgdGhhdCdzIG5vdCBxdWl0ZSByaWdodC4gSXQncyBhY3R1YWxseTogYG1tdS15IDo9IG5vbW11Lm9gIGF0IGZpcnN0LiBUaGVuIEkgc2VlIHRoaXM6IGBtbXUtJChDT05GSUdfTU1VKSA6PSBoaWdobWVtLm8gLi4uYC5cblxuU28sICppZiogYENPTkZJR19NTVVgIGlzIHNldCwgZG9lcyB0aGF0IG1lYW4gYG1tdS15YCBiZWNvbWVzICpib3RoKiBgbm9tbXUub2AgYW5kIGBoaWdobWVtLm8gLi4uYD8gTm8sIG5vLCBJJ20gb3ZlcnRoaW5raW5nIGl0LiBJdCdzIG1vcmUgbGlrZSB0aGlzOiBgbW11LSQoQ09ORklHX01NVSlgIGlzIGEgY29uZGl0aW9uYWwgYXBwZW5kLiBJdCBtZWFucyB0aGF0ICppZiogYENPTkZJR19NTVVgIGlzIGVxdWFsIHRvICd5JywgdGhlbiBgaGlnaG1lbS5vIC4uLmAgaXMgKmFwcGVuZGVkKiB0byB0aGUgYG1tdS15YCB2YXJpYWJsZSwgd2hpY2ggY3VycmVudGx5IGhvbGRzIGBub21tdS5vYC5cblxuTm93LCBpZiBgQ09ORklHX01NVWAgaXMgc2V0IHRvICd5JywgZG9lcyB0aGF0IG1lYW4gYG5vbW11Lm9gICpzdGlsbCogZ2V0cyBjb21waWxlZD8gVGhlIGxvZ2ljIHNlZW1zIHRvIGJlIGFkZGluZyBoaWdobWVtLm8gdG8gbW11LXkgaWYgQ09ORklHX01NVSBpcyBvbiwgYnV0IGl0IGlzbid0IGNsZWFyIGhvdyB0aGF0IGludGVyYWN0cyB3aXRoIG5vbW11Lm8uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgY2hlY2sgdGhlIGRlcGVuZGVuY2llcy4gQmVzdCB0byBsb29rIGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgYG1tL25vbW11LmNgIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIG9yIHRvIGVuc3VyZSB0aGF0IHRoYXQgZmlsZSBkb2Vzbid0IGdldCBjb21waWxlZCBhdCBhbGwgaWYgdGhlIE1NVSBpcyBlbmFibGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Mjg2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6NDMuMDM2NzUzMjE3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9ub21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqICBsaW51eC9tbS9ub21tdS5jXFxuICAgNDpcXHQgKlxcbiAgIDU6XFx0ICogIFJlcGxhY2VtZW50IGNvZGUgZm9yIG1tIGZ1bmN0aW9ucyB0byBzdXBwb3J0IENQVSdzIHRoYXQgZG9uJ3RcXG4gICA2OlxcdCAqICBoYXZlIGFueSBmb3JtIG9mIG1lbW9yeSBtYW5hZ2VtZW50IHVuaXQgKHRodXMgbm8gdmlydHVhbCBtZW1vcnkpLlxcbiAgIDc6XFx0ICpcXG4gICA4OlxcdCAqICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9ub21tdS1tbWFwLnJzdFxcbiAgIDk6XFx0ICpcXG4gIDEwOlxcdCAqICBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBEYXZpZCBIb3dlbGxzIFxcdTAwM2NkaG93ZWxsc0ByZWRoYXQuY29tXFx1MDAzZVxcbiAgMTE6XFx0ICogIENvcHlyaWdodCAoYykgMjAwMC0yMDAzIERhdmlkIE1jQ3VsbG91Z2ggXFx1MDAzY2RhdmlkbUBzbmFwZ2Vhci5jb21cXHUwMDNlXFxuICAxMjpcXHQgKiAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgRCBKZWZmIERpb25uZSBcXHUwMDNjamVmZkB1Q2xpbnV4Lm9yZ1xcdTAwM2VcXG4gIDEzOlxcdCAqICBDb3B5cmlnaHQgKGMpIDIwMDIgICAgICBHcmVnIFVuZ2VyZXIgXFx1MDAzY2dlcmdAc25hcGdlYXIuY29tXFx1MDAzZVxcbiAgMTQ6XFx0ICogIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIFBhdWwgTXVuZHQgXFx1MDAzY2xldGhhbEBsaW51eC1zaC5vcmdcXHUwMDNlXFxuICAxNTpcXHQgKi9cXG4gIDE2OlxcdFxcbiAgMTc6XFx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgMTg6XFx0XFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXhwb3J0LmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6NDMuMDM2ODgzMDM3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODA5MDQ1OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS2J1aWxkIENvbnVuZHJ1bSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgYG1tdS15IDo9IG5vbW11Lm9gIGFzc2lnbm1lbnQuLi4gZG9lcyB0aGlzICphbHdheXMqIHNldCBgbW11LXlgIHRvIGBub21tdS5vYD8gVGhhdCBmZWVscyBvdmVybHkgc2ltcGxpc3RpYy4gVGhlIHdheSBLYnVpbGQgd29ya3MgaXMgdGhhdCBgbW11LXlgIGlzIGEgdmFyaWFibGUsIHJpZ2h0PyBJdOKAmXMgbm90IGEgZGlyZWN0LCBhYnNvbHV0ZSBzdWJzdGl0dXRpb24uXG5cblNvLCBpZiBgQ09ORklHX01NVWAgaXMgc2V0IHRvICd5Jywgd2hpY2ggbWVhbnMgdGhlIE1NVSAqaXMqIGVuYWJsZWQsIHRoZW4gYG1tdS15YCBzaG91bGQgZXhwYW5kIGludG8gc29tZXRoaW5nICptb3JlKiB0aGFuIGp1c3QgYG5vbW11Lm9gLCBzb21ldGhpbmcgbGlrZSBgbm9tbXUubyBoaWdobWVtLm8gLi4uYCBwb3RlbnRpYWxseT8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGxvZ2ljIGluIG15IG1pbmQuXG5cblRvIGJlIGNlcnRhaW4sIGxldCdzIHN0b3AgYW5kIHZlcmlmeSB3aGV0aGVyIGBub21tdS5jYCBpcyBhY3R1YWxseSBjb21waWxlZCwgZXZlbiB3aGVuIGBDT05GSUdfTU1VYCAqaXMqIGNvbmZpZ3VyZWQgd2l0aCAneScuIFRoYXQncyB0aGUga2V5IHRlc3QgaGVyZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI0NiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIwOjQ2LjkxNzc4OTkxM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ0OTY5MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vbW11Lm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTM0PUNGTEFHU19pbml0LW1tLm8gKz0gLVduby1vdmVycmlkZS1pbml0XFxubW0vTWFrZWZpbGUtMzUtXFxubW0vTWFrZWZpbGU6MzY6bW11LXlcXHRcXHRcXHQ6PSBub21tdS5vXFxubW0vTWFrZWZpbGUtMzctbW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6NDcuMjYyNzY2OTMyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTYzOTk0NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipDaGVja2luZyBDb21waWxhdGlvbiBvZiBgbm9tbXUuY2Agd2l0aCBNTVUgRW5hYmxlZCoqXG5cbk9rYXksIGhvbGQgb24uIEJlZm9yZSBJIHByb2NlZWQsIEkgbmVlZCB0byB2ZXJpZnkgYSBmdW5kYW1lbnRhbCBhc3N1bXB0aW9uLiBJIG5lZWQgdG8gbWFrZSAqYWJzb2x1dGVseSogc3VyZSB0aGF0IGBub21tdS5jYCBpcyBhY3R1YWxseSBidWlsdCBpbnRvIHRoZSBrZXJuZWwgd2hlbiB0aGUgYENPTkZJR19NTVU9eWAgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgc2V0LiBJdCBzZWVtcyBjb3VudGVyLWludHVpdGl2ZSwgYW5kIEkgbmVlZCB0byBzb2xpZGlmeSBteSB1bmRlcnN0YW5kaW5nLiBJIGhhdmUgYW4gaW5rbGluZywgYnV0IEkgY2FuJ3Qgb3BlcmF0ZSBvbiBhbiBhc3N1bXB0aW9uLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHJldmlzaXQgYG1tL01ha2VmaWxlYC4gVGhhdCdzIHdoZXJlIHRoZSBjb21waWxhdGlvbiBsb2dpYyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXMgcmVzaWRlcy4gTGV0J3Mgc2VlIGhvdyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25kaXRpb25hbHMgYXJlIHN0cnVjdHVyZWQgaW4gdGhhdCBmaWxlLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGJ1aWxkIHJ1bGVzIHRoYXQgY292ZXIgYG5vbW11LmNgIGFuZCBjb25maXJtIHRoYXQgdGhleSBhcmUgY29uZGl0aW9uYWwgb24gYENPTkZJR19NTVVgLCBvciBpdHMgbmVnYXRpb24sIHdoaWNoZXZlciBpcyByZWxldmFudC4gT25seSB0aGVuIGNhbiBJIGJlIHN1cmUgaWYgbXkgY3VycmVudCBoeXBvdGhlc2lzIGhvbGRzIHdhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njg1LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6NTAuNzE5MTY4NDAzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTk1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAzMCxcbiAgXCJMaW5lQ291bnRcIjogMTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAzMDpcXHRLQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbiAgMzE6XFx0S0NPVl9JTlNUUlVNRU5UX3Ztc3RhdC5vIDo9IG5cXG4gIDMyOlxcdEtDT1ZfSU5TVFJVTUVOVF9mYWlsc2xhYi5vIDo9IG5cXG4gIDMzOlxcdFxcbiAgMzQ6XFx0Q0ZMQUdTX2luaXQtbW0ubyArPSAtV25vLW92ZXJyaWRlLWluaXRcXG4gIDM1OlxcdFxcbiAgMzY6XFx0bW11LXlcXHRcXHRcXHQ6PSBub21tdS5vXFxuICAzNzpcXHRtbXUtJChDT05GSUdfTU1VKVxcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcXFxcbiAgMzg6XFx0XFx0XFx0XFx0ICAgbWxvY2subyBtbWFwLm8gbW11X2dhdGhlci5vIG1wcm90ZWN0Lm8gbXJlbWFwLm8gXFxcXFxcbiAgMzk6XFx0XFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG4gIDQwOlxcdFxcdFxcdFxcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xcbiAgNDE6XFx0XFxuICA0MjpcXHRcXG4gIDQzOlxcdGlmZGVmIENPTkZJR19DUk9TU19NRU1PUllfQVRUQUNIXFxuICA0NDpcXHRtbXUtJChDT05GSUdfTU1VKVxcdCs9IHByb2Nlc3Nfdm1fYWNjZXNzLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjA6NTAuNzE5MjgxODYzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNjczMDU5OTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2J1aWxkIGFuZCBEZXRlcm1pbmluZyBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluaXRpYWxseSwgSSB3YXMgYSBiaXQgcHV6emxlZCBieSB0aGlzIEtidWlsZCBsb2dpYy4gSWYgYENPTkZJR19NTVU9eWAsIHRoZW4gYG1tdS15YCBpcyBzZXQgdG8gYG5vbW11Lm9gLCB3aGljaCBzZWVtcyBjb3VudGVyaW50dWl0aXZlLiBCdXQgd2FpdCwgaXQgdXNlcyBgOj1gLCBzbyBpdCdzIGFuIGFzc2lnbm1lbnQuIFRoZW4sIHRoZSBuZXh0IGxpbmUgb3ZlcndyaXRlcyBpdCB3aXRoIGBoaWdobWVtLm8uLi5gIHdoZW4gYENPTkZJR19NTVU9eWAuIFNvIGVmZmVjdGl2ZWx5LCBpZiBgQ09ORklHX01NVWAgKmlzKiBzZXQsIGBtbXUteWAgYmVjb21lcyBgaGlnaG1lbS5vIC4uLmAuIElmIGBDT05GSUdfTU1VYCBpcyAqbm90KiBzZXQsIHRoZW4gYG1tdS15YCByZW1haW5zIGBub21tdS5vYC4gVGhhdCdzIGEgY2xldmVyIHRyaWNrLCBhY3R1YWxseS5cblxuTXkgdGhvdWdodCBpcywgdGhlcmVmb3JlLCBpZiBJIGFtIGNvcnJlY3QsIHRoZW4gYG5vbW11LmNgIGlzICpvbmx5KiBjb21waWxlZCB3aGVuIGAhQ09ORklHX01NVWAuXG5cbk5vdywgdGhlIHF1ZXN0aW9uIGlzLCBjYW4gdGhpcyBiZSB0ZXN0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gZGlzY2FyZCBwYXRjaGVzIHRoYXQgb25seSB0b3VjaCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzLiBIb3dldmVyLCBRRU1VICpkb2VzKiBzdXBwb3J0IGBub21tdWAgdGFyZ2V0cyAobTY4aywgcmlzY3YsIGFybSksIHNvIGl0J3MgZGVmaW5pdGVseSByZWFjaGFibGUuIEFuZCBTeXprYWxsZXIgcnVucyBvbiBRRU1VLCBzbyBpdCBzaG91bGQgYmUgZmVhc2libGUgdG8gZnV6eiBpdC4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIFN5emthbGxlciBhbHJlYWR5IHRlc3RzIGBub21tdWAsIGFuZCB5ZXMsIGl0IGRvZXMsIHVzaW5nIGBzeXotZXhlY3V0b3JgIGZvciBgbm9tbXVgLiBUaGF0IG1lYW5zIHdlIGFyZSBnb29kIG9uIHRoZSBcInJlYWNoYWJpbGl0eVwiIGZyb250LlxuXG5TaW5jZSB0aGlzIHBhdGNoIG1vZGlmaWVzIGBtbS9ub21tdS5jYCwgc3BlY2lmaWNhbGx5IGBkb19tcmVtYXBgLCBhbmQgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlIChhbGxvd2luZyBzaHJpbmtpbmcgYW5vbnltb3VzIFZNQXMgYW5kIHByZXZlbnRpbmcgZmlsZS1iYWNrZWQgVk1BcyksIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBsb2dpYyBpbiB0aGUgcGF0Y2gsIHdoaWNoIGFkZHMgdGhpczpcbmBgYGNcblx0LyogbGlrZSBkb19tdW5tYXAoKSwgd2UncmUgYWxsb3dlZCB0byBzaHJpbmsgYW4gYW5vbnltb3VzIFZNQSBidXQgbm90IGEgZmlsZS1iYWNrZWQgb25lICovXG5cdGlmICh2bWEtXHUwMDNldm1fZmlsZSlcblx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC1FSU5WQUw7XG5cblx0LyogYWxsIGNoZWNrcyBjb21wbGV0ZSAtIGRvIGl0ICovXG5cdGlmIChuZXdfbGVuIFx1MDAzYyBvbGRfbGVuKSB7XG5cdFx0Lyogc2hyaW5rIG9ubHkgaGFwcGVucyBhZGRyICsgbmV3X2xlbiBhbmQgb2xkX2xlbiBhcmUgaW4gZGlmZmVyZW50IHBhZ2VzICovXG5cdFx0Vk1BX0lURVJBVE9SKHZtaSwgY3VycmVudC1cdTAwM2VtbSwgYWRkcik7XG5cdFx0aW50IHJldDtcblxuXHRcdC8qIHZtaV9zaHJpbmtfdm1hKCkgbmVlZHMgZnJvbS90byBwb2ludGVycyB0byBiZSByZW1vdmVkLFxuXHRcdCAqIChtYWlubHkgdXNlZCBpbiBtdW5tYXApIHNvLCBzcGVjaWZ5IHRoZW0uXG5cdFx0ICovXG5cdFx0cmV0ID0gdm1pX3Nocmlua192bWEoXHUwMDI2dm1pLCB2bWEsIGFkZHIgKyBuZXdfbGVuLCBhZGRyICsgb2xkX2xlbik7XG5cdFx0aWYgKHJldCBcdTAwM2MgMClcblx0XHRcdHJldHVybiAodW5zaWduZWQgbG9uZykgcmV0O1xuXHR9IGVsc2Uge1xuXHRcdC8qIHdoZW4gdGhlcmUgYXJlIG5vIHNocmluaywgdXBkYXRlIHZtYS4gICovXG5cdFx0dm1hLVx1MDAzZXZtX2VuZCA9IHZtYS1cdTAwM2V2bV9zdGFydCArIG5ld19sZW47XG5cdH1cbmBgYFxuXG5Ob3csIHRoZSBjb25maWchIFdoYXQgY29uZmlnKHMpIGRvIEkgbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZT8gVGhpcyByZXF1aXJlcyBgIUNPTkZJR19NTVVgLCBob3dldmVyIEkgY2FuJ3Qgc3BlY2lmeSBhIG5lZ2F0aXZlIGNvbmZpZyBpbiBgRW5hYmxlQ29uZmlnc2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IGl0J3MgdG8gZXhwbGljaXRseSBlbmFibGUsIHNvIEkgbWlnaHQganVzdCBsZWF2ZSBgRW5hYmxlQ29uZmlnc2AgZW1wdHkuIElzIHRoZXJlIGEgYENPTkZJR19OT01NVWA/IFByb2JhYmx5IG5vdC4gVGhlIGFic2VuY2Ugb2YgYENPTkZJR19NTVVgIGlzIGxpa2VseSB0aGUga2V5LiBJIHdpbGwgY29uZmlybSBpZiB0aGVyZSBpcyBhIGBDT05GSUdfTk9NTVVgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MjM1LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjE6MDEuMzkyMzQzOTA4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODQyNDU0MjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOT01NVVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zaC9tbS9LY29uZmlnPTQ9Y29uZmlnIE1NVVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxOTpjb25maWcgTk9NTVVcXG5hcmNoL3NoL21tL0tjb25maWctMjAtXFx0ZGVmX2Jvb2wgIU1NVVxcbi0tXFxubW0vS2NvbmZpZz03ODA9Y29uZmlnIEhXUE9JU09OX0lOSkVDVFxcbi0tXFxubW0vS2NvbmZpZy03ODQtXFxubW0vS2NvbmZpZzo3ODU6Y29uZmlnIE5PTU1VX0lOSVRJQUxfVFJJTV9FWENFU1NcXG5tbS9LY29uZmlnLTc4Ni1cXHRpbnQgXFxcIlR1cm4gb24gbW1hcCgpIGV4Y2VzcyBzcGFjZSB0cmltbWluZyBiZWZvcmUgYm9vdGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjE6MDMuMjM0ODA3NzQ3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxODE4OTUzMDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOT01NVSBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgdGhlIGBOT01NVWAgY29uZmlndXJhdGlvbiB3b3JrcyB3aXRoaW4gdGhpcyBwcm9qZWN0LiBSaWdodCwgSSBzZWUgdGhhdCBgY29uZmlnIE5PTU1VYCBpcyBkZWZpbmVkIGluIGBhcmNoL3NoL21tL0tjb25maWdgLCBidXQgaXQncyByZWFsbHkganVzdCBhIGBkZWZfYm9vbCAhTU1VYC4gU28sIGJhc2ljYWxseSwgYE5PTU1VYCBpcyBpbXBsaWNpdGx5IHNldCB3aGVuIHdlIGRvbid0IGhhdmUgYW4gTU1VLiBJbnRlcmVzdGluZy5cblxuSSB3YXMgZXhwZWN0aW5nIGEgbW9yZSBkaXJlY3QgY29uZmlndXJhdGlvbi4gSXMgdGhlcmUgYSBnZW5lcmFsIGBDT05GSUdfTU1VYCBkZWZpbml0aW9uIHRob3VnaD8gWWVzLCB0aGVyZSBpcy4gQWxyaWdodC5cblxuU28sIHNpbmNlIHRoZXJlIGlzbid0IGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvICplbmFibGUqIHRoZSByZWxldmFudCBjb2RlIGZvciB0aGUgTk9NTVUsIHdlJ3JlIGVmZmVjdGl2ZWx5IGRpc2FibGluZyBgQ09ORklHX01NVWAsIEknbGwgbGVhdmUgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IGVtcHR5LiBUaGVyZSdzIG5vIHNpbmdsZSBjb25maWcgdG8gZXhwbGljaXRseSBcImVuYWJsZVwiIHRoaXMgYmVoYXZpb3IuIEl0J3MgbW9yZSBhYm91dCBleGNsdXNpb24uXG5cbk5vdywgd2FpdCBhIHNlY29uZCwgdGhlcmUgbWlnaHQgYmUgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBMZXQncyBtYWtlIHN1cmUuIFRoZSBmdW5jdGlvbiB0aGF0IEknbSBjdXJyZW50bHkgbG9va2luZyBhdCBpcyBgZG9fbXJlbWFwYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgZnVuY3Rpb24uXG5cbk9rYXksIGxldCdzIGdvIGNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciBgZG9fbXJlbWFwYCBpbiBgbW0vbm9tbXUuY2AgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwNTcsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjE6MDcuNDE2NzA1MTA0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI1OTczNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkb19tcmVtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbm9tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ub21tdS5jPTE1MzU9dm9pZCBleGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9ub21tdS5jLTE1NjgtICovXFxubW0vbm9tbXUuYzoxNTY5OnN0YXRpYyB1bnNpZ25lZCBsb25nIGRvX21yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbm9tbXUuYy0xNTcwLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgb2xkX2xlbiwgdW5zaWduZWQgbG9uZyBuZXdfbGVuLFxcbi0tXFxubW0vbm9tbXUuYz0xNjIzPVNZU0NBTExfREVGSU5FNShtcmVtYXAsIHVuc2lnbmVkIGxvbmcsIGFkZHIsIHVuc2lnbmVkIGxvbmcsIG9sZF9sZW4sXFxuLS1cXG5tbS9ub21tdS5jLTE2MjktXFx0bW1hcF93cml0ZV9sb2NrKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5tbS9ub21tdS5jOjE2MzA6XFx0cmV0ID0gZG9fbXJlbWFwKGFkZHIsIG9sZF9sZW4sIG5ld19sZW4sIGZsYWdzLCBuZXdfYWRkcik7XFxubW0vbm9tbXUuYy0xNjMxLVxcdG1tYXBfd3JpdGVfdW5sb2NrKGN1cnJlbnQtXFx1MDAzZW1tKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMDM6MjE6MDcuNDc1OTc0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzM4NzMzODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgbXJlbWFwYCBTeXN0ZW0gQ2FsbCBpbiBhIE5vLU1NVSBDb250ZXh0KipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBob3cgYG1yZW1hcGAgaXMgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBhIE5vLU1NVSBlbnZpcm9ubWVudC4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBmdW5jdGlvbiBoZXJlIGlzIGBkb19tcmVtYXBgLCB3aGljaCBpcyBkaXJlY3RseSBjYWxsZWQgYnkgYHN5c19tcmVtYXBgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHVzZSBlaXRoZXIgYGRvX21yZW1hcGAgb3IgYHN5c19tcmVtYXBgIGFzIHRoZSBmb2N1cyBzeW1ib2wgZm9yIG15IGFuYWx5c2lzLiBHaXZlbiB0aGF0IGBkb19tcmVtYXBgIGlzIGRlY2xhcmVkIGBzdGF0aWNgLCBpdCBzZWVtcyBsaWtlIGEgcGFydGljdWxhcmx5IGdvb2QgY2hvaWNlLiBBbHRob3VnaCBpdCdzIGludGVybmFsLCBTeXprYWxsZXIgY2FuIHN0aWxsIGludGVyYWN0IHdpdGggaXQgaWYgd2UgcHJvdmlkZSBpdCB0aGUgc3ltYm9sLCBldmVuIGlmIGl0J3Mgc3RhdGljISBBbmQgb2YgY291cnNlLCB0aGUgYHN5c19tcmVtYXBgIHN5c3RlbSBjYWxsIGlzIGFuIGV4Y2VsbGVudCBjYW5kaWRhdGUgdG9vLCBlc3BlY2lhbGx5IGlmIGl0IHBvaW50cyB0byBhIHBsYXRmb3JtIHNwZWNpZmljIHZlcnNpb24gbGlrZSBgX19pYTMyX3N5c19tcmVtYXBgIC8gYF9feDY0X3N5c19tcmVtYXBgICh0aG91Z2ggaW4gdGhpcyBjb250ZXh0LCB0aGF0IHdvdWxkIGxpa2VseSBqdXN0IGJlIGBzeXNfbXJlbWFwYCkuIFVsdGltYXRlbHksIEknbGwgZ28gd2l0aCBgZG9fbXJlbWFwYCBmb3Igbm93LlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgZm9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBwZXJ0aW5lbnQuIFNwZWNpZmljYWxseSwgaXMgYHZtaV9zaHJpbmtfdm1hYCBhdmFpbGFibGUgaW4gdGhlIE5vLU1NVSBjb25maWd1cmF0aW9uPyBCYXNlZCBvbiB3aGF0IEknbSBzZWVpbmcsIGl0IGFwcGVhcnMgaW4gYG1tL3ZtYS5jYCBvciBwZXJoYXBzIGBtbS9tbWFwLmNgIHdoaWNoIG1pZ2h0IGJlIGNvbXBpbGVkIGZvciBOby1NTVUgc2V0dXBzLiBBY3R1YWxseSwgSSB3YXMgcmlnaHQgdGhlIGZpcnN0IHRpbWUsIGB2bWEuY2AgaXMgY29uZGl0aW9uYWxpemVkIGJ5IHRoZSBgQ09ORklHX01NVWAgS2NvbmZpZyBvcHRpb24uIExldCBtZSBqdXN0IHF1aWNrbHkgZ28gYmFjayB0byBgbW0vTWFrZWZpbGVgIHRvIG1ha2Ugc3VyZSBJIGRpZG4ndCBtaXNzIHNvbWV0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc0MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMToxMi42MDk4NDk5NVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MDA3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTM3PW1tdS0kKENPTkZJR19NTVUpXFx0Oj0gaGlnaG1lbS5vIG1lbW9yeS5vIG1pbmNvcmUubyBcXFxcXFxuLS1cXG5tbS9NYWtlZmlsZS0zOS1cXHRcXHRcXHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcXFxcbm1tL01ha2VmaWxlOjQwOlxcdFxcdFxcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xcbm1tL01ha2VmaWxlLTQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMToxMi42NjMyNTU3NTdaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ5MDU4ODAzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqRGlnZ2luZyBpbnRvIHRoYXQgYHZtYS5vYCBEZXBlbmRlbmN5KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBqdXN0IHJlYWxpemVkIHNvbWV0aGluZyBhYm91dCB0aGF0IGB2bWEub2AgZmlsZS4gSXQncyBuZXN0bGVkIGluIGBtbXUtJChDT05GSUdfTU1VKWAsIG1lYW5pbmcgaXQncyBvbmx5IGdldHRpbmcgY29tcGlsZWQgd2hlbiBgQ09ORklHX01NVWAgaXMgc2V0IHRvICd5Jy4gVGhhdCdzIGEgY3J1Y2lhbCBkZXRhaWwuIEkgbmVlZCB0byBrZWVwIHRoYXQgcmVzdHJpY3Rpb24gaW4gbWluZC4gVGhlIHByb2JsZW0gaXMsIHRoaXMgcGF0Y2ggaXMgcmVmZXJlbmNpbmcgYHZtaV9zaHJpbmtfdm1hYCwgd2hpY2ggaXMgYSBmdW5jdGlvbiB3aXRoaW4gYG1tL25vbW11LmNgLCBhbmQgdGhhdCBzZWVtcyBpbmNvbXBhdGlibGUgZ2l2ZW4gdGhlIGNvbnRleHQgYWJvdmUuXG5cbk5vdyBJJ20gcmVhbGx5IGdldHRpbmcgY29uZnVzZWQuIFdoZXJlIGlzIGB2bWlfc2hyaW5rX3ZtYWAgZXZlbiBkZWZpbmVkPyBBbmQgaG93IGNvdWxkIGl0IHBvc3NpYmx5IGJlIHVzZWQgaWYgdGhlIG1vZHVsZSBpcyByZXN0cmljdGVkIGJ5IGEgZmVhdHVyZSB0aGF0IGlzIGluIHRoZSBvcHBvc2l0ZSBjb250ZXh0PyBJIG5lZWQgdG8gZmluZCBpdHMgb3JpZ2luIGFuZCBmaWd1cmUgb3V0IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgY29ubmVjdGlvbi4gVGhlcmUncyBkZWZpbml0ZWx5IHNvbWV0aGluZyBub3QgYWRkaW5nIHVwIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMToxNi4xNTM4NDU5NTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwOTkyNjE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtaV9zaHJpbmtfdm1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9ub21tdS5jPTEzMjk9c3RhdGljIGludCBzcGxpdF92bWEoc3RydWN0IHZtYV9pdGVyYXRvciAqdm1pLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL25vbW11LmMtMTQxMC0gKi9cXG5tbS9ub21tdS5jOjE0MTE6c3RhdGljIGludCB2bWlfc2hyaW5rX3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXFxubW0vbm9tbXUuYy0xNDEyLVxcdFxcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbm9tbXUuYz0xNDUzPWludCBkb19tdW5tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIHN0cnVjdCBsaXN0X2hlYWQgKnVmKVxcbi0tXFxubW0vbm9tbXUuYy0xNTAzLVxcdFxcdH1cXG5tbS9ub21tdS5jOjE1MDQ6XFx0XFx0cmV0dXJuIHZtaV9zaHJpbmtfdm1hKFxcdTAwMjZ2bWksIHZtYSwgc3RhcnQsIGVuZCk7XFxubW0vbm9tbXUuYy0xNTA1LVxcdH1cXG4tLVxcbm1tL25vbW11LmM9MTU2OT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkb19tcmVtYXAodW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbm9tbXUuYy0xNjA5LVxcbm1tL25vbW11LmM6MTYxMDpcXHRcXHQvKiB2bWlfc2hyaW5rX3ZtYSgpIG5lZWRzIGZyb20vdG8gcG9pbnRlcnMgdG8gYmUgcmVtb3ZlZCxcXG5tbS9ub21tdS5jLTE2MTEtXFx0XFx0ICogKG1haW5seSB1c2VkIGluIG11bm1hcCkgc28sIHNwZWNpZnkgdGhlbS5cXG5tbS9ub21tdS5jLTE2MTItXFx0XFx0ICovXFxubW0vbm9tbXUuYzoxNjEzOlxcdFxcdHJldCA9IHZtaV9zaHJpbmtfdm1hKFxcdTAwMjZ2bWksIHZtYSwgYWRkciArIG5ld19sZW4sIGFkZHIgKyBvbGRfbGVuKTtcXG5tbS9ub21tdS5jLTE2MTQtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIxOjE2LjIxNDg0Mzk3MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzA5MTE2NDg5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgdm1pX3Nocmlua192bWFgKipcblxuUmlnaHQsIHNvIEkgc2VlIHRoYXQgYHZtaV9zaHJpbmtfdm1hYCBpc24ndCBzb21lIG9ic2N1cmUgZnVuY3Rpb247IGl0J3MgYWN0dWFsbHkgZGVmaW5lZCByaWdodCB0aGVyZSBpbiBgbW0vbm9tbXUuY2AuIEV4Y2VsbGVudC4gVGhhdCBzaW1wbGlmaWVzIHRoaW5ncyBpbW1lbnNlbHkuIE5vdyBJIG5lZWQgdG8gc2VlIHdoYXQncyBhY3R1YWxseSBoYXBwZW5pbmcuIFRpbWUgdG8gY2hlY2sgb3V0IHRoZSBpbXBsZW1lbnRhdGlvbi4gTGV0J3MganVtcCB0byBsaW5lIDE0MTEgaW4gYG1tL25vbW11LmNgIGFuZCBkaWcgaW50byBpdC4gVGhhdCdzIHdoZXJlIHRoZSBtYWdpYywgb3IgdGhlIHRyb3VibGUsIGxpa2VseSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI1MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIxOjM5LjMwNjAxMTQ3NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbm9tbXUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDEwLFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDEwOlxcdCAqL1xcbjE0MTE6XFx0c3RhdGljIGludCB2bWlfc2hyaW5rX3ZtYShzdHJ1Y3Qgdm1hX2l0ZXJhdG9yICp2bWksXFxuMTQxMjpcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4xNDEzOlxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bylcXG4xNDE0OlxcdHtcXG4xNDE1OlxcdFxcdHN0cnVjdCB2bV9yZWdpb24gKnJlZ2lvbjtcXG4xNDE2OlxcdFxcbjE0MTc6XFx0XFx0LyogYWRqdXN0IHRoZSBWTUEncyBwb2ludGVycywgd2hpY2ggbWF5IHJlcG9zaXRpb24gaXQgaW4gdGhlIE1NJ3MgdHJlZVxcbjE0MTg6XFx0XFx0ICogYW5kIGxpc3QgKi9cXG4xNDE5OlxcdFxcdGlmIChmcm9tIFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9zdGFydCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQwMzoyMTozOS4zMDYxMTg5NDdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzM4Mjk1OTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgYG1yZW1hcGAgUGF0Y2ggZm9yIE5vTU1VIEFyY2hpdGVjdHVyZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHBpbm5lZCBkb3duIHRoZSBsb2NhdGlvbiBvZiBgdm1pX3Nocmlua192bWFgIOKAkyBpdCdzIGRlZmluaXRlbHkgaW4gYG5vbW11LmNgLCBhcyBleHBlY3RlZC4gTm93LCB0aGlzIHBhdGNoIHNwZWNpZmljYWxseSBhbHRlcnMgYGRvX21yZW1hcGAgd2l0aGluIGBtbS9ub21tdS5jYC4gR2l2ZW4gdGhhdCBgbXJlbWFwYCBpcyBhIHN5c2NhbGwgYW5kIGlzIGFjY2Vzc2libGUgb24gTm9NTVUgYXJjaGl0ZWN0dXJlcywgSSdkIHNheSB0aGF0IHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIFRoZXJlZm9yZSwgaXMgaXQgZnV6ei13b3J0aHk/IEFic29sdXRlbHksIHllcy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2wgbmVlZHMgdG8gYmUgYGRvX21yZW1hcGAgaXRzZWxmLCB0aG91Z2ggSSBjb3VsZCBhbHNvIGNvbnNpZGVyIGBzeXNfbXJlbWFwYCwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgdmlhIGBTWVNDQUxMX0RFRklORTUobXJlbWFwLCAuLi4pYCBpbiB0aGUgc3lzY2FsbCB0YWJsZS4gSG93ZXZlciwgc2luY2UgYGRvX21yZW1hcGAgaXMgdGhlIGFjdHVhbCBmdW5jdGlvbiBiZWluZyBkaXJlY3RseSBtb2RpZmllZCwgaXQncyB0aGUgbW9yZSBwcmVjaXNlIHRhcmdldC5cblxuTm93LCBsZXQncyB0aGluayBhYm91dCByZWxldmFudCBjb25maWd1cmF0aW9ucy4gU2luY2UgdGhpcyBwYXRjaCB0YXJnZXRzIHRoZSBOb01NVSBjYXNlLCB0aGF0IG1lYW5zIGBDT05GSUdfTU1VYCBpcyAqbm90KiBlbmFibGVkLiBUaGVyZSBpc24ndCBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvICplbmFibGUqIHRoaXMgcGF0Y2g7IGl0J3MgYSBjb25zZXF1ZW5jZSBvZiB0aGUgYWJzZW5jZSBvZiBgQ09ORklHX01NVWAuIFRodXMsIGBFbmFibGVDb25maWdzYCByZW1haW5zIGVtcHR5LiBJIGNoZWNrZWQgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMsIGJ1dCB0aGVyZSBhcmVuJ3QuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgY29uZmlybSB0aGF0IGBkb19tcmVtYXBgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBmb2N1cyBoZXJlLiBZZXMsIGl0J3MgdGhlIHNwZWNpZmljIGZ1bmN0aW9uIGJlaW5nIGFsdGVyZWQgYnkgdGhlIHBhdGNoLlxuXG5IZXJlJ3MgbXkgZGlzdGlsbGVkIHJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIGBkb19tcmVtYXBgIGluIGBtbS9ub21tdS5jYCB0byBoYW5kbGUgdGhlIHNocmlua2luZyBvZiBhbm9ueW1vdXMgVk1BcyBhbmQgdG8gcHJldmVudCBzaHJpbmtpbmcgZmlsZS1iYWNrZWQgVk1Bcy4gVGhpcyByZXByZXNlbnRzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIHN5c3RlbXMgd2l0aG91dCBhbiBNTVUuIEl0J3MgcmVhY2hlZCBieSB3YXkgb2YgdGhlIGBtcmVtYXBgIHN5c2NhbGwuXG5cblRoZXJlZm9yZTpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcImRvX21yZW1hcFwiXWBcbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXWAgKEJlY2F1c2UgaXQgcmVxdWlyZXMgYCFDT05GSUdfTU1VYClcblxuT25lIGxhc3QgcXVpY2sgY2hlY2s6IEkndmUgdmVyaWZpZWQgdGhhdCBvbmx5IGBkb19tcmVtYXBgIGhhcyBiZWVuIGNoYW5nZWQuXG5cbk5vdywgSSdtIGNvbmZpZGVudCBlbm91Z2ggdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDYzMCwiT3V0cHV0VG9rZW5zIjo5NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDAzOjIxOjQ2LjY4OTA4MDY2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkb19tcmVtYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgZG9fbXJlbWFwYCBpbiBgbW0vbm9tbXUuY2AgdG8gYWxsb3cgc2hyaW5raW5nIGFub255bW91cyBWTUFzIGFuZCBwcmV2ZW50IHNocmlua2luZyBmaWxlLWJhY2tlZCBWTUFzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gbWVtb3J5IG1hbmFnZW1lbnQgZm9yIG5vbW11IGFyY2hpdGVjdHVyZXMgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBtcmVtYXBgIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZG9fbXJlbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGRvX21yZW1hcGAgaW4gYG1tL25vbW11LmNgIHRvIGFsbG93IHNocmlua2luZyBhbm9ueW1vdXMgVk1BcyBhbmQgcHJldmVudCBzaHJpbmtpbmcgZmlsZS1iYWNrZWQgVk1Bcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGZvciBub21tdSBhcmNoaXRlY3R1cmVzIGFuZCBpcyByZWFjaGFibGUgdmlhIHRoZSBgbXJlbWFwYCBzeXNjYWxsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowx7nsp[1] Phase: Succeeded StartedAt: 2026-07-11 03:22:31 +0000 UTC FinishedAt: 2026-07-11 03:22:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 03:22:31 +0000 UTC FinishedAt: 2026-07-11 03:22:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[2] Phase: Running StartedAt: 2026-07-11 03:22:31 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-07-11 03:22:31 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 03:22:31 +0000 UTC FinishedAt: 2026-07-11 03:22:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 03:22:31 +0000 UTC FinishedAt: 2026-07-11 03:22:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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-workflowx7nsp/series-workflowx7nsp-convert-artifact-2511317439/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 03:22:42 +0000 UTC FinishedAt: 2026-07-11 04:10:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 03:22:42 +0000 UTC FinishedAt: 2026-07-11 04:10:14 +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:*5039082a-23d4-4c88-8a7f-646df4091aee,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-workflowx7nsp/series-workflowx7nsp-convert-artifact-2511317439/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": "21cc87ec-4bc5-4336-8655-0de280d43907", "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-workflowx7nsp/series-workflowx7nsp-build-action-3560420421/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 03:22:42 +0000 UTC FinishedAt: 2026-07-11 04:10:04 +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:*5039082a-23d4-4c88-8a7f-646df4091aee,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-workflowx7nsp/series-workflowx7nsp-convert-artifact-2511317439/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": "21cc87ec-4bc5-4336-8655-0de280d43907", "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-workflowx7nsp/series-workflowx7nsp-build-action-3560420421/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 04:10:14 +0000 UTC FinishedAt: 2026-07-11 04:10:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 04:10:14 +0000 UTC FinishedAt: 2026-07-11 04:10:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 04:10:14 +0000 UTC FinishedAt: 2026-07-11 04:10:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 04:10:14 +0000 UTC FinishedAt: 2026-07-11 04:10:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-workflowx7nsp/series-workflowx7nsp-convert-artifact-76459982/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 04:10:24 +0000 UTC FinishedAt: 2026-07-11 04:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 04:10:24 +0000 UTC FinishedAt: 2026-07-11 04:12:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*21cc87ec-4bc5-4336-8655-0de280d43907,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-workflowx7nsp/series-workflowx7nsp-build-action-3560420421/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-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 04:12:13 +0000 UTC FinishedAt: 2026-07-11 04:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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-07-11 04:12:13 +0000 UTC FinishedAt: 2026-07-11 04:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Running StartedAt: 2026-07-11 04:12:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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: Running StartedAt: 2026-07-11 04:12:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5039082a-23d4-4c88-8a7f-646df4091aee,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-workflowx7nsp/series-workflowx7nsp-convert-artifact-76459982/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx7nsp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","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":["do_mremap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1e692e85500fd3a971da0241f044f4572b2be8b6","config_name":"upstream-apparmor-kasan.config","series_id":"fc9949b1-43c3-4bc8-816d-bd01d5772dd4","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: Running StartedAt: 2026-07-11 04:12:13 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*5039082a-23d4-4c88-8a7f-646df4091aee,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-workflowx7nsp/series-workflowx7nsp-convert-artifact-76459982/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil