Name: series-workflowcmlqx Phase: Failed StartedAt: 2026-08-04 15:43:16 +0000 UTC FinishedAt: 2026-08-04 16:08:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmlqx[0] Phase: Succeeded StartedAt: 2026-08-04 15:43:16 +0000 UTC FinishedAt: 2026-08-04 16:08:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmlqx[0].run-triage Phase: Succeeded StartedAt: 2026-08-04 15:43:16 +0000 UTC FinishedAt: 2026-08-04 16:08:29 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDE2OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTY6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MTk3MmM5ZjI5ZjQwMDJkODY3OTQ2ZjFjZDI2ZmRjMGQzNmI1ZTg3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNjowNjo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDcxMWY4MjFmN2IzYzcuLmQ1NDRlZWQyZjE3M2IgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTExNDMsNDIgJiM0MzsxMTQzLDYgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiB9XG4gI2VuZGlmXG4gXG4tLypcbi0gKiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBkbyBub3QgaW5jbHVkZSBaT05FX01PVkFCTEVcbi0gKiBiZWNhdXNlIGl0IGlzIHNpemVkIGluZGVwZW5kZW50IG9mIGFyY2hpdGVjdHVyZS4gVW5saWtlIHRoZSBvdGhlciB6b25lcyxcbi0gKiB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIFpPTkVfTU9WQUJMRSBpcyBub3QgZml4ZWQuIEl0IG1heSBiZSBkaWZmZXJlbnRcbi0gKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlXG4tICogaXMgZGlzdHJpYnV0ZWQuIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGFkanVzdHMgdGhlIHpvbmUgcmFuZ2VzXG4tICogcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBmb3IgYSBnaXZlbiBub2RlIGJ5IHVzaW5nIHRoZSBlbmQgb2YgdGhlXG4tICogaGlnaGVzdCB1c2FibGUgem9uZSBmb3IgWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0XG4tICogem9uZXMgd2l0aGluIGEgbm9kZSBhcmUgaW4gb3JkZXIgb2YgbW9ub3RvbmljIGluY3JlYXNlcyBtZW1vcnkgYWRkcmVzc2VzXG4tICovXG4tc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCxcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lX3R5cGUsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgbm9kZV9lbmRfcGZuLFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICp6b25lX3N0YXJ0X3Bmbixcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqem9uZV9lbmRfcGZuKVxuLXtcbi1cdC8qIE9ubHkgYWRqdXN0IGlmIFpPTkVfTU9WQUJMRSBpcyBvbiB0aGlzIG5vZGUgKi9cbi1cdGlmICh6b25lX21vdmFibGVfcGZuW25pZF0pIHtcbi1cdFx0LyogU2l6ZSBaT05FX01PVkFCTEUgKi9cbi1cdFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUpIHtcbi1cdFx0XHQqem9uZV9zdGFydF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiA9IG1pbihub2RlX2VuZF9wZm4sXG4tXHRcdFx0XHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XG4tXG4tXHRcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXG4tXHRcdH0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiBcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbi1cbi1cdFx0LyogQ2hlY2sgaWYgdGhpcyB3aG9sZSByYW5nZSBpcyB3aXRoaW4gWk9ORV9NT1ZBQkxFICovXG4tXHRcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFx1MDAzZT0gem9uZV9tb3ZhYmxlX3BmbltuaWRdKVxuLVx0XHRcdCp6b25lX3N0YXJ0X3BmbiA9ICp6b25lX2VuZF9wZm47XG4tXHR9XG4tfVxuLVxuIC8qXG4gICogUmV0dXJuIHRoZSBudW1iZXIgb2YgaG9sZXMgaW4gYSByYW5nZSBvbiBhIG5vZGUuIElmIG5pZCBpcyBNQVhfTlVNTk9ERVMsXG4gICogdGhlbiBhbGwgaG9sZXMgaW4gdGhlIHJlcXVlc3RlZCByYW5nZSB3aWxsIGJlIGFjY291bnRlZCBmb3IuXG5AQCAtMTI1Nyw2ICYjNDM7MTIyMSwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxuIC8qXG4gICogUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYSB6b25lIHNwYW5zIGluIGEgbm9kZSwgaW5jbHVkaW5nIGhvbGVzXG4gICogcHJlc2VudF9wYWdlcyA9IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKCkgLSB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKClcbiYjNDM7ICpcbiYjNDM7ICogVGhlIHpvbmUgcmFuZ2VzIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgZG8gbm90IGluY2x1ZGUgWk9ORV9NT1ZBQkxFXG4mIzQzOyAqIGJlY2F1c2UgaXQgaXMgc2l6ZWQgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlLiBVbmxpa2UgdGhlIG90aGVyIHpvbmVzLFxuJiM0MzsgKiB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIFpPTkVfTU9WQUJMRSBpcyBub3QgZml4ZWQuIEl0IG1heSBiZSBkaWZmZXJlbnRcbiYjNDM7ICogaW4gZWFjaCBub2RlIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiBlYWNoIG5vZGUgYW5kIGhvdyBldmVubHkga2VybmVsY29yZVxuJiM0MzsgKiBpcyBkaXN0cmlidXRlZC4gVGhlIHpvbmUgcmFuZ2VzIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgYXJlIGFkanVzdGVkXG4mIzQzOyAqIGZvciBhIGdpdmVuIG5vZGUgYnkgdXNpbmcgdGhlIGVuZCBvZiB0aGUgaGlnaGVzdCB1c2FibGUgem9uZSBmb3JcbiYjNDM7ICogWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IHpvbmVzIHdpdGhpbiBhIG5vZGUgYXJlXG4mIzQzOyAqIGluIG9yZGVyIG9mIG1vbm90b25pYyBpbmNyZWFzZXMgbWVtb3J5IGFkZHJlc3Nlc1xuICAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmVfdHlwZSxcbkBAIC0xMjY3LDIxICYjNDM7MTI0MCw0MSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoaW50IG5pZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHpvbmVfbG93ID0gYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm5bem9uZV90eXBlXTtcbiBcdHVuc2lnbmVkIGxvbmcgem9uZV9oaWdoID0gYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW3pvbmVfdHlwZV07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtb3ZhYmxlX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbiBcbiBcdC8qIEdldCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgem9uZSAqL1xuIFx0KnpvbmVfc3RhcnRfcGZuID0gY2xhbXAobm9kZV9zdGFydF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpO1xuIFx0KnpvbmVfZW5kX3BmbiA9IGNsYW1wKG5vZGVfZW5kX3Bmbiwgem9uZV9sb3csIHpvbmVfaGlnaCk7XG4tXHRhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKG5pZCwgem9uZV90eXBlLCBub2RlX2VuZF9wZm4sXG4tXHRcdFx0XHRcdCAgIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xuIFxuLVx0LyogQ2hlY2sgdGhhdCB0aGlzIG5vZGUgaGFzIHBhZ2VzIHdpdGhpbiB0aGUgem9uZSYjMzk7cyByZXF1aXJlZCByYW5nZSAqL1xuLVx0aWYgKCp6b25lX2VuZF9wZm4gXHUwMDNjIG5vZGVfc3RhcnRfcGZuIHx8ICp6b25lX3N0YXJ0X3BmbiBcdTAwM2Ugbm9kZV9lbmRfcGZuKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHQvKiBOb3RoaW5nIHRvIGFkanVzdCBpZiBaT05FX01PVkFCTEUgaXMgbm90IG9uIHRoaXMgbm9kZSAqL1xuJiM0MztcdGlmICghbW92YWJsZV9wZm4pXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogU2l6ZSBaT05FX01PVkFCTEUgKi9cbiYjNDM7XHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSkge1xuJiM0MztcdFx0KnpvbmVfc3RhcnRfcGZuID0gbW92YWJsZV9wZm47XG4mIzQzO1x0XHQqem9uZV9lbmRfcGZuID0gbWluKG5vZGVfZW5kX3BmbixcbiYjNDM7XHRcdFx0YXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW21vdmFibGVfem9uZV0pO1xuJiM0MztcbiYjNDM7XHRcdC8qIENoZWNrIHRoYXQgdGhpcyBub2RlIGhhcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUmIzM5O3MgcmVxdWlyZWQgcmFuZ2UgKi9cbiYjNDM7XHRcdGlmICgqem9uZV9lbmRfcGZuIFx1MDAzYyBub2RlX3N0YXJ0X3BmbiB8fFxuJiM0MztcdFx0ICAgICp6b25lX3N0YXJ0X3BmbiBcdTAwM2Ugbm9kZV9lbmRfcGZuKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBNb3ZlIHRoZSB6b25lIHN0YXJ0IGluc2lkZSB0aGUgbm9kZSBpZiBuZWNlc3NhcnkgKi9cbiYjNDM7XHRcdCp6b25lX3N0YXJ0X3BmbiA9IG1heCgqem9uZV9zdGFydF9wZm4sIG5vZGVfc3RhcnRfcGZuKTtcbiBcbi1cdC8qIE1vdmUgdGhlIHpvbmUgYm91bmRhcmllcyBpbnNpZGUgdGhlIG5vZGUgaWYgbmVjZXNzYXJ5ICovXG4tXHQqem9uZV9lbmRfcGZuID0gbWluKCp6b25lX2VuZF9wZm4sIG5vZGVfZW5kX3Bmbik7XG4tXHQqem9uZV9zdGFydF9wZm4gPSBtYXgoKnpvbmVfc3RhcnRfcGZuLCBub2RlX3N0YXJ0X3Bmbik7XG4mIzQzO1x0LyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKCFtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNiAqem9uZV9zdGFydF9wZm4gXHUwMDNjIG1vdmFibGVfcGZuIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgKnpvbmVfZW5kX3BmbiBcdTAwM2UgbW92YWJsZV9wZm4pIHtcbiYjNDM7XHRcdCp6b25lX2VuZF9wZm4gPSBtb3ZhYmxlX3BmbjtcbiBcbiYjNDM7XHQvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiBcdTAwM2U9IG1vdmFibGVfcGZuKSB7XG4mIzQzO1x0XHQqem9uZV9zdGFydF9wZm4gPSAqem9uZV9lbmRfcGZuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiBcdC8qIFJldHVybiB0aGUgc3Bhbm5lZCBwYWdlcyAqL1xuIFx0cmV0dXJuICp6b25lX2VuZF9wZm4gLSAqem9uZV9zdGFydF9wZm47XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE2OjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGVgIGFuZCBpbmxpbmVzIGBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlYC4gQm90aCBmdW5jdGlvbnMgYXJlIG1hcmtlZCB3aXRoIGBfX2luaXRgIGFuZCBhcmUgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkga2VybmVsIGJvb3QuIFNpbmNlIGZ1enppbmcgb2NjdXJzIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGJvb3RlZCwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjE5NzJjOWYyOWY0MDAyZDg2Nzk0NmYxY2QyNmZkYzBkMzZiNWU4NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMTY6MDY6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggNzExZjgyMWY3YjNjNy4uZDU0NGVlZDJmMTczYiAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtMTE0Myw0MiAmIzQzOzExNDMsNiBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLAogfQogI2VuZGlmCiAKLS8qCi0gKiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBkbyBub3QgaW5jbHVkZSBaT05FX01PVkFCTEUKLSAqIGJlY2F1c2UgaXQgaXMgc2l6ZWQgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlLiBVbmxpa2UgdGhlIG90aGVyIHpvbmVzLAotICogdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBaT05FX01PVkFCTEUgaXMgbm90IGZpeGVkLiBJdCBtYXkgYmUgZGlmZmVyZW50Ci0gKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlCi0gKiBpcyBkaXN0cmlidXRlZC4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gYWRqdXN0cyB0aGUgem9uZSByYW5nZXMKLSAqIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgZm9yIGEgZ2l2ZW4gbm9kZSBieSB1c2luZyB0aGUgZW5kIG9mIHRoZQotICogaGlnaGVzdCB1c2FibGUgem9uZSBmb3IgWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0Ci0gKiB6b25lcyB3aXRoaW4gYSBub2RlIGFyZSBpbiBvcmRlciBvZiBtb25vdG9uaWMgaW5jcmVhc2VzIG1lbW9yeSBhZGRyZXNzZXMKLSAqLwotc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCwKLQkJCQkJdW5zaWduZWQgbG9uZyB6b25lX3R5cGUsCi0JCQkJCXVuc2lnbmVkIGxvbmcgbm9kZV9lbmRfcGZuLAotCQkJCQl1bnNpZ25lZCBsb25nICp6b25lX3N0YXJ0X3BmbiwKLQkJCQkJdW5zaWduZWQgbG9uZyAqem9uZV9lbmRfcGZuKQotewotCS8qIE9ubHkgYWRqdXN0IGlmIFpPTkVfTU9WQUJMRSBpcyBvbiB0aGlzIG5vZGUgKi8KLQlpZiAoem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7Ci0JCS8qIFNpemUgWk9ORV9NT1ZBQkxFICovCi0JCWlmICh6b25lX3R5cGUgPT0gWk9ORV9NT1ZBQkxFKSB7Ci0JCQkqem9uZV9zdGFydF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07Ci0JCQkqem9uZV9lbmRfcGZuID0gbWluKG5vZGVfZW5kX3BmbiwKLQkJCQlhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7Ci0KLQkJLyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi8KLQkJfSBlbHNlIGlmICghbWlycm9yZWRfa2VybmVsY29yZSAmYW1wOyZhbXA7Ci0JCQkqem9uZV9zdGFydF9wZm4gJmx0OyB6b25lX21vdmFibGVfcGZuW25pZF0gJmFtcDsmYW1wOwotCQkJKnpvbmVfZW5kX3BmbiAmZ3Q7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkgewotCQkJKnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTsKLQotCQkvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi8KLQkJfSBlbHNlIGlmICgqem9uZV9zdGFydF9wZm4gJmd0Oz0gem9uZV9tb3ZhYmxlX3BmbltuaWRdKQotCQkJKnpvbmVfc3RhcnRfcGZuID0gKnpvbmVfZW5kX3BmbjsKLQl9Ci19Ci0KIC8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBob2xlcyBpbiBhIHJhbmdlIG9uIGEgbm9kZS4gSWYgbmlkIGlzIE1BWF9OVU1OT0RFUywKICAqIHRoZW4gYWxsIGhvbGVzIGluIHRoZSByZXF1ZXN0ZWQgcmFuZ2Ugd2lsbCBiZSBhY2NvdW50ZWQgZm9yLgpAQCAtMTI1Nyw2ICYjNDM7MTIyMSwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLAogLyoKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGEgem9uZSBzcGFucyBpbiBhIG5vZGUsIGluY2x1ZGluZyBob2xlcwogICogcHJlc2VudF9wYWdlcyA9IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKCkgLSB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKCkKJiM0MzsgKgomIzQzOyAqIFRoZSB6b25lIHJhbmdlcyBwcm92aWRlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGRvIG5vdCBpbmNsdWRlIFpPTkVfTU9WQUJMRQomIzQzOyAqIGJlY2F1c2UgaXQgaXMgc2l6ZWQgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlLiBVbmxpa2UgdGhlIG90aGVyIHpvbmVzLAomIzQzOyAqIHRoZSBzdGFydGluZyBwb2ludCBmb3IgWk9ORV9NT1ZBQkxFIGlzIG5vdCBmaXhlZC4gSXQgbWF5IGJlIGRpZmZlcmVudAomIzQzOyAqIGluIGVhY2ggbm9kZSBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgZWFjaCBub2RlIGFuZCBob3cgZXZlbmx5IGtlcm5lbGNvcmUKJiM0MzsgKiBpcyBkaXN0cmlidXRlZC4gVGhlIHpvbmUgcmFuZ2VzIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgYXJlIGFkanVzdGVkCiYjNDM7ICogZm9yIGEgZ2l2ZW4gbm9kZSBieSB1c2luZyB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IHVzYWJsZSB6b25lIGZvcgomIzQzOyAqIFpPTkVfTU9WQUJMRS4gVGhpcyBwcmVzZXJ2ZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB6b25lcyB3aXRoaW4gYSBub2RlIGFyZQomIzQzOyAqIGluIG9yZGVyIG9mIG1vbm90b25pYyBpbmNyZWFzZXMgbWVtb3J5IGFkZHJlc3NlcwogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoaW50IG5pZCwKIAkJCQkJdW5zaWduZWQgbG9uZyB6b25lX3R5cGUsCkBAIC0xMjY3LDIxICYjNDM7MTI0MCw0MSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoaW50IG5pZCwKIHsKIAl1bnNpZ25lZCBsb25nIHpvbmVfbG93ID0gYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm5bem9uZV90eXBlXTsKIAl1bnNpZ25lZCBsb25nIHpvbmVfaGlnaCA9IGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblt6b25lX3R5cGVdOwomIzQzOwl1bnNpZ25lZCBsb25nIG1vdmFibGVfcGZuID0gem9uZV9tb3ZhYmxlX3BmbltuaWRdOwogCiAJLyogR2V0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB6b25lICovCiAJKnpvbmVfc3RhcnRfcGZuID0gY2xhbXAobm9kZV9zdGFydF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpOwogCSp6b25lX2VuZF9wZm4gPSBjbGFtcChub2RlX2VuZF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpOwotCWFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUobmlkLCB6b25lX3R5cGUsIG5vZGVfZW5kX3BmbiwKLQkJCQkJICAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7CiAKLQkvKiBDaGVjayB0aGF0IHRoaXMgbm9kZSBoYXMgcGFnZXMgd2l0aGluIHRoZSB6b25lJiMzOTtzIHJlcXVpcmVkIHJhbmdlICovCi0JaWYgKCp6b25lX2VuZF9wZm4gJmx0OyBub2RlX3N0YXJ0X3BmbiB8fCAqem9uZV9zdGFydF9wZm4gJmd0OyBub2RlX2VuZF9wZm4pCi0JCXJldHVybiAwOwomIzQzOwkvKiBOb3RoaW5nIHRvIGFkanVzdCBpZiBaT05FX01PVkFCTEUgaXMgbm90IG9uIHRoaXMgbm9kZSAqLwomIzQzOwlpZiAoIW1vdmFibGVfcGZuKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIFNpemUgWk9ORV9NT1ZBQkxFICovCiYjNDM7CWlmICh6b25lX3R5cGUgPT0gWk9ORV9NT1ZBQkxFKSB7CiYjNDM7CQkqem9uZV9zdGFydF9wZm4gPSBtb3ZhYmxlX3BmbjsKJiM0MzsJCSp6b25lX2VuZF9wZm4gPSBtaW4obm9kZV9lbmRfcGZuLAomIzQzOwkJCWFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblttb3ZhYmxlX3pvbmVdKTsKJiM0MzsKJiM0MzsJCS8qIENoZWNrIHRoYXQgdGhpcyBub2RlIGhhcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUmIzM5O3MgcmVxdWlyZWQgcmFuZ2UgKi8KJiM0MzsJCWlmICgqem9uZV9lbmRfcGZuICZsdDsgbm9kZV9zdGFydF9wZm4gfHwKJiM0MzsJCSAgICAqem9uZV9zdGFydF9wZm4gJmd0OyBub2RlX2VuZF9wZm4pCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQkvKiBNb3ZlIHRoZSB6b25lIHN0YXJ0IGluc2lkZSB0aGUgbm9kZSBpZiBuZWNlc3NhcnkgKi8KJiM0MzsJCSp6b25lX3N0YXJ0X3BmbiA9IG1heCgqem9uZV9zdGFydF9wZm4sIG5vZGVfc3RhcnRfcGZuKTsKIAotCS8qIE1vdmUgdGhlIHpvbmUgYm91bmRhcmllcyBpbnNpZGUgdGhlIG5vZGUgaWYgbmVjZXNzYXJ5ICovCi0JKnpvbmVfZW5kX3BmbiA9IG1pbigqem9uZV9lbmRfcGZuLCBub2RlX2VuZF9wZm4pOwotCSp6b25lX3N0YXJ0X3BmbiA9IG1heCgqem9uZV9zdGFydF9wZm4sIG5vZGVfc3RhcnRfcGZuKTsKJiM0MzsJLyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi8KJiM0MzsJfSBlbHNlIGlmICghbWlycm9yZWRfa2VybmVsY29yZSAmYW1wOyZhbXA7ICp6b25lX3N0YXJ0X3BmbiAmbHQ7IG1vdmFibGVfcGZuICZhbXA7JmFtcDsKJiM0MzsJCSAgICp6b25lX2VuZF9wZm4gJmd0OyBtb3ZhYmxlX3BmbikgewomIzQzOwkJKnpvbmVfZW5kX3BmbiA9IG1vdmFibGVfcGZuOwogCiYjNDM7CS8qIENoZWNrIGlmIHRoaXMgd2hvbGUgcmFuZ2UgaXMgd2l0aGluIFpPTkVfTU9WQUJMRSAqLwomIzQzOwl9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiAmZ3Q7PSBtb3ZhYmxlX3BmbikgewomIzQzOwkJKnpvbmVfc3RhcnRfcGZuID0gKnpvbmVfZW5kX3BmbjsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKIAkvKiBSZXR1cm4gdGhlIHNwYW5uZWQgcGFnZXMgKi8KIAlyZXR1cm4gKnpvbmVfZW5kX3BmbiAtICp6b25lX3N0YXJ0X3BmbjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDc5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYG1tL21tX2luaXQuY2AgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbiBgbW0vbW1faW5pdC5jYCBpcyBnZXR0aW5nIHJpZCBvZiBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGlubGluaW5nIGl0cyBsb2dpYyBpbnRvIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggaW5pdGlhbGx5LCBidXQgdGhlcmUmIzM5O3MgYSBzbGlnaHQgbW9kaWZpY2F0aW9uIHRvIHRoZSBsb2dpYy4gSSBzZWUgdGhleSYjMzk7dmUgdGFrZW4gdGhlc2UgbGluZXM6CgpgYGBjCi0JLyogQ2hlY2sgdGhhdCB0aGlzIG5vZGUgaGFzIHBhZ2VzIHdpdGhpbiB0aGUgem9uZSYjMzk7cyByZXF1aXJlZCByYW5nZSAqLwotCWlmICgqem9uZV9lbmRfcGZuICZsdDsgbm9kZV9zdGFydF9wZm4gfHwgKnpvbmVfc3RhcnRfcGZuICZndDsgbm9kZV9lbmRfcGZuKQotCQlyZXR1cm4gMDsKCi0JLyogTW92ZSB0aGUgem9uZSBib3VuZGFyaWVzIGluc2lkZSB0aGUgbm9kZSBpZiBuZWNlc3NhcnkgKi8KLQkqem9uZV9lbmRfcGZuID0gbWluKCp6b25lX2VuZF9wZm4sIG5vZGVfZW5kX3Bmbik7Ci0JKnpvbmVfc3RhcnRfcGZuID0gbWF4KCp6b25lX3N0YXJ0X3Bmbiwgbm9kZV9zdGFydF9wZm4pOwpgYGAKCi4uLmFuZCBtb3ZlZCB0aGVtLCB3aXRoIHNsaWdodCBjaGFuZ2VzLCBpbnRvIHRoZSBgaWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUpYCBibG9jay4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBBcmVuJiMzOTt0IGAqem9uZV9zdGFydF9wZm5gIGFuZCBgKnpvbmVfZW5kX3BmbmAgYWxyZWFkeSBjbGFtcGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlYD8KCmBgYGMKCS8qIEdldCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgem9uZSAqLwoJKnpvbmVfc3RhcnRfcGZuID0gY2xhbXAobm9kZV9zdGFydF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpOwoJKnpvbmVfZW5kX3BmbiA9IGNsYW1wKG5vZGVfZW5kX3Bmbiwgem9uZV9sb3csIHpvbmVfaGlnaCk7CmBgYAoKUmlnaHQsIHRoZXkgYXJlISBTbywgYCp6b25lX2VuZF9wZm5gIGlzIGFscmVhZHkgZ3VhcmFudGVlZCB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYG5vZGVfZW5kX3BmbmAsIGFuZCBgKnpvbmVfc3RhcnRfcGZuYCBpcyBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBub2RlX3N0YXJ0X3BmbmAuIFRoYXQgbWVhbnMgdGhlIHJlbW92ZWQgY2hlY2tzIGFyZSBtb3N0bHkgcmVkdW5kYW50LCBleGNlcHQgZm9yIHRoZSBgWk9ORV9NT1ZBQkxFYCBjYXNlLCB3aGVyZSB0aGVyZSYjMzk7cyBhIHJlYXNzaWdubWVudC4KCk5vdywgdGhpcyBpcyBhbiBpbml0aWFsaXphdGlvbiBjb2RlIGNoYW5nZTsgdGhpcyBpcyBkZWNsYXJlZCB1c2luZyBgX19pbml0YC4gYHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlYCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbi4gVXN1YWxseSwgZnV6emluZyBgX19pbml0YCBmdW5jdGlvbnMgaXNuJiMzOTt0IHZlcnkgcHJvZHVjdGl2ZSBiZWNhdXNlIHRoZXkgYXJlIG9ubHkgZXhlY3V0ZWQgb25jZSBkdXJpbmcgYm9vdC4gQnV0IHdhaXQsIGlzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgb25seSBjYWxsZWQgZHVyaW5nIGJvb3Q/IE1heWJlIG1lbW9yeSBob3RwbHVnIGNhbGxzIGl0PyBNZW1vcnkgaG90cGx1ZyBtaWdodCBjYWxsIGBfX21lbWluaXRgIGZ1bmN0aW9ucywgYnV0IGBfX2luaXRgIGZ1bmN0aW9ucyBhcmUgZGlzY2FyZGVkIGFmdGVyIGJvb3QuIExldCYjMzk7cyBtYWtlIHN1cmUgYnkgY2hlY2tpbmcgdGhlIGRlZmluaXRpb246IGl0JiMzOTtzIGBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoLi4uKWAuIEFoLCB5ZXMsIGl0ICppcyogYF9faW5pdGAuIFRoYXQgbWVhbnMgaXQmIzM5O3MgZGlzY2FyZGVkIGFmdGVyIGJvb3QuIEZ1enppbmcgY2FuJiMzOTt0IHJlYWNoIGBfX2luaXRgIGZ1bmN0aW9ucyBhZnRlciB0aGUgc3lzdGVtIGhhcyBib290ZWQuIExldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgc3VyZS4gWWVzLCB0aGUgcGF0Y2ggc2hvd3MgYHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZSguLi4pYC4gVGhhdCBzZWFscyBpdDsgYF9faW5pdGAuCgpTbywgaXQmIzM5O3Mgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdC4gTWVtb3J5IGhvdHBsdWcgdXNlcyBgX19tZW1pbml0YC4gU2luY2UgdGhpcyBpcyBgX19pbml0YCwgaXQgb25seSBydW5zIGF0IGJvb3QgdGltZS4gU3l6a2FsbGVyIGZ1enplcyB0aGUga2VybmVsICphZnRlciogaXQgaGFzIGJvb3RlZCwgc28gdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLgoKVG8gYmUgZXh0cmEgY2FyZWZ1bCwgbGV0IG1lIGNoZWNrIGlmIHRoZXJlIGlzIGFueSB3YXkgdG8gdHJpZ2dlciB0aGlzIGFmdGVyIGJvb3QuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGVgLgoKVGhlcmVmb3JlLCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSBpdCYjMzk7cyBhbiBgX19pbml0YCBmdW5jdGlvbiBhbmQgbm90IHJlYWNoYWJsZSBhZnRlciBib290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0xMTgwPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXG4tLVxubW0vbW1faW5pdC5jLTEyMjItICogUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYSB6b25lIHNwYW5zIGluIGEgbm9kZSwgaW5jbHVkaW5nIGhvbGVzXG5tbS9tbV9pbml0LmM6MTIyMzogKiBwcmVzZW50X3BhZ2VzID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoKSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoKVxubW0vbW1faW5pdC5jLTEyMjQtICpcbi0tXG5tbS9tbV9pbml0LmMtMTIzMy0gKi9cbm1tL21tX2luaXQuYzoxMjM0OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxubW0vbW1faW5pdC5jLTEyMzUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV90eXBlLFxuLS1cbm1tL21tX2luaXQuYz0xMzI0PXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vbW1faW5pdC5jLTEzMzYtXG5tbS9tbV9pbml0LmM6MTMzNzpcdFx0c3Bhbm5lZCA9IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGksXG5tbS9tbV9pbml0LmMtMTMzOC1cdFx0XHRcdFx0XHQgICAgIG5vZGVfc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTMKCQkJCQkJCW91dHB1dDogMTAxCgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVW5yZWFjaGFiaWxpdHkgaW4gRWFybHkgQm9vdCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGVgIGZ1bmN0aW9uLiBJIHNlZSBub3cgdGhhdCBpdCYjMzk7cyBwYXJ0IG9mIGBfX2luaXRgLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzYCwgd2hpY2ggaXMgKmFsc28qIG1hcmtlZCBhcyBgX19pbml0YC4gUmlnaHQsIHRoYXQgbWFrZXMgaXQgcHJldHR5IGNsZWFyLiBTaW5jZSB0aGVzZSBhcmUgYF9faW5pdGAgZnVuY3Rpb25zLCB0aGV5IGFyZSBvbmx5IGV2ZXIgZXhlY3V0ZWQgZHVyaW5nIHRoZSBrZXJuZWwmIzM5O3MgZWFybHkgYm9vdCBzZXF1ZW5jZS4gVGhhdCYjMzk7cyBiZWZvcmUgdXNlcnNwYWNlIGlzIGV2ZW4gdXAgYW5kIHJ1bm5pbmcsIGxldCBhbG9uZSBhIGZ1enplciBsaWtlIHN5emthbGxlci4KClRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gd2F5IGZvciBhIGZ1enppbmcgY2FtcGFpZ24gdG8gYWN0dWFsbHkgcmVhY2ggdGhpcyBjb2RlLiBUaGUgbmF0dXJlIG9mIGZ1enppbmcgZGljdGF0ZXMgdGhhdCBpdCBydW5zIGluIHVzZXItc3BhY2UsIHdlbGwgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLiBTbywgSSB3aWxsIGJlIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBoZXJlLiBNeSByZWFzb25pbmcgaXMgc29saWQ6IFRoZSBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYF9faW5pdGAgc2VjdGlvbnMsIHJlbmRlcmluZyB0aGUgY29kZSBpbmFjY2Vzc2libGUgdG8gYW55IGZ1enppbmcgYXR0ZW1wdHMgcnVubmluZyBpbiBhIHN0YW5kYXJkLCBwb3N0LWJvb3QgZW52aXJvbm1lbnQuIE5vIHBvaW50IHNwZW5kaW5nIHRpbWUgb24gc29tZXRoaW5nIHdlIGNhbiYjMzk7dCBpbmZsdWVuY2Ugd2l0aCBvdXIgZnV6emluZyB0b29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNjowNjo0Mi4yMjczNzU2MTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDkxNTI5MjgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlYCBhbmQgaW5saW5lcyBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAuIEJvdGggZnVuY3Rpb25zIGFyZSBtYXJrZWQgd2l0aCBgX19pbml0YCBhbmQgYXJlIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290LiBTaW5jZSBmdXp6aW5nIG9jY3VycyBhZnRlciB0aGUga2VybmVsIGhhcyBib290ZWQsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBieSB0aGUgZnV6emVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTY6MDY6NDIuMjI3MzgwODQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgxNTE2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2MTk3MmM5ZjI5ZjQwMDJkODY3OTQ2ZjFjZDI2ZmRjMGQzNmI1ZTg3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMTY6MDY6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggNzExZjgyMWY3YjNjNy4uZDU0NGVlZDJmMTczYiAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtMTE0Myw0MiArMTE0Myw2IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbi0vKlxcbi0gKiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBkbyBub3QgaW5jbHVkZSBaT05FX01PVkFCTEVcXG4tICogYmVjYXVzZSBpdCBpcyBzaXplZCBpbmRlcGVuZGVudCBvZiBhcmNoaXRlY3R1cmUuIFVubGlrZSB0aGUgb3RoZXIgem9uZXMsXFxuLSAqIHRoZSBzdGFydGluZyBwb2ludCBmb3IgWk9ORV9NT1ZBQkxFIGlzIG5vdCBmaXhlZC4gSXQgbWF5IGJlIGRpZmZlcmVudFxcbi0gKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlXFxuLSAqIGlzIGRpc3RyaWJ1dGVkLiBUaGlzIGhlbHBlciBmdW5jdGlvbiBhZGp1c3RzIHRoZSB6b25lIHJhbmdlc1xcbi0gKiBwcm92aWRlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGZvciBhIGdpdmVuIG5vZGUgYnkgdXNpbmcgdGhlIGVuZCBvZiB0aGVcXG4tICogaGlnaGVzdCB1c2FibGUgem9uZSBmb3IgWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0XFxuLSAqIHpvbmVzIHdpdGhpbiBhIG5vZGUgYXJlIGluIG9yZGVyIG9mIG1vbm90b25pYyBpbmNyZWFzZXMgbWVtb3J5IGFkZHJlc3Nlc1xcbi0gKi9cXG4tc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCxcXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX3R5cGUsXFxuLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbm9kZV9lbmRfcGZuLFxcbi1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICp6b25lX3N0YXJ0X3BmbixcXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqem9uZV9lbmRfcGZuKVxcbi17XFxuLVxcdC8qIE9ubHkgYWRqdXN0IGlmIFpPTkVfTU9WQUJMRSBpcyBvbiB0aGlzIG5vZGUgKi9cXG4tXFx0aWYgKHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xcbi1cXHRcXHQvKiBTaXplIFpPTkVfTU9WQUJMRSAqL1xcbi1cXHRcXHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSkge1xcbi1cXHRcXHRcXHQqem9uZV9zdGFydF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XFxuLVxcdFxcdFxcdCp6b25lX2VuZF9wZm4gPSBtaW4obm9kZV9lbmRfcGZuLFxcbi1cXHRcXHRcXHRcXHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XFxuLVxcbi1cXHRcXHQvKiBBZGp1c3QgZm9yIFpPTkVfTU9WQUJMRSBzdGFydGluZyB3aXRoaW4gdGhpcyByYW5nZSAqL1xcbi1cXHRcXHR9IGVsc2UgaWYgKCFtaXJyb3JlZF9rZXJuZWxjb3JlIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCp6b25lX3N0YXJ0X3BmbiBcXHUwMDNjIHpvbmVfbW92YWJsZV9wZm5bbmlkXSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQqem9uZV9lbmRfcGZuIFxcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XFxuLVxcdFxcdFxcdCp6b25lX2VuZF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XFxuLVxcbi1cXHRcXHQvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi9cXG4tXFx0XFx0fSBlbHNlIGlmICgqem9uZV9zdGFydF9wZm4gXFx1MDAzZT0gem9uZV9tb3ZhYmxlX3BmbltuaWRdKVxcbi1cXHRcXHRcXHQqem9uZV9zdGFydF9wZm4gPSAqem9uZV9lbmRfcGZuO1xcbi1cXHR9XFxuLX1cXG4tXFxuIC8qXFxuICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGhvbGVzIGluIGEgcmFuZ2Ugb24gYSBub2RlLiBJZiBuaWQgaXMgTUFYX05VTU5PREVTLFxcbiAgKiB0aGVuIGFsbCBob2xlcyBpbiB0aGUgcmVxdWVzdGVkIHJhbmdlIHdpbGwgYmUgYWNjb3VudGVkIGZvci5cXG5AQCAtMTI1Nyw2ICsxMjIxLDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXFxuIC8qXFxuICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGEgem9uZSBzcGFucyBpbiBhIG5vZGUsIGluY2x1ZGluZyBob2xlc1xcbiAgKiBwcmVzZW50X3BhZ2VzID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoKSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoKVxcbisgKlxcbisgKiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBkbyBub3QgaW5jbHVkZSBaT05FX01PVkFCTEVcXG4rICogYmVjYXVzZSBpdCBpcyBzaXplZCBpbmRlcGVuZGVudCBvZiBhcmNoaXRlY3R1cmUuIFVubGlrZSB0aGUgb3RoZXIgem9uZXMsXFxuKyAqIHRoZSBzdGFydGluZyBwb2ludCBmb3IgWk9ORV9NT1ZBQkxFIGlzIG5vdCBmaXhlZC4gSXQgbWF5IGJlIGRpZmZlcmVudFxcbisgKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlXFxuKyAqIGlzIGRpc3RyaWJ1dGVkLiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBhcmUgYWRqdXN0ZWRcXG4rICogZm9yIGEgZ2l2ZW4gbm9kZSBieSB1c2luZyB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IHVzYWJsZSB6b25lIGZvclxcbisgKiBaT05FX01PVkFCTEUuIFRoaXMgcHJlc2VydmVzIHRoZSBhc3N1bXB0aW9uIHRoYXQgem9uZXMgd2l0aGluIGEgbm9kZSBhcmVcXG4rICogaW4gb3JkZXIgb2YgbW9ub3RvbmljIGluY3JlYXNlcyBtZW1vcnkgYWRkcmVzc2VzXFxuICAqL1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoaW50IG5pZCxcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX3R5cGUsXFxuQEAgLTEyNjcsMjEgKzEyNDAsNDEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKGludCBuaWQsXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyB6b25lX2xvdyA9IGFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW3pvbmVfdHlwZV07XFxuIFxcdHVuc2lnbmVkIGxvbmcgem9uZV9oaWdoID0gYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW3pvbmVfdHlwZV07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbW92YWJsZV9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XFxuIFxcbiBcXHQvKiBHZXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHpvbmUgKi9cXG4gXFx0KnpvbmVfc3RhcnRfcGZuID0gY2xhbXAobm9kZV9zdGFydF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpO1xcbiBcXHQqem9uZV9lbmRfcGZuID0gY2xhbXAobm9kZV9lbmRfcGZuLCB6b25lX2xvdywgem9uZV9oaWdoKTtcXG4tXFx0YWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZShuaWQsIHpvbmVfdHlwZSwgbm9kZV9lbmRfcGZuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcXG4gXFxuLVxcdC8qIENoZWNrIHRoYXQgdGhpcyBub2RlIGhhcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUncyByZXF1aXJlZCByYW5nZSAqL1xcbi1cXHRpZiAoKnpvbmVfZW5kX3BmbiBcXHUwMDNjIG5vZGVfc3RhcnRfcGZuIHx8ICp6b25lX3N0YXJ0X3BmbiBcXHUwMDNlIG5vZGVfZW5kX3BmbilcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdC8qIE5vdGhpbmcgdG8gYWRqdXN0IGlmIFpPTkVfTU9WQUJMRSBpcyBub3Qgb24gdGhpcyBub2RlICovXFxuK1xcdGlmICghbW92YWJsZV9wZm4pXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogU2l6ZSBaT05FX01PVkFCTEUgKi9cXG4rXFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUpIHtcXG4rXFx0XFx0KnpvbmVfc3RhcnRfcGZuID0gbW92YWJsZV9wZm47XFxuK1xcdFxcdCp6b25lX2VuZF9wZm4gPSBtaW4obm9kZV9lbmRfcGZuLFxcbitcXHRcXHRcXHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XFxuK1xcbitcXHRcXHQvKiBDaGVjayB0aGF0IHRoaXMgbm9kZSBoYXMgcGFnZXMgd2l0aGluIHRoZSB6b25lJ3MgcmVxdWlyZWQgcmFuZ2UgKi9cXG4rXFx0XFx0aWYgKCp6b25lX2VuZF9wZm4gXFx1MDAzYyBub2RlX3N0YXJ0X3BmbiB8fFxcbitcXHRcXHQgICAgKnpvbmVfc3RhcnRfcGZuIFxcdTAwM2Ugbm9kZV9lbmRfcGZuKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdC8qIE1vdmUgdGhlIHpvbmUgc3RhcnQgaW5zaWRlIHRoZSBub2RlIGlmIG5lY2Vzc2FyeSAqL1xcbitcXHRcXHQqem9uZV9zdGFydF9wZm4gPSBtYXgoKnpvbmVfc3RhcnRfcGZuLCBub2RlX3N0YXJ0X3Bmbik7XFxuIFxcbi1cXHQvKiBNb3ZlIHRoZSB6b25lIGJvdW5kYXJpZXMgaW5zaWRlIHRoZSBub2RlIGlmIG5lY2Vzc2FyeSAqL1xcbi1cXHQqem9uZV9lbmRfcGZuID0gbWluKCp6b25lX2VuZF9wZm4sIG5vZGVfZW5kX3Bmbik7XFxuLVxcdCp6b25lX3N0YXJ0X3BmbiA9IG1heCgqem9uZV9zdGFydF9wZm4sIG5vZGVfc3RhcnRfcGZuKTtcXG4rXFx0LyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi9cXG4rXFx0fSBlbHNlIGlmICghbWlycm9yZWRfa2VybmVsY29yZSBcXHUwMDI2XFx1MDAyNiAqem9uZV9zdGFydF9wZm4gXFx1MDAzYyBtb3ZhYmxlX3BmbiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAqem9uZV9lbmRfcGZuIFxcdTAwM2UgbW92YWJsZV9wZm4pIHtcXG4rXFx0XFx0KnpvbmVfZW5kX3BmbiA9IG1vdmFibGVfcGZuO1xcbiBcXG4rXFx0LyogQ2hlY2sgaWYgdGhpcyB3aG9sZSByYW5nZSBpcyB3aXRoaW4gWk9ORV9NT1ZBQkxFICovXFxuK1xcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFxcdTAwM2U9IG1vdmFibGVfcGZuKSB7XFxuK1xcdFxcdCp6b25lX3N0YXJ0X3BmbiA9ICp6b25lX2VuZF9wZm47XFxuK1xcdH1cXG4rXFxuK291dDpcXG4gXFx0LyogUmV0dXJuIHRoZSBzcGFubmVkIHBhZ2VzICovXFxuIFxcdHJldHVybiAqem9uZV9lbmRfcGZuIC0gKnpvbmVfc3RhcnRfcGZuO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE2OjA2OjQyLjY1NjI1ODMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ0ODY0MDI1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxOTcyYzlmMjlmNDAwMmQ4Njc5NDZmMWNkMjZmZGMwZDM2YjVlODdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDE2OjA2OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCA3MTFmODIxZjdiM2M3Li5kNTQ0ZWVkMmYxNzNiIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4rKysgYi9tbS9tbV9pbml0LmNcbkBAIC0xMTQzLDQyICsxMTQzLDYgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiB9XG4gI2VuZGlmXG4gXG4tLypcbi0gKiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBkbyBub3QgaW5jbHVkZSBaT05FX01PVkFCTEVcbi0gKiBiZWNhdXNlIGl0IGlzIHNpemVkIGluZGVwZW5kZW50IG9mIGFyY2hpdGVjdHVyZS4gVW5saWtlIHRoZSBvdGhlciB6b25lcyxcbi0gKiB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIFpPTkVfTU9WQUJMRSBpcyBub3QgZml4ZWQuIEl0IG1heSBiZSBkaWZmZXJlbnRcbi0gKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlXG4tICogaXMgZGlzdHJpYnV0ZWQuIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGFkanVzdHMgdGhlIHpvbmUgcmFuZ2VzXG4tICogcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBmb3IgYSBnaXZlbiBub2RlIGJ5IHVzaW5nIHRoZSBlbmQgb2YgdGhlXG4tICogaGlnaGVzdCB1c2FibGUgem9uZSBmb3IgWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0XG4tICogem9uZXMgd2l0aGluIGEgbm9kZSBhcmUgaW4gb3JkZXIgb2YgbW9ub3RvbmljIGluY3JlYXNlcyBtZW1vcnkgYWRkcmVzc2VzXG4tICovXG4tc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCxcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lX3R5cGUsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgbm9kZV9lbmRfcGZuLFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICp6b25lX3N0YXJ0X3Bmbixcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqem9uZV9lbmRfcGZuKVxuLXtcbi1cdC8qIE9ubHkgYWRqdXN0IGlmIFpPTkVfTU9WQUJMRSBpcyBvbiB0aGlzIG5vZGUgKi9cbi1cdGlmICh6b25lX21vdmFibGVfcGZuW25pZF0pIHtcbi1cdFx0LyogU2l6ZSBaT05FX01PVkFCTEUgKi9cbi1cdFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUpIHtcbi1cdFx0XHQqem9uZV9zdGFydF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiA9IG1pbihub2RlX2VuZF9wZm4sXG4tXHRcdFx0XHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XG4tXG4tXHRcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXG4tXHRcdH0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiBcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbi1cbi1cdFx0LyogQ2hlY2sgaWYgdGhpcyB3aG9sZSByYW5nZSBpcyB3aXRoaW4gWk9ORV9NT1ZBQkxFICovXG4tXHRcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFx1MDAzZT0gem9uZV9tb3ZhYmxlX3BmbltuaWRdKVxuLVx0XHRcdCp6b25lX3N0YXJ0X3BmbiA9ICp6b25lX2VuZF9wZm47XG4tXHR9XG4tfVxuLVxuIC8qXG4gICogUmV0dXJuIHRoZSBudW1iZXIgb2YgaG9sZXMgaW4gYSByYW5nZSBvbiBhIG5vZGUuIElmIG5pZCBpcyBNQVhfTlVNTk9ERVMsXG4gICogdGhlbiBhbGwgaG9sZXMgaW4gdGhlIHJlcXVlc3RlZCByYW5nZSB3aWxsIGJlIGFjY291bnRlZCBmb3IuXG5AQCAtMTI1Nyw2ICsxMjIxLDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXG4gLypcbiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBhIHpvbmUgc3BhbnMgaW4gYSBub2RlLCBpbmNsdWRpbmcgaG9sZXNcbiAgKiBwcmVzZW50X3BhZ2VzID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoKSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoKVxuKyAqXG4rICogVGhlIHpvbmUgcmFuZ2VzIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgZG8gbm90IGluY2x1ZGUgWk9ORV9NT1ZBQkxFXG4rICogYmVjYXVzZSBpdCBpcyBzaXplZCBpbmRlcGVuZGVudCBvZiBhcmNoaXRlY3R1cmUuIFVubGlrZSB0aGUgb3RoZXIgem9uZXMsXG4rICogdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBaT05FX01PVkFCTEUgaXMgbm90IGZpeGVkLiBJdCBtYXkgYmUgZGlmZmVyZW50XG4rICogaW4gZWFjaCBub2RlIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiBlYWNoIG5vZGUgYW5kIGhvdyBldmVubHkga2VybmVsY29yZVxuKyAqIGlzIGRpc3RyaWJ1dGVkLiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBhcmUgYWRqdXN0ZWRcbisgKiBmb3IgYSBnaXZlbiBub2RlIGJ5IHVzaW5nIHRoZSBlbmQgb2YgdGhlIGhpZ2hlc3QgdXNhYmxlIHpvbmUgZm9yXG4rICogWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IHpvbmVzIHdpdGhpbiBhIG5vZGUgYXJlXG4rICogaW4gb3JkZXIgb2YgbW9ub3RvbmljIGluY3JlYXNlcyBtZW1vcnkgYWRkcmVzc2VzXG4gICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKGludCBuaWQsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV90eXBlLFxuQEAgLTEyNjcsMjEgKzEyNDAsNDEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKGludCBuaWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB6b25lX2xvdyA9IGFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW3pvbmVfdHlwZV07XG4gXHR1bnNpZ25lZCBsb25nIHpvbmVfaGlnaCA9IGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblt6b25lX3R5cGVdO1xuK1x0dW5zaWduZWQgbG9uZyBtb3ZhYmxlX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbiBcbiBcdC8qIEdldCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgem9uZSAqL1xuIFx0KnpvbmVfc3RhcnRfcGZuID0gY2xhbXAobm9kZV9zdGFydF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpO1xuIFx0KnpvbmVfZW5kX3BmbiA9IGNsYW1wKG5vZGVfZW5kX3Bmbiwgem9uZV9sb3csIHpvbmVfaGlnaCk7XG4tXHRhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKG5pZCwgem9uZV90eXBlLCBub2RlX2VuZF9wZm4sXG4tXHRcdFx0XHRcdCAgIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xuIFxuLVx0LyogQ2hlY2sgdGhhdCB0aGlzIG5vZGUgaGFzIHBhZ2VzIHdpdGhpbiB0aGUgem9uZSdzIHJlcXVpcmVkIHJhbmdlICovXG4tXHRpZiAoKnpvbmVfZW5kX3BmbiBcdTAwM2Mgbm9kZV9zdGFydF9wZm4gfHwgKnpvbmVfc3RhcnRfcGZuIFx1MDAzZSBub2RlX2VuZF9wZm4pXG4tXHRcdHJldHVybiAwO1xuK1x0LyogTm90aGluZyB0byBhZGp1c3QgaWYgWk9ORV9NT1ZBQkxFIGlzIG5vdCBvbiB0aGlzIG5vZGUgKi9cbitcdGlmICghbW92YWJsZV9wZm4pXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogU2l6ZSBaT05FX01PVkFCTEUgKi9cbitcdGlmICh6b25lX3R5cGUgPT0gWk9ORV9NT1ZBQkxFKSB7XG4rXHRcdCp6b25lX3N0YXJ0X3BmbiA9IG1vdmFibGVfcGZuO1xuK1x0XHQqem9uZV9lbmRfcGZuID0gbWluKG5vZGVfZW5kX3BmbixcbitcdFx0XHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XG4rXG4rXHRcdC8qIENoZWNrIHRoYXQgdGhpcyBub2RlIGhhcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUncyByZXF1aXJlZCByYW5nZSAqL1xuK1x0XHRpZiAoKnpvbmVfZW5kX3BmbiBcdTAwM2Mgbm9kZV9zdGFydF9wZm4gfHxcbitcdFx0ICAgICp6b25lX3N0YXJ0X3BmbiBcdTAwM2Ugbm9kZV9lbmRfcGZuKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHQvKiBNb3ZlIHRoZSB6b25lIHN0YXJ0IGluc2lkZSB0aGUgbm9kZSBpZiBuZWNlc3NhcnkgKi9cbitcdFx0KnpvbmVfc3RhcnRfcGZuID0gbWF4KCp6b25lX3N0YXJ0X3Bmbiwgbm9kZV9zdGFydF9wZm4pO1xuIFxuLVx0LyogTW92ZSB0aGUgem9uZSBib3VuZGFyaWVzIGluc2lkZSB0aGUgbm9kZSBpZiBuZWNlc3NhcnkgKi9cbi1cdCp6b25lX2VuZF9wZm4gPSBtaW4oKnpvbmVfZW5kX3Bmbiwgbm9kZV9lbmRfcGZuKTtcbi1cdCp6b25lX3N0YXJ0X3BmbiA9IG1heCgqem9uZV9zdGFydF9wZm4sIG5vZGVfc3RhcnRfcGZuKTtcbitcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXG4rXHR9IGVsc2UgaWYgKCFtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNiAqem9uZV9zdGFydF9wZm4gXHUwMDNjIG1vdmFibGVfcGZuIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAqem9uZV9lbmRfcGZuIFx1MDAzZSBtb3ZhYmxlX3Bmbikge1xuK1x0XHQqem9uZV9lbmRfcGZuID0gbW92YWJsZV9wZm47XG4gXG4rXHQvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi9cbitcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFx1MDAzZT0gbW92YWJsZV9wZm4pIHtcbitcdFx0KnpvbmVfc3RhcnRfcGZuID0gKnpvbmVfZW5kX3BmbjtcbitcdH1cbitcbitvdXQ6XG4gXHQvKiBSZXR1cm4gdGhlIHNwYW5uZWQgcGFnZXMgKi9cbiBcdHJldHVybiAqem9uZV9lbmRfcGZuIC0gKnpvbmVfc3RhcnRfcGZuO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE2OjA2OjQyLjY1NjI1OTE3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY5MjgyOTU5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIGBtbS9tbV9pbml0LmNgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbiBgbW0vbW1faW5pdC5jYCBpcyBnZXR0aW5nIHJpZCBvZiBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGlubGluaW5nIGl0cyBsb2dpYyBpbnRvIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggaW5pdGlhbGx5LCBidXQgdGhlcmUncyBhIHNsaWdodCBtb2RpZmljYXRpb24gdG8gdGhlIGxvZ2ljLiBJIHNlZSB0aGV5J3ZlIHRha2VuIHRoZXNlIGxpbmVzOlxuXG5gYGBjXG4tXHQvKiBDaGVjayB0aGF0IHRoaXMgbm9kZSBoYXMgcGFnZXMgd2l0aGluIHRoZSB6b25lJ3MgcmVxdWlyZWQgcmFuZ2UgKi9cbi1cdGlmICgqem9uZV9lbmRfcGZuIFx1MDAzYyBub2RlX3N0YXJ0X3BmbiB8fCAqem9uZV9zdGFydF9wZm4gXHUwMDNlIG5vZGVfZW5kX3Bmbilcbi1cdFx0cmV0dXJuIDA7XG5cbi1cdC8qIE1vdmUgdGhlIHpvbmUgYm91bmRhcmllcyBpbnNpZGUgdGhlIG5vZGUgaWYgbmVjZXNzYXJ5ICovXG4tXHQqem9uZV9lbmRfcGZuID0gbWluKCp6b25lX2VuZF9wZm4sIG5vZGVfZW5kX3Bmbik7XG4tXHQqem9uZV9zdGFydF9wZm4gPSBtYXgoKnpvbmVfc3RhcnRfcGZuLCBub2RlX3N0YXJ0X3Bmbik7XG5gYGBcblxuLi4uYW5kIG1vdmVkIHRoZW0sIHdpdGggc2xpZ2h0IGNoYW5nZXMsIGludG8gdGhlIGBpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSlgIGJsb2NrLiBIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEFyZW4ndCBgKnpvbmVfc3RhcnRfcGZuYCBhbmQgYCp6b25lX2VuZF9wZm5gIGFscmVhZHkgY2xhbXBlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWA/XG5cbmBgYGNcblx0LyogR2V0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB6b25lICovXG5cdCp6b25lX3N0YXJ0X3BmbiA9IGNsYW1wKG5vZGVfc3RhcnRfcGZuLCB6b25lX2xvdywgem9uZV9oaWdoKTtcblx0KnpvbmVfZW5kX3BmbiA9IGNsYW1wKG5vZGVfZW5kX3Bmbiwgem9uZV9sb3csIHpvbmVfaGlnaCk7XG5gYGBcblxuUmlnaHQsIHRoZXkgYXJlISBTbywgYCp6b25lX2VuZF9wZm5gIGlzIGFscmVhZHkgZ3VhcmFudGVlZCB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYG5vZGVfZW5kX3BmbmAsIGFuZCBgKnpvbmVfc3RhcnRfcGZuYCBpcyBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBub2RlX3N0YXJ0X3BmbmAuIFRoYXQgbWVhbnMgdGhlIHJlbW92ZWQgY2hlY2tzIGFyZSBtb3N0bHkgcmVkdW5kYW50LCBleGNlcHQgZm9yIHRoZSBgWk9ORV9NT1ZBQkxFYCBjYXNlLCB3aGVyZSB0aGVyZSdzIGEgcmVhc3NpZ25tZW50LlxuXG5Ob3csIHRoaXMgaXMgYW4gaW5pdGlhbGl6YXRpb24gY29kZSBjaGFuZ2U7IHRoaXMgaXMgZGVjbGFyZWQgdXNpbmcgYF9faW5pdGAuIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uIFVzdWFsbHksIGZ1enppbmcgYF9faW5pdGAgZnVuY3Rpb25zIGlzbid0IHZlcnkgcHJvZHVjdGl2ZSBiZWNhdXNlIHRoZXkgYXJlIG9ubHkgZXhlY3V0ZWQgb25jZSBkdXJpbmcgYm9vdC4gQnV0IHdhaXQsIGlzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgb25seSBjYWxsZWQgZHVyaW5nIGJvb3Q/IE1heWJlIG1lbW9yeSBob3RwbHVnIGNhbGxzIGl0PyBNZW1vcnkgaG90cGx1ZyBtaWdodCBjYWxsIGBfX21lbWluaXRgIGZ1bmN0aW9ucywgYnV0IGBfX2luaXRgIGZ1bmN0aW9ucyBhcmUgZGlzY2FyZGVkIGFmdGVyIGJvb3QuIExldCdzIG1ha2Ugc3VyZSBieSBjaGVja2luZyB0aGUgZGVmaW5pdGlvbjogaXQncyBgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKC4uLilgLiBBaCwgeWVzLCBpdCAqaXMqIGBfX2luaXRgLiBUaGF0IG1lYW5zIGl0J3MgZGlzY2FyZGVkIGFmdGVyIGJvb3QuIEZ1enppbmcgY2FuJ3QgcmVhY2ggYF9faW5pdGAgZnVuY3Rpb25zIGFmdGVyIHRoZSBzeXN0ZW0gaGFzIGJvb3RlZC4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUuIFllcywgdGhlIHBhdGNoIHNob3dzIGBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoLi4uKWAuIFRoYXQgc2VhbHMgaXQ7IGBfX2luaXRgLlxuXG5TbywgaXQncyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBib290LiBNZW1vcnkgaG90cGx1ZyB1c2VzIGBfX21lbWluaXRgLiBTaW5jZSB0aGlzIGlzIGBfX2luaXRgLCBpdCBvbmx5IHJ1bnMgYXQgYm9vdCB0aW1lLiBTeXprYWxsZXIgZnV6emVzIHRoZSBrZXJuZWwgKmFmdGVyKiBpdCBoYXMgYm9vdGVkLCBzbyB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXG5cblRvIGJlIGV4dHJhIGNhcmVmdWwsIGxldCBtZSBjaGVjayBpZiB0aGVyZSBpcyBhbnkgd2F5IHRvIHRyaWdnZXIgdGhpcyBhZnRlciBib290LiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGVgLlxuXG5UaGVyZWZvcmUsIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNhdXNlIGl0J3MgYW4gYF9faW5pdGAgZnVuY3Rpb24gYW5kIG5vdCByZWFjaGFibGUgYWZ0ZXIgYm9vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE2OjA4OjA5LjU4NDU1ODI3N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIyNDM5NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tX2luaXQuYz0xMTgwPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIyMi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBhIHpvbmUgc3BhbnMgaW4gYSBub2RlLCBpbmNsdWRpbmcgaG9sZXNcXG5tbS9tbV9pbml0LmM6MTIyMzogKiBwcmVzZW50X3BhZ2VzID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoKSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoKVxcbm1tL21tX2luaXQuYy0xMjI0LSAqXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIzMy0gKi9cXG5tbS9tbV9pbml0LmM6MTIzNDpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoaW50IG5pZCxcXG5tbS9tbV9pbml0LmMtMTIzNS1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHpvbmVfdHlwZSxcXG4tLVxcbm1tL21tX2luaXQuYz0xMzI0PXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTMzNi1cXG5tbS9tbV9pbml0LmM6MTMzNzpcXHRcXHRzcGFubmVkID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGksXFxubW0vbW1faW5pdC5jLTEzMzgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBub2RlX3N0YXJ0X3BmbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTY6MDg6MTEuNTA3MDA0ODM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzNTYzMTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFVucmVhY2hhYmlsaXR5IGluIEVhcmx5IEJvb3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgZnVuY3Rpb24uIEkgc2VlIG5vdyB0aGF0IGl0J3MgcGFydCBvZiBgX19pbml0YCwgYW5kIGl0J3MgY2FsbGVkIGJ5IGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzYCwgd2hpY2ggaXMgKmFsc28qIG1hcmtlZCBhcyBgX19pbml0YC4gUmlnaHQsIHRoYXQgbWFrZXMgaXQgcHJldHR5IGNsZWFyLiBTaW5jZSB0aGVzZSBhcmUgYF9faW5pdGAgZnVuY3Rpb25zLCB0aGV5IGFyZSBvbmx5IGV2ZXIgZXhlY3V0ZWQgZHVyaW5nIHRoZSBrZXJuZWwncyBlYXJseSBib290IHNlcXVlbmNlLiBUaGF0J3MgYmVmb3JlIHVzZXJzcGFjZSBpcyBldmVuIHVwIGFuZCBydW5uaW5nLCBsZXQgYWxvbmUgYSBmdXp6ZXIgbGlrZSBzeXprYWxsZXIuXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gd2F5IGZvciBhIGZ1enppbmcgY2FtcGFpZ24gdG8gYWN0dWFsbHkgcmVhY2ggdGhpcyBjb2RlLiBUaGUgbmF0dXJlIG9mIGZ1enppbmcgZGljdGF0ZXMgdGhhdCBpdCBydW5zIGluIHVzZXItc3BhY2UsIHdlbGwgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLiBTbywgSSB3aWxsIGJlIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBoZXJlLiBNeSByZWFzb25pbmcgaXMgc29saWQ6IFRoZSBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYF9faW5pdGAgc2VjdGlvbnMsIHJlbmRlcmluZyB0aGUgY29kZSBpbmFjY2Vzc2libGUgdG8gYW55IGZ1enppbmcgYXR0ZW1wdHMgcnVubmluZyBpbiBhIHN0YW5kYXJkLCBwb3N0LWJvb3QgZW52aXJvbm1lbnQuIE5vIHBvaW50IHNwZW5kaW5nIHRpbWUgb24gc29tZXRoaW5nIHdlIGNhbid0IGluZmx1ZW5jZSB3aXRoIG91ciBmdXp6aW5nIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDUzLCJPdXRwdXRUb2tlbnMiOjEwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNjowODoxNy4xNDI2Mzg0NTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcmlqx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-04 15:43:16 +0000 UTC FinishedAt: 2026-08-04 16:08:19 +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+CgkJCTx0ZD4yMDI2LzA4LzA0IDE2OjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTY6MDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MTk3MmM5ZjI5ZjQwMDJkODY3OTQ2ZjFjZDI2ZmRjMGQzNmI1ZTg3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgNCAxNjowNjo0MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmNcbmluZGV4IDcxMWY4MjFmN2IzYzcuLmQ1NDRlZWQyZjE3M2IgMTAwNjQ0XG4tLS0gYS9tbS9tbV9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuY1xuQEAgLTExNDMsNDIgJiM0MzsxMTQzLDYgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiB9XG4gI2VuZGlmXG4gXG4tLypcbi0gKiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBkbyBub3QgaW5jbHVkZSBaT05FX01PVkFCTEVcbi0gKiBiZWNhdXNlIGl0IGlzIHNpemVkIGluZGVwZW5kZW50IG9mIGFyY2hpdGVjdHVyZS4gVW5saWtlIHRoZSBvdGhlciB6b25lcyxcbi0gKiB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIFpPTkVfTU9WQUJMRSBpcyBub3QgZml4ZWQuIEl0IG1heSBiZSBkaWZmZXJlbnRcbi0gKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlXG4tICogaXMgZGlzdHJpYnV0ZWQuIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGFkanVzdHMgdGhlIHpvbmUgcmFuZ2VzXG4tICogcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBmb3IgYSBnaXZlbiBub2RlIGJ5IHVzaW5nIHRoZSBlbmQgb2YgdGhlXG4tICogaGlnaGVzdCB1c2FibGUgem9uZSBmb3IgWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0XG4tICogem9uZXMgd2l0aGluIGEgbm9kZSBhcmUgaW4gb3JkZXIgb2YgbW9ub3RvbmljIGluY3JlYXNlcyBtZW1vcnkgYWRkcmVzc2VzXG4tICovXG4tc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCxcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lX3R5cGUsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgbm9kZV9lbmRfcGZuLFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICp6b25lX3N0YXJ0X3Bmbixcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqem9uZV9lbmRfcGZuKVxuLXtcbi1cdC8qIE9ubHkgYWRqdXN0IGlmIFpPTkVfTU9WQUJMRSBpcyBvbiB0aGlzIG5vZGUgKi9cbi1cdGlmICh6b25lX21vdmFibGVfcGZuW25pZF0pIHtcbi1cdFx0LyogU2l6ZSBaT05FX01PVkFCTEUgKi9cbi1cdFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUpIHtcbi1cdFx0XHQqem9uZV9zdGFydF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiA9IG1pbihub2RlX2VuZF9wZm4sXG4tXHRcdFx0XHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XG4tXG4tXHRcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXG4tXHRcdH0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiBcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbi1cbi1cdFx0LyogQ2hlY2sgaWYgdGhpcyB3aG9sZSByYW5nZSBpcyB3aXRoaW4gWk9ORV9NT1ZBQkxFICovXG4tXHRcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFx1MDAzZT0gem9uZV9tb3ZhYmxlX3BmbltuaWRdKVxuLVx0XHRcdCp6b25lX3N0YXJ0X3BmbiA9ICp6b25lX2VuZF9wZm47XG4tXHR9XG4tfVxuLVxuIC8qXG4gICogUmV0dXJuIHRoZSBudW1iZXIgb2YgaG9sZXMgaW4gYSByYW5nZSBvbiBhIG5vZGUuIElmIG5pZCBpcyBNQVhfTlVNTk9ERVMsXG4gICogdGhlbiBhbGwgaG9sZXMgaW4gdGhlIHJlcXVlc3RlZCByYW5nZSB3aWxsIGJlIGFjY291bnRlZCBmb3IuXG5AQCAtMTI1Nyw2ICYjNDM7MTIyMSwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxuIC8qXG4gICogUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYSB6b25lIHNwYW5zIGluIGEgbm9kZSwgaW5jbHVkaW5nIGhvbGVzXG4gICogcHJlc2VudF9wYWdlcyA9IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKCkgLSB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKClcbiYjNDM7ICpcbiYjNDM7ICogVGhlIHpvbmUgcmFuZ2VzIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgZG8gbm90IGluY2x1ZGUgWk9ORV9NT1ZBQkxFXG4mIzQzOyAqIGJlY2F1c2UgaXQgaXMgc2l6ZWQgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlLiBVbmxpa2UgdGhlIG90aGVyIHpvbmVzLFxuJiM0MzsgKiB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIFpPTkVfTU9WQUJMRSBpcyBub3QgZml4ZWQuIEl0IG1heSBiZSBkaWZmZXJlbnRcbiYjNDM7ICogaW4gZWFjaCBub2RlIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiBlYWNoIG5vZGUgYW5kIGhvdyBldmVubHkga2VybmVsY29yZVxuJiM0MzsgKiBpcyBkaXN0cmlidXRlZC4gVGhlIHpvbmUgcmFuZ2VzIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgYXJlIGFkanVzdGVkXG4mIzQzOyAqIGZvciBhIGdpdmVuIG5vZGUgYnkgdXNpbmcgdGhlIGVuZCBvZiB0aGUgaGlnaGVzdCB1c2FibGUgem9uZSBmb3JcbiYjNDM7ICogWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IHpvbmVzIHdpdGhpbiBhIG5vZGUgYXJlXG4mIzQzOyAqIGluIG9yZGVyIG9mIG1vbm90b25pYyBpbmNyZWFzZXMgbWVtb3J5IGFkZHJlc3Nlc1xuICAqL1xuIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBsb25nIHpvbmVfdHlwZSxcbkBAIC0xMjY3LDIxICYjNDM7MTI0MCw0MSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoaW50IG5pZCxcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHpvbmVfbG93ID0gYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm5bem9uZV90eXBlXTtcbiBcdHVuc2lnbmVkIGxvbmcgem9uZV9oaWdoID0gYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW3pvbmVfdHlwZV07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBtb3ZhYmxlX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbiBcbiBcdC8qIEdldCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgem9uZSAqL1xuIFx0KnpvbmVfc3RhcnRfcGZuID0gY2xhbXAobm9kZV9zdGFydF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpO1xuIFx0KnpvbmVfZW5kX3BmbiA9IGNsYW1wKG5vZGVfZW5kX3Bmbiwgem9uZV9sb3csIHpvbmVfaGlnaCk7XG4tXHRhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKG5pZCwgem9uZV90eXBlLCBub2RlX2VuZF9wZm4sXG4tXHRcdFx0XHRcdCAgIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xuIFxuLVx0LyogQ2hlY2sgdGhhdCB0aGlzIG5vZGUgaGFzIHBhZ2VzIHdpdGhpbiB0aGUgem9uZSYjMzk7cyByZXF1aXJlZCByYW5nZSAqL1xuLVx0aWYgKCp6b25lX2VuZF9wZm4gXHUwMDNjIG5vZGVfc3RhcnRfcGZuIHx8ICp6b25lX3N0YXJ0X3BmbiBcdTAwM2Ugbm9kZV9lbmRfcGZuKVxuLVx0XHRyZXR1cm4gMDtcbiYjNDM7XHQvKiBOb3RoaW5nIHRvIGFkanVzdCBpZiBaT05FX01PVkFCTEUgaXMgbm90IG9uIHRoaXMgbm9kZSAqL1xuJiM0MztcdGlmICghbW92YWJsZV9wZm4pXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0LyogU2l6ZSBaT05FX01PVkFCTEUgKi9cbiYjNDM7XHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSkge1xuJiM0MztcdFx0KnpvbmVfc3RhcnRfcGZuID0gbW92YWJsZV9wZm47XG4mIzQzO1x0XHQqem9uZV9lbmRfcGZuID0gbWluKG5vZGVfZW5kX3BmbixcbiYjNDM7XHRcdFx0YXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW21vdmFibGVfem9uZV0pO1xuJiM0MztcbiYjNDM7XHRcdC8qIENoZWNrIHRoYXQgdGhpcyBub2RlIGhhcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUmIzM5O3MgcmVxdWlyZWQgcmFuZ2UgKi9cbiYjNDM7XHRcdGlmICgqem9uZV9lbmRfcGZuIFx1MDAzYyBub2RlX3N0YXJ0X3BmbiB8fFxuJiM0MztcdFx0ICAgICp6b25lX3N0YXJ0X3BmbiBcdTAwM2Ugbm9kZV9lbmRfcGZuKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBNb3ZlIHRoZSB6b25lIHN0YXJ0IGluc2lkZSB0aGUgbm9kZSBpZiBuZWNlc3NhcnkgKi9cbiYjNDM7XHRcdCp6b25lX3N0YXJ0X3BmbiA9IG1heCgqem9uZV9zdGFydF9wZm4sIG5vZGVfc3RhcnRfcGZuKTtcbiBcbi1cdC8qIE1vdmUgdGhlIHpvbmUgYm91bmRhcmllcyBpbnNpZGUgdGhlIG5vZGUgaWYgbmVjZXNzYXJ5ICovXG4tXHQqem9uZV9lbmRfcGZuID0gbWluKCp6b25lX2VuZF9wZm4sIG5vZGVfZW5kX3Bmbik7XG4tXHQqem9uZV9zdGFydF9wZm4gPSBtYXgoKnpvbmVfc3RhcnRfcGZuLCBub2RlX3N0YXJ0X3Bmbik7XG4mIzQzO1x0LyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKCFtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNiAqem9uZV9zdGFydF9wZm4gXHUwMDNjIG1vdmFibGVfcGZuIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgKnpvbmVfZW5kX3BmbiBcdTAwM2UgbW92YWJsZV9wZm4pIHtcbiYjNDM7XHRcdCp6b25lX2VuZF9wZm4gPSBtb3ZhYmxlX3BmbjtcbiBcbiYjNDM7XHQvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi9cbiYjNDM7XHR9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiBcdTAwM2U9IG1vdmFibGVfcGZuKSB7XG4mIzQzO1x0XHQqem9uZV9zdGFydF9wZm4gPSAqem9uZV9lbmRfcGZuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiBcdC8qIFJldHVybiB0aGUgc3Bhbm5lZCBwYWdlcyAqL1xuIFx0cmV0dXJuICp6b25lX2VuZF9wZm4gLSAqem9uZV9zdGFydF9wZm47XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE2OjA2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGVgIGFuZCBpbmxpbmVzIGBhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlYC4gQm90aCBmdW5jdGlvbnMgYXJlIG1hcmtlZCB3aXRoIGBfX2luaXRgIGFuZCBhcmUgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkga2VybmVsIGJvb3QuIFNpbmNlIGZ1enppbmcgb2NjdXJzIGFmdGVyIHRoZSBrZXJuZWwgaGFzIGJvb3RlZCwgdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGJ5IHRoZSBmdXp6ZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjE5NzJjOWYyOWY0MDAyZDg2Nzk0NmYxY2QyNmZkYzBkMzZiNWU4NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDQgMTY6MDY6NDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tbV9pbml0LmMgYi9tbS9tbV9pbml0LmMKaW5kZXggNzExZjgyMWY3YjNjNy4uZDU0NGVlZDJmMTczYiAxMDA2NDQKLS0tIGEvbW0vbW1faW5pdC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21tX2luaXQuYwpAQCAtMTE0Myw0MiAmIzQzOzExNDMsNiBAQCB2b2lkIF9fcmVmIG1lbW1hcF9pbml0X3pvbmVfZGV2aWNlKHN0cnVjdCB6b25lICp6b25lLAogfQogI2VuZGlmCiAKLS8qCi0gKiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBkbyBub3QgaW5jbHVkZSBaT05FX01PVkFCTEUKLSAqIGJlY2F1c2UgaXQgaXMgc2l6ZWQgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlLiBVbmxpa2UgdGhlIG90aGVyIHpvbmVzLAotICogdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBaT05FX01PVkFCTEUgaXMgbm90IGZpeGVkLiBJdCBtYXkgYmUgZGlmZmVyZW50Ci0gKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlCi0gKiBpcyBkaXN0cmlidXRlZC4gVGhpcyBoZWxwZXIgZnVuY3Rpb24gYWRqdXN0cyB0aGUgem9uZSByYW5nZXMKLSAqIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgZm9yIGEgZ2l2ZW4gbm9kZSBieSB1c2luZyB0aGUgZW5kIG9mIHRoZQotICogaGlnaGVzdCB1c2FibGUgem9uZSBmb3IgWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0Ci0gKiB6b25lcyB3aXRoaW4gYSBub2RlIGFyZSBpbiBvcmRlciBvZiBtb25vdG9uaWMgaW5jcmVhc2VzIG1lbW9yeSBhZGRyZXNzZXMKLSAqLwotc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCwKLQkJCQkJdW5zaWduZWQgbG9uZyB6b25lX3R5cGUsCi0JCQkJCXVuc2lnbmVkIGxvbmcgbm9kZV9lbmRfcGZuLAotCQkJCQl1bnNpZ25lZCBsb25nICp6b25lX3N0YXJ0X3BmbiwKLQkJCQkJdW5zaWduZWQgbG9uZyAqem9uZV9lbmRfcGZuKQotewotCS8qIE9ubHkgYWRqdXN0IGlmIFpPTkVfTU9WQUJMRSBpcyBvbiB0aGlzIG5vZGUgKi8KLQlpZiAoem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7Ci0JCS8qIFNpemUgWk9ORV9NT1ZBQkxFICovCi0JCWlmICh6b25lX3R5cGUgPT0gWk9ORV9NT1ZBQkxFKSB7Ci0JCQkqem9uZV9zdGFydF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07Ci0JCQkqem9uZV9lbmRfcGZuID0gbWluKG5vZGVfZW5kX3BmbiwKLQkJCQlhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7Ci0KLQkJLyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi8KLQkJfSBlbHNlIGlmICghbWlycm9yZWRfa2VybmVsY29yZSAmYW1wOyZhbXA7Ci0JCQkqem9uZV9zdGFydF9wZm4gJmx0OyB6b25lX21vdmFibGVfcGZuW25pZF0gJmFtcDsmYW1wOwotCQkJKnpvbmVfZW5kX3BmbiAmZ3Q7IHpvbmVfbW92YWJsZV9wZm5bbmlkXSkgewotCQkJKnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTsKLQotCQkvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi8KLQkJfSBlbHNlIGlmICgqem9uZV9zdGFydF9wZm4gJmd0Oz0gem9uZV9tb3ZhYmxlX3BmbltuaWRdKQotCQkJKnpvbmVfc3RhcnRfcGZuID0gKnpvbmVfZW5kX3BmbjsKLQl9Ci19Ci0KIC8qCiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBob2xlcyBpbiBhIHJhbmdlIG9uIGEgbm9kZS4gSWYgbmlkIGlzIE1BWF9OVU1OT0RFUywKICAqIHRoZW4gYWxsIGhvbGVzIGluIHRoZSByZXF1ZXN0ZWQgcmFuZ2Ugd2lsbCBiZSBhY2NvdW50ZWQgZm9yLgpAQCAtMTI1Nyw2ICYjNDM7MTIyMSwxNSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLAogLyoKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGEgem9uZSBzcGFucyBpbiBhIG5vZGUsIGluY2x1ZGluZyBob2xlcwogICogcHJlc2VudF9wYWdlcyA9IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKCkgLSB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKCkKJiM0MzsgKgomIzQzOyAqIFRoZSB6b25lIHJhbmdlcyBwcm92aWRlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGRvIG5vdCBpbmNsdWRlIFpPTkVfTU9WQUJMRQomIzQzOyAqIGJlY2F1c2UgaXQgaXMgc2l6ZWQgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlLiBVbmxpa2UgdGhlIG90aGVyIHpvbmVzLAomIzQzOyAqIHRoZSBzdGFydGluZyBwb2ludCBmb3IgWk9ORV9NT1ZBQkxFIGlzIG5vdCBmaXhlZC4gSXQgbWF5IGJlIGRpZmZlcmVudAomIzQzOyAqIGluIGVhY2ggbm9kZSBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgZWFjaCBub2RlIGFuZCBob3cgZXZlbmx5IGtlcm5lbGNvcmUKJiM0MzsgKiBpcyBkaXN0cmlidXRlZC4gVGhlIHpvbmUgcmFuZ2VzIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgYXJlIGFkanVzdGVkCiYjNDM7ICogZm9yIGEgZ2l2ZW4gbm9kZSBieSB1c2luZyB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IHVzYWJsZSB6b25lIGZvcgomIzQzOyAqIFpPTkVfTU9WQUJMRS4gVGhpcyBwcmVzZXJ2ZXMgdGhlIGFzc3VtcHRpb24gdGhhdCB6b25lcyB3aXRoaW4gYSBub2RlIGFyZQomIzQzOyAqIGluIG9yZGVyIG9mIG1vbm90b25pYyBpbmNyZWFzZXMgbWVtb3J5IGFkZHJlc3NlcwogICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoaW50IG5pZCwKIAkJCQkJdW5zaWduZWQgbG9uZyB6b25lX3R5cGUsCkBAIC0xMjY3LDIxICYjNDM7MTI0MCw0MSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoaW50IG5pZCwKIHsKIAl1bnNpZ25lZCBsb25nIHpvbmVfbG93ID0gYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm5bem9uZV90eXBlXTsKIAl1bnNpZ25lZCBsb25nIHpvbmVfaGlnaCA9IGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblt6b25lX3R5cGVdOwomIzQzOwl1bnNpZ25lZCBsb25nIG1vdmFibGVfcGZuID0gem9uZV9tb3ZhYmxlX3BmbltuaWRdOwogCiAJLyogR2V0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB6b25lICovCiAJKnpvbmVfc3RhcnRfcGZuID0gY2xhbXAobm9kZV9zdGFydF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpOwogCSp6b25lX2VuZF9wZm4gPSBjbGFtcChub2RlX2VuZF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpOwotCWFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUobmlkLCB6b25lX3R5cGUsIG5vZGVfZW5kX3BmbiwKLQkJCQkJICAgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7CiAKLQkvKiBDaGVjayB0aGF0IHRoaXMgbm9kZSBoYXMgcGFnZXMgd2l0aGluIHRoZSB6b25lJiMzOTtzIHJlcXVpcmVkIHJhbmdlICovCi0JaWYgKCp6b25lX2VuZF9wZm4gJmx0OyBub2RlX3N0YXJ0X3BmbiB8fCAqem9uZV9zdGFydF9wZm4gJmd0OyBub2RlX2VuZF9wZm4pCi0JCXJldHVybiAwOwomIzQzOwkvKiBOb3RoaW5nIHRvIGFkanVzdCBpZiBaT05FX01PVkFCTEUgaXMgbm90IG9uIHRoaXMgbm9kZSAqLwomIzQzOwlpZiAoIW1vdmFibGVfcGZuKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CS8qIFNpemUgWk9ORV9NT1ZBQkxFICovCiYjNDM7CWlmICh6b25lX3R5cGUgPT0gWk9ORV9NT1ZBQkxFKSB7CiYjNDM7CQkqem9uZV9zdGFydF9wZm4gPSBtb3ZhYmxlX3BmbjsKJiM0MzsJCSp6b25lX2VuZF9wZm4gPSBtaW4obm9kZV9lbmRfcGZuLAomIzQzOwkJCWFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblttb3ZhYmxlX3pvbmVdKTsKJiM0MzsKJiM0MzsJCS8qIENoZWNrIHRoYXQgdGhpcyBub2RlIGhhcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUmIzM5O3MgcmVxdWlyZWQgcmFuZ2UgKi8KJiM0MzsJCWlmICgqem9uZV9lbmRfcGZuICZsdDsgbm9kZV9zdGFydF9wZm4gfHwKJiM0MzsJCSAgICAqem9uZV9zdGFydF9wZm4gJmd0OyBub2RlX2VuZF9wZm4pCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CQkvKiBNb3ZlIHRoZSB6b25lIHN0YXJ0IGluc2lkZSB0aGUgbm9kZSBpZiBuZWNlc3NhcnkgKi8KJiM0MzsJCSp6b25lX3N0YXJ0X3BmbiA9IG1heCgqem9uZV9zdGFydF9wZm4sIG5vZGVfc3RhcnRfcGZuKTsKIAotCS8qIE1vdmUgdGhlIHpvbmUgYm91bmRhcmllcyBpbnNpZGUgdGhlIG5vZGUgaWYgbmVjZXNzYXJ5ICovCi0JKnpvbmVfZW5kX3BmbiA9IG1pbigqem9uZV9lbmRfcGZuLCBub2RlX2VuZF9wZm4pOwotCSp6b25lX3N0YXJ0X3BmbiA9IG1heCgqem9uZV9zdGFydF9wZm4sIG5vZGVfc3RhcnRfcGZuKTsKJiM0MzsJLyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi8KJiM0MzsJfSBlbHNlIGlmICghbWlycm9yZWRfa2VybmVsY29yZSAmYW1wOyZhbXA7ICp6b25lX3N0YXJ0X3BmbiAmbHQ7IG1vdmFibGVfcGZuICZhbXA7JmFtcDsKJiM0MzsJCSAgICp6b25lX2VuZF9wZm4gJmd0OyBtb3ZhYmxlX3BmbikgewomIzQzOwkJKnpvbmVfZW5kX3BmbiA9IG1vdmFibGVfcGZuOwogCiYjNDM7CS8qIENoZWNrIGlmIHRoaXMgd2hvbGUgcmFuZ2UgaXMgd2l0aGluIFpPTkVfTU9WQUJMRSAqLwomIzQzOwl9IGVsc2UgaWYgKCp6b25lX3N0YXJ0X3BmbiAmZ3Q7PSBtb3ZhYmxlX3BmbikgewomIzQzOwkJKnpvbmVfc3RhcnRfcGZuID0gKnpvbmVfZW5kX3BmbjsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKIAkvKiBSZXR1cm4gdGhlIHNwYW5uZWQgcGFnZXMgKi8KIAlyZXR1cm4gKnpvbmVfZW5kX3BmbiAtICp6b25lX3N0YXJ0X3BmbjsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDQgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUwNQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDc5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgYG1tL21tX2luaXQuY2AgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbiBgbW0vbW1faW5pdC5jYCBpcyBnZXR0aW5nIHJpZCBvZiBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGlubGluaW5nIGl0cyBsb2dpYyBpbnRvIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggaW5pdGlhbGx5LCBidXQgdGhlcmUmIzM5O3MgYSBzbGlnaHQgbW9kaWZpY2F0aW9uIHRvIHRoZSBsb2dpYy4gSSBzZWUgdGhleSYjMzk7dmUgdGFrZW4gdGhlc2UgbGluZXM6CgpgYGBjCi0JLyogQ2hlY2sgdGhhdCB0aGlzIG5vZGUgaGFzIHBhZ2VzIHdpdGhpbiB0aGUgem9uZSYjMzk7cyByZXF1aXJlZCByYW5nZSAqLwotCWlmICgqem9uZV9lbmRfcGZuICZsdDsgbm9kZV9zdGFydF9wZm4gfHwgKnpvbmVfc3RhcnRfcGZuICZndDsgbm9kZV9lbmRfcGZuKQotCQlyZXR1cm4gMDsKCi0JLyogTW92ZSB0aGUgem9uZSBib3VuZGFyaWVzIGluc2lkZSB0aGUgbm9kZSBpZiBuZWNlc3NhcnkgKi8KLQkqem9uZV9lbmRfcGZuID0gbWluKCp6b25lX2VuZF9wZm4sIG5vZGVfZW5kX3Bmbik7Ci0JKnpvbmVfc3RhcnRfcGZuID0gbWF4KCp6b25lX3N0YXJ0X3Bmbiwgbm9kZV9zdGFydF9wZm4pOwpgYGAKCi4uLmFuZCBtb3ZlZCB0aGVtLCB3aXRoIHNsaWdodCBjaGFuZ2VzLCBpbnRvIHRoZSBgaWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUpYCBibG9jay4gSG9sZCBvbiBhIHNlY29uZCwgdGhvdWdoLiBBcmVuJiMzOTt0IGAqem9uZV9zdGFydF9wZm5gIGFuZCBgKnpvbmVfZW5kX3BmbmAgYWxyZWFkeSBjbGFtcGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlYD8KCmBgYGMKCS8qIEdldCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgem9uZSAqLwoJKnpvbmVfc3RhcnRfcGZuID0gY2xhbXAobm9kZV9zdGFydF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpOwoJKnpvbmVfZW5kX3BmbiA9IGNsYW1wKG5vZGVfZW5kX3Bmbiwgem9uZV9sb3csIHpvbmVfaGlnaCk7CmBgYAoKUmlnaHQsIHRoZXkgYXJlISBTbywgYCp6b25lX2VuZF9wZm5gIGlzIGFscmVhZHkgZ3VhcmFudGVlZCB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYG5vZGVfZW5kX3BmbmAsIGFuZCBgKnpvbmVfc3RhcnRfcGZuYCBpcyBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBub2RlX3N0YXJ0X3BmbmAuIFRoYXQgbWVhbnMgdGhlIHJlbW92ZWQgY2hlY2tzIGFyZSBtb3N0bHkgcmVkdW5kYW50LCBleGNlcHQgZm9yIHRoZSBgWk9ORV9NT1ZBQkxFYCBjYXNlLCB3aGVyZSB0aGVyZSYjMzk7cyBhIHJlYXNzaWdubWVudC4KCk5vdywgdGhpcyBpcyBhbiBpbml0aWFsaXphdGlvbiBjb2RlIGNoYW5nZTsgdGhpcyBpcyBkZWNsYXJlZCB1c2luZyBgX19pbml0YC4gYHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlYCBpcyBhbiBgX19pbml0YCBmdW5jdGlvbi4gVXN1YWxseSwgZnV6emluZyBgX19pbml0YCBmdW5jdGlvbnMgaXNuJiMzOTt0IHZlcnkgcHJvZHVjdGl2ZSBiZWNhdXNlIHRoZXkgYXJlIG9ubHkgZXhlY3V0ZWQgb25jZSBkdXJpbmcgYm9vdC4gQnV0IHdhaXQsIGlzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgb25seSBjYWxsZWQgZHVyaW5nIGJvb3Q/IE1heWJlIG1lbW9yeSBob3RwbHVnIGNhbGxzIGl0PyBNZW1vcnkgaG90cGx1ZyBtaWdodCBjYWxsIGBfX21lbWluaXRgIGZ1bmN0aW9ucywgYnV0IGBfX2luaXRgIGZ1bmN0aW9ucyBhcmUgZGlzY2FyZGVkIGFmdGVyIGJvb3QuIExldCYjMzk7cyBtYWtlIHN1cmUgYnkgY2hlY2tpbmcgdGhlIGRlZmluaXRpb246IGl0JiMzOTtzIGBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoLi4uKWAuIEFoLCB5ZXMsIGl0ICppcyogYF9faW5pdGAuIFRoYXQgbWVhbnMgaXQmIzM5O3MgZGlzY2FyZGVkIGFmdGVyIGJvb3QuIEZ1enppbmcgY2FuJiMzOTt0IHJlYWNoIGBfX2luaXRgIGZ1bmN0aW9ucyBhZnRlciB0aGUgc3lzdGVtIGhhcyBib290ZWQuIExldCYjMzk7cyBtYWtlIGFic29sdXRlbHkgc3VyZS4gWWVzLCB0aGUgcGF0Y2ggc2hvd3MgYHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZSguLi4pYC4gVGhhdCBzZWFscyBpdDsgYF9faW5pdGAuCgpTbywgaXQmIzM5O3Mgb25seSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdC4gTWVtb3J5IGhvdHBsdWcgdXNlcyBgX19tZW1pbml0YC4gU2luY2UgdGhpcyBpcyBgX19pbml0YCwgaXQgb25seSBydW5zIGF0IGJvb3QgdGltZS4gU3l6a2FsbGVyIGZ1enplcyB0aGUga2VybmVsICphZnRlciogaXQgaGFzIGJvb3RlZCwgc28gdGhpcyBjb2RlIGlzIHVucmVhY2hhYmxlIGR1cmluZyBmdXp6aW5nLgoKVG8gYmUgZXh0cmEgY2FyZWZ1bCwgbGV0IG1lIGNoZWNrIGlmIHRoZXJlIGlzIGFueSB3YXkgdG8gdHJpZ2dlciB0aGlzIGFmdGVyIGJvb3QuIEkmIzM5O2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGVgLgoKVGhlcmVmb3JlLCBJIHNob3VsZCByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgYmVjYXVzZSBpdCYjMzk7cyBhbiBgX19pbml0YCBmdW5jdGlvbiBhbmQgbm90IHJlYWNoYWJsZSBhZnRlciBib290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE2OjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21tX2luaXQuYz0xMTgwPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXG4tLVxubW0vbW1faW5pdC5jLTEyMjItICogUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYSB6b25lIHNwYW5zIGluIGEgbm9kZSwgaW5jbHVkaW5nIGhvbGVzXG5tbS9tbV9pbml0LmM6MTIyMzogKiBwcmVzZW50X3BhZ2VzID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoKSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoKVxubW0vbW1faW5pdC5jLTEyMjQtICpcbi0tXG5tbS9tbV9pbml0LmMtMTIzMy0gKi9cbm1tL21tX2luaXQuYzoxMjM0OnN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLFxubW0vbW1faW5pdC5jLTEyMzUtXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV90eXBlLFxuLS1cbm1tL21tX2luaXQuYz0xMzI0PXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vbW1faW5pdC5jLTEzMzYtXG5tbS9tbV9pbml0LmM6MTMzNzpcdFx0c3Bhbm5lZCA9IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGksXG5tbS9tbV9pbml0LmMtMTMzOC1cdFx0XHRcdFx0XHQgICAgIG5vZGVfc3RhcnRfcGZuLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA0IDE2OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NTMKCQkJCQkJCW91dHB1dDogMTAxCgkJCQkJCQl0aG91Z2h0czogMTM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVW5yZWFjaGFiaWxpdHkgaW4gRWFybHkgQm9vdCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGVgIGZ1bmN0aW9uLiBJIHNlZSBub3cgdGhhdCBpdCYjMzk7cyBwYXJ0IG9mIGBfX2luaXRgLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzYCwgd2hpY2ggaXMgKmFsc28qIG1hcmtlZCBhcyBgX19pbml0YC4gUmlnaHQsIHRoYXQgbWFrZXMgaXQgcHJldHR5IGNsZWFyLiBTaW5jZSB0aGVzZSBhcmUgYF9faW5pdGAgZnVuY3Rpb25zLCB0aGV5IGFyZSBvbmx5IGV2ZXIgZXhlY3V0ZWQgZHVyaW5nIHRoZSBrZXJuZWwmIzM5O3MgZWFybHkgYm9vdCBzZXF1ZW5jZS4gVGhhdCYjMzk7cyBiZWZvcmUgdXNlcnNwYWNlIGlzIGV2ZW4gdXAgYW5kIHJ1bm5pbmcsIGxldCBhbG9uZSBhIGZ1enplciBsaWtlIHN5emthbGxlci4KClRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gd2F5IGZvciBhIGZ1enppbmcgY2FtcGFpZ24gdG8gYWN0dWFsbHkgcmVhY2ggdGhpcyBjb2RlLiBUaGUgbmF0dXJlIG9mIGZ1enppbmcgZGljdGF0ZXMgdGhhdCBpdCBydW5zIGluIHVzZXItc3BhY2UsIHdlbGwgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLiBTbywgSSB3aWxsIGJlIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBoZXJlLiBNeSByZWFzb25pbmcgaXMgc29saWQ6IFRoZSBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYF9faW5pdGAgc2VjdGlvbnMsIHJlbmRlcmluZyB0aGUgY29kZSBpbmFjY2Vzc2libGUgdG8gYW55IGZ1enppbmcgYXR0ZW1wdHMgcnVubmluZyBpbiBhIHN0YW5kYXJkLCBwb3N0LWJvb3QgZW52aXJvbm1lbnQuIE5vIHBvaW50IHNwZW5kaW5nIHRpbWUgb24gc29tZXRoaW5nIHdlIGNhbiYjMzk7dCBpbmZsdWVuY2Ugd2l0aCBvdXIgZnV6emluZyB0b29scy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNCAxNjowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNjowNjo0Mi4yMjczNzU2MTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDkxNTI5MjgyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlYCBhbmQgaW5saW5lcyBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAuIEJvdGggZnVuY3Rpb25zIGFyZSBtYXJrZWQgd2l0aCBgX19pbml0YCBhbmQgYXJlIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIGVhcmx5IGtlcm5lbCBib290LiBTaW5jZSBmdXp6aW5nIG9jY3VycyBhZnRlciB0aGUga2VybmVsIGhhcyBib290ZWQsIHRoaXMgY29kZSBpcyB1bnJlYWNoYWJsZSBieSB0aGUgZnV6emVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTY6MDY6NDIuMjI3MzgwODQ0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgxNTE2NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2MTk3MmM5ZjI5ZjQwMDJkODY3OTQ2ZjFjZDI2ZmRjMGQzNmI1ZTg3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDQgMTY6MDY6NDEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXFxuaW5kZXggNzExZjgyMWY3YjNjNy4uZDU0NGVlZDJmMTczYiAxMDA2NDRcXG4tLS0gYS9tbS9tbV9pbml0LmNcXG4rKysgYi9tbS9tbV9pbml0LmNcXG5AQCAtMTE0Myw0MiArMTE0Myw2IEBAIHZvaWQgX19yZWYgbWVtbWFwX2luaXRfem9uZV9kZXZpY2Uoc3RydWN0IHpvbmUgKnpvbmUsXFxuIH1cXG4gI2VuZGlmXFxuIFxcbi0vKlxcbi0gKiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBkbyBub3QgaW5jbHVkZSBaT05FX01PVkFCTEVcXG4tICogYmVjYXVzZSBpdCBpcyBzaXplZCBpbmRlcGVuZGVudCBvZiBhcmNoaXRlY3R1cmUuIFVubGlrZSB0aGUgb3RoZXIgem9uZXMsXFxuLSAqIHRoZSBzdGFydGluZyBwb2ludCBmb3IgWk9ORV9NT1ZBQkxFIGlzIG5vdCBmaXhlZC4gSXQgbWF5IGJlIGRpZmZlcmVudFxcbi0gKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlXFxuLSAqIGlzIGRpc3RyaWJ1dGVkLiBUaGlzIGhlbHBlciBmdW5jdGlvbiBhZGp1c3RzIHRoZSB6b25lIHJhbmdlc1xcbi0gKiBwcm92aWRlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGZvciBhIGdpdmVuIG5vZGUgYnkgdXNpbmcgdGhlIGVuZCBvZiB0aGVcXG4tICogaGlnaGVzdCB1c2FibGUgem9uZSBmb3IgWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0XFxuLSAqIHpvbmVzIHdpdGhpbiBhIG5vZGUgYXJlIGluIG9yZGVyIG9mIG1vbm90b25pYyBpbmNyZWFzZXMgbWVtb3J5IGFkZHJlc3Nlc1xcbi0gKi9cXG4tc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCxcXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX3R5cGUsXFxuLVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbm9kZV9lbmRfcGZuLFxcbi1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nICp6b25lX3N0YXJ0X3BmbixcXG4tXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyAqem9uZV9lbmRfcGZuKVxcbi17XFxuLVxcdC8qIE9ubHkgYWRqdXN0IGlmIFpPTkVfTU9WQUJMRSBpcyBvbiB0aGlzIG5vZGUgKi9cXG4tXFx0aWYgKHpvbmVfbW92YWJsZV9wZm5bbmlkXSkge1xcbi1cXHRcXHQvKiBTaXplIFpPTkVfTU9WQUJMRSAqL1xcbi1cXHRcXHRpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSkge1xcbi1cXHRcXHRcXHQqem9uZV9zdGFydF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XFxuLVxcdFxcdFxcdCp6b25lX2VuZF9wZm4gPSBtaW4obm9kZV9lbmRfcGZuLFxcbi1cXHRcXHRcXHRcXHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XFxuLVxcbi1cXHRcXHQvKiBBZGp1c3QgZm9yIFpPTkVfTU9WQUJMRSBzdGFydGluZyB3aXRoaW4gdGhpcyByYW5nZSAqL1xcbi1cXHRcXHR9IGVsc2UgaWYgKCFtaXJyb3JlZF9rZXJuZWxjb3JlIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCp6b25lX3N0YXJ0X3BmbiBcXHUwMDNjIHpvbmVfbW92YWJsZV9wZm5bbmlkXSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHRcXHQqem9uZV9lbmRfcGZuIFxcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XFxuLVxcdFxcdFxcdCp6b25lX2VuZF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XFxuLVxcbi1cXHRcXHQvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi9cXG4tXFx0XFx0fSBlbHNlIGlmICgqem9uZV9zdGFydF9wZm4gXFx1MDAzZT0gem9uZV9tb3ZhYmxlX3BmbltuaWRdKVxcbi1cXHRcXHRcXHQqem9uZV9zdGFydF9wZm4gPSAqem9uZV9lbmRfcGZuO1xcbi1cXHR9XFxuLX1cXG4tXFxuIC8qXFxuICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGhvbGVzIGluIGEgcmFuZ2Ugb24gYSBub2RlLiBJZiBuaWQgaXMgTUFYX05VTU5PREVTLFxcbiAgKiB0aGVuIGFsbCBob2xlcyBpbiB0aGUgcmVxdWVzdGVkIHJhbmdlIHdpbGwgYmUgYWNjb3VudGVkIGZvci5cXG5AQCAtMTI1Nyw2ICsxMjIxLDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXFxuIC8qXFxuICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGEgem9uZSBzcGFucyBpbiBhIG5vZGUsIGluY2x1ZGluZyBob2xlc1xcbiAgKiBwcmVzZW50X3BhZ2VzID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoKSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoKVxcbisgKlxcbisgKiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBkbyBub3QgaW5jbHVkZSBaT05FX01PVkFCTEVcXG4rICogYmVjYXVzZSBpdCBpcyBzaXplZCBpbmRlcGVuZGVudCBvZiBhcmNoaXRlY3R1cmUuIFVubGlrZSB0aGUgb3RoZXIgem9uZXMsXFxuKyAqIHRoZSBzdGFydGluZyBwb2ludCBmb3IgWk9ORV9NT1ZBQkxFIGlzIG5vdCBmaXhlZC4gSXQgbWF5IGJlIGRpZmZlcmVudFxcbisgKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlXFxuKyAqIGlzIGRpc3RyaWJ1dGVkLiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBhcmUgYWRqdXN0ZWRcXG4rICogZm9yIGEgZ2l2ZW4gbm9kZSBieSB1c2luZyB0aGUgZW5kIG9mIHRoZSBoaWdoZXN0IHVzYWJsZSB6b25lIGZvclxcbisgKiBaT05FX01PVkFCTEUuIFRoaXMgcHJlc2VydmVzIHRoZSBhc3N1bXB0aW9uIHRoYXQgem9uZXMgd2l0aGluIGEgbm9kZSBhcmVcXG4rICogaW4gb3JkZXIgb2YgbW9ub3RvbmljIGluY3JlYXNlcyBtZW1vcnkgYWRkcmVzc2VzXFxuICAqL1xcbiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoaW50IG5pZCxcXG4gXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyB6b25lX3R5cGUsXFxuQEAgLTEyNjcsMjEgKzEyNDAsNDEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKGludCBuaWQsXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyB6b25lX2xvdyA9IGFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW3pvbmVfdHlwZV07XFxuIFxcdHVuc2lnbmVkIGxvbmcgem9uZV9oaWdoID0gYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW3pvbmVfdHlwZV07XFxuK1xcdHVuc2lnbmVkIGxvbmcgbW92YWJsZV9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XFxuIFxcbiBcXHQvKiBHZXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHpvbmUgKi9cXG4gXFx0KnpvbmVfc3RhcnRfcGZuID0gY2xhbXAobm9kZV9zdGFydF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpO1xcbiBcXHQqem9uZV9lbmRfcGZuID0gY2xhbXAobm9kZV9lbmRfcGZuLCB6b25lX2xvdywgem9uZV9oaWdoKTtcXG4tXFx0YWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZShuaWQsIHpvbmVfdHlwZSwgbm9kZV9lbmRfcGZuLFxcbi1cXHRcXHRcXHRcXHRcXHQgICB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuKTtcXG4gXFxuLVxcdC8qIENoZWNrIHRoYXQgdGhpcyBub2RlIGhhcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUncyByZXF1aXJlZCByYW5nZSAqL1xcbi1cXHRpZiAoKnpvbmVfZW5kX3BmbiBcXHUwMDNjIG5vZGVfc3RhcnRfcGZuIHx8ICp6b25lX3N0YXJ0X3BmbiBcXHUwMDNlIG5vZGVfZW5kX3BmbilcXG4tXFx0XFx0cmV0dXJuIDA7XFxuK1xcdC8qIE5vdGhpbmcgdG8gYWRqdXN0IGlmIFpPTkVfTU9WQUJMRSBpcyBub3Qgb24gdGhpcyBub2RlICovXFxuK1xcdGlmICghbW92YWJsZV9wZm4pXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogU2l6ZSBaT05FX01PVkFCTEUgKi9cXG4rXFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUpIHtcXG4rXFx0XFx0KnpvbmVfc3RhcnRfcGZuID0gbW92YWJsZV9wZm47XFxuK1xcdFxcdCp6b25lX2VuZF9wZm4gPSBtaW4obm9kZV9lbmRfcGZuLFxcbitcXHRcXHRcXHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XFxuK1xcbitcXHRcXHQvKiBDaGVjayB0aGF0IHRoaXMgbm9kZSBoYXMgcGFnZXMgd2l0aGluIHRoZSB6b25lJ3MgcmVxdWlyZWQgcmFuZ2UgKi9cXG4rXFx0XFx0aWYgKCp6b25lX2VuZF9wZm4gXFx1MDAzYyBub2RlX3N0YXJ0X3BmbiB8fFxcbitcXHRcXHQgICAgKnpvbmVfc3RhcnRfcGZuIFxcdTAwM2Ugbm9kZV9lbmRfcGZuKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdC8qIE1vdmUgdGhlIHpvbmUgc3RhcnQgaW5zaWRlIHRoZSBub2RlIGlmIG5lY2Vzc2FyeSAqL1xcbitcXHRcXHQqem9uZV9zdGFydF9wZm4gPSBtYXgoKnpvbmVfc3RhcnRfcGZuLCBub2RlX3N0YXJ0X3Bmbik7XFxuIFxcbi1cXHQvKiBNb3ZlIHRoZSB6b25lIGJvdW5kYXJpZXMgaW5zaWRlIHRoZSBub2RlIGlmIG5lY2Vzc2FyeSAqL1xcbi1cXHQqem9uZV9lbmRfcGZuID0gbWluKCp6b25lX2VuZF9wZm4sIG5vZGVfZW5kX3Bmbik7XFxuLVxcdCp6b25lX3N0YXJ0X3BmbiA9IG1heCgqem9uZV9zdGFydF9wZm4sIG5vZGVfc3RhcnRfcGZuKTtcXG4rXFx0LyogQWRqdXN0IGZvciBaT05FX01PVkFCTEUgc3RhcnRpbmcgd2l0aGluIHRoaXMgcmFuZ2UgKi9cXG4rXFx0fSBlbHNlIGlmICghbWlycm9yZWRfa2VybmVsY29yZSBcXHUwMDI2XFx1MDAyNiAqem9uZV9zdGFydF9wZm4gXFx1MDAzYyBtb3ZhYmxlX3BmbiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAqem9uZV9lbmRfcGZuIFxcdTAwM2UgbW92YWJsZV9wZm4pIHtcXG4rXFx0XFx0KnpvbmVfZW5kX3BmbiA9IG1vdmFibGVfcGZuO1xcbiBcXG4rXFx0LyogQ2hlY2sgaWYgdGhpcyB3aG9sZSByYW5nZSBpcyB3aXRoaW4gWk9ORV9NT1ZBQkxFICovXFxuK1xcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFxcdTAwM2U9IG1vdmFibGVfcGZuKSB7XFxuK1xcdFxcdCp6b25lX3N0YXJ0X3BmbiA9ICp6b25lX2VuZF9wZm47XFxuK1xcdH1cXG4rXFxuK291dDpcXG4gXFx0LyogUmV0dXJuIHRoZSBzcGFubmVkIHBhZ2VzICovXFxuIFxcdHJldHVybiAqem9uZV9lbmRfcGZuIC0gKnpvbmVfc3RhcnRfcGZuO1xcbiB9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE2OjA2OjQyLjY1NjI1ODMyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTQ0ODY0MDI1NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYxOTcyYzlmMjlmNDAwMmQ4Njc5NDZmMWNkMjZmZGMwZDM2YjVlODdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyA0IDE2OjA2OjQxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbW1faW5pdC5jIGIvbW0vbW1faW5pdC5jXG5pbmRleCA3MTFmODIxZjdiM2M3Li5kNTQ0ZWVkMmYxNzNiIDEwMDY0NFxuLS0tIGEvbW0vbW1faW5pdC5jXG4rKysgYi9tbS9tbV9pbml0LmNcbkBAIC0xMTQzLDQyICsxMTQzLDYgQEAgdm9pZCBfX3JlZiBtZW1tYXBfaW5pdF96b25lX2RldmljZShzdHJ1Y3Qgem9uZSAqem9uZSxcbiB9XG4gI2VuZGlmXG4gXG4tLypcbi0gKiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBkbyBub3QgaW5jbHVkZSBaT05FX01PVkFCTEVcbi0gKiBiZWNhdXNlIGl0IGlzIHNpemVkIGluZGVwZW5kZW50IG9mIGFyY2hpdGVjdHVyZS4gVW5saWtlIHRoZSBvdGhlciB6b25lcyxcbi0gKiB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIFpPTkVfTU9WQUJMRSBpcyBub3QgZml4ZWQuIEl0IG1heSBiZSBkaWZmZXJlbnRcbi0gKiBpbiBlYWNoIG5vZGUgZGVwZW5kaW5nIG9uIHRoZSBzaXplIG9mIGVhY2ggbm9kZSBhbmQgaG93IGV2ZW5seSBrZXJuZWxjb3JlXG4tICogaXMgZGlzdHJpYnV0ZWQuIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGFkanVzdHMgdGhlIHpvbmUgcmFuZ2VzXG4tICogcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBmb3IgYSBnaXZlbiBub2RlIGJ5IHVzaW5nIHRoZSBlbmQgb2YgdGhlXG4tICogaGlnaGVzdCB1c2FibGUgem9uZSBmb3IgWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0XG4tICogem9uZXMgd2l0aGluIGEgbm9kZSBhcmUgaW4gb3JkZXIgb2YgbW9ub3RvbmljIGluY3JlYXNlcyBtZW1vcnkgYWRkcmVzc2VzXG4tICovXG4tc3RhdGljIHZvaWQgX19pbml0IGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGUoaW50IG5pZCxcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyB6b25lX3R5cGUsXG4tXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgbm9kZV9lbmRfcGZuLFxuLVx0XHRcdFx0XHR1bnNpZ25lZCBsb25nICp6b25lX3N0YXJ0X3Bmbixcbi1cdFx0XHRcdFx0dW5zaWduZWQgbG9uZyAqem9uZV9lbmRfcGZuKVxuLXtcbi1cdC8qIE9ubHkgYWRqdXN0IGlmIFpPTkVfTU9WQUJMRSBpcyBvbiB0aGlzIG5vZGUgKi9cbi1cdGlmICh6b25lX21vdmFibGVfcGZuW25pZF0pIHtcbi1cdFx0LyogU2l6ZSBaT05FX01PVkFCTEUgKi9cbi1cdFx0aWYgKHpvbmVfdHlwZSA9PSBaT05FX01PVkFCTEUpIHtcbi1cdFx0XHQqem9uZV9zdGFydF9wZm4gPSB6b25lX21vdmFibGVfcGZuW25pZF07XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiA9IG1pbihub2RlX2VuZF9wZm4sXG4tXHRcdFx0XHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XG4tXG4tXHRcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXG4tXHRcdH0gZWxzZSBpZiAoIW1pcnJvcmVkX2tlcm5lbGNvcmUgXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfc3RhcnRfcGZuIFx1MDAzYyB6b25lX21vdmFibGVfcGZuW25pZF0gXHUwMDI2XHUwMDI2XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiBcdTAwM2Ugem9uZV9tb3ZhYmxlX3BmbltuaWRdKSB7XG4tXHRcdFx0KnpvbmVfZW5kX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbi1cbi1cdFx0LyogQ2hlY2sgaWYgdGhpcyB3aG9sZSByYW5nZSBpcyB3aXRoaW4gWk9ORV9NT1ZBQkxFICovXG4tXHRcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFx1MDAzZT0gem9uZV9tb3ZhYmxlX3BmbltuaWRdKVxuLVx0XHRcdCp6b25lX3N0YXJ0X3BmbiA9ICp6b25lX2VuZF9wZm47XG4tXHR9XG4tfVxuLVxuIC8qXG4gICogUmV0dXJuIHRoZSBudW1iZXIgb2YgaG9sZXMgaW4gYSByYW5nZSBvbiBhIG5vZGUuIElmIG5pZCBpcyBNQVhfTlVNTk9ERVMsXG4gICogdGhlbiBhbGwgaG9sZXMgaW4gdGhlIHJlcXVlc3RlZCByYW5nZSB3aWxsIGJlIGFjY291bnRlZCBmb3IuXG5AQCAtMTI1Nyw2ICsxMjIxLDE1IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXG4gLypcbiAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBhIHpvbmUgc3BhbnMgaW4gYSBub2RlLCBpbmNsdWRpbmcgaG9sZXNcbiAgKiBwcmVzZW50X3BhZ2VzID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoKSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoKVxuKyAqXG4rICogVGhlIHpvbmUgcmFuZ2VzIHByb3ZpZGVkIGJ5IHRoZSBhcmNoaXRlY3R1cmUgZG8gbm90IGluY2x1ZGUgWk9ORV9NT1ZBQkxFXG4rICogYmVjYXVzZSBpdCBpcyBzaXplZCBpbmRlcGVuZGVudCBvZiBhcmNoaXRlY3R1cmUuIFVubGlrZSB0aGUgb3RoZXIgem9uZXMsXG4rICogdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBaT05FX01PVkFCTEUgaXMgbm90IGZpeGVkLiBJdCBtYXkgYmUgZGlmZmVyZW50XG4rICogaW4gZWFjaCBub2RlIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiBlYWNoIG5vZGUgYW5kIGhvdyBldmVubHkga2VybmVsY29yZVxuKyAqIGlzIGRpc3RyaWJ1dGVkLiBUaGUgem9uZSByYW5nZXMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBhcmUgYWRqdXN0ZWRcbisgKiBmb3IgYSBnaXZlbiBub2RlIGJ5IHVzaW5nIHRoZSBlbmQgb2YgdGhlIGhpZ2hlc3QgdXNhYmxlIHpvbmUgZm9yXG4rICogWk9ORV9NT1ZBQkxFLiBUaGlzIHByZXNlcnZlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IHpvbmVzIHdpdGhpbiBhIG5vZGUgYXJlXG4rICogaW4gb3JkZXIgb2YgbW9ub3RvbmljIGluY3JlYXNlcyBtZW1vcnkgYWRkcmVzc2VzXG4gICovXG4gc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKGludCBuaWQsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgem9uZV90eXBlLFxuQEAgLTEyNjcsMjEgKzEyNDAsNDEgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKGludCBuaWQsXG4ge1xuIFx0dW5zaWduZWQgbG9uZyB6b25lX2xvdyA9IGFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW3pvbmVfdHlwZV07XG4gXHR1bnNpZ25lZCBsb25nIHpvbmVfaGlnaCA9IGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3Bmblt6b25lX3R5cGVdO1xuK1x0dW5zaWduZWQgbG9uZyBtb3ZhYmxlX3BmbiA9IHpvbmVfbW92YWJsZV9wZm5bbmlkXTtcbiBcbiBcdC8qIEdldCB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgem9uZSAqL1xuIFx0KnpvbmVfc3RhcnRfcGZuID0gY2xhbXAobm9kZV9zdGFydF9wZm4sIHpvbmVfbG93LCB6b25lX2hpZ2gpO1xuIFx0KnpvbmVfZW5kX3BmbiA9IGNsYW1wKG5vZGVfZW5kX3Bmbiwgem9uZV9sb3csIHpvbmVfaGlnaCk7XG4tXHRhZGp1c3Rfem9uZV9yYW5nZV9mb3Jfem9uZV9tb3ZhYmxlKG5pZCwgem9uZV90eXBlLCBub2RlX2VuZF9wZm4sXG4tXHRcdFx0XHRcdCAgIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm4pO1xuIFxuLVx0LyogQ2hlY2sgdGhhdCB0aGlzIG5vZGUgaGFzIHBhZ2VzIHdpdGhpbiB0aGUgem9uZSdzIHJlcXVpcmVkIHJhbmdlICovXG4tXHRpZiAoKnpvbmVfZW5kX3BmbiBcdTAwM2Mgbm9kZV9zdGFydF9wZm4gfHwgKnpvbmVfc3RhcnRfcGZuIFx1MDAzZSBub2RlX2VuZF9wZm4pXG4tXHRcdHJldHVybiAwO1xuK1x0LyogTm90aGluZyB0byBhZGp1c3QgaWYgWk9ORV9NT1ZBQkxFIGlzIG5vdCBvbiB0aGlzIG5vZGUgKi9cbitcdGlmICghbW92YWJsZV9wZm4pXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogU2l6ZSBaT05FX01PVkFCTEUgKi9cbitcdGlmICh6b25lX3R5cGUgPT0gWk9ORV9NT1ZBQkxFKSB7XG4rXHRcdCp6b25lX3N0YXJ0X3BmbiA9IG1vdmFibGVfcGZuO1xuK1x0XHQqem9uZV9lbmRfcGZuID0gbWluKG5vZGVfZW5kX3BmbixcbitcdFx0XHRhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bbW92YWJsZV96b25lXSk7XG4rXG4rXHRcdC8qIENoZWNrIHRoYXQgdGhpcyBub2RlIGhhcyBwYWdlcyB3aXRoaW4gdGhlIHpvbmUncyByZXF1aXJlZCByYW5nZSAqL1xuK1x0XHRpZiAoKnpvbmVfZW5kX3BmbiBcdTAwM2Mgbm9kZV9zdGFydF9wZm4gfHxcbitcdFx0ICAgICp6b25lX3N0YXJ0X3BmbiBcdTAwM2Ugbm9kZV9lbmRfcGZuKVxuK1x0XHRcdHJldHVybiAwO1xuK1xuK1x0XHQvKiBNb3ZlIHRoZSB6b25lIHN0YXJ0IGluc2lkZSB0aGUgbm9kZSBpZiBuZWNlc3NhcnkgKi9cbitcdFx0KnpvbmVfc3RhcnRfcGZuID0gbWF4KCp6b25lX3N0YXJ0X3Bmbiwgbm9kZV9zdGFydF9wZm4pO1xuIFxuLVx0LyogTW92ZSB0aGUgem9uZSBib3VuZGFyaWVzIGluc2lkZSB0aGUgbm9kZSBpZiBuZWNlc3NhcnkgKi9cbi1cdCp6b25lX2VuZF9wZm4gPSBtaW4oKnpvbmVfZW5kX3Bmbiwgbm9kZV9lbmRfcGZuKTtcbi1cdCp6b25lX3N0YXJ0X3BmbiA9IG1heCgqem9uZV9zdGFydF9wZm4sIG5vZGVfc3RhcnRfcGZuKTtcbitcdC8qIEFkanVzdCBmb3IgWk9ORV9NT1ZBQkxFIHN0YXJ0aW5nIHdpdGhpbiB0aGlzIHJhbmdlICovXG4rXHR9IGVsc2UgaWYgKCFtaXJyb3JlZF9rZXJuZWxjb3JlIFx1MDAyNlx1MDAyNiAqem9uZV9zdGFydF9wZm4gXHUwMDNjIG1vdmFibGVfcGZuIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAqem9uZV9lbmRfcGZuIFx1MDAzZSBtb3ZhYmxlX3Bmbikge1xuK1x0XHQqem9uZV9lbmRfcGZuID0gbW92YWJsZV9wZm47XG4gXG4rXHQvKiBDaGVjayBpZiB0aGlzIHdob2xlIHJhbmdlIGlzIHdpdGhpbiBaT05FX01PVkFCTEUgKi9cbitcdH0gZWxzZSBpZiAoKnpvbmVfc3RhcnRfcGZuIFx1MDAzZT0gbW92YWJsZV9wZm4pIHtcbitcdFx0KnpvbmVfc3RhcnRfcGZuID0gKnpvbmVfZW5kX3BmbjtcbitcdH1cbitcbitvdXQ6XG4gXHQvKiBSZXR1cm4gdGhlIHNwYW5uZWQgcGFnZXMgKi9cbiBcdHJldHVybiAqem9uZV9lbmRfcGZuIC0gKnpvbmVfc3RhcnRfcGZuO1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE2OjA2OjQyLjY1NjI1OTE3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY5MjgyOTU5NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIGBtbS9tbV9pbml0LmNgIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbiBgbW0vbW1faW5pdC5jYCBpcyBnZXR0aW5nIHJpZCBvZiBgYWRqdXN0X3pvbmVfcmFuZ2VfZm9yX3pvbmVfbW92YWJsZWAgYW5kIGlubGluaW5nIGl0cyBsb2dpYyBpbnRvIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggaW5pdGlhbGx5LCBidXQgdGhlcmUncyBhIHNsaWdodCBtb2RpZmljYXRpb24gdG8gdGhlIGxvZ2ljLiBJIHNlZSB0aGV5J3ZlIHRha2VuIHRoZXNlIGxpbmVzOlxuXG5gYGBjXG4tXHQvKiBDaGVjayB0aGF0IHRoaXMgbm9kZSBoYXMgcGFnZXMgd2l0aGluIHRoZSB6b25lJ3MgcmVxdWlyZWQgcmFuZ2UgKi9cbi1cdGlmICgqem9uZV9lbmRfcGZuIFx1MDAzYyBub2RlX3N0YXJ0X3BmbiB8fCAqem9uZV9zdGFydF9wZm4gXHUwMDNlIG5vZGVfZW5kX3Bmbilcbi1cdFx0cmV0dXJuIDA7XG5cbi1cdC8qIE1vdmUgdGhlIHpvbmUgYm91bmRhcmllcyBpbnNpZGUgdGhlIG5vZGUgaWYgbmVjZXNzYXJ5ICovXG4tXHQqem9uZV9lbmRfcGZuID0gbWluKCp6b25lX2VuZF9wZm4sIG5vZGVfZW5kX3Bmbik7XG4tXHQqem9uZV9zdGFydF9wZm4gPSBtYXgoKnpvbmVfc3RhcnRfcGZuLCBub2RlX3N0YXJ0X3Bmbik7XG5gYGBcblxuLi4uYW5kIG1vdmVkIHRoZW0sIHdpdGggc2xpZ2h0IGNoYW5nZXMsIGludG8gdGhlIGBpZiAoem9uZV90eXBlID09IFpPTkVfTU9WQUJMRSlgIGJsb2NrLiBIb2xkIG9uIGEgc2Vjb25kLCB0aG91Z2guIEFyZW4ndCBgKnpvbmVfc3RhcnRfcGZuYCBhbmQgYCp6b25lX2VuZF9wZm5gIGFscmVhZHkgY2xhbXBlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWA/XG5cbmBgYGNcblx0LyogR2V0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSB6b25lICovXG5cdCp6b25lX3N0YXJ0X3BmbiA9IGNsYW1wKG5vZGVfc3RhcnRfcGZuLCB6b25lX2xvdywgem9uZV9oaWdoKTtcblx0KnpvbmVfZW5kX3BmbiA9IGNsYW1wKG5vZGVfZW5kX3Bmbiwgem9uZV9sb3csIHpvbmVfaGlnaCk7XG5gYGBcblxuUmlnaHQsIHRoZXkgYXJlISBTbywgYCp6b25lX2VuZF9wZm5gIGlzIGFscmVhZHkgZ3VhcmFudGVlZCB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYG5vZGVfZW5kX3BmbmAsIGFuZCBgKnpvbmVfc3RhcnRfcGZuYCBpcyBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBub2RlX3N0YXJ0X3BmbmAuIFRoYXQgbWVhbnMgdGhlIHJlbW92ZWQgY2hlY2tzIGFyZSBtb3N0bHkgcmVkdW5kYW50LCBleGNlcHQgZm9yIHRoZSBgWk9ORV9NT1ZBQkxFYCBjYXNlLCB3aGVyZSB0aGVyZSdzIGEgcmVhc3NpZ25tZW50LlxuXG5Ob3csIHRoaXMgaXMgYW4gaW5pdGlhbGl6YXRpb24gY29kZSBjaGFuZ2U7IHRoaXMgaXMgZGVjbGFyZWQgdXNpbmcgYF9faW5pdGAuIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgaXMgYW4gYF9faW5pdGAgZnVuY3Rpb24uIFVzdWFsbHksIGZ1enppbmcgYF9faW5pdGAgZnVuY3Rpb25zIGlzbid0IHZlcnkgcHJvZHVjdGl2ZSBiZWNhdXNlIHRoZXkgYXJlIG9ubHkgZXhlY3V0ZWQgb25jZSBkdXJpbmcgYm9vdC4gQnV0IHdhaXQsIGlzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgb25seSBjYWxsZWQgZHVyaW5nIGJvb3Q/IE1heWJlIG1lbW9yeSBob3RwbHVnIGNhbGxzIGl0PyBNZW1vcnkgaG90cGx1ZyBtaWdodCBjYWxsIGBfX21lbWluaXRgIGZ1bmN0aW9ucywgYnV0IGBfX2luaXRgIGZ1bmN0aW9ucyBhcmUgZGlzY2FyZGVkIGFmdGVyIGJvb3QuIExldCdzIG1ha2Ugc3VyZSBieSBjaGVja2luZyB0aGUgZGVmaW5pdGlvbjogaXQncyBgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKC4uLilgLiBBaCwgeWVzLCBpdCAqaXMqIGBfX2luaXRgLiBUaGF0IG1lYW5zIGl0J3MgZGlzY2FyZGVkIGFmdGVyIGJvb3QuIEZ1enppbmcgY2FuJ3QgcmVhY2ggYF9faW5pdGAgZnVuY3Rpb25zIGFmdGVyIHRoZSBzeXN0ZW0gaGFzIGJvb3RlZC4gTGV0J3MgbWFrZSBhYnNvbHV0ZWx5IHN1cmUuIFllcywgdGhlIHBhdGNoIHNob3dzIGBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoLi4uKWAuIFRoYXQgc2VhbHMgaXQ7IGBfX2luaXRgLlxuXG5TbywgaXQncyBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBib290LiBNZW1vcnkgaG90cGx1ZyB1c2VzIGBfX21lbWluaXRgLiBTaW5jZSB0aGlzIGlzIGBfX2luaXRgLCBpdCBvbmx5IHJ1bnMgYXQgYm9vdCB0aW1lLiBTeXprYWxsZXIgZnV6emVzIHRoZSBrZXJuZWwgKmFmdGVyKiBpdCBoYXMgYm9vdGVkLCBzbyB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgZHVyaW5nIGZ1enppbmcuXG5cblRvIGJlIGV4dHJhIGNhcmVmdWwsIGxldCBtZSBjaGVjayBpZiB0aGVyZSBpcyBhbnkgd2F5IHRvIHRyaWdnZXIgdGhpcyBhZnRlciBib290LiBJJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gc2VhcmNoIGZvciBgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGVgLlxuXG5UaGVyZWZvcmUsIEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBiZWNhdXNlIGl0J3MgYW4gYF9faW5pdGAgZnVuY3Rpb24gYW5kIG5vdCByZWFjaGFibGUgYWZ0ZXIgYm9vdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzUwNSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA0VDE2OjA4OjA5LjU4NDU1ODI3N1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTIyNDM5NDE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tX2luaXQuYz0xMTgwPXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIyMi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBhIHpvbmUgc3BhbnMgaW4gYSBub2RlLCBpbmNsdWRpbmcgaG9sZXNcXG5tbS9tbV9pbml0LmM6MTIyMzogKiBwcmVzZW50X3BhZ2VzID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoKSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoKVxcbm1tL21tX2luaXQuYy0xMjI0LSAqXFxuLS1cXG5tbS9tbV9pbml0LmMtMTIzMy0gKi9cXG5tbS9tbV9pbml0LmM6MTIzNDpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoaW50IG5pZCxcXG5tbS9tbV9pbml0LmMtMTIzNS1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHpvbmVfdHlwZSxcXG4tLVxcbm1tL21tX2luaXQuYz0xMzI0PXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTMzNi1cXG5tbS9tbV9pbml0LmM6MTMzNzpcXHRcXHRzcGFubmVkID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGksXFxubW0vbW1faW5pdC5jLTEzMzgtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBub2RlX3N0YXJ0X3BmbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDRUMTY6MDg6MTEuNTA3MDA0ODM2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYzNTYzMTc3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFVucmVhY2hhYmlsaXR5IGluIEVhcmx5IEJvb3QqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgZnVuY3Rpb24uIEkgc2VlIG5vdyB0aGF0IGl0J3MgcGFydCBvZiBgX19pbml0YCwgYW5kIGl0J3MgY2FsbGVkIGJ5IGBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzYCwgd2hpY2ggaXMgKmFsc28qIG1hcmtlZCBhcyBgX19pbml0YC4gUmlnaHQsIHRoYXQgbWFrZXMgaXQgcHJldHR5IGNsZWFyLiBTaW5jZSB0aGVzZSBhcmUgYF9faW5pdGAgZnVuY3Rpb25zLCB0aGV5IGFyZSBvbmx5IGV2ZXIgZXhlY3V0ZWQgZHVyaW5nIHRoZSBrZXJuZWwncyBlYXJseSBib290IHNlcXVlbmNlLiBUaGF0J3MgYmVmb3JlIHVzZXJzcGFjZSBpcyBldmVuIHVwIGFuZCBydW5uaW5nLCBsZXQgYWxvbmUgYSBmdXp6ZXIgbGlrZSBzeXprYWxsZXIuXG5cblRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gd2F5IGZvciBhIGZ1enppbmcgY2FtcGFpZ24gdG8gYWN0dWFsbHkgcmVhY2ggdGhpcyBjb2RlLiBUaGUgbmF0dXJlIG9mIGZ1enppbmcgZGljdGF0ZXMgdGhhdCBpdCBydW5zIGluIHVzZXItc3BhY2UsIHdlbGwgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLiBTbywgSSB3aWxsIGJlIHJldHVybmluZyBgV29ydGhGdXp6aW5nPWZhbHNlYCBoZXJlLiBNeSByZWFzb25pbmcgaXMgc29saWQ6IFRoZSBtb2RpZmljYXRpb25zIGFyZSB3aXRoaW4gYF9faW5pdGAgc2VjdGlvbnMsIHJlbmRlcmluZyB0aGUgY29kZSBpbmFjY2Vzc2libGUgdG8gYW55IGZ1enppbmcgYXR0ZW1wdHMgcnVubmluZyBpbiBhIHN0YW5kYXJkLCBwb3N0LWJvb3QgZW52aXJvbm1lbnQuIE5vIHBvaW50IHNwZW5kaW5nIHRpbWUgb24gc29tZXRoaW5nIHdlIGNhbid0IGluZmx1ZW5jZSB3aXRoIG91ciBmdXp6aW5nIHRvb2xzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDUzLCJPdXRwdXRUb2tlbnMiOjEwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNFQxNjowODoxNy4xNDI2Mzg0NTZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZWAgYW5kIGlubGluZXMgYGFkanVzdF96b25lX3JhbmdlX2Zvcl96b25lX21vdmFibGVgLiBCb3RoIGZ1bmN0aW9ucyBhcmUgbWFya2VkIHdpdGggYF9faW5pdGAgYW5kIGFyZSBvbmx5IGV4ZWN1dGVkIGR1cmluZyBlYXJseSBrZXJuZWwgYm9vdC4gU2luY2UgZnV6emluZyBvY2N1cnMgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMgYm9vdGVkLCB0aGlzIGNvZGUgaXMgdW5yZWFjaGFibGUgYnkgdGhlIGZ1enplci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowcmlqx[1] Phase: Running StartedAt: 2026-08-04 16:08:29 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcmlqx[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-04 16:08:29 +0000 UTC FinishedAt: 2026-08-04 16:08:32 +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,}