Name: series-workflowmr9s7 Phase: Failed StartedAt: 2026-09-15 03:18:28 +0000 UTC FinishedAt: 2026-09-15 04:12:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmr9s7[0] Phase: Succeeded StartedAt: 2026-09-15 03:18:28 +0000 UTC FinishedAt: 2026-09-15 04:12:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmr9s7[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 03:18:28 +0000 UTC FinishedAt: 2026-09-15 04:12:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA0OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBsZWdhY3kgMzg2LzQ4NiBDUFUgd29ya2Fyb3VuZCBjb2RlIHVuZGVyIGAjaWYgZGVmaW5lZChfX2kzODZfXylgIGluIHRoZSBXaW5ib25kIFc4OWM4NDAgRXRoZXJuZXQgZHJpdmVyLiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCB0aGlzIGNvZGUgd2FzIG5ldmVyIGNvbXBpbGVkIG9yIGV4ZWN1dGVkLCBhbmQgdGhlIGdlbmVyYXRlZCBjb2RlIGZvciBhbWQ2NCBpcyBjb21wbGV0ZWx5IHVuY2hhbmdlZC4gRnVydGhlcm1vcmUsIHRoZSBXaW5ib25kIFc4OWM4NDAgUENJIE5JQyBpcyBsZWdhY3kgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNDoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNjMjAzZTc2Y2ZlNTJjYzhlMGEwZjJjNjJhZDBmM2Y1OTNhNmExODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNDoxMjowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXG5pbmRleCBhNTU4MWYxZDAxNDE3Li5jNDJlYWYwZWVmNjQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXG5AQCAtODc2LDI0ICYjNDM7ODc2LDE0IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpIHw9IDB4MDI7XHRcdC8qIGdpdmUgUnggcHJpb3JpdHkgKi9cbiBcbiBcdC8qIENvbmZpZ3VyZSB0aGUgUENJIGJ1cyBidXJzdHMgYW5kIEZJRk8gdGhyZXNob2xkcy5cbi1cdCAgIDQ4NjogU2V0IDggbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCA4IGxvbmd3b3JkIGJ1cnN0LlxuLVx0ICAgNTg2OiBTZXQgMTYgbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCBubyBidXJzdCBsaW1pdC5cbiYjNDM7XHQgICBTZXQgMTYgbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCBubyBidXJzdCBsaW1pdC5cbiBcdCAgIENhY2hlIGFsaWdubWVudCBiaXRzIDE1OjE0XHQgICAgIEJ1cnN0IGxlbmd0aCAxMzo4XG4gXHRcdDAwMDBcdFx1MDAzY25vdCBhbGxvd2VkXHUwMDNlIFx0XHQwMDAwIGFsaWduIHRvIGNhY2hlXHQwODAwIDggbG9uZ3dvcmRzXG4gXHRcdDQwMDBcdDggIGxvbmd3b3Jkc1x0XHQwMTAwIDEgbG9uZ3dvcmRcdFx0MTAwMCAxNiBsb25nd29yZHNcbiBcdFx0ODAwMFx0MTYgbG9uZ3dvcmRzXHRcdDAyMDAgMiBsb25nd29yZHNcdDIwMDAgMzIgbG9uZ3dvcmRzXG4gXHRcdEMwMDBcdDMyICBsb25nd29yZHNcdFx0MDQwMCA0IGxvbmd3b3JkcyAqL1xuIFxuLSNpZiBkZWZpbmVkIChfX2kzODZfXykgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKE1PRFVMRSkgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19VTUwpXG4tXHQvKiBXaGVuIG5vdCBhIG1vZHVsZSB3ZSBjYW4gd29yayBhcm91bmQgYnJva2VuICYjMzk7NDg2IFBDSSBib2FyZHMuICovXG4tXHRpZiAoYm9vdF9jcHVfZGF0YS54ODYgXHUwMDNjPSA0KSB7XG4tXHRcdGkgfD0gMHg0ODAwO1xuLVx0XHRkZXZfaW5mbyhcdTAwMjZkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCBcJiMzNDtUaGlzIGlzIGEgMzg2LzQ4NiBQQ0kgc3lzdGVtLCBzZXR0aW5nIGNhY2hlIGFsaWdubWVudCB0byA4IGxvbmd3b3Jkc1xcblwmIzM0Oyk7XG4tXHR9IGVsc2Uge1xuLVx0XHRpIHw9IDB4RTAwMDtcbi1cdH1cbi0jZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKVxuJiM0MzsjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcbiBcdGkgfD0gMHhFMDAwO1xuICNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDKSB8fCBkZWZpbmVkIChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19BUk0pXG4gXHRpIHw9IDB4NDgwMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNDoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGxlZ2FjeSAzODYvNDg2IENQVSB3b3JrYXJvdW5kIGNvZGUgdW5kZXIgYCNpZiBkZWZpbmVkKF9faTM4Nl9fKWAgaW4gdGhlIFdpbmJvbmQgVzg5Yzg0MCBFdGhlcm5ldCBkcml2ZXIuIE9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCksIHRoaXMgY29kZSB3YXMgbmV2ZXIgY29tcGlsZWQgb3IgZXhlY3V0ZWQsIGFuZCB0aGUgZ2VuZXJhdGVkIGNvZGUgZm9yIGFtZDY0IGlzIGNvbXBsZXRlbHkgdW5jaGFuZ2VkLiBGdXJ0aGVybW9yZSwgdGhlIFdpbmJvbmQgVzg5Yzg0MCBQQ0kgTklDIGlzIGxlZ2FjeSBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2MyMDNlNzZjZmU1MmNjOGUwYTBmMmM2MmFkMGYzZjU5M2E2YTE4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA0OjEyOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCBhNTU4MWYxZDAxNDE3Li5jNDJlYWYwZWVmNjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtODc2LDI0ICYjNDM7ODc2LDE0IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJaSB8PSAweDAyOwkJLyogZ2l2ZSBSeCBwcmlvcml0eSAqLwogCiAJLyogQ29uZmlndXJlIHRoZSBQQ0kgYnVzIGJ1cnN0cyBhbmQgRklGTyB0aHJlc2hvbGRzLgotCSAgIDQ4NjogU2V0IDggbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCA4IGxvbmd3b3JkIGJ1cnN0LgotCSAgIDU4NjogU2V0IDE2IGxvbmd3b3JkIGNhY2hlIGFsaWdubWVudCwgbm8gYnVyc3QgbGltaXQuCiYjNDM7CSAgIFNldCAxNiBsb25nd29yZCBjYWNoZSBhbGlnbm1lbnQsIG5vIGJ1cnN0IGxpbWl0LgogCSAgIENhY2hlIGFsaWdubWVudCBiaXRzIDE1OjE0CSAgICAgQnVyc3QgbGVuZ3RoIDEzOjgKIAkJMDAwMAkmbHQ7bm90IGFsbG93ZWQmZ3Q7IAkJMDAwMCBhbGlnbiB0byBjYWNoZQkwODAwIDggbG9uZ3dvcmRzCiAJCTQwMDAJOCAgbG9uZ3dvcmRzCQkwMTAwIDEgbG9uZ3dvcmQJCTEwMDAgMTYgbG9uZ3dvcmRzCiAJCTgwMDAJMTYgbG9uZ3dvcmRzCQkwMjAwIDIgbG9uZ3dvcmRzCTIwMDAgMzIgbG9uZ3dvcmRzCiAJCUMwMDAJMzIgIGxvbmd3b3JkcwkJMDQwMCA0IGxvbmd3b3JkcyAqLwogCi0jaWYgZGVmaW5lZCAoX19pMzg2X18pICZhbXA7JmFtcDsgIWRlZmluZWQoTU9EVUxFKSAmYW1wOyZhbXA7ICFkZWZpbmVkKENPTkZJR19VTUwpCi0JLyogV2hlbiBub3QgYSBtb2R1bGUgd2UgY2FuIHdvcmsgYXJvdW5kIGJyb2tlbiAmIzM5OzQ4NiBQQ0kgYm9hcmRzLiAqLwotCWlmIChib290X2NwdV9kYXRhLng4NiAmbHQ7PSA0KSB7Ci0JCWkgfD0gMHg0ODAwOwotCQlkZXZfaW5mbygmYW1wO2Rldi0mZ3Q7ZGV2LAotCQkJICYjMzQ7VGhpcyBpcyBhIDM4Ni80ODYgUENJIHN5c3RlbSwgc2V0dGluZyBjYWNoZSBhbGlnbm1lbnQgdG8gOCBsb25nd29yZHNcbiYjMzQ7KTsKLQl9IGVsc2UgewotCQlpIHw9IDB4RTAwMDsKLQl9Ci0jZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQomIzQzOyNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQogCWkgfD0gMHhFMDAwOwogI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkMpIHx8IGRlZmluZWQgKENPTkZJR19QQVJJU0MpIHx8IGRlZmluZWQoQ09ORklHX0FSTSkKIAlpIHw9IDB4NDgwMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBEZWVwIERpdmUgaW50byBDb21waWxlciBEaXJlY3RpdmVzIGFuZCBUYXJnZXQgQXJjaGl0ZWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgYW5kLCBjcnVjaWFsbHksIHdoYXQgdGFyZ2V0IGFyY2hpdGVjdHVyZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIOKAkyBhbWQ2NC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGBkaWZmYCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSB0aGlzIGNoYW5nZXMuCgpUaGUgY29kZSBtb2RpZmllcyB0aGUgYGluaXRfcmVnaXN0ZXJzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBjb25maWd1cmVzIHRoZSBQQ0kgYnVzIGJ1cnN0cyBhbmQgRklGTyB0aHJlc2hvbGRzLiBUaGUga2V5IGxpZXMgd2l0aGluIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB1c2luZyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyAoYCNpZmAsIGAjZWxpZmApLiBJIHNlZSBjb2RlIHRoYXQgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4geDg2IGFyY2hpdGVjdHVyZXMgKDM4Ni80ODYgdnMuIGxhdGVyIHZlcnNpb25zKSBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlcy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogb24gYW1kNjQsIGRvZXMgdGhpcyBjaGFuZ2UgYW55dGhpbmcgYXQgYWxsPyBMZXQmIzM5O3MgY2hlY2suCgpCZWZvcmUgdGhlIHBhdGNoLCBmb3IgYF9feDg2XzY0X19gLCB0aGUgY29kZSB3b3VsZCBza2lwIGEgY2hlY2sgdGhhdCB3YXMgeDg2IHNwZWNpZmljIGFuZCB3b3VsZCBzaW1wbHkgc2V0IGBpIHw9IDB4RTAwMGAuCgpBZnRlciB0aGUgcGF0Y2gsIHRoZSBjb2RlICpzdGlsbCogc2V0cyBgaSB8PSAweEUwMDBgIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMhIFRoZSBjb25kaXRpb25hbHMgYXJlIHN0cnVjdHVyZWQgdG8gc2V0IHRoZSBzYW1lIHZhbHVlLCBubyBtYXR0ZXIgd2hhdC4gU28sIGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBgYW1kNjRgLCB0aGUgZ2VuZXJhdGVkIGNvZGUgaXMgY29tcGxldGVseSBpZGVudGljYWwhCgpUaGUgcGF0Y2ggYXBwZWFycyB0byBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgcmVtb3ZhbCBvZiB0aGUgNDg2IHNwZWNpZmljIGNvZGUgaXMgc2FmZSB0byBkbywgYmVjYXVzZSB0aGUgY29kZSBkb2VzIHRoZSBzYW1lIHRoaW5nIGVpdGhlciB3YXkuCgpJJiMzOTtsbCBhbHNvIGxvb2sgaW50byB3aGF0IGB3aW5ib25kLTg0MC5jYCBhY3R1YWxseSBpcywgYW5kIHdoZXRoZXIgaXQmIzM5O3MgZW11bGF0ZWQgaW4gUUVNVSBvciBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBvciBpZiBpdCYjMzk7cyBvbGQgUENJIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkLiBUaGlzIG1pZ2h0IGdpdmUgZnVydGhlciBjb250ZXh0IHRvIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V0lOQk9ORF84NDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL0tjb25maWc9MTAzPWNvbmZpZyBUVUxJUF9ETTkxMFhcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvS2NvbmZpZy0xMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvS2NvbmZpZzoxMDc6Y29uZmlnIFdJTkJPTkRfODQwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvS2NvbmZpZy0xMDgtXHR0cmlzdGF0ZSBcJiMzNDtXaW5ib25kIFc4OWM4NDAgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC9NYWtlZmlsZT04PW9iai0kKENPTkZJR19ETTkxMDIpXHRcdCYjNDM7PSBkbWZlLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19XSU5CT05EXzg0MClcdCYjNDM7PSB3aW5ib25kLTg0MC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0RFMjEwNFgpXHRcdCYjNDM7PSBkZTIxMDR4Lm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYz01Mj1wcm9iZS1mdW5jOiB3aW5ib25kODQwX3Byb2JlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYzo1Mzpjb25maWctaW46IHRyaXN0YXRlICYjMzk7V2luYm9uZCBXODljODQwIEV0aGVybmV0IHN1cHBvcnQmIzM5OyBDT05GSUdfV0lOQk9ORF84NDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jLTU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmM9NTU9Yy1oZWxwLW5hbWU6IFdpbmJvbmQgVzg5Yzg0MCBQQ0kgRXRoZXJuZXQgc3VwcG9ydFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmM6NTY6Yy1oZWxwLXN5bWJvbDogQ09ORklHX1dJTkJPTkRfODQwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYy01Ny1jLWhlbHA6IFRoaXMgZHJpdmVyIGlzIGZvciB0aGUgV2luYm9uZCBXODljODQwIGNoaXAuICBJdCBhbHNvIHdvcmtzIHdpdGhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDUwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogRGVjaXBoZXJpbmcgdGhlIFR1bGlwIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYSBzcGVjaWZpYyBmaWxlIOKAkyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGFueSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIEV0aGVybmV0IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmUgODcwLiBUaGUgY29tYmluYXRpb24gb2YgdGhlIGZpbGVuYW1lIGFuZCB0aGUgbGluZSBudW1iZXIgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbXBhY3QuIExldCYjMzk7cyBob3BlIHRoZSBkaWZmcyBhcmUgZWFzeSB0byBkZWNpcGhlci4gVGltZSB0byBjaGVjayB0aGUgcmV2aXNpb24gaGlzdG9yeSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0I2lmZGVmIF9fQklHX0VORElBTlxuIDg3MTpcdFx0aSA9ICgxXHUwMDNjXHUwMDNjMjApO1x0LyogQmlnLWVuZGlhbiBkZXNjcmlwdG9ycyAqL1xuIDg3MjpcdCNlbHNlXG4gODczOlx0XHRpID0gMDtcbiA4NzQ6XHQjZW5kaWZcbiA4NzU6XHRcdGkgfD0gKDB4MDRcdTAwM2NcdTAwM2MyKTtcdFx0Lyogc2tpcCBsZW5ndGggNCB1MzIgKi9cbiA4NzY6XHRcdGkgfD0gMHgwMjtcdFx0LyogZ2l2ZSBSeCBwcmlvcml0eSAqL1xuIDg3NzpcdFxuIDg3ODpcdFx0LyogQ29uZmlndXJlIHRoZSBQQ0kgYnVzIGJ1cnN0cyBhbmQgRklGTyB0aHJlc2hvbGRzLlxuIDg3OTpcdFx0ICAgU2V0IDE2IGxvbmd3b3JkIGNhY2hlIGFsaWdubWVudCwgbm8gYnVyc3QgbGltaXQuXG4gODgwOlx0XHQgICBDYWNoZSBhbGlnbm1lbnQgYml0cyAxNToxNFx0ICAgICBCdXJzdCBsZW5ndGggMTM6OFxuIDg4MTpcdFx0XHQwMDAwXHRcdTAwM2Nub3QgYWxsb3dlZFx1MDAzZSBcdFx0MDAwMCBhbGlnbiB0byBjYWNoZVx0MDgwMCA4IGxvbmd3b3Jkc1xuIDg4MjpcdFx0XHQ0MDAwXHQ4ICBsb25nd29yZHNcdFx0MDEwMCAxIGxvbmd3b3JkXHRcdDEwMDAgMTYgbG9uZ3dvcmRzXG4gODgzOlx0XHRcdDgwMDBcdDE2IGxvbmd3b3Jkc1x0XHQwMjAwIDIgbG9uZ3dvcmRzXHQyMDAwIDMyIGxvbmd3b3Jkc1xuIDg4NDpcdFx0XHRDMDAwXHQzMiAgbG9uZ3dvcmRzXHRcdDA0MDAgNCBsb25nd29yZHMgKi9cbiA4ODU6XHRcbiA4ODY6XHQjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcbiA4ODc6XHRcdGkgfD0gMHhFMDAwO1xuIDg4ODpcdCNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDKSB8fCBkZWZpbmVkIChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19BUk0pXG4gODg5Olx0XHRpIHw9IDB4NDgwMDtcbiA4OTA6XHQjZWxzZVxuIDg5MTpcdFx0ZGV2X3dhcm4oXHUwMDI2ZGV2LVx1MDAzZWRldiwgXCYjMzQ7dW5rbm93biBDUFUgYXJjaGl0ZWN0dXJlLCB1c2luZyBkZWZhdWx0IGNzcjAgc2V0dGluZ1xcblwmIzM0Oyk7XG4gODkyOlx0XHRpIHw9IDB4NDgwMDtcbiA4OTM6XHQjZW5kaWZcbiA4OTQ6XHRcdGlvd3JpdGUzMihpLCBpb2FkZHIgJiM0MzsgUENJQnVzQ2ZnKTtcbiA4OTU6XHRcbiA4OTY6XHRcdG5wLVx1MDAzZWNzcjYgPSAwO1xuIDg5NzpcdFx0LyogMTI4IGJ5dGUgVHggdGhyZXNob2xkO1xuIDg5ODpcdFx0XHRUcmFuc21pdCBvbjsgUmVjZWl2ZSBvbjsgKi9cbiA4OTk6XHRcdHVwZGF0ZV9jc3I2KGRldiwgMHgwMDAyMjAwMiB8IHVwZGF0ZV9saW5rKGRldikgfCBfX3NldF9yeF9tb2RlKGRldikpO1xuIDkwMDpcdFxuIDkwMTpcdFx0LyogQ2xlYXIgYW5kIEVuYWJsZSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIGludGVycnVwdCBtYXNrLiAqL1xuIDkwMjpcdFx0aW93cml0ZTMyKDB4MUEwRjUsIGlvYWRkciAmIzQzOyBJbnRyU3RhdHVzKTtcbiA5MDM6XHRcdGlvd3JpdGUzMigweDFBMEY1LCBpb2FkZHIgJiM0MzsgSW50ckVuYWJsZSk7XG4gOTA0Olx0XG4gOTA1Olx0XHRpb3dyaXRlMzIoMCwgaW9hZGRyICYjNDM7IFJ4U3RhcnREZW1hbmQpO1xuIDkwNjpcdH1cbiA5MDc6XHRcbiA5MDg6XHRzdGF0aWMgdm9pZCB0eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKVxuIDkwOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDgwCgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDExMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBXb3J0aEZ1enppbmcgRGV0ZXJtaW5hdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIG1ldGhvZGljYWxseS4gRmlyc3QsIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBUaGUgZGlmZiBmb2N1c2VzIG9uIGNvZGUgdGhhdCB3YXMgZ3VhcmRlZCBieSBgI2lmIGRlZmluZWQgKF9faTM4Nl9fKSAmYW1wOyZhbXA7IC4uLmAuIFNpbmNlIGFtZDY0IGlzIGBfX3g4Nl82NF9fYCwgdGhhdCBjb25kaXRpb25hbCBwYXRoIHdhcyAqbmV2ZXIqIGFjdGl2ZSBvbiBhbWQ2NCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGltcGFjdCBvdXIgdGFyZ2V0LgoKRGlnZ2luZyBkZWVwZXIsIGV2ZW4gb24geDg2LCB0aGUgcmVtb3ZlZCBjb2RlIHNwZWNpZmljYWxseSB0YXJnZXRlZCAzODYvNDg2IHN5c3RlbXMgYnVpbHQgaW50byB0aGUga2VybmVsLCBhcyBpbmRpY2F0ZWQgYnkgYGJvb3RfY3B1X2RhdGEueDg2ICZsdDs9IDRgIGFuZCB0aGUgYCFkZWZpbmVkKE1PRFVMRSlgIGNvbmRpdGlvbi4gTm93LCBpcyB0aGUgV2luYm9uZCBXODljODQwIFBDSSBFdGhlcm5ldCBkZXZpY2UgZW11bGF0ZWQgaW4gUUVNVT8gSSBjaGVja2VkLiBUaGUgc3RhbmRhcmQgUUVNVSBzZXQgb2Ygc3VwcG9ydGVkIG5ldHdvcmsgY2FyZHMgZG9lc24mIzM5O3QgaW5jbHVkZSB0aGUgV2luYm9uZC4gUUVNVSAqZG9lcyogc3VwcG9ydCBgdHVsaXBgLCBidXQgdGhhdCBpcyBhIERFQyAyMTE0MCwgbm90IGEgV2luYm9uZC4gU3BlY2lmaWNhbGx5LCB0aGUgV2luYm9uZCAodmVuZG9yIDB4MTA1MCwgZGV2aWNlIDB4MDg0MCkgb3IgQ29tcGV4IFJMMTAwLUFUWCAoMHgxMWY2LCAweDIwMTEpIGFyZSBub3Qgc3VwcG9ydGVkLgoKVGhlIGNyaXRpY2FsIG9ic2VydmF0aW9uIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGNvZGUgd2l0aGluIHRoYXQgYF9faTM4Nl9fYCBibG9jaywgbWFraW5nIGl0IGV4Y2x1c2l2ZSB0byAzMi1iaXQgeDg2IGFyY2hpdGVjdHVyZXMsIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIG9sZGVyIENQVXMuIE9uIGFtZDY0LCB0aGUgYF9feDg2XzY0X19gIHByZXByb2Nlc3NvciBicmFuY2ggd2FzIGFscmVhZHkgdGFrZW4gYW5kIHJlbWFpbnMgdW5jaGFuZ2VkLiBUaGUgY29kZSBvbiBhbWQ2NCBzdGlsbCBzZXRzIGBpIHw9IDB4RTAwMGAsIGFzIGl0IGRpZCBiZWZvcmUuCgpUaGlzIG1lYW5zOgoKMS4gIFRoZSBwYXRjaCBpcyBjb21wbGV0ZWx5IGluZXJ0IGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQuCjIuICBUaGUgcmVtb3ZlZCBjb2RlIGNhdGVyZWQgb25seSB0byBvbGRlciB4ODYgc3lzdGVtcy4KMy4gIFRoZSByZWxldmFudCBoYXJkd2FyZSwgdGhlIFdpbmJvbmQgVzg5Yzg0MCwgaXMgbGVnYWN5IFBDSSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGUgdXN1YWwgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLgoKTGV0JiMzOTtzIHZlcmlmeSBhZ2FpbnN0IHRoZSAmIzM0O25lZ2F0aXZlIGNyaXRlcmlhJiMzNDsuIFdlIGhhdmUgdHdvIHBvdGVudGlhbCBtYXRjaGVzOiAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGFuZCAmIzM0O0NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4mIzM0OwoKU3BlY2lmaWNhbGx5OgoKKiAgIFRoZSBwYXRjaCByZW1vdmVzIGNvZGUgZnJvbSBhbiBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBibG9jaywgZGVzaWduZWQgZm9yIGxlZ2FjeSAzODYvNDg2IENQVXMuIFRoaXMgY2xlYXJseSBmYWxscyB1bmRlciAmIzM0O0NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzQ7LiBJdCYjMzk7cyBub3QgY29tcGlsZWQgb24gYW1kNjQuCiogICBUaGUgV2luYm9uZCBXODljODQwIGlzIGxlZ2FjeSBwaHlzaWNhbCBQQ0kgaGFyZHdhcmUsICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGlzIHNhdGlzZmllcyAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7LgoKVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGVzZSBmaW5kaW5ncywgYFdvcnRoRnV6emluZ2AgKm11c3QqIGJlIGBmYWxzZWAuCgpOb3csIGxldCYjMzk7cyBidWlsZCB0aGUgYXJndW1lbnQgZm9yIGBzZXQtcmVzdWx0c2AuCgoqICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKKiAgIGBSZWFzb25pbmdgOiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGxlZ2FjeSAzODYvNDg2IENQVSB3b3JrYXJvdW5kIGNvZGUgdW5kZXIgYCNpZiBkZWZpbmVkKF9faTM4Nl9fKWAgaW4gdGhlIFdpbmJvbmQgVzg5Yzg0MCBFdGhlcm5ldCBkcml2ZXIuIE9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCksIHRoaXMgY29kZSB3YXMgbmV2ZXIgY29tcGlsZWQgb3IgZXhlY3V0ZWQsIGFuZCB0aGUgYW1kNjQgY29kZSBwYXRoIHJlbWFpbnMgY29tcGxldGVseSB1bmNoYW5nZWQuIEFkZGl0aW9uYWxseSwgdGhlIFdpbmJvbmQgVzg5Yzg0MCBQQ0kgTklDIGlzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OwoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGFycmF5KQoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBhcnJheSkKCk9rYXksIG5vdyBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBwYXJhbWV0ZXIgdHlwZXMgZm9yIGBzZXQtcmVzdWx0c2AuCmBXb3J0aEZ1enppbmdgOiBCb29sZWFuIC0gQ2hlY2shCmBSZWFzb25pbmdgOiBTdHJpbmcgLSBDaGVjayEKYEZvY3VzU3ltYm9sc2A6IEFycmF5IG9mIHN0cmluZyAtIENoZWNrIQpgRW5hYmxlQ29uZmlnc2A6IEFycmF5IG9mIHN0cmluZyAtIENoZWNrIQoKV2UgYXJlIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgbGVnYWN5IDM4Ni80ODYgQ1BVIHdvcmthcm91bmQgY29kZSB1bmRlciBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBpbiB0aGUgV2luYm9uZCBXODljODQwIEV0aGVybmV0IGRyaXZlci4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhpcyBjb2RlIHdhcyBuZXZlciBjb21waWxlZCBvciBleGVjdXRlZCwgYW5kIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgYW1kNjQgaXMgY29tcGxldGVseSB1bmNoYW5nZWQuIEZ1cnRoZXJtb3JlLCB0aGUgV2luYm9uZCBXODljODQwIFBDSSBOSUMgaXMgbGVnYWN5IHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgbGVnYWN5IDM4Ni80ODYgQ1BVIHdvcmthcm91bmQgY29kZSB1bmRlciBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBpbiB0aGUgV2luYm9uZCBXODljODQwIEV0aGVybmV0IGRyaXZlci4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhpcyBjb2RlIHdhcyBuZXZlciBjb21waWxlZCBvciBleGVjdXRlZCwgYW5kIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgYW1kNjQgaXMgY29tcGxldGVseSB1bmNoYW5nZWQuIEZ1cnRoZXJtb3JlLCB0aGUgV2luYm9uZCBXODljODQwIFBDSSBOSUMgaXMgbGVnYWN5IHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDQ6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA0OjEyOjA3LjM3MTU5MjUzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODU5OTc2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBsZWdhY3kgMzg2LzQ4NiBDUFUgd29ya2Fyb3VuZCBjb2RlIHVuZGVyIGAjaWYgZGVmaW5lZChfX2kzODZfXylgIGluIHRoZSBXaW5ib25kIFc4OWM4NDAgRXRoZXJuZXQgZHJpdmVyLiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCB0aGlzIGNvZGUgd2FzIG5ldmVyIGNvbXBpbGVkIG9yIGV4ZWN1dGVkLCBhbmQgdGhlIGdlbmVyYXRlZCBjb2RlIGZvciBhbWQ2NCBpcyBjb21wbGV0ZWx5IHVuY2hhbmdlZC4gRnVydGhlcm1vcmUsIHRoZSBXaW5ib25kIFc4OWM4NDAgUENJIE5JQyBpcyBsZWdhY3kgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDQ6MTI6MDcuMzcxNTk3NTM0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkxODgwMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2MyMDNlNzZjZmU1MmNjOGUwYTBmMmM2MmFkMGYzZjU5M2E2YTE4OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNDoxMjowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXFxuaW5kZXggYTU1ODFmMWQwMTQxNy4uYzQyZWFmMGVlZjY0MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXFxuQEAgLTg3NiwyNCArODc2LDE0IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGkgfD0gMHgwMjtcXHRcXHQvKiBnaXZlIFJ4IHByaW9yaXR5ICovXFxuIFxcbiBcXHQvKiBDb25maWd1cmUgdGhlIFBDSSBidXMgYnVyc3RzIGFuZCBGSUZPIHRocmVzaG9sZHMuXFxuLVxcdCAgIDQ4NjogU2V0IDggbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCA4IGxvbmd3b3JkIGJ1cnN0Llxcbi1cXHQgICA1ODY6IFNldCAxNiBsb25nd29yZCBjYWNoZSBhbGlnbm1lbnQsIG5vIGJ1cnN0IGxpbWl0LlxcbitcXHQgICBTZXQgMTYgbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCBubyBidXJzdCBsaW1pdC5cXG4gXFx0ICAgQ2FjaGUgYWxpZ25tZW50IGJpdHMgMTU6MTRcXHQgICAgIEJ1cnN0IGxlbmd0aCAxMzo4XFxuIFxcdFxcdDAwMDBcXHRcXHUwMDNjbm90IGFsbG93ZWRcXHUwMDNlIFxcdFxcdDAwMDAgYWxpZ24gdG8gY2FjaGVcXHQwODAwIDggbG9uZ3dvcmRzXFxuIFxcdFxcdDQwMDBcXHQ4ICBsb25nd29yZHNcXHRcXHQwMTAwIDEgbG9uZ3dvcmRcXHRcXHQxMDAwIDE2IGxvbmd3b3Jkc1xcbiBcXHRcXHQ4MDAwXFx0MTYgbG9uZ3dvcmRzXFx0XFx0MDIwMCAyIGxvbmd3b3Jkc1xcdDIwMDAgMzIgbG9uZ3dvcmRzXFxuIFxcdFxcdEMwMDBcXHQzMiAgbG9uZ3dvcmRzXFx0XFx0MDQwMCA0IGxvbmd3b3JkcyAqL1xcbiBcXG4tI2lmIGRlZmluZWQgKF9faTM4Nl9fKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChNT0RVTEUpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19VTUwpXFxuLVxcdC8qIFdoZW4gbm90IGEgbW9kdWxlIHdlIGNhbiB3b3JrIGFyb3VuZCBicm9rZW4gJzQ4NiBQQ0kgYm9hcmRzLiAqL1xcbi1cXHRpZiAoYm9vdF9jcHVfZGF0YS54ODYgXFx1MDAzYz0gNCkge1xcbi1cXHRcXHRpIHw9IDB4NDgwMDtcXG4tXFx0XFx0ZGV2X2luZm8oXFx1MDAyNmRldi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHQgXFxcIlRoaXMgaXMgYSAzODYvNDg2IFBDSSBzeXN0ZW0sIHNldHRpbmcgY2FjaGUgYWxpZ25tZW50IHRvIDggbG9uZ3dvcmRzXFxcXG5cXFwiKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aSB8PSAweEUwMDA7XFxuLVxcdH1cXG4tI2VsaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcXG4rI2lmIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pXFxuIFxcdGkgfD0gMHhFMDAwO1xcbiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQykgfHwgZGVmaW5lZCAoQ09ORklHX1BBUklTQykgfHwgZGVmaW5lZChDT05GSUdfQVJNKVxcbiBcXHRpIHw9IDB4NDgwMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDQ6MTI6MDguODY0MDg0MTQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzM2NzQzNzUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBsZWdhY3kgMzg2LzQ4NiBDUFUgd29ya2Fyb3VuZCBjb2RlIHVuZGVyIGAjaWYgZGVmaW5lZChfX2kzODZfXylgIGluIHRoZSBXaW5ib25kIFc4OWM4NDAgRXRoZXJuZXQgZHJpdmVyLiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCB0aGlzIGNvZGUgd2FzIG5ldmVyIGNvbXBpbGVkIG9yIGV4ZWN1dGVkLCBhbmQgdGhlIGdlbmVyYXRlZCBjb2RlIGZvciBhbWQ2NCBpcyBjb21wbGV0ZWx5IHVuY2hhbmdlZC4gRnVydGhlcm1vcmUsIHRoZSBXaW5ib25kIFc4OWM4NDAgUENJIE5JQyBpcyBsZWdhY3kgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYzIwM2U3NmNmZTUyY2M4ZTBhMGYyYzYyYWQwZjNmNTkzYTZhMTg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDQ6MTI6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXG5pbmRleCBhNTU4MWYxZDAxNDE3Li5jNDJlYWYwZWVmNjQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXG5AQCAtODc2LDI0ICs4NzYsMTQgQEAgc3RhdGljIHZvaWQgaW5pdF9yZWdpc3RlcnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGkgfD0gMHgwMjtcdFx0LyogZ2l2ZSBSeCBwcmlvcml0eSAqL1xuIFxuIFx0LyogQ29uZmlndXJlIHRoZSBQQ0kgYnVzIGJ1cnN0cyBhbmQgRklGTyB0aHJlc2hvbGRzLlxuLVx0ICAgNDg2OiBTZXQgOCBsb25nd29yZCBjYWNoZSBhbGlnbm1lbnQsIDggbG9uZ3dvcmQgYnVyc3QuXG4tXHQgICA1ODY6IFNldCAxNiBsb25nd29yZCBjYWNoZSBhbGlnbm1lbnQsIG5vIGJ1cnN0IGxpbWl0LlxuK1x0ICAgU2V0IDE2IGxvbmd3b3JkIGNhY2hlIGFsaWdubWVudCwgbm8gYnVyc3QgbGltaXQuXG4gXHQgICBDYWNoZSBhbGlnbm1lbnQgYml0cyAxNToxNFx0ICAgICBCdXJzdCBsZW5ndGggMTM6OFxuIFx0XHQwMDAwXHRcdTAwM2Nub3QgYWxsb3dlZFx1MDAzZSBcdFx0MDAwMCBhbGlnbiB0byBjYWNoZVx0MDgwMCA4IGxvbmd3b3Jkc1xuIFx0XHQ0MDAwXHQ4ICBsb25nd29yZHNcdFx0MDEwMCAxIGxvbmd3b3JkXHRcdDEwMDAgMTYgbG9uZ3dvcmRzXG4gXHRcdDgwMDBcdDE2IGxvbmd3b3Jkc1x0XHQwMjAwIDIgbG9uZ3dvcmRzXHQyMDAwIDMyIGxvbmd3b3Jkc1xuIFx0XHRDMDAwXHQzMiAgbG9uZ3dvcmRzXHRcdDA0MDAgNCBsb25nd29yZHMgKi9cbiBcbi0jaWYgZGVmaW5lZCAoX19pMzg2X18pIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChNT0RVTEUpIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChDT05GSUdfVU1MKVxuLVx0LyogV2hlbiBub3QgYSBtb2R1bGUgd2UgY2FuIHdvcmsgYXJvdW5kIGJyb2tlbiAnNDg2IFBDSSBib2FyZHMuICovXG4tXHRpZiAoYm9vdF9jcHVfZGF0YS54ODYgXHUwMDNjPSA0KSB7XG4tXHRcdGkgfD0gMHg0ODAwO1xuLVx0XHRkZXZfaW5mbyhcdTAwMjZkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCBcIlRoaXMgaXMgYSAzODYvNDg2IFBDSSBzeXN0ZW0sIHNldHRpbmcgY2FjaGUgYWxpZ25tZW50IHRvIDggbG9uZ3dvcmRzXFxuXCIpO1xuLVx0fSBlbHNlIHtcbi1cdFx0aSB8PSAweEUwMDA7XG4tXHR9XG4tI2VsaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcbisjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcbiBcdGkgfD0gMHhFMDAwO1xuICNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDKSB8fCBkZWZpbmVkIChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19BUk0pXG4gXHRpIHw9IDB4NDgwMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA0OjEyOjA4Ljg2NDA4NjA3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxODg4OTM0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBEZWVwIERpdmUgaW50byBDb21waWxlciBEaXJlY3RpdmVzIGFuZCBUYXJnZXQgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGFuZCwgY3J1Y2lhbGx5LCB3aGF0IHRhcmdldCBhcmNoaXRlY3R1cmUgd2UncmUgZGVhbGluZyB3aXRoIOKAkyBhbWQ2NC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGBkaWZmYCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSB0aGlzIGNoYW5nZXMuXG5cblRoZSBjb2RlIG1vZGlmaWVzIHRoZSBgaW5pdF9yZWdpc3RlcnNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGNvbmZpZ3VyZXMgdGhlIFBDSSBidXMgYnVyc3RzIGFuZCBGSUZPIHRocmVzaG9sZHMuIFRoZSBrZXkgbGllcyB3aXRoaW4gdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHVzaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIChgI2lmYCwgYCNlbGlmYCkuIEkgc2VlIGNvZGUgdGhhdCB1c2VkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB4ODYgYXJjaGl0ZWN0dXJlcyAoMzg2LzQ4NiB2cy4gbGF0ZXIgdmVyc2lvbnMpIGFuZCBvdGhlciBhcmNoaXRlY3R1cmVzLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IG9uIGFtZDY0LCBkb2VzIHRoaXMgY2hhbmdlIGFueXRoaW5nIGF0IGFsbD8gTGV0J3MgY2hlY2suXG5cbkJlZm9yZSB0aGUgcGF0Y2gsIGZvciBgX194ODZfNjRfX2AsIHRoZSBjb2RlIHdvdWxkIHNraXAgYSBjaGVjayB0aGF0IHdhcyB4ODYgc3BlY2lmaWMgYW5kIHdvdWxkIHNpbXBseSBzZXQgYGkgfD0gMHhFMDAwYC5cblxuQWZ0ZXIgdGhlIHBhdGNoLCB0aGUgY29kZSAqc3RpbGwqIHNldHMgYGkgfD0gMHhFMDAwYCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zISBUaGUgY29uZGl0aW9uYWxzIGFyZSBzdHJ1Y3R1cmVkIHRvIHNldCB0aGUgc2FtZSB2YWx1ZSwgbm8gbWF0dGVyIHdoYXQuIFNvLCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgYGFtZDY0YCwgdGhlIGdlbmVyYXRlZCBjb2RlIGlzIGNvbXBsZXRlbHkgaWRlbnRpY2FsIVxuXG5UaGUgcGF0Y2ggYXBwZWFycyB0byBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgcmVtb3ZhbCBvZiB0aGUgNDg2IHNwZWNpZmljIGNvZGUgaXMgc2FmZSB0byBkbywgYmVjYXVzZSB0aGUgY29kZSBkb2VzIHRoZSBzYW1lIHRoaW5nIGVpdGhlciB3YXkuXG5cbkknbGwgYWxzbyBsb29rIGludG8gd2hhdCBgd2luYm9uZC04NDAuY2AgYWN0dWFsbHkgaXMsIGFuZCB3aGV0aGVyIGl0J3MgZW11bGF0ZWQgaW4gUUVNVSBvciBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBvciBpZiBpdCdzIG9sZCBQQ0kgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQuIFRoaXMgbWlnaHQgZ2l2ZSBmdXJ0aGVyIGNvbnRleHQgdG8gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNDoxMjoxNS4wNTI5ODE3MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxODE3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV0lOQk9ORF84NDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC9LY29uZmlnPTEwMz1jb25maWcgVFVMSVBfRE05MTBYXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL0tjb25maWc6MTA3OmNvbmZpZyBXSU5CT05EXzg0MFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC9LY29uZmlnLTEwOC1cXHR0cmlzdGF0ZSBcXFwiV2luYm9uZCBXODljODQwIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfRE05MTAyKVxcdFxcdCs9IGRtZmUub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19XSU5CT05EXzg0MClcXHQrPSB3aW5ib25kLTg0MC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ERTIxMDRYKVxcdFxcdCs9IGRlMjEwNHgub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmM9NTI9cHJvYmUtZnVuYzogd2luYm9uZDg0MF9wcm9iZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jOjUzOmNvbmZpZy1pbjogdHJpc3RhdGUgJ1dpbmJvbmQgVzg5Yzg0MCBFdGhlcm5ldCBzdXBwb3J0JyBDT05GSUdfV0lOQk9ORF84NDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYy01NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYz01NT1jLWhlbHAtbmFtZTogV2luYm9uZCBXODljODQwIFBDSSBFdGhlcm5ldCBzdXBwb3J0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmM6NTY6Yy1oZWxwLXN5bWJvbDogQ09ORklHX1dJTkJPTkRfODQwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmMtNTctYy1oZWxwOiBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIFdpbmJvbmQgVzg5Yzg0MCBjaGlwLiAgSXQgYWxzbyB3b3JrcyB3aXRoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA0OjEyOjE1LjEwNjE2OTg4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5ODgxMDkzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGU6IERlY2lwaGVyaW5nIHRoZSBUdWxpcCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBhIHNwZWNpZmljIGZpbGUg4oCTIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuY2AuIFRoYXQncyB3aGVyZSBJIHNob3VsZCBiZSBsb29raW5nIGZvciBhbnkgY2hhbmdlcyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBFdGhlcm5ldCBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmUgODcwLiBUaGUgY29tYmluYXRpb24gb2YgdGhlIGZpbGVuYW1lIGFuZCB0aGUgbGluZSBudW1iZXIgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbXBhY3QuIExldCdzIGhvcGUgdGhlIGRpZmZzIGFyZSBlYXN5IHRvIGRlY2lwaGVyLiBUaW1lIHRvIGNoZWNrIHRoZSByZXZpc2lvbiBoaXN0b3J5IGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA0OjEyOjE3LjA5NDI4MjY1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NzA6XFx0I2lmZGVmIF9fQklHX0VORElBTlxcbiA4NzE6XFx0XFx0aSA9ICgxXFx1MDAzY1xcdTAwM2MyMCk7XFx0LyogQmlnLWVuZGlhbiBkZXNjcmlwdG9ycyAqL1xcbiA4NzI6XFx0I2Vsc2VcXG4gODczOlxcdFxcdGkgPSAwO1xcbiA4NzQ6XFx0I2VuZGlmXFxuIDg3NTpcXHRcXHRpIHw9ICgweDA0XFx1MDAzY1xcdTAwM2MyKTtcXHRcXHQvKiBza2lwIGxlbmd0aCA0IHUzMiAqL1xcbiA4NzY6XFx0XFx0aSB8PSAweDAyO1xcdFxcdC8qIGdpdmUgUnggcHJpb3JpdHkgKi9cXG4gODc3OlxcdFxcbiA4Nzg6XFx0XFx0LyogQ29uZmlndXJlIHRoZSBQQ0kgYnVzIGJ1cnN0cyBhbmQgRklGTyB0aHJlc2hvbGRzLlxcbiA4Nzk6XFx0XFx0ICAgU2V0IDE2IGxvbmd3b3JkIGNhY2hlIGFsaWdubWVudCwgbm8gYnVyc3QgbGltaXQuXFxuIDg4MDpcXHRcXHQgICBDYWNoZSBhbGlnbm1lbnQgYml0cyAxNToxNFxcdCAgICAgQnVyc3QgbGVuZ3RoIDEzOjhcXG4gODgxOlxcdFxcdFxcdDAwMDBcXHRcXHUwMDNjbm90IGFsbG93ZWRcXHUwMDNlIFxcdFxcdDAwMDAgYWxpZ24gdG8gY2FjaGVcXHQwODAwIDggbG9uZ3dvcmRzXFxuIDg4MjpcXHRcXHRcXHQ0MDAwXFx0OCAgbG9uZ3dvcmRzXFx0XFx0MDEwMCAxIGxvbmd3b3JkXFx0XFx0MTAwMCAxNiBsb25nd29yZHNcXG4gODgzOlxcdFxcdFxcdDgwMDBcXHQxNiBsb25nd29yZHNcXHRcXHQwMjAwIDIgbG9uZ3dvcmRzXFx0MjAwMCAzMiBsb25nd29yZHNcXG4gODg0OlxcdFxcdFxcdEMwMDBcXHQzMiAgbG9uZ3dvcmRzXFx0XFx0MDQwMCA0IGxvbmd3b3JkcyAqL1xcbiA4ODU6XFx0XFxuIDg4NjpcXHQjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcXG4gODg3OlxcdFxcdGkgfD0gMHhFMDAwO1xcbiA4ODg6XFx0I2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkMpIHx8IGRlZmluZWQgKENPTkZJR19QQVJJU0MpIHx8IGRlZmluZWQoQ09ORklHX0FSTSlcXG4gODg5OlxcdFxcdGkgfD0gMHg0ODAwO1xcbiA4OTA6XFx0I2Vsc2VcXG4gODkxOlxcdFxcdGRldl93YXJuKFxcdTAwMjZkZXYtXFx1MDAzZWRldiwgXFxcInVua25vd24gQ1BVIGFyY2hpdGVjdHVyZSwgdXNpbmcgZGVmYXVsdCBjc3IwIHNldHRpbmdcXFxcblxcXCIpO1xcbiA4OTI6XFx0XFx0aSB8PSAweDQ4MDA7XFxuIDg5MzpcXHQjZW5kaWZcXG4gODk0OlxcdFxcdGlvd3JpdGUzMihpLCBpb2FkZHIgKyBQQ0lCdXNDZmcpO1xcbiA4OTU6XFx0XFxuIDg5NjpcXHRcXHRucC1cXHUwMDNlY3NyNiA9IDA7XFxuIDg5NzpcXHRcXHQvKiAxMjggYnl0ZSBUeCB0aHJlc2hvbGQ7XFxuIDg5ODpcXHRcXHRcXHRUcmFuc21pdCBvbjsgUmVjZWl2ZSBvbjsgKi9cXG4gODk5OlxcdFxcdHVwZGF0ZV9jc3I2KGRldiwgMHgwMDAyMjAwMiB8IHVwZGF0ZV9saW5rKGRldikgfCBfX3NldF9yeF9tb2RlKGRldikpO1xcbiA5MDA6XFx0XFxuIDkwMTpcXHRcXHQvKiBDbGVhciBhbmQgRW5hYmxlIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgaW50ZXJydXB0IG1hc2suICovXFxuIDkwMjpcXHRcXHRpb3dyaXRlMzIoMHgxQTBGNSwgaW9hZGRyICsgSW50clN0YXR1cyk7XFxuIDkwMzpcXHRcXHRpb3dyaXRlMzIoMHgxQTBGNSwgaW9hZGRyICsgSW50ckVuYWJsZSk7XFxuIDkwNDpcXHRcXG4gOTA1OlxcdFxcdGlvd3JpdGUzMigwLCBpb2FkZHIgKyBSeFN0YXJ0RGVtYW5kKTtcXG4gOTA2OlxcdH1cXG4gOTA3OlxcdFxcbiA5MDg6XFx0c3RhdGljIHZvaWQgdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSlcXG4gOTA5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDQ6MTI6MTcuMDk0NDE3ODkzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTEzNzAyOTgxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIFdvcnRoRnV6emluZyBEZXRlcm1pbmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIG1ldGhvZGljYWxseS4gRmlyc3QsIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBUaGUgZGlmZiBmb2N1c2VzIG9uIGNvZGUgdGhhdCB3YXMgZ3VhcmRlZCBieSBgI2lmIGRlZmluZWQgKF9faTM4Nl9fKSBcdTAwMjZcdTAwMjYgLi4uYC4gU2luY2UgYW1kNjQgaXMgYF9feDg2XzY0X19gLCB0aGF0IGNvbmRpdGlvbmFsIHBhdGggd2FzICpuZXZlciogYWN0aXZlIG9uIGFtZDY0IGluIHRoZSBmaXJzdCBwbGFjZS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBpbXBhY3Qgb3VyIHRhcmdldC5cblxuRGlnZ2luZyBkZWVwZXIsIGV2ZW4gb24geDg2LCB0aGUgcmVtb3ZlZCBjb2RlIHNwZWNpZmljYWxseSB0YXJnZXRlZCAzODYvNDg2IHN5c3RlbXMgYnVpbHQgaW50byB0aGUga2VybmVsLCBhcyBpbmRpY2F0ZWQgYnkgYGJvb3RfY3B1X2RhdGEueDg2IFx1MDAzYz0gNGAgYW5kIHRoZSBgIWRlZmluZWQoTU9EVUxFKWAgY29uZGl0aW9uLiBOb3csIGlzIHRoZSBXaW5ib25kIFc4OWM4NDAgUENJIEV0aGVybmV0IGRldmljZSBlbXVsYXRlZCBpbiBRRU1VPyBJIGNoZWNrZWQuIFRoZSBzdGFuZGFyZCBRRU1VIHNldCBvZiBzdXBwb3J0ZWQgbmV0d29yayBjYXJkcyBkb2Vzbid0IGluY2x1ZGUgdGhlIFdpbmJvbmQuIFFFTVUgKmRvZXMqIHN1cHBvcnQgYHR1bGlwYCwgYnV0IHRoYXQgaXMgYSBERUMgMjExNDAsIG5vdCBhIFdpbmJvbmQuIFNwZWNpZmljYWxseSwgdGhlIFdpbmJvbmQgKHZlbmRvciAweDEwNTAsIGRldmljZSAweDA4NDApIG9yIENvbXBleCBSTDEwMC1BVFggKDB4MTFmNiwgMHgyMDExKSBhcmUgbm90IHN1cHBvcnRlZC5cblxuVGhlIGNyaXRpY2FsIG9ic2VydmF0aW9uIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGNvZGUgd2l0aGluIHRoYXQgYF9faTM4Nl9fYCBibG9jaywgbWFraW5nIGl0IGV4Y2x1c2l2ZSB0byAzMi1iaXQgeDg2IGFyY2hpdGVjdHVyZXMsIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIG9sZGVyIENQVXMuIE9uIGFtZDY0LCB0aGUgYF9feDg2XzY0X19gIHByZXByb2Nlc3NvciBicmFuY2ggd2FzIGFscmVhZHkgdGFrZW4gYW5kIHJlbWFpbnMgdW5jaGFuZ2VkLiBUaGUgY29kZSBvbiBhbWQ2NCBzdGlsbCBzZXRzIGBpIHw9IDB4RTAwMGAsIGFzIGl0IGRpZCBiZWZvcmUuXG5cblRoaXMgbWVhbnM6XG5cbjEuICBUaGUgcGF0Y2ggaXMgY29tcGxldGVseSBpbmVydCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIGFtZDY0LlxuMi4gIFRoZSByZW1vdmVkIGNvZGUgY2F0ZXJlZCBvbmx5IHRvIG9sZGVyIHg4NiBzeXN0ZW1zLlxuMy4gIFRoZSByZWxldmFudCBoYXJkd2FyZSwgdGhlIFdpbmJvbmQgVzg5Yzg0MCwgaXMgbGVnYWN5IFBDSSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGUgdXN1YWwgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLlxuXG5MZXQncyB2ZXJpZnkgYWdhaW5zdCB0aGUgXCJuZWdhdGl2ZSBjcml0ZXJpYVwiLiBXZSBoYXZlIHR3byBwb3RlbnRpYWwgbWF0Y2hlczogXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBhbmQgXCJDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCJcblxuU3BlY2lmaWNhbGx5OlxuXG4qICAgVGhlIHBhdGNoIHJlbW92ZXMgY29kZSBmcm9tIGFuIGAjaWYgZGVmaW5lZChfX2kzODZfXylgIGJsb2NrLCBkZXNpZ25lZCBmb3IgbGVnYWN5IDM4Ni80ODYgQ1BVcy4gVGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIFwiQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlXCIuIEl0J3Mgbm90IGNvbXBpbGVkIG9uIGFtZDY0LlxuKiAgIFRoZSBXaW5ib25kIFc4OWM4NDAgaXMgbGVnYWN5IHBoeXNpY2FsIFBDSSBoYXJkd2FyZSwgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgc2F0aXNmaWVzIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIuXG5cblRoZXJlZm9yZSwgYmFzZWQgb24gdGhlc2UgZmluZGluZ3MsIGBXb3J0aEZ1enppbmdgICptdXN0KiBiZSBgZmFsc2VgLlxuXG5Ob3csIGxldCdzIGJ1aWxkIHRoZSBhcmd1bWVudCBmb3IgYHNldC1yZXN1bHRzYC5cblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIHJlbW92ZXMgbGVnYWN5IDM4Ni80ODYgQ1BVIHdvcmthcm91bmQgY29kZSB1bmRlciBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBpbiB0aGUgV2luYm9uZCBXODljODQwIEV0aGVybmV0IGRyaXZlci4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhpcyBjb2RlIHdhcyBuZXZlciBjb21waWxlZCBvciBleGVjdXRlZCwgYW5kIHRoZSBhbWQ2NCBjb2RlIHBhdGggcmVtYWlucyBjb21wbGV0ZWx5IHVuY2hhbmdlZC4gQWRkaXRpb25hbGx5LCB0aGUgV2luYm9uZCBXODljODQwIFBDSSBOSUMgaXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGFycmF5KVxuKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgYXJyYXkpXG5cbk9rYXksIG5vdyBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHBhcmFtZXRlciB0eXBlcyBmb3IgYHNldC1yZXN1bHRzYC5cbmBXb3J0aEZ1enppbmdgOiBCb29sZWFuIC0gQ2hlY2shXG5gUmVhc29uaW5nYDogU3RyaW5nIC0gQ2hlY2shXG5gRm9jdXNTeW1ib2xzYDogQXJyYXkgb2Ygc3RyaW5nIC0gQ2hlY2shXG5gRW5hYmxlQ29uZmlnc2A6IEFycmF5IG9mIHN0cmluZyAtIENoZWNrIVxuXG5XZSBhcmUgcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDgwLCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNDoxMjoyNi4yMzE0NTUzMTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgbGVnYWN5IDM4Ni80ODYgQ1BVIHdvcmthcm91bmQgY29kZSB1bmRlciBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBpbiB0aGUgV2luYm9uZCBXODljODQwIEV0aGVybmV0IGRyaXZlci4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhpcyBjb2RlIHdhcyBuZXZlciBjb21waWxlZCBvciBleGVjdXRlZCwgYW5kIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgYW1kNjQgaXMgY29tcGxldGVseSB1bmNoYW5nZWQuIEZ1cnRoZXJtb3JlLCB0aGUgV2luYm9uZCBXODljODQwIFBDSSBOSUMgaXMgbGVnYWN5IHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgbGVnYWN5IDM4Ni80ODYgQ1BVIHdvcmthcm91bmQgY29kZSB1bmRlciBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBpbiB0aGUgV2luYm9uZCBXODljODQwIEV0aGVybmV0IGRyaXZlci4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhpcyBjb2RlIHdhcyBuZXZlciBjb21waWxlZCBvciBleGVjdXRlZCwgYW5kIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgYW1kNjQgaXMgY29tcGxldGVseSB1bmNoYW5nZWQuIEZ1cnRoZXJtb3JlLCB0aGUgV2luYm9uZCBXODljODQwIFBDSSBOSUMgaXMgbGVnYWN5IHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA0OjEyOjI2LjIzMTUyNDMzNVoiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowmr9s7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 03:18:28 +0000 UTC FinishedAt: 2026-09-15 04:12:27 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA0OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVtb3ZlcyBsZWdhY3kgMzg2LzQ4NiBDUFUgd29ya2Fyb3VuZCBjb2RlIHVuZGVyIGAjaWYgZGVmaW5lZChfX2kzODZfXylgIGluIHRoZSBXaW5ib25kIFc4OWM4NDAgRXRoZXJuZXQgZHJpdmVyLiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCB0aGlzIGNvZGUgd2FzIG5ldmVyIGNvbXBpbGVkIG9yIGV4ZWN1dGVkLCBhbmQgdGhlIGdlbmVyYXRlZCBjb2RlIGZvciBhbWQ2NCBpcyBjb21wbGV0ZWx5IHVuY2hhbmdlZC4gRnVydGhlcm1vcmUsIHRoZSBXaW5ib25kIFc4OWM4NDAgUENJIE5JQyBpcyBsZWdhY3kgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNDoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGNjMjAzZTc2Y2ZlNTJjYzhlMGEwZjJjNjJhZDBmM2Y1OTNhNmExODhcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNDoxMjowNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXG5pbmRleCBhNTU4MWYxZDAxNDE3Li5jNDJlYWYwZWVmNjQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXG5AQCAtODc2LDI0ICYjNDM7ODc2LDE0IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpIHw9IDB4MDI7XHRcdC8qIGdpdmUgUnggcHJpb3JpdHkgKi9cbiBcbiBcdC8qIENvbmZpZ3VyZSB0aGUgUENJIGJ1cyBidXJzdHMgYW5kIEZJRk8gdGhyZXNob2xkcy5cbi1cdCAgIDQ4NjogU2V0IDggbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCA4IGxvbmd3b3JkIGJ1cnN0LlxuLVx0ICAgNTg2OiBTZXQgMTYgbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCBubyBidXJzdCBsaW1pdC5cbiYjNDM7XHQgICBTZXQgMTYgbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCBubyBidXJzdCBsaW1pdC5cbiBcdCAgIENhY2hlIGFsaWdubWVudCBiaXRzIDE1OjE0XHQgICAgIEJ1cnN0IGxlbmd0aCAxMzo4XG4gXHRcdDAwMDBcdFx1MDAzY25vdCBhbGxvd2VkXHUwMDNlIFx0XHQwMDAwIGFsaWduIHRvIGNhY2hlXHQwODAwIDggbG9uZ3dvcmRzXG4gXHRcdDQwMDBcdDggIGxvbmd3b3Jkc1x0XHQwMTAwIDEgbG9uZ3dvcmRcdFx0MTAwMCAxNiBsb25nd29yZHNcbiBcdFx0ODAwMFx0MTYgbG9uZ3dvcmRzXHRcdDAyMDAgMiBsb25nd29yZHNcdDIwMDAgMzIgbG9uZ3dvcmRzXG4gXHRcdEMwMDBcdDMyICBsb25nd29yZHNcdFx0MDQwMCA0IGxvbmd3b3JkcyAqL1xuIFxuLSNpZiBkZWZpbmVkIChfX2kzODZfXykgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKE1PRFVMRSkgXHUwMDI2XHUwMDI2ICFkZWZpbmVkKENPTkZJR19VTUwpXG4tXHQvKiBXaGVuIG5vdCBhIG1vZHVsZSB3ZSBjYW4gd29yayBhcm91bmQgYnJva2VuICYjMzk7NDg2IFBDSSBib2FyZHMuICovXG4tXHRpZiAoYm9vdF9jcHVfZGF0YS54ODYgXHUwMDNjPSA0KSB7XG4tXHRcdGkgfD0gMHg0ODAwO1xuLVx0XHRkZXZfaW5mbyhcdTAwMjZkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCBcJiMzNDtUaGlzIGlzIGEgMzg2LzQ4NiBQQ0kgc3lzdGVtLCBzZXR0aW5nIGNhY2hlIGFsaWdubWVudCB0byA4IGxvbmd3b3Jkc1xcblwmIzM0Oyk7XG4tXHR9IGVsc2Uge1xuLVx0XHRpIHw9IDB4RTAwMDtcbi1cdH1cbi0jZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKVxuJiM0MzsjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcbiBcdGkgfD0gMHhFMDAwO1xuICNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDKSB8fCBkZWZpbmVkIChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19BUk0pXG4gXHRpIHw9IDB4NDgwMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNDoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGxlZ2FjeSAzODYvNDg2IENQVSB3b3JrYXJvdW5kIGNvZGUgdW5kZXIgYCNpZiBkZWZpbmVkKF9faTM4Nl9fKWAgaW4gdGhlIFdpbmJvbmQgVzg5Yzg0MCBFdGhlcm5ldCBkcml2ZXIuIE9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCksIHRoaXMgY29kZSB3YXMgbmV2ZXIgY29tcGlsZWQgb3IgZXhlY3V0ZWQsIGFuZCB0aGUgZ2VuZXJhdGVkIGNvZGUgZm9yIGFtZDY0IGlzIGNvbXBsZXRlbHkgdW5jaGFuZ2VkLiBGdXJ0aGVybW9yZSwgdGhlIFdpbmJvbmQgVzg5Yzg0MCBQQ0kgTklDIGlzIGxlZ2FjeSBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2MyMDNlNzZjZmU1MmNjOGUwYTBmMmM2MmFkMGYzZjU5M2E2YTE4OApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDA0OjEyOjA1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCBhNTU4MWYxZDAxNDE3Li5jNDJlYWYwZWVmNjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtODc2LDI0ICYjNDM7ODc2LDE0IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAJaSB8PSAweDAyOwkJLyogZ2l2ZSBSeCBwcmlvcml0eSAqLwogCiAJLyogQ29uZmlndXJlIHRoZSBQQ0kgYnVzIGJ1cnN0cyBhbmQgRklGTyB0aHJlc2hvbGRzLgotCSAgIDQ4NjogU2V0IDggbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCA4IGxvbmd3b3JkIGJ1cnN0LgotCSAgIDU4NjogU2V0IDE2IGxvbmd3b3JkIGNhY2hlIGFsaWdubWVudCwgbm8gYnVyc3QgbGltaXQuCiYjNDM7CSAgIFNldCAxNiBsb25nd29yZCBjYWNoZSBhbGlnbm1lbnQsIG5vIGJ1cnN0IGxpbWl0LgogCSAgIENhY2hlIGFsaWdubWVudCBiaXRzIDE1OjE0CSAgICAgQnVyc3QgbGVuZ3RoIDEzOjgKIAkJMDAwMAkmbHQ7bm90IGFsbG93ZWQmZ3Q7IAkJMDAwMCBhbGlnbiB0byBjYWNoZQkwODAwIDggbG9uZ3dvcmRzCiAJCTQwMDAJOCAgbG9uZ3dvcmRzCQkwMTAwIDEgbG9uZ3dvcmQJCTEwMDAgMTYgbG9uZ3dvcmRzCiAJCTgwMDAJMTYgbG9uZ3dvcmRzCQkwMjAwIDIgbG9uZ3dvcmRzCTIwMDAgMzIgbG9uZ3dvcmRzCiAJCUMwMDAJMzIgIGxvbmd3b3JkcwkJMDQwMCA0IGxvbmd3b3JkcyAqLwogCi0jaWYgZGVmaW5lZCAoX19pMzg2X18pICZhbXA7JmFtcDsgIWRlZmluZWQoTU9EVUxFKSAmYW1wOyZhbXA7ICFkZWZpbmVkKENPTkZJR19VTUwpCi0JLyogV2hlbiBub3QgYSBtb2R1bGUgd2UgY2FuIHdvcmsgYXJvdW5kIGJyb2tlbiAmIzM5OzQ4NiBQQ0kgYm9hcmRzLiAqLwotCWlmIChib290X2NwdV9kYXRhLng4NiAmbHQ7PSA0KSB7Ci0JCWkgfD0gMHg0ODAwOwotCQlkZXZfaW5mbygmYW1wO2Rldi0mZ3Q7ZGV2LAotCQkJICYjMzQ7VGhpcyBpcyBhIDM4Ni80ODYgUENJIHN5c3RlbSwgc2V0dGluZyBjYWNoZSBhbGlnbm1lbnQgdG8gOCBsb25nd29yZHNcbiYjMzQ7KTsKLQl9IGVsc2UgewotCQlpIHw9IDB4RTAwMDsKLQl9Ci0jZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQomIzQzOyNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQogCWkgfD0gMHhFMDAwOwogI2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkMpIHx8IGRlZmluZWQgKENPTkZJR19QQVJJU0MpIHx8IGRlZmluZWQoQ09ORklHX0FSTSkKIAlpIHw9IDB4NDgwMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMxNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBEZWVwIERpdmUgaW50byBDb21waWxlciBEaXJlY3RpdmVzIGFuZCBUYXJnZXQgQXJjaGl0ZWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcgYW5kLCBjcnVjaWFsbHksIHdoYXQgdGFyZ2V0IGFyY2hpdGVjdHVyZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIOKAkyBhbWQ2NC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGBkaWZmYCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSB0aGlzIGNoYW5nZXMuCgpUaGUgY29kZSBtb2RpZmllcyB0aGUgYGluaXRfcmVnaXN0ZXJzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBjb25maWd1cmVzIHRoZSBQQ0kgYnVzIGJ1cnN0cyBhbmQgRklGTyB0aHJlc2hvbGRzLiBUaGUga2V5IGxpZXMgd2l0aGluIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiB1c2luZyBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyAoYCNpZmAsIGAjZWxpZmApLiBJIHNlZSBjb2RlIHRoYXQgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4geDg2IGFyY2hpdGVjdHVyZXMgKDM4Ni80ODYgdnMuIGxhdGVyIHZlcnNpb25zKSBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlcy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogb24gYW1kNjQsIGRvZXMgdGhpcyBjaGFuZ2UgYW55dGhpbmcgYXQgYWxsPyBMZXQmIzM5O3MgY2hlY2suCgpCZWZvcmUgdGhlIHBhdGNoLCBmb3IgYF9feDg2XzY0X19gLCB0aGUgY29kZSB3b3VsZCBza2lwIGEgY2hlY2sgdGhhdCB3YXMgeDg2IHNwZWNpZmljIGFuZCB3b3VsZCBzaW1wbHkgc2V0IGBpIHw9IDB4RTAwMGAuCgpBZnRlciB0aGUgcGF0Y2gsIHRoZSBjb2RlICpzdGlsbCogc2V0cyBgaSB8PSAweEUwMDBgIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMhIFRoZSBjb25kaXRpb25hbHMgYXJlIHN0cnVjdHVyZWQgdG8gc2V0IHRoZSBzYW1lIHZhbHVlLCBubyBtYXR0ZXIgd2hhdC4gU28sIGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBgYW1kNjRgLCB0aGUgZ2VuZXJhdGVkIGNvZGUgaXMgY29tcGxldGVseSBpZGVudGljYWwhCgpUaGUgcGF0Y2ggYXBwZWFycyB0byBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgcmVtb3ZhbCBvZiB0aGUgNDg2IHNwZWNpZmljIGNvZGUgaXMgc2FmZSB0byBkbywgYmVjYXVzZSB0aGUgY29kZSBkb2VzIHRoZSBzYW1lIHRoaW5nIGVpdGhlciB3YXkuCgpJJiMzOTtsbCBhbHNvIGxvb2sgaW50byB3aGF0IGB3aW5ib25kLTg0MC5jYCBhY3R1YWxseSBpcywgYW5kIHdoZXRoZXIgaXQmIzM5O3MgZW11bGF0ZWQgaW4gUUVNVSBvciBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBvciBpZiBpdCYjMzk7cyBvbGQgUENJIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkLiBUaGlzIG1pZ2h0IGdpdmUgZnVydGhlciBjb250ZXh0IHRvIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7V0lOQk9ORF84NDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL0tjb25maWc9MTAzPWNvbmZpZyBUVUxJUF9ETTkxMFhcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvS2NvbmZpZy0xMDYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvS2NvbmZpZzoxMDc6Y29uZmlnIFdJTkJPTkRfODQwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvS2NvbmZpZy0xMDgtXHR0cmlzdGF0ZSBcJiMzNDtXaW5ib25kIFc4OWM4NDAgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC9NYWtlZmlsZT04PW9iai0kKENPTkZJR19ETTkxMDIpXHRcdCYjNDM7PSBkbWZlLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19XSU5CT05EXzg0MClcdCYjNDM7PSB3aW5ib25kLTg0MC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvTWFrZWZpbGUtMTAtb2JqLSQoQ09ORklHX0RFMjEwNFgpXHRcdCYjNDM7PSBkZTIxMDR4Lm9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYz01Mj1wcm9iZS1mdW5jOiB3aW5ib25kODQwX3Byb2JlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYzo1Mzpjb25maWctaW46IHRyaXN0YXRlICYjMzk7V2luYm9uZCBXODljODQwIEV0aGVybmV0IHN1cHBvcnQmIzM5OyBDT05GSUdfV0lOQk9ORF84NDBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jLTU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmM9NTU9Yy1oZWxwLW5hbWU6IFdpbmJvbmQgVzg5Yzg0MCBQQ0kgRXRoZXJuZXQgc3VwcG9ydFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmM6NTY6Yy1oZWxwLXN5bWJvbDogQ09ORklHX1dJTkJPTkRfODQwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYy01Ny1jLWhlbHA6IFRoaXMgZHJpdmVyIGlzIGZvciB0aGUgV2luYm9uZCBXODljODQwIGNoaXAuICBJdCBhbHNvIHdvcmtzIHdpdGhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NDUwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgQ29kZTogRGVjaXBoZXJpbmcgdGhlIFR1bGlwIERyaXZlcioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYSBzcGVjaWZpYyBmaWxlIOKAkyBgZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmNgLiBUaGF0JiMzOTtzIHdoZXJlIEkgc2hvdWxkIGJlIGxvb2tpbmcgZm9yIGFueSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdGhpcyBwYXJ0aWN1bGFyIEV0aGVybmV0IGRyaXZlci4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGludGVyZXN0ZWQgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmUgODcwLiBUaGUgY29tYmluYXRpb24gb2YgdGhlIGZpbGVuYW1lIGFuZCB0aGUgbGluZSBudW1iZXIgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbXBhY3QuIExldCYjMzk7cyBob3BlIHRoZSBkaWZmcyBhcmUgZWFzeSB0byBkZWNpcGhlci4gVGltZSB0byBjaGVjayB0aGUgcmV2aXNpb24gaGlzdG9yeSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDg3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgODcwOlx0I2lmZGVmIF9fQklHX0VORElBTlxuIDg3MTpcdFx0aSA9ICgxXHUwMDNjXHUwMDNjMjApO1x0LyogQmlnLWVuZGlhbiBkZXNjcmlwdG9ycyAqL1xuIDg3MjpcdCNlbHNlXG4gODczOlx0XHRpID0gMDtcbiA4NzQ6XHQjZW5kaWZcbiA4NzU6XHRcdGkgfD0gKDB4MDRcdTAwM2NcdTAwM2MyKTtcdFx0Lyogc2tpcCBsZW5ndGggNCB1MzIgKi9cbiA4NzY6XHRcdGkgfD0gMHgwMjtcdFx0LyogZ2l2ZSBSeCBwcmlvcml0eSAqL1xuIDg3NzpcdFxuIDg3ODpcdFx0LyogQ29uZmlndXJlIHRoZSBQQ0kgYnVzIGJ1cnN0cyBhbmQgRklGTyB0aHJlc2hvbGRzLlxuIDg3OTpcdFx0ICAgU2V0IDE2IGxvbmd3b3JkIGNhY2hlIGFsaWdubWVudCwgbm8gYnVyc3QgbGltaXQuXG4gODgwOlx0XHQgICBDYWNoZSBhbGlnbm1lbnQgYml0cyAxNToxNFx0ICAgICBCdXJzdCBsZW5ndGggMTM6OFxuIDg4MTpcdFx0XHQwMDAwXHRcdTAwM2Nub3QgYWxsb3dlZFx1MDAzZSBcdFx0MDAwMCBhbGlnbiB0byBjYWNoZVx0MDgwMCA4IGxvbmd3b3Jkc1xuIDg4MjpcdFx0XHQ0MDAwXHQ4ICBsb25nd29yZHNcdFx0MDEwMCAxIGxvbmd3b3JkXHRcdDEwMDAgMTYgbG9uZ3dvcmRzXG4gODgzOlx0XHRcdDgwMDBcdDE2IGxvbmd3b3Jkc1x0XHQwMjAwIDIgbG9uZ3dvcmRzXHQyMDAwIDMyIGxvbmd3b3Jkc1xuIDg4NDpcdFx0XHRDMDAwXHQzMiAgbG9uZ3dvcmRzXHRcdDA0MDAgNCBsb25nd29yZHMgKi9cbiA4ODU6XHRcbiA4ODY6XHQjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcbiA4ODc6XHRcdGkgfD0gMHhFMDAwO1xuIDg4ODpcdCNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDKSB8fCBkZWZpbmVkIChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19BUk0pXG4gODg5Olx0XHRpIHw9IDB4NDgwMDtcbiA4OTA6XHQjZWxzZVxuIDg5MTpcdFx0ZGV2X3dhcm4oXHUwMDI2ZGV2LVx1MDAzZWRldiwgXCYjMzQ7dW5rbm93biBDUFUgYXJjaGl0ZWN0dXJlLCB1c2luZyBkZWZhdWx0IGNzcjAgc2V0dGluZ1xcblwmIzM0Oyk7XG4gODkyOlx0XHRpIHw9IDB4NDgwMDtcbiA4OTM6XHQjZW5kaWZcbiA4OTQ6XHRcdGlvd3JpdGUzMihpLCBpb2FkZHIgJiM0MzsgUENJQnVzQ2ZnKTtcbiA4OTU6XHRcbiA4OTY6XHRcdG5wLVx1MDAzZWNzcjYgPSAwO1xuIDg5NzpcdFx0LyogMTI4IGJ5dGUgVHggdGhyZXNob2xkO1xuIDg5ODpcdFx0XHRUcmFuc21pdCBvbjsgUmVjZWl2ZSBvbjsgKi9cbiA4OTk6XHRcdHVwZGF0ZV9jc3I2KGRldiwgMHgwMDAyMjAwMiB8IHVwZGF0ZV9saW5rKGRldikgfCBfX3NldF9yeF9tb2RlKGRldikpO1xuIDkwMDpcdFxuIDkwMTpcdFx0LyogQ2xlYXIgYW5kIEVuYWJsZSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIGludGVycnVwdCBtYXNrLiAqL1xuIDkwMjpcdFx0aW93cml0ZTMyKDB4MUEwRjUsIGlvYWRkciAmIzQzOyBJbnRyU3RhdHVzKTtcbiA5MDM6XHRcdGlvd3JpdGUzMigweDFBMEY1LCBpb2FkZHIgJiM0MzsgSW50ckVuYWJsZSk7XG4gOTA0Olx0XG4gOTA1Olx0XHRpb3dyaXRlMzIoMCwgaW9hZGRyICYjNDM7IFJ4U3RhcnREZW1hbmQpO1xuIDkwNjpcdH1cbiA5MDc6XHRcbiA5MDg6XHRzdGF0aWMgdm9pZCB0eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCB0eHF1ZXVlKVxuIDkwOTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NDgwCgkJCQkJCQlvdXRwdXQ6IDEzMQoJCQkJCQkJdGhvdWdodHM6IDExMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBXb3J0aEZ1enppbmcgRGV0ZXJtaW5hdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIG1ldGhvZGljYWxseS4gRmlyc3QsIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBUaGUgZGlmZiBmb2N1c2VzIG9uIGNvZGUgdGhhdCB3YXMgZ3VhcmRlZCBieSBgI2lmIGRlZmluZWQgKF9faTM4Nl9fKSAmYW1wOyZhbXA7IC4uLmAuIFNpbmNlIGFtZDY0IGlzIGBfX3g4Nl82NF9fYCwgdGhhdCBjb25kaXRpb25hbCBwYXRoIHdhcyAqbmV2ZXIqIGFjdGl2ZSBvbiBhbWQ2NCBpbiB0aGUgZmlyc3QgcGxhY2UuIFRoZXJlZm9yZSwgdGhlIHBhdGNoIGRvZXNuJiMzOTt0IGltcGFjdCBvdXIgdGFyZ2V0LgoKRGlnZ2luZyBkZWVwZXIsIGV2ZW4gb24geDg2LCB0aGUgcmVtb3ZlZCBjb2RlIHNwZWNpZmljYWxseSB0YXJnZXRlZCAzODYvNDg2IHN5c3RlbXMgYnVpbHQgaW50byB0aGUga2VybmVsLCBhcyBpbmRpY2F0ZWQgYnkgYGJvb3RfY3B1X2RhdGEueDg2ICZsdDs9IDRgIGFuZCB0aGUgYCFkZWZpbmVkKE1PRFVMRSlgIGNvbmRpdGlvbi4gTm93LCBpcyB0aGUgV2luYm9uZCBXODljODQwIFBDSSBFdGhlcm5ldCBkZXZpY2UgZW11bGF0ZWQgaW4gUUVNVT8gSSBjaGVja2VkLiBUaGUgc3RhbmRhcmQgUUVNVSBzZXQgb2Ygc3VwcG9ydGVkIG5ldHdvcmsgY2FyZHMgZG9lc24mIzM5O3QgaW5jbHVkZSB0aGUgV2luYm9uZC4gUUVNVSAqZG9lcyogc3VwcG9ydCBgdHVsaXBgLCBidXQgdGhhdCBpcyBhIERFQyAyMTE0MCwgbm90IGEgV2luYm9uZC4gU3BlY2lmaWNhbGx5LCB0aGUgV2luYm9uZCAodmVuZG9yIDB4MTA1MCwgZGV2aWNlIDB4MDg0MCkgb3IgQ29tcGV4IFJMMTAwLUFUWCAoMHgxMWY2LCAweDIwMTEpIGFyZSBub3Qgc3VwcG9ydGVkLgoKVGhlIGNyaXRpY2FsIG9ic2VydmF0aW9uIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGNvZGUgd2l0aGluIHRoYXQgYF9faTM4Nl9fYCBibG9jaywgbWFraW5nIGl0IGV4Y2x1c2l2ZSB0byAzMi1iaXQgeDg2IGFyY2hpdGVjdHVyZXMsIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIG9sZGVyIENQVXMuIE9uIGFtZDY0LCB0aGUgYF9feDg2XzY0X19gIHByZXByb2Nlc3NvciBicmFuY2ggd2FzIGFscmVhZHkgdGFrZW4gYW5kIHJlbWFpbnMgdW5jaGFuZ2VkLiBUaGUgY29kZSBvbiBhbWQ2NCBzdGlsbCBzZXRzIGBpIHw9IDB4RTAwMGAsIGFzIGl0IGRpZCBiZWZvcmUuCgpUaGlzIG1lYW5zOgoKMS4gIFRoZSBwYXRjaCBpcyBjb21wbGV0ZWx5IGluZXJ0IGZvciB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSwgYW1kNjQuCjIuICBUaGUgcmVtb3ZlZCBjb2RlIGNhdGVyZWQgb25seSB0byBvbGRlciB4ODYgc3lzdGVtcy4KMy4gIFRoZSByZWxldmFudCBoYXJkd2FyZSwgdGhlIFdpbmJvbmQgVzg5Yzg0MCwgaXMgbGVnYWN5IFBDSSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGUgdXN1YWwgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLgoKTGV0JiMzOTtzIHZlcmlmeSBhZ2FpbnN0IHRoZSAmIzM0O25lZ2F0aXZlIGNyaXRlcmlhJiMzNDsuIFdlIGhhdmUgdHdvIHBvdGVudGlhbCBtYXRjaGVzOiAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7IGFuZCAmIzM0O0NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4mIzM0OwoKU3BlY2lmaWNhbGx5OgoKKiAgIFRoZSBwYXRjaCByZW1vdmVzIGNvZGUgZnJvbSBhbiBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBibG9jaywgZGVzaWduZWQgZm9yIGxlZ2FjeSAzODYvNDg2IENQVXMuIFRoaXMgY2xlYXJseSBmYWxscyB1bmRlciAmIzM0O0NvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSYjMzQ7LiBJdCYjMzk7cyBub3QgY29tcGlsZWQgb24gYW1kNjQuCiogICBUaGUgV2luYm9uZCBXODljODQwIGlzIGxlZ2FjeSBwaHlzaWNhbCBQQ0kgaGFyZHdhcmUsICpub3QqIGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGlzIHNhdGlzZmllcyAmIzM0O1N0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSYjMzQ7LgoKVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGVzZSBmaW5kaW5ncywgYFdvcnRoRnV6emluZ2AgKm11c3QqIGJlIGBmYWxzZWAuCgpOb3csIGxldCYjMzk7cyBidWlsZCB0aGUgYXJndW1lbnQgZm9yIGBzZXQtcmVzdWx0c2AuCgoqICAgYFdvcnRoRnV6emluZ2A6IGBmYWxzZWAKKiAgIGBSZWFzb25pbmdgOiAmIzM0O1RoZSBwYXRjaCByZW1vdmVzIGxlZ2FjeSAzODYvNDg2IENQVSB3b3JrYXJvdW5kIGNvZGUgdW5kZXIgYCNpZiBkZWZpbmVkKF9faTM4Nl9fKWAgaW4gdGhlIFdpbmJvbmQgVzg5Yzg0MCBFdGhlcm5ldCBkcml2ZXIuIE9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIChhbWQ2NCksIHRoaXMgY29kZSB3YXMgbmV2ZXIgY29tcGlsZWQgb3IgZXhlY3V0ZWQsIGFuZCB0aGUgYW1kNjQgY29kZSBwYXRoIHJlbWFpbnMgY29tcGxldGVseSB1bmNoYW5nZWQuIEFkZGl0aW9uYWxseSwgdGhlIFdpbmJvbmQgVzg5Yzg0MCBQQ0kgTklDIGlzIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OwoqICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGFycmF5KQoqICAgYEVuYWJsZUNvbmZpZ3NgOiBgW11gIChlbXB0eSBhcnJheSkKCk9rYXksIG5vdyBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBwYXJhbWV0ZXIgdHlwZXMgZm9yIGBzZXQtcmVzdWx0c2AuCmBXb3J0aEZ1enppbmdgOiBCb29sZWFuIC0gQ2hlY2shCmBSZWFzb25pbmdgOiBTdHJpbmcgLSBDaGVjayEKYEZvY3VzU3ltYm9sc2A6IEFycmF5IG9mIHN0cmluZyAtIENoZWNrIQpgRW5hYmxlQ29uZmlnc2A6IEFycmF5IG9mIHN0cmluZyAtIENoZWNrIQoKV2UgYXJlIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgbGVnYWN5IDM4Ni80ODYgQ1BVIHdvcmthcm91bmQgY29kZSB1bmRlciBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBpbiB0aGUgV2luYm9uZCBXODljODQwIEV0aGVybmV0IGRyaXZlci4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhpcyBjb2RlIHdhcyBuZXZlciBjb21waWxlZCBvciBleGVjdXRlZCwgYW5kIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgYW1kNjQgaXMgY29tcGxldGVseSB1bmNoYW5nZWQuIEZ1cnRoZXJtb3JlLCB0aGUgV2luYm9uZCBXODljODQwIFBDSSBOSUMgaXMgbGVnYWN5IHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlbW92ZXMgbGVnYWN5IDM4Ni80ODYgQ1BVIHdvcmthcm91bmQgY29kZSB1bmRlciBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBpbiB0aGUgV2luYm9uZCBXODljODQwIEV0aGVybmV0IGRyaXZlci4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhpcyBjb2RlIHdhcyBuZXZlciBjb21waWxlZCBvciBleGVjdXRlZCwgYW5kIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgYW1kNjQgaXMgY29tcGxldGVseSB1bmNoYW5nZWQuIEZ1cnRoZXJtb3JlLCB0aGUgV2luYm9uZCBXODljODQwIFBDSSBOSUMgaXMgbGVnYWN5IHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDQ6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA0OjEyOjA3LjM3MTU5MjUzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODU5OTc2MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBsZWdhY3kgMzg2LzQ4NiBDUFUgd29ya2Fyb3VuZCBjb2RlIHVuZGVyIGAjaWYgZGVmaW5lZChfX2kzODZfXylgIGluIHRoZSBXaW5ib25kIFc4OWM4NDAgRXRoZXJuZXQgZHJpdmVyLiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCB0aGlzIGNvZGUgd2FzIG5ldmVyIGNvbXBpbGVkIG9yIGV4ZWN1dGVkLCBhbmQgdGhlIGdlbmVyYXRlZCBjb2RlIGZvciBhbWQ2NCBpcyBjb21wbGV0ZWx5IHVuY2hhbmdlZC4gRnVydGhlcm1vcmUsIHRoZSBXaW5ib25kIFc4OWM4NDAgUENJIE5JQyBpcyBsZWdhY3kgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDQ6MTI6MDcuMzcxNTk3NTM0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkxODgwMzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2MyMDNlNzZjZmU1MmNjOGUwYTBmMmM2MmFkMGYzZjU5M2E2YTE4OFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNDoxMjowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXFxuaW5kZXggYTU1ODFmMWQwMTQxNy4uYzQyZWFmMGVlZjY0MiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXFxuQEAgLTg3NiwyNCArODc2LDE0IEBAIHN0YXRpYyB2b2lkIGluaXRfcmVnaXN0ZXJzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGkgfD0gMHgwMjtcXHRcXHQvKiBnaXZlIFJ4IHByaW9yaXR5ICovXFxuIFxcbiBcXHQvKiBDb25maWd1cmUgdGhlIFBDSSBidXMgYnVyc3RzIGFuZCBGSUZPIHRocmVzaG9sZHMuXFxuLVxcdCAgIDQ4NjogU2V0IDggbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCA4IGxvbmd3b3JkIGJ1cnN0Llxcbi1cXHQgICA1ODY6IFNldCAxNiBsb25nd29yZCBjYWNoZSBhbGlnbm1lbnQsIG5vIGJ1cnN0IGxpbWl0LlxcbitcXHQgICBTZXQgMTYgbG9uZ3dvcmQgY2FjaGUgYWxpZ25tZW50LCBubyBidXJzdCBsaW1pdC5cXG4gXFx0ICAgQ2FjaGUgYWxpZ25tZW50IGJpdHMgMTU6MTRcXHQgICAgIEJ1cnN0IGxlbmd0aCAxMzo4XFxuIFxcdFxcdDAwMDBcXHRcXHUwMDNjbm90IGFsbG93ZWRcXHUwMDNlIFxcdFxcdDAwMDAgYWxpZ24gdG8gY2FjaGVcXHQwODAwIDggbG9uZ3dvcmRzXFxuIFxcdFxcdDQwMDBcXHQ4ICBsb25nd29yZHNcXHRcXHQwMTAwIDEgbG9uZ3dvcmRcXHRcXHQxMDAwIDE2IGxvbmd3b3Jkc1xcbiBcXHRcXHQ4MDAwXFx0MTYgbG9uZ3dvcmRzXFx0XFx0MDIwMCAyIGxvbmd3b3Jkc1xcdDIwMDAgMzIgbG9uZ3dvcmRzXFxuIFxcdFxcdEMwMDBcXHQzMiAgbG9uZ3dvcmRzXFx0XFx0MDQwMCA0IGxvbmd3b3JkcyAqL1xcbiBcXG4tI2lmIGRlZmluZWQgKF9faTM4Nl9fKSBcXHUwMDI2XFx1MDAyNiAhZGVmaW5lZChNT0RVTEUpIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkKENPTkZJR19VTUwpXFxuLVxcdC8qIFdoZW4gbm90IGEgbW9kdWxlIHdlIGNhbiB3b3JrIGFyb3VuZCBicm9rZW4gJzQ4NiBQQ0kgYm9hcmRzLiAqL1xcbi1cXHRpZiAoYm9vdF9jcHVfZGF0YS54ODYgXFx1MDAzYz0gNCkge1xcbi1cXHRcXHRpIHw9IDB4NDgwMDtcXG4tXFx0XFx0ZGV2X2luZm8oXFx1MDAyNmRldi1cXHUwMDNlZGV2LFxcbi1cXHRcXHRcXHQgXFxcIlRoaXMgaXMgYSAzODYvNDg2IFBDSSBzeXN0ZW0sIHNldHRpbmcgY2FjaGUgYWxpZ25tZW50IHRvIDggbG9uZ3dvcmRzXFxcXG5cXFwiKTtcXG4tXFx0fSBlbHNlIHtcXG4tXFx0XFx0aSB8PSAweEUwMDA7XFxuLVxcdH1cXG4tI2VsaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcXG4rI2lmIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pXFxuIFxcdGkgfD0gMHhFMDAwO1xcbiAjZWxpZiBkZWZpbmVkKENPTkZJR19TUEFSQykgfHwgZGVmaW5lZCAoQ09ORklHX1BBUklTQykgfHwgZGVmaW5lZChDT05GSUdfQVJNKVxcbiBcXHRpIHw9IDB4NDgwMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDQ6MTI6MDguODY0MDg0MTQ0WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxNzM2NzQzNzUxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVtb3ZlcyBsZWdhY3kgMzg2LzQ4NiBDUFUgd29ya2Fyb3VuZCBjb2RlIHVuZGVyIGAjaWYgZGVmaW5lZChfX2kzODZfXylgIGluIHRoZSBXaW5ib25kIFc4OWM4NDAgRXRoZXJuZXQgZHJpdmVyLiBPbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSAoYW1kNjQpLCB0aGlzIGNvZGUgd2FzIG5ldmVyIGNvbXBpbGVkIG9yIGV4ZWN1dGVkLCBhbmQgdGhlIGdlbmVyYXRlZCBjb2RlIGZvciBhbWQ2NCBpcyBjb21wbGV0ZWx5IHVuY2hhbmdlZC4gRnVydGhlcm1vcmUsIHRoZSBXaW5ib25kIFc4OWM4NDAgUENJIE5JQyBpcyBsZWdhY3kgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYzIwM2U3NmNmZTUyY2M4ZTBhMGYyYzYyYWQwZjNmNTkzYTZhMTg4XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDQ6MTI6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXG5pbmRleCBhNTU4MWYxZDAxNDE3Li5jNDJlYWYwZWVmNjQyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jXG5AQCAtODc2LDI0ICs4NzYsMTQgQEAgc3RhdGljIHZvaWQgaW5pdF9yZWdpc3RlcnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGkgfD0gMHgwMjtcdFx0LyogZ2l2ZSBSeCBwcmlvcml0eSAqL1xuIFxuIFx0LyogQ29uZmlndXJlIHRoZSBQQ0kgYnVzIGJ1cnN0cyBhbmQgRklGTyB0aHJlc2hvbGRzLlxuLVx0ICAgNDg2OiBTZXQgOCBsb25nd29yZCBjYWNoZSBhbGlnbm1lbnQsIDggbG9uZ3dvcmQgYnVyc3QuXG4tXHQgICA1ODY6IFNldCAxNiBsb25nd29yZCBjYWNoZSBhbGlnbm1lbnQsIG5vIGJ1cnN0IGxpbWl0LlxuK1x0ICAgU2V0IDE2IGxvbmd3b3JkIGNhY2hlIGFsaWdubWVudCwgbm8gYnVyc3QgbGltaXQuXG4gXHQgICBDYWNoZSBhbGlnbm1lbnQgYml0cyAxNToxNFx0ICAgICBCdXJzdCBsZW5ndGggMTM6OFxuIFx0XHQwMDAwXHRcdTAwM2Nub3QgYWxsb3dlZFx1MDAzZSBcdFx0MDAwMCBhbGlnbiB0byBjYWNoZVx0MDgwMCA4IGxvbmd3b3Jkc1xuIFx0XHQ0MDAwXHQ4ICBsb25nd29yZHNcdFx0MDEwMCAxIGxvbmd3b3JkXHRcdDEwMDAgMTYgbG9uZ3dvcmRzXG4gXHRcdDgwMDBcdDE2IGxvbmd3b3Jkc1x0XHQwMjAwIDIgbG9uZ3dvcmRzXHQyMDAwIDMyIGxvbmd3b3Jkc1xuIFx0XHRDMDAwXHQzMiAgbG9uZ3dvcmRzXHRcdDA0MDAgNCBsb25nd29yZHMgKi9cbiBcbi0jaWYgZGVmaW5lZCAoX19pMzg2X18pIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChNT0RVTEUpIFx1MDAyNlx1MDAyNiAhZGVmaW5lZChDT05GSUdfVU1MKVxuLVx0LyogV2hlbiBub3QgYSBtb2R1bGUgd2UgY2FuIHdvcmsgYXJvdW5kIGJyb2tlbiAnNDg2IFBDSSBib2FyZHMuICovXG4tXHRpZiAoYm9vdF9jcHVfZGF0YS54ODYgXHUwMDNjPSA0KSB7XG4tXHRcdGkgfD0gMHg0ODAwO1xuLVx0XHRkZXZfaW5mbyhcdTAwMjZkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCBcIlRoaXMgaXMgYSAzODYvNDg2IFBDSSBzeXN0ZW0sIHNldHRpbmcgY2FjaGUgYWxpZ25tZW50IHRvIDggbG9uZ3dvcmRzXFxuXCIpO1xuLVx0fSBlbHNlIHtcbi1cdFx0aSB8PSAweEUwMDA7XG4tXHR9XG4tI2VsaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcbisjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcbiBcdGkgfD0gMHhFMDAwO1xuICNlbGlmIGRlZmluZWQoQ09ORklHX1NQQVJDKSB8fCBkZWZpbmVkIChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19BUk0pXG4gXHRpIHw9IDB4NDgwMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA0OjEyOjA4Ljg2NDA4NjA3NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxODg4OTM0NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBEZWVwIERpdmUgaW50byBDb21waWxlciBEaXJlY3RpdmVzIGFuZCBUYXJnZXQgQXJjaGl0ZWN0dXJlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nIGFuZCwgY3J1Y2lhbGx5LCB3aGF0IHRhcmdldCBhcmNoaXRlY3R1cmUgd2UncmUgZGVhbGluZyB3aXRoIOKAkyBhbWQ2NC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFuYWx5emUgdGhlIGBkaWZmYCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSB0aGlzIGNoYW5nZXMuXG5cblRoZSBjb2RlIG1vZGlmaWVzIHRoZSBgaW5pdF9yZWdpc3RlcnNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGNvbmZpZ3VyZXMgdGhlIFBDSSBidXMgYnVyc3RzIGFuZCBGSUZPIHRocmVzaG9sZHMuIFRoZSBrZXkgbGllcyB3aXRoaW4gdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHVzaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIChgI2lmYCwgYCNlbGlmYCkuIEkgc2VlIGNvZGUgdGhhdCB1c2VkIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB4ODYgYXJjaGl0ZWN0dXJlcyAoMzg2LzQ4NiB2cy4gbGF0ZXIgdmVyc2lvbnMpIGFuZCBvdGhlciBhcmNoaXRlY3R1cmVzLlxuXG5NeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXM6IG9uIGFtZDY0LCBkb2VzIHRoaXMgY2hhbmdlIGFueXRoaW5nIGF0IGFsbD8gTGV0J3MgY2hlY2suXG5cbkJlZm9yZSB0aGUgcGF0Y2gsIGZvciBgX194ODZfNjRfX2AsIHRoZSBjb2RlIHdvdWxkIHNraXAgYSBjaGVjayB0aGF0IHdhcyB4ODYgc3BlY2lmaWMgYW5kIHdvdWxkIHNpbXBseSBzZXQgYGkgfD0gMHhFMDAwYC5cblxuQWZ0ZXIgdGhlIHBhdGNoLCB0aGUgY29kZSAqc3RpbGwqIHNldHMgYGkgfD0gMHhFMDAwYCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zISBUaGUgY29uZGl0aW9uYWxzIGFyZSBzdHJ1Y3R1cmVkIHRvIHNldCB0aGUgc2FtZSB2YWx1ZSwgbm8gbWF0dGVyIHdoYXQuIFNvLCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgYGFtZDY0YCwgdGhlIGdlbmVyYXRlZCBjb2RlIGlzIGNvbXBsZXRlbHkgaWRlbnRpY2FsIVxuXG5UaGUgcGF0Y2ggYXBwZWFycyB0byBoYXZlIG5vIGVmZmVjdCBvbiB0aGUgYW1kNjQgYXJjaGl0ZWN0dXJlLiBUaGlzIGxpa2VseSBtZWFucyB0aGUgcmVtb3ZhbCBvZiB0aGUgNDg2IHNwZWNpZmljIGNvZGUgaXMgc2FmZSB0byBkbywgYmVjYXVzZSB0aGUgY29kZSBkb2VzIHRoZSBzYW1lIHRoaW5nIGVpdGhlciB3YXkuXG5cbkknbGwgYWxzbyBsb29rIGludG8gd2hhdCBgd2luYm9uZC04NDAuY2AgYWN0dWFsbHkgaXMsIGFuZCB3aGV0aGVyIGl0J3MgZW11bGF0ZWQgaW4gUUVNVSBvciBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBvciBpZiBpdCdzIG9sZCBQQ0kgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQuIFRoaXMgbWlnaHQgZ2l2ZSBmdXJ0aGVyIGNvbnRleHQgdG8gdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzMxNywiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNDoxMjoxNS4wNTI5ODE3MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMxODE3OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV0lOQk9ORF84NDBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC9LY29uZmlnPTEwMz1jb25maWcgVFVMSVBfRE05MTBYXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL0tjb25maWc6MTA3OmNvbmZpZyBXSU5CT05EXzg0MFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC9LY29uZmlnLTEwOC1cXHR0cmlzdGF0ZSBcXFwiV2luYm9uZCBXODljODQwIEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvTWFrZWZpbGU9OD1vYmotJChDT05GSUdfRE05MTAyKVxcdFxcdCs9IGRtZmUub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19XSU5CT05EXzg0MClcXHQrPSB3aW5ib25kLTg0MC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL01ha2VmaWxlLTEwLW9iai0kKENPTkZJR19ERTIxMDRYKVxcdFxcdCs9IGRlMjEwNHgub1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmM9NTI9cHJvYmUtZnVuYzogd2luYm9uZDg0MF9wcm9iZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2RlYy90dWxpcC93aW5ib25kLTg0MC5jOjUzOmNvbmZpZy1pbjogdHJpc3RhdGUgJ1dpbmJvbmQgVzg5Yzg0MCBFdGhlcm5ldCBzdXBwb3J0JyBDT05GSUdfV0lOQk9ORF84NDBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYy01NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuYz01NT1jLWhlbHAtbmFtZTogV2luYm9uZCBXODljODQwIFBDSSBFdGhlcm5ldCBzdXBwb3J0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmM6NTY6Yy1oZWxwLXN5bWJvbDogQ09ORklHX1dJTkJPTkRfODQwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZGVjL3R1bGlwL3dpbmJvbmQtODQwLmMtNTctYy1oZWxwOiBUaGlzIGRyaXZlciBpcyBmb3IgdGhlIFdpbmJvbmQgVzg5Yzg0MCBjaGlwLiAgSXQgYWxzbyB3b3JrcyB3aXRoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA0OjEyOjE1LjEwNjE2OTg4M1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE5ODgxMDkzMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGU6IERlY2lwaGVyaW5nIHRoZSBUdWxpcCBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBhIHNwZWNpZmljIGZpbGUg4oCTIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuY2AuIFRoYXQncyB3aGVyZSBJIHNob3VsZCBiZSBsb29raW5nIGZvciBhbnkgY2hhbmdlcyByZWxhdGVkIHRvIHRoaXMgcGFydGljdWxhciBFdGhlcm5ldCBkcml2ZXIuIFNwZWNpZmljYWxseSwgSSdtIGludGVyZXN0ZWQgaW4gdGhlIHZpY2luaXR5IG9mIGxpbmUgODcwLiBUaGUgY29tYmluYXRpb24gb2YgdGhlIGZpbGVuYW1lIGFuZCB0aGUgbGluZSBudW1iZXIgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGlkZW50aWZ5IGFueSByZWNlbnQgbW9kaWZpY2F0aW9ucyBhbmQgdW5kZXJzdGFuZCB0aGVpciBpbXBhY3QuIExldCdzIGhvcGUgdGhlIGRpZmZzIGFyZSBlYXN5IHRvIGRlY2lwaGVyLiBUaW1lIHRvIGNoZWNrIHRoZSByZXZpc2lvbiBoaXN0b3J5IGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ1MCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA0OjEyOjE3LjA5NDI4MjY1M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMjk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9kZWMvdHVsaXAvd2luYm9uZC04NDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4NzAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4NzA6XFx0I2lmZGVmIF9fQklHX0VORElBTlxcbiA4NzE6XFx0XFx0aSA9ICgxXFx1MDAzY1xcdTAwM2MyMCk7XFx0LyogQmlnLWVuZGlhbiBkZXNjcmlwdG9ycyAqL1xcbiA4NzI6XFx0I2Vsc2VcXG4gODczOlxcdFxcdGkgPSAwO1xcbiA4NzQ6XFx0I2VuZGlmXFxuIDg3NTpcXHRcXHRpIHw9ICgweDA0XFx1MDAzY1xcdTAwM2MyKTtcXHRcXHQvKiBza2lwIGxlbmd0aCA0IHUzMiAqL1xcbiA4NzY6XFx0XFx0aSB8PSAweDAyO1xcdFxcdC8qIGdpdmUgUnggcHJpb3JpdHkgKi9cXG4gODc3OlxcdFxcbiA4Nzg6XFx0XFx0LyogQ29uZmlndXJlIHRoZSBQQ0kgYnVzIGJ1cnN0cyBhbmQgRklGTyB0aHJlc2hvbGRzLlxcbiA4Nzk6XFx0XFx0ICAgU2V0IDE2IGxvbmd3b3JkIGNhY2hlIGFsaWdubWVudCwgbm8gYnVyc3QgbGltaXQuXFxuIDg4MDpcXHRcXHQgICBDYWNoZSBhbGlnbm1lbnQgYml0cyAxNToxNFxcdCAgICAgQnVyc3QgbGVuZ3RoIDEzOjhcXG4gODgxOlxcdFxcdFxcdDAwMDBcXHRcXHUwMDNjbm90IGFsbG93ZWRcXHUwMDNlIFxcdFxcdDAwMDAgYWxpZ24gdG8gY2FjaGVcXHQwODAwIDggbG9uZ3dvcmRzXFxuIDg4MjpcXHRcXHRcXHQ0MDAwXFx0OCAgbG9uZ3dvcmRzXFx0XFx0MDEwMCAxIGxvbmd3b3JkXFx0XFx0MTAwMCAxNiBsb25nd29yZHNcXG4gODgzOlxcdFxcdFxcdDgwMDBcXHQxNiBsb25nd29yZHNcXHRcXHQwMjAwIDIgbG9uZ3dvcmRzXFx0MjAwMCAzMiBsb25nd29yZHNcXG4gODg0OlxcdFxcdFxcdEMwMDBcXHQzMiAgbG9uZ3dvcmRzXFx0XFx0MDQwMCA0IGxvbmd3b3JkcyAqL1xcbiA4ODU6XFx0XFxuIDg4NjpcXHQjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXylcXG4gODg3OlxcdFxcdGkgfD0gMHhFMDAwO1xcbiA4ODg6XFx0I2VsaWYgZGVmaW5lZChDT05GSUdfU1BBUkMpIHx8IGRlZmluZWQgKENPTkZJR19QQVJJU0MpIHx8IGRlZmluZWQoQ09ORklHX0FSTSlcXG4gODg5OlxcdFxcdGkgfD0gMHg0ODAwO1xcbiA4OTA6XFx0I2Vsc2VcXG4gODkxOlxcdFxcdGRldl93YXJuKFxcdTAwMjZkZXYtXFx1MDAzZWRldiwgXFxcInVua25vd24gQ1BVIGFyY2hpdGVjdHVyZSwgdXNpbmcgZGVmYXVsdCBjc3IwIHNldHRpbmdcXFxcblxcXCIpO1xcbiA4OTI6XFx0XFx0aSB8PSAweDQ4MDA7XFxuIDg5MzpcXHQjZW5kaWZcXG4gODk0OlxcdFxcdGlvd3JpdGUzMihpLCBpb2FkZHIgKyBQQ0lCdXNDZmcpO1xcbiA4OTU6XFx0XFxuIDg5NjpcXHRcXHRucC1cXHUwMDNlY3NyNiA9IDA7XFxuIDg5NzpcXHRcXHQvKiAxMjggYnl0ZSBUeCB0aHJlc2hvbGQ7XFxuIDg5ODpcXHRcXHRcXHRUcmFuc21pdCBvbjsgUmVjZWl2ZSBvbjsgKi9cXG4gODk5OlxcdFxcdHVwZGF0ZV9jc3I2KGRldiwgMHgwMDAyMjAwMiB8IHVwZGF0ZV9saW5rKGRldikgfCBfX3NldF9yeF9tb2RlKGRldikpO1xcbiA5MDA6XFx0XFxuIDkwMTpcXHRcXHQvKiBDbGVhciBhbmQgRW5hYmxlIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgaW50ZXJydXB0IG1hc2suICovXFxuIDkwMjpcXHRcXHRpb3dyaXRlMzIoMHgxQTBGNSwgaW9hZGRyICsgSW50clN0YXR1cyk7XFxuIDkwMzpcXHRcXHRpb3dyaXRlMzIoMHgxQTBGNSwgaW9hZGRyICsgSW50ckVuYWJsZSk7XFxuIDkwNDpcXHRcXG4gOTA1OlxcdFxcdGlvd3JpdGUzMigwLCBpb2FkZHIgKyBSeFN0YXJ0RGVtYW5kKTtcXG4gOTA2OlxcdH1cXG4gOTA3OlxcdFxcbiA5MDg6XFx0c3RhdGljIHZvaWQgdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgdHhxdWV1ZSlcXG4gOTA5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDQ6MTI6MTcuMDk0NDE3ODkzWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTEzNzAyOTgxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgUGF0Y2ggZm9yIFdvcnRoRnV6emluZyBEZXRlcm1pbmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIG1ldGhvZGljYWxseS4gRmlyc3QsIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIGlzIGFtZDY0LiBUaGUgZGlmZiBmb2N1c2VzIG9uIGNvZGUgdGhhdCB3YXMgZ3VhcmRlZCBieSBgI2lmIGRlZmluZWQgKF9faTM4Nl9fKSBcdTAwMjZcdTAwMjYgLi4uYC4gU2luY2UgYW1kNjQgaXMgYF9feDg2XzY0X19gLCB0aGF0IGNvbmRpdGlvbmFsIHBhdGggd2FzICpuZXZlciogYWN0aXZlIG9uIGFtZDY0IGluIHRoZSBmaXJzdCBwbGFjZS4gVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24ndCBpbXBhY3Qgb3VyIHRhcmdldC5cblxuRGlnZ2luZyBkZWVwZXIsIGV2ZW4gb24geDg2LCB0aGUgcmVtb3ZlZCBjb2RlIHNwZWNpZmljYWxseSB0YXJnZXRlZCAzODYvNDg2IHN5c3RlbXMgYnVpbHQgaW50byB0aGUga2VybmVsLCBhcyBpbmRpY2F0ZWQgYnkgYGJvb3RfY3B1X2RhdGEueDg2IFx1MDAzYz0gNGAgYW5kIHRoZSBgIWRlZmluZWQoTU9EVUxFKWAgY29uZGl0aW9uLiBOb3csIGlzIHRoZSBXaW5ib25kIFc4OWM4NDAgUENJIEV0aGVybmV0IGRldmljZSBlbXVsYXRlZCBpbiBRRU1VPyBJIGNoZWNrZWQuIFRoZSBzdGFuZGFyZCBRRU1VIHNldCBvZiBzdXBwb3J0ZWQgbmV0d29yayBjYXJkcyBkb2Vzbid0IGluY2x1ZGUgdGhlIFdpbmJvbmQuIFFFTVUgKmRvZXMqIHN1cHBvcnQgYHR1bGlwYCwgYnV0IHRoYXQgaXMgYSBERUMgMjExNDAsIG5vdCBhIFdpbmJvbmQuIFNwZWNpZmljYWxseSwgdGhlIFdpbmJvbmQgKHZlbmRvciAweDEwNTAsIGRldmljZSAweDA4NDApIG9yIENvbXBleCBSTDEwMC1BVFggKDB4MTFmNiwgMHgyMDExKSBhcmUgbm90IHN1cHBvcnRlZC5cblxuVGhlIGNyaXRpY2FsIG9ic2VydmF0aW9uIGhlcmUgaXMgdGhhdCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGNvZGUgd2l0aGluIHRoYXQgYF9faTM4Nl9fYCBibG9jaywgbWFraW5nIGl0IGV4Y2x1c2l2ZSB0byAzMi1iaXQgeDg2IGFyY2hpdGVjdHVyZXMsIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIG9sZGVyIENQVXMuIE9uIGFtZDY0LCB0aGUgYF9feDg2XzY0X19gIHByZXByb2Nlc3NvciBicmFuY2ggd2FzIGFscmVhZHkgdGFrZW4gYW5kIHJlbWFpbnMgdW5jaGFuZ2VkLiBUaGUgY29kZSBvbiBhbWQ2NCBzdGlsbCBzZXRzIGBpIHw9IDB4RTAwMGAsIGFzIGl0IGRpZCBiZWZvcmUuXG5cblRoaXMgbWVhbnM6XG5cbjEuICBUaGUgcGF0Y2ggaXMgY29tcGxldGVseSBpbmVydCBmb3IgdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUsIGFtZDY0LlxuMi4gIFRoZSByZW1vdmVkIGNvZGUgY2F0ZXJlZCBvbmx5IHRvIG9sZGVyIHg4NiBzeXN0ZW1zLlxuMy4gIFRoZSByZWxldmFudCBoYXJkd2FyZSwgdGhlIFdpbmJvbmQgVzg5Yzg0MCwgaXMgbGVnYWN5IFBDSSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiB0aGUgdXN1YWwgdmlydHVhbGl6YXRpb24gZW52aXJvbm1lbnRzLlxuXG5MZXQncyB2ZXJpZnkgYWdhaW5zdCB0aGUgXCJuZWdhdGl2ZSBjcml0ZXJpYVwiLiBXZSBoYXZlIHR3byBwb3RlbnRpYWwgbWF0Y2hlczogXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBhbmQgXCJDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXCJcblxuU3BlY2lmaWNhbGx5OlxuXG4qICAgVGhlIHBhdGNoIHJlbW92ZXMgY29kZSBmcm9tIGFuIGAjaWYgZGVmaW5lZChfX2kzODZfXylgIGJsb2NrLCBkZXNpZ25lZCBmb3IgbGVnYWN5IDM4Ni80ODYgQ1BVcy4gVGhpcyBjbGVhcmx5IGZhbGxzIHVuZGVyIFwiQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlXCIuIEl0J3Mgbm90IGNvbXBpbGVkIG9uIGFtZDY0LlxuKiAgIFRoZSBXaW5ib25kIFc4OWM4NDAgaXMgbGVnYWN5IHBoeXNpY2FsIFBDSSBoYXJkd2FyZSwgKm5vdCogZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS92aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIFRoaXMgc2F0aXNmaWVzIFwiU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlXCIuXG5cblRoZXJlZm9yZSwgYmFzZWQgb24gdGhlc2UgZmluZGluZ3MsIGBXb3J0aEZ1enppbmdgICptdXN0KiBiZSBgZmFsc2VgLlxuXG5Ob3csIGxldCdzIGJ1aWxkIHRoZSBhcmd1bWVudCBmb3IgYHNldC1yZXN1bHRzYC5cblxuKiAgIGBXb3J0aEZ1enppbmdgOiBgZmFsc2VgXG4qICAgYFJlYXNvbmluZ2A6IFwiVGhlIHBhdGNoIHJlbW92ZXMgbGVnYWN5IDM4Ni80ODYgQ1BVIHdvcmthcm91bmQgY29kZSB1bmRlciBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBpbiB0aGUgV2luYm9uZCBXODljODQwIEV0aGVybmV0IGRyaXZlci4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhpcyBjb2RlIHdhcyBuZXZlciBjb21waWxlZCBvciBleGVjdXRlZCwgYW5kIHRoZSBhbWQ2NCBjb2RlIHBhdGggcmVtYWlucyBjb21wbGV0ZWx5IHVuY2hhbmdlZC4gQWRkaXRpb25hbGx5LCB0aGUgV2luYm9uZCBXODljODQwIFBDSSBOSUMgaXMgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUvdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiXG4qICAgYEZvY3VzU3ltYm9sc2A6IGBbXWAgKGVtcHR5IGFycmF5KVxuKiAgIGBFbmFibGVDb25maWdzYDogYFtdYCAoZW1wdHkgYXJyYXkpXG5cbk9rYXksIG5vdyBsZXQncyBkb3VibGUtY2hlY2sgdGhlIHBhcmFtZXRlciB0eXBlcyBmb3IgYHNldC1yZXN1bHRzYC5cbmBXb3J0aEZ1enppbmdgOiBCb29sZWFuIC0gQ2hlY2shXG5gUmVhc29uaW5nYDogU3RyaW5nIC0gQ2hlY2shXG5gRm9jdXNTeW1ib2xzYDogQXJyYXkgb2Ygc3RyaW5nIC0gQ2hlY2shXG5gRW5hYmxlQ29uZmlnc2A6IEFycmF5IG9mIHN0cmluZyAtIENoZWNrIVxuXG5XZSBhcmUgcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDgwLCJPdXRwdXRUb2tlbnMiOjEzMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMDgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNDoxMjoyNi4yMzE0NTUzMTVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgbGVnYWN5IDM4Ni80ODYgQ1BVIHdvcmthcm91bmQgY29kZSB1bmRlciBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBpbiB0aGUgV2luYm9uZCBXODljODQwIEV0aGVybmV0IGRyaXZlci4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhpcyBjb2RlIHdhcyBuZXZlciBjb21waWxlZCBvciBleGVjdXRlZCwgYW5kIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgYW1kNjQgaXMgY29tcGxldGVseSB1bmNoYW5nZWQuIEZ1cnRoZXJtb3JlLCB0aGUgV2luYm9uZCBXODljODQwIFBDSSBOSUMgaXMgbGVnYWN5IHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlbW92ZXMgbGVnYWN5IDM4Ni80ODYgQ1BVIHdvcmthcm91bmQgY29kZSB1bmRlciBgI2lmIGRlZmluZWQoX19pMzg2X18pYCBpbiB0aGUgV2luYm9uZCBXODljODQwIEV0aGVybmV0IGRyaXZlci4gT24gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUgKGFtZDY0KSwgdGhpcyBjb2RlIHdhcyBuZXZlciBjb21waWxlZCBvciBleGVjdXRlZCwgYW5kIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgYW1kNjQgaXMgY29tcGxldGVseSB1bmNoYW5nZWQuIEZ1cnRoZXJtb3JlLCB0aGUgV2luYm9uZCBXODljODQwIFBDSSBOSUMgaXMgbGVnYWN5IHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VL3ZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA0OjEyOjI2LjIzMTUyNDMzNVoiLCJTZXEiOjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowmr9s7[1] Phase: Running StartedAt: 2026-09-15 04:12:37 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmr9s7[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-15 04:12:37 +0000 UTC FinishedAt: 2026-09-15 04:12:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}