Name: series-workflowb4wlr Phase: Failed StartedAt: 2026-08-31 07:28:13 +0000 UTC FinishedAt: 2026-08-31 07:30:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4wlr[0] Phase: Succeeded StartedAt: 2026-08-31 07:28:13 +0000 UTC FinishedAt: 2026-08-31 07:30:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4wlr[0].run-triage Phase: Succeeded StartedAt: 2026-08-31 07:28:13 +0000 UTC FinishedAt: 2026-08-31 07:30:31 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBLVk0gbGl2ZSBtaWdyYXRpb24gaW9jdGxzIChLVk1fTUlHUkFURV9DTUQsIEtWTV9FWFBPUlRfTUVNT1JZLCBLVk1fSU1QT1JUX01FTU9SWSwgS1ZNX0VYUE9SVF9WQ1BVLCBLVk1fSU1QT1JUX1ZDUFUpIGFuZCBjYXBhYmlsaXR5IEtWTV9DQVBfTElWRV9NSUdSQVRJT04sIGFsb25nIHdpdGggZGlzcGF0Y2hlciBob29rcyBpbiBrdm1feDg2X29wcy4gSG93ZXZlciwgbm8gdmVuZG9yIGJhY2tlbmQgaW1wbGVtZW50cyBjYXBfbGl2ZV9taWdyYXRpb24gb3IgYW55IG9mIHRoZSBtaWdyYXRpb24gY2FsbGJhY2tzLiBBcyBhIHJlc3VsdCwgYWxsIG5ldyBpb2N0bHMgaW1tZWRpYXRlbHkgcmV0dXJuIC1FTk9UVFkgYW5kIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gY2hlY2tzIHJldHVybiAwLCBtYWtpbmcgdGhlIGhhbmRsZXIgbG9naWMgdW5yZWFjaGFibGUgYW5kIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVhZmVjNWQxOTYyMmZkM2JhNGJjYjAxMzViZTg0YmYwNjk2ODIwM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNzoyOTozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZTguLjlkNTQ2ZDI4OGFmNWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTY1NjYsNiAmIzQzOzY1NjYsMjAwIEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuJiM0MzsuLiBfS1ZNX01JR1JBVEVfQ01EOlxuJiM0MztcbiYjNDM7NC4xNDUgS1ZNX01JR1JBVEVfQ01EXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NlxuJiM0Mzs6VHlwZTogdm0gaW9jdGxcbiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgKGluL291dClcbiYjNDM7OlJldHVybnM6IDAgb24gc3VjY2VzcywgXHUwMDNjIDAgb24gZXJyb3JcbiYjNDM7XG4mIzQzO0FsbG93cyB1c2Vyc3BhY2UgdG8gc2VuZCBsaXZlIG1pZ3JhdGlvbiByZWxhdGVkIGNvbW1hbmRzIHRvIEtWTSBmb3IgdmVuZG9yXG4mIzQzO3NwZWNpZmljIGhhbmRsaW5nLlxuJiM0MztcbiYjNDM7Rm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcsIGxpdmUgbWlncmF0aW9uIHJlbGF0ZWQgY29tbWFuZHMgbWF5IGJlIG5lZWRlZC5cbiYjNDM7VGhlIGNvbW1hbmRzIHR5cGljYWxseSB1c2UgZW5jcnlwdGVkIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwYXNzZWQgYmV0d2VlbiB0aGVcbiYjNDM7c291cmNlIGFuZCBkZXN0aW5hdGlvbiBob3N0cy4gVGhlIGhvc3RzIG1heSBhbHNvIHJlcXVpcmUgc3BlY2lmaWMgY29vcmRpbmF0aW9uXG4mIzQzO3N0ZXBzIGR1cmluZyBtaWdyYXRpb24gdGhhdCBtdXN0IGJlIHRyaWdnZXJlZCBhdCBwcmVjaXNlIHBvaW50cyBpbiB0aGVcbiYjNDM7bWlncmF0aW9uIHByb2Nlc3MuXG4mIzQzO1xuJiM0MztUaGUgdmVuZG9yIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgbG9ja2luZyBhbmQgY2hlY2tzIHRoZSB2YWxpZCBmbGFnc1xuJiM0MztiaXRzLiBJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpc1xuJiM0MztyZXR1cm5lZC5cbiYjNDM7XG4mIzQzO1RoZSBLVk1fTUlHUkFURV9DTUQgc3ViY29tbWFuZCBwYXNzZWQgaW4gc3RydWN0IGt2bV9taWdyYXRlX2NtZCBpcyBvbmUgb2Y6OlxuJiM0MztcbiYjNDM7ICAjZGVmaW5lIEtWTV9NSUdSQVRFX1NFVFVQXHRcdDBcbiYjNDM7ICAjZGVmaW5lIEtWTV9NSUdSQVRFX0lURVJBVElPTlx0XHQxXG4mIzQzOyAgI2RlZmluZSBLVk1fTUlHUkFURV9TVE9QX0FORF9DT1BZXHQyXG4mIzQzOyAgI2RlZmluZSBLVk1fTUlHUkFURV9BQk9SVFx0XHQzXG4mIzQzOyAgI2RlZmluZSBLVk1fTUlHUkFURV9FTkRcdFx0NFxuJiM0MztcbiYjNDM7VGhlIGt2bV90cmFuc2Zlcl9idWZmZXIgaXM6OlxuJiM0MztcbiYjNDM7ICAvKipcbiYjNDM7ICAgKiBAYWRkcmVzczogVXNlcnNwYWNlIGJ1ZmZlciBhZGRyZXNzXG4mIzQzOyAgICogQHNpemU6IFNpemUgb2YgdGhlIHVzZXJzcGFjZSBidWZmZXJcbiYjNDM7ICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4mIzQzOyAgICovXG4mIzQzOyAgc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIge1xuJiM0MztcdF9fdTY0IGFkZHJlc3M7XG4mIzQzO1x0X191MzIgc2l6ZTtcbiYjNDM7XHRfX3UzMiByZXNlcnZlZDtcbiYjNDM7ICB9O1xuJiM0MztcbiYjNDM7VGhlIGt2bV9taWdyYXRlX2NtZCBpczo6XG4mIzQzO1xuJiM0MzsgIC8qKlxuJiM0MzsgICAqIEBjb21tYW5kOiBPbmUgb2YgdGhlIGRlZmluZWQgS1ZNX01JR1JBVEUgY29tbWFuZHNcbiYjNDM7ICAgKiBAZmxhZ3M6IEhhcmR3YXJlIHNwZWNpZmljIGZsYWdzXG4mIzQzOyAgICogQHJlc2VydmVkOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxuJiM0MzsgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgZm9yIGhhcmR3YXJlIHNwZWNpZmljIGRhdGFcbiYjNDM7ICAgKi9cbiYjNDM7ICBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIHtcbiYjNDM7XHRfX3UxNiBjb21tYW5kO1xuJiM0MztcdF9fdTE2IGZsYWdzO1xuJiM0MztcdF9fdTMyIHJlc2VydmVkO1xuJiM0MztcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcbiYjNDM7ICB9O1xuJiM0MztcbiYjNDM7Li4gX0tWTV9FWFBPUlRfTUVNT1JZOlxuJiM0MztcbiYjNDM7NC4xNDYgS1ZNX0VYUE9SVF9NRU1PUllcbiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4mIzQzOzpBcmNoaXRlY3R1cmVzOiB4ODZcbiYjNDM7OlR5cGU6IHZtIGlvY3RsXG4mIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAoaW4vb3V0KVxuJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBcdTAwM2MgMCBvbiBlcnJvclxuJiM0MztcbiYjNDM7QWxsb3dzIHVzZXJzcGFjZSB0byByZXF1ZXN0IHRoZSBob3N0IHRvIGV4cG9ydCBhbiBhcnJheSBvZiBtZW1vcnkgcGFnZXMgdG8gYVxuJiM0Mzt1c2Vyc3BhY2UgYnVmZmVyLlxuJiM0MztcbiYjNDM7VGhlIHByaXZhdGUgbWVtb3J5IG1heSBub3QgYmUgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3JcbiYjNDM7Y29uZmlkZW50aWFsIGNvbXB1dGluZywgdGhlIGd1ZXN0IG1lbW9yeSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0b1xuJiM0Mzt0aGUgZ3Vlc3QuXG4mIzQzO1xuJiM0MztJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpcyByZXR1cm5lZC5cbiYjNDM7XG4mIzQzO1RoZSB2ZW5kb3Igc3BlY2lmaWMgSUQgaXMgdXNlZCBhdCBsZWFzdCBmb3IgVERYIGZvciB0aGUgbWlncmF0aW9uIHRocmVhZFxuJiM0MztpbmRleC5cbiYjNDM7XG4mIzQzO1RoZSBrdm1fbWVtb3J5X3RyYW5zZmVyIGlzOjpcbiYjNDM7XG4mIzQzOyAgLyoqXG4mIzQzOyAgICogQGdmbnM6IFVzZXJzcGFjZSBhZGRyZXNzIG9mIGFuIGFycmF5IG9mIG5yX2dmbnMgX191NjQgR0ZOcyB0byBleHBvcnRcbiYjNDM7ICAgKiBAbnJfZ2ZuczogTnVtYmVyIG9mIEdGTnMgaW4gdGhlIEBnZm5zIGFycmF5XG4mIzQzOyAgICogQGlkOiBPcHRpb25hbCB2ZW5kb3Igc3BlY2lmaWMgdHJhbnNmZXIgSURcbiYjNDM7ICAgKiBAZmxhZ3M6IFZlbmRvciBzcGVjaWZpYyBmbGFnc1xuJiM0MzsgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiYjNDM7ICAgKiBAYnVmOiBVc2Vyc3BhY2UgYnVmZmVyIHRvIGV4cG9ydCBtZW1vcnkgdG9cbiYjNDM7ICAgKi9cbiYjNDM7ICBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciB7XG4mIzQzOyAgICAgICBfX3U2NCBnZm5zO1xuJiM0MzsgICAgICAgX191MzIgbnJfZ2ZucztcbiYjNDM7ICAgICAgIF9fdTE2IGlkO1xuJiM0MzsgICAgICAgX191MTYgZmxhZ3M7XG4mIzQzOyAgICAgICBfX3U2NCByZXNlcnZlZDtcbiYjNDM7ICAgICAgIHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcbiYjNDM7ICB9O1xuJiM0MztcbiYjNDM7VGhlIHRyYW5zZmVyIGJ1ZmZlciBzaXplIGlzIHZlbmRvciBzcGVjaWZpYy5cbiYjNDM7XG4mIzQzO0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWVvIDpyZWY6YEtWTV9NSUdSQVRFX0NNRCBcdTAwM2NLVk1fTUlHUkFURV9DTURcdTAwM2VgLlxuJiM0MztcbiYjNDM7Rm9yIG1lbW9yeSBpbXBvcnQsIHNlZSBhbHNvIDpyZWY6YEtWTV9JTVBPUlRfTUVNT1JZIFx1MDAzY0tWTV9JTVBPUlRfTUVNT1JZXHUwMDNlYC5cbiYjNDM7XG4mIzQzO1xuJiM0MzsuLiBfS1ZNX0lNUE9SVF9NRU1PUlk6XG4mIzQzO1xuJiM0Mzs0LjE0NyBLVk1fSU1QT1JUX01FTU9SWVxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NlxuJiM0Mzs6VHlwZTogdm0gaW9jdGxcbiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyIChpbi9vdXQpXG4mIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYyAwIG9uIGVycm9yXG4mIzQzO1xuJiM0MztBbGxvd3MgdXNlcnNwYWNlIHRvIHJlcXVlc3QgdGhlIGhvc3QgdG8gaW1wb3J0IGFuIGFycmF5IG9mIG1lbW9yeSBwYWdlcyBmcm9tIGFcbiYjNDM7dXNlcnNwYWNlIGJ1ZmZlci5cbiYjNDM7XG4mIzQzO1RoZSBwcml2YXRlIG1lbW9yeSBtYXkgbm90IGJlIGFjY2Vzc2libGUgdG8gS1ZNIGJlY2F1c2Ugb2YgZW5jcnlwdGlvbi4gRm9yXG4mIzQzO2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBndWVzdCBtZW1vcnkgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG9cbiYjNDM7dGhlIGd1ZXN0LlxuJiM0MztcbiYjNDM7SWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXMgcmV0dXJuZWQuXG4mIzQzO1xuJiM0MztUaGUgdmVuZG9yIHNwZWNpZmljIElEIGlzIHVzZWQgYXQgbGVhc3QgZm9yIFREWCBmb3IgdGhlIG1pZ3JhdGlvbiB0aHJlYWRcbiYjNDM7aW5kZXguXG4mIzQzO1xuJiM0MztUaGUgdHJhbnNmZXIgYnVmZmVyIHNpemUgaXMgdmVuZG9yIHNwZWNpZmljLlxuJiM0MztcbiYjNDM7Rm9yIGt2bV9tZW1vcnlfdHJhbnNmZXIsIHNlZSA6cmVmOmBLVk1fRVhQT1JUX01FTU9SWSBcdTAwM2NLVk1fRVhQT1JUX01FTU9SWVx1MDAzZWAuXG4mIzQzO1xuJiM0MztGb3IgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgc2VlbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXHUwMDNjS1ZNX01JR1JBVEVfQ01EXHUwMDNlYC5cbiYjNDM7XG4mIzQzOy4uIF9LVk1fRVhQT1JUX1ZDUFU6XG4mIzQzO1xuJiM0Mzs0LjE0OSBLVk1fRVhQT1JUX1ZDUFVcbiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4mIzQzOzpBcmNoaXRlY3R1cmVzOiBhcm02NCwgeDg2XG4mIzQzOzpUeXBlOiB2Y3B1IGlvY3RsXG4mIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKGluL291dClcbiYjNDM7OlJldHVybnM6IDAgb24gc3VjY2VzcywgXHUwMDNjIDAgb24gZXJyb3JcbiYjNDM7XG4mIzQzO0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBleHBvcnQgYSBWQ1BVIHN0YXRlIHRvIGEgdXNlcnNwYWNlXG4mIzQzO2J1ZmZlci5cbiYjNDM7XG4mIzQzO1RoZSBWQ1BVIHN0YXRlIG1heSBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3JcbiYjNDM7Y29uZmlkZW50aWFsIGNvbXB1dGluZywgdGhlIFZDUFUgc3RhdGUgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG8gdGhlXG4mIzQzO2d1ZXN0LlxuJiM0MztcbiYjNDM7VGhlIHZjcHVfdHJhbnNmZXIgaXM6OlxuJiM0MztcbiYjNDM7ICAvKipcbiYjNDM7ICAgKiBAZmxhZ3M6IEhhcmR3YXJlIHNwZWNpZmljIGZsYWdzXG4mIzQzOyAgICogQHJlc2VydmVkOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxuJiM0MzsgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgdG8gZXhwb3J0IFZDUFUgc3RhdGUgdG9cbiYjNDM7ICAgKi9cbiYjNDM7ICBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIge1xuJiM0MzsgICAgICAgIF9fdTMyIGZsYWdzO1xuJiM0MzsgICAgICAgIF9fdTMyIHJlc2VydmVkO1xuJiM0MztcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcbiYjNDM7ICB9O1xuJiM0MztcbiYjNDM7Rm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZSA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXHUwMDNjS1ZNX01JR1JBVEVfQ01EXHUwMDNlYC5cbiYjNDM7XG4mIzQzO0ZvciB2Q1BVIGltcG9ydCwgc2VlIGFsc28gOnJlZjpgS1ZNX0lNUE9SVF9WQ1BVIFx1MDAzY0tWTV9JTVBPUlRfVkNQVVx1MDAzZWAuXG4mIzQzO1xuJiM0MzsuLiBfS1ZNX0lNUE9SVF9WQ1BVOlxuJiM0MztcbiYjNDM7NC4xNDggS1ZNX0lNUE9SVF9WQ1BVXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbiYjNDM7OkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODZcbiYjNDM7OlR5cGU6IHZjcHUgaW9jdGxcbiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciAoaW4vb3V0KVxuJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBcdTAwM2MgMCBvbiBlcnJvclxuJiM0MztcbiYjNDM7QWxsb3dzIHVzZXJzcGFjZSB0byByZXF1ZXN0IHRoZSBob3N0IHRvIGltcG9ydCBhIFZDUFUgc3RhdGUgZnJvbSBhIHVzZXJzcGFjZVxuJiM0MztidWZmZXIuXG4mIzQzO1xuJiM0MztUaGUgVkNQVSBzdGF0ZSBtYXkgbm90IGJlIGRpcmVjdGx5IGFjY2Vzc2libGUgdG8gS1ZNIGJlY2F1c2Ugb2YgZW5jcnlwdGlvbi4gRm9yXG4mIzQzO2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBWQ1BVIHN0YXRlIGlzIGVuY3J5cHRlZCBhbmQgb25seSBhY2Nlc3NpYmxlIHRvIHRoZVxuJiM0MztndWVzdC5cbiYjNDM7XG4mIzQzO0ZvciB2Y3B1X3RyYW5zZmVyIGFuZCB2Q1BVIGltcG9ydCwgc2VlIDpyZWY6YEtWTV9JTVBPUlRfVkNQVSBcdTAwM2NLVk1fSU1QT1JUX1ZDUFVcdTAwM2VgLlxuJiM0MztcbiYjNDM7Rm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZSBhbHNvIDpyZWY6YEtWTV9NSUdSQVRFX0NNRCBcdTAwM2NLVk1fTUlHUkFURV9DTURcdTAwM2VgLlxuJiM0MztcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbkBAIC05NDkzLDYgJiM0Mzs5Njg3LDE3IEBAIHRha2UgY2FyZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlc2UgY2FzZXMuXG4gVGhlIHByZXNlbmNlIG9mIHRoaXMgY2FwYWJpbGl0eSBpbmRpY2F0ZXMgdGhhdCB0aGUgbmVzdGVkIEtWTSBndWVzdCBjYW5cbiBzdGFydCBpbiBFU0EgbW9kZS5cbiBcbiYjNDM7OC40OCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NlxuJiM0Mzs6VGFyZ2V0OiBWTVxuJiM0Mzs6UGFyYW1ldGVyczogTm9uZVxuJiM0MztcbiYjNDM7SW5kaWNhdGVzIHRoYXQgdGhlIFZNIG5lZWRzIHRvIHVzZSBLVk0gY2FsbHMgZm9yIGxpdmUgbWlncmF0aW9uLCBhbmQgdGhhdCB0aGVcbiYjNDM7S1ZNX01JR1JBVEVfQ01EIGlvY3RsIGFuZCB0aGUgS1ZNX0VYUE9SVF9NRU1PUlksIEtWTV9JTVBPUlRfTUVNT1JZLFxuJiM0MztLVk1fRVhQT1JUX1ZDUFUgYW5kIEtWTV9JTVBPUlRfVkNQVSBpb2N0bHMgYXJlIGF2YWlsYWJsZS5cbiYjNDM7XG4gOS4gS25vd24gS1ZNIEFQSSBwcm9ibGVtc1xuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggODNkYzUwODYxMzhiMy4uN2YxMTBmODBkNmY4MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbkBAIC0xNDgsNiAmIzQzOzE0OCwxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKVxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChjYXBfbGl2ZV9taWdyYXRpb24pXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUwobWlncmF0ZV9jbWQpXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUwoZXhwb3J0X21lbW9yeSlcbiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChpbXBvcnRfbWVtb3J5KVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGV4cG9ydF92Y3B1KVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGltcG9ydF92Y3B1KVxuICNlbmRpZlxuIFxuICN1bmRlZiBLVk1fWDg2X09QXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDVmNmMxY2U5NjczYjcuLmI2MzYyNDA4ZGFiODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjAxMCw2ICYjNDM7MjAxMCwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0aW50ICgqZ21lbV9wcmVwYXJlKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7XG4gXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuIFx0aW50ICgqZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xuJiM0MztcdGJvb2wgKCpjYXBfbGl2ZV9taWdyYXRpb24pKHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO1x0aW50ICgqbWlncmF0ZV9jbWQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9taWdyYXRlX2NtZCAqY21kKTtcbiYjNDM7XHRpbnQgKCpleHBvcnRfbWVtb3J5KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyICptZW0pO1xuJiM0MztcdGludCAoKmltcG9ydF9tZW1vcnkpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKm1lbSk7XG4mIzQzO1x0aW50ICgqZXhwb3J0X3ZjcHUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyICp2Y3B1X3N0YXRlKTtcbiYjNDM7XHRpbnQgKCppbXBvcnRfdmNwdSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKnZjcHVfc3RhdGUpO1xuIH07XG4gXG4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCBhZmNhYzEwNDI5NDdhLi5lODM4NTMyNjg5NGIxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC00OTczLDYgJiM0Mzs0OTczLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdGNhc2UgS1ZNX0NBUF9SRUFET05MWV9NRU06XG4gXHRcdHIgPSBrdm0gPyBrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtKGt2bSkgOiAxO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIEtWTV9DQVBfTElWRV9NSUdSQVRJT046XG4mIzQzO1x0XHRyID0ga3ZtID8ga3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSA6IDA7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTYxODYsNiAmIzQzOzYxODksMzggQEAgc3RhdGljIGludCBrdm1fZ2V0X3JlZ19saXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbXBvcnQsXG4mIzQzO1x0XHRcdFx0XHR2b2lkIF9fdXNlciAqYXJncClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciB2Y3B1X3N0YXRlO1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcbiYjNDM7XHQgICAgKGltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmltcG9ydF92Y3B1KSB8fFxuJiM0MztcdCAgICAoIWltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF92Y3B1KSlcbiYjNDM7XHRcdHJldHVybiAtRU5PVFRZO1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dmNwdV9zdGF0ZSwgYXJncCwgc2l6ZW9mKHZjcHVfc3RhdGUpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAodmNwdV9zdGF0ZS5yZXNlcnZlZCB8fCB2Y3B1X3N0YXRlLmJ1Zi5yZXNlcnZlZClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoaW1wb3J0KVxuJiM0MztcdFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgXHUwMDI2dmNwdV9zdGF0ZSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ciA9IGt2bV94ODZfY2FsbChleHBvcnRfdmNwdSkodmNwdSwgXHUwMDI2dmNwdV9zdGF0ZSk7XG4mIzQzO1x0aWYgKHIgXHUwMDNlIDApXG4mIzQzO1x0XHRyID0gLUVJTztcbiYjNDM7XG4mIzQzO1x0LyogQ29weSBiYWNrIGFsc28gb24gYW4gZXJyb3IgdG8gcmVwb3J0IGEgcGFydGlhbGx5IGRvbmUgdHJhbnNmZXIgKi9cbiYjNDM7XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNnZjcHVfc3RhdGUsIHNpemVvZih2Y3B1X3N0YXRlKSkpXG4mIzQzO1x0XHRyID0gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHI7XG4mIzQzO31cbiYjNDM7XG4gbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC02NjU2LDYgJiM0Mzs2NjkxLDE0IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0ciA9IGt2bV94ODZfb3BzLnZjcHVfbWVtX2VuY19pb2N0bCh2Y3B1LCBhcmdwKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBLVk1fRVhQT1JUX1ZDUFU6IHtcbiYjNDM7XHRcdHIgPSBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1KHZjcHUsIGZhbHNlLCBhcmdwKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRjYXNlIEtWTV9JTVBPUlRfVkNQVToge1xuJiM0MztcdFx0ciA9IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUodmNwdSwgdHJ1ZSwgYXJncCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gLUVJTlZBTDtcbiBcdH1cbkBAIC03MjU1LDYgJiM0Mzs3Mjk4LDM3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3RyYW5zZmVyX21lbW9yeShzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW1wb3J0LFxuJiM0MztcdFx0XHRcdFx0dm9pZCBfX3VzZXIgKmFyZ3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciBtZW07XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSB8fFxuJiM0MztcdCAgICAoaW1wb3J0IFx1MDAyNlx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeSkgfHxcbiYjNDM7XHQgICAgKCFpbXBvcnQgXHUwMDI2XHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfbWVtb3J5KSlcbiYjNDM7XHRcdHJldHVybiAtRU5PVFRZO1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2bWVtLCBhcmdwLCBzaXplb2YobWVtKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbS5yZXNlcnZlZCB8fCBtZW0uYnVmLnJlc2VydmVkIHx8ICFtZW0ubnJfZ2ZucylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoaW1wb3J0KVxuJiM0MztcdFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfbWVtb3J5KShrdm0sIFx1MDAyNm1lbSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ciA9IGt2bV94ODZfY2FsbChleHBvcnRfbWVtb3J5KShrdm0sIFx1MDAyNm1lbSk7XG4mIzQzO1x0aWYgKHIgXHUwMDNlIDApXG4mIzQzO1x0XHRyID0gLUVJTztcbiYjNDM7XG4mIzQzO1x0LyogQ29weSBiYWNrIGFsc28gb24gYW4gZXJyb3IgdG8gcmVwb3J0IGEgcGFydGlhbGx5IGRvbmUgdHJhbnNmZXIgKi9cbiYjNDM7XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNm1lbSwgc2l6ZW9mKG1lbSkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbkBAIC03NjE0LDYgJiM0Mzs3Njg4LDM0IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IGt2bV92bV9pb2N0bF9zZXRfbXNyX2ZpbHRlcihrdm0sIFx1MDAyNmZpbHRlcik7XG4gXHRcdGJyZWFrO1xuIFx0fVxuJiM0MztcdGNhc2UgS1ZNX01JR1JBVEVfQ01EOiB7XG4mIzQzO1x0XHRzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIGNtZDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWt2bV94ODZfb3BzLm1pZ3JhdGVfY21kIHx8XG4mIzQzO1x0XHQgICAgIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PVFRZO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjbWQsIGFyZ3AsIHNpemVvZihjbWQpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNtZC5yZXNlcnZlZCB8fCBjbWQuYnVmLnJlc2VydmVkKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRyID0ga3ZtX3g4Nl9jYWxsKG1pZ3JhdGVfY21kKShrdm0sIFx1MDAyNmNtZCk7XG4mIzQzO1x0XHRpZiAociBcdTAwM2UgMClcbiYjNDM7XHRcdFx0ciA9IC1FSU87XG4mIzQzO1xuJiM0MztcdFx0LyogQ29weSBiYWNrIGFsc28gb24gYW4gZXJyb3IgdG8gcmVwb3J0IGEgcGFydGlhbGx5IGRvbmUgY29tbWFuZCAqL1xuJiM0MztcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZjbWQsIHNpemVvZihjbWQpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBLVk1fRVhQT1JUX01FTU9SWTpcbiYjNDM7XHRcdHIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgZmFsc2UsIGFyZ3ApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBLVk1fSU1QT1JUX01FTU9SWTpcbiYjNDM7XHRcdHIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgdHJ1ZSwgYXJncCk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHIgPSAtRU5PVFRZO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uMGE5YWExMjZkYWFkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbiYjNDM7I2RlZmluZSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTEzNTAsNiAmIzQzOzEzNTEsOCBAQCBzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Age1xuICNkZWZpbmUgS1ZNX0dFVF9ERVZJQ0VfQVRUUlx0ICBfSU9XKEtWTUlPLCAgMHhlMiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0cilcbiAjZGVmaW5lIEtWTV9IQVNfREVWSUNFX0FUVFJcdCAgX0lPVyhLVk1JTywgIDB4ZTMsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXG4gXG4mIzQzOyNkZWZpbmUgS1ZNX01JR1JBVEVfQ01EXHRcdCAgX0lPV1IoS1ZNSU8sIDB4ZTQsIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQpXG4mIzQzO1xuIC8qXG4gICogaW9jdGxzIGZvciB2Y3B1IGZkc1xuICAqL1xuQEAgLTE0OTAsNiAmIzQzOzE0OTMsMTIgQEAgc3RydWN0IGt2bV9lbmNfcmVnaW9uIHtcbiAjZGVmaW5lIEtWTV9HRVRfU1JFR1MyICAgICAgICAgICAgIF9JT1IoS1ZNSU8sICAweGNjLCBzdHJ1Y3Qga3ZtX3NyZWdzMilcbiAjZGVmaW5lIEtWTV9TRVRfU1JFR1MyICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweGNkLCBzdHJ1Y3Qga3ZtX3NyZWdzMilcbiBcbiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9MSVZFX01JR1JBVElPTiAqL1xuJiM0MzsjZGVmaW5lIEtWTV9FWFBPUlRfTUVNT1JZXHQgIF9JT1dSKEtWTUlPLCAweGU1LCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlcilcbiYjNDM7I2RlZmluZSBLVk1fSU1QT1JUX01FTU9SWVx0ICBfSU9XUihLVk1JTywgMHhlNiwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIpXG4mIzQzOyNkZWZpbmUgS1ZNX0VYUE9SVF9WQ1BVXHRcdCAgX0lPV1IoS1ZNSU8sIDB4ZTcsIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlcilcbiYjNDM7I2RlZmluZSBLVk1fSU1QT1JUX1ZDUFVcdFx0ICBfSU9XUihLVk1JTywgMHhlOCwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyKVxuJiM0MztcbiAjZGVmaW5lIEtWTV9ESVJUWV9MT0dfTUFOVUFMX1BST1RFQ1RfRU5BQkxFICAgICgxIFx1MDAzY1x1MDAzYyAwKVxuICNkZWZpbmUgS1ZNX0RJUlRZX0xPR19JTklUSUFMTFlfU0VUICAgICAgICAgICAgKDEgXHUwMDNjXHUwMDNjIDEpXG4gXG5AQCAtMTY3MCw0ICYjNDM7MTY3OSwzOCBAQCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xuIFx0X191NjQgcGFkZGluZ1s1XTtcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIEtWTV9NSUdSQVRFX1NFVFVQXHRcdDBcbiYjNDM7I2RlZmluZSBLVk1fTUlHUkFURV9JVEVSQVRJT05cdFx0MVxuJiM0MzsjZGVmaW5lIEtWTV9NSUdSQVRFX1NUT1BfQU5EX0NPUFlcdDJcbiYjNDM7I2RlZmluZSBLVk1fTUlHUkFURV9BQk9SVFx0XHQzXG4mIzQzOyNkZWZpbmUgS1ZNX01JR1JBVEVfRU5EXHRcdFx0NFxuJiM0MztcbiYjNDM7c3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIge1xuJiM0MztcdF9fdTY0IGFkZHJlc3M7XG4mIzQzO1x0X191MzIgc2l6ZTtcbiYjNDM7XHRfX3UzMiByZXNlcnZlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xuJiM0MztcdF9fdTE2IGNvbW1hbmQ7XG4mIzQzO1x0X191MTYgZmxhZ3M7XG4mIzQzO1x0X191MzIgcmVzZXJ2ZWQ7XG4mIzQzO1x0c3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgYnVmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIge1xuJiM0MztcdF9fdTY0IGdmbnM7XG4mIzQzO1x0X191MzIgbnJfZ2ZucztcbiYjNDM7XHRfX3UxNiBpZDtcbiYjNDM7XHRfX3UxNiBmbGFncztcbiYjNDM7XHRfX3U2NCByZXNlcnZlZDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIge1xuJiM0MztcdF9fdTMyIGZsYWdzO1xuJiM0MztcdF9fdTMyIHJlc2VydmVkO1xuJiM0MztcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcbiYjNDM7fTtcbiYjNDM7XG4gI2VuZGlmIC8qIF9fTElOVVhfS1ZNX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEtWTSBsaXZlIG1pZ3JhdGlvbiBpb2N0bHMgKEtWTV9NSUdSQVRFX0NNRCwgS1ZNX0VYUE9SVF9NRU1PUlksIEtWTV9JTVBPUlRfTUVNT1JZLCBLVk1fRVhQT1JUX1ZDUFUsIEtWTV9JTVBPUlRfVkNQVSkgYW5kIGNhcGFiaWxpdHkgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiwgYWxvbmcgd2l0aCBkaXNwYXRjaGVyIGhvb2tzIGluIGt2bV94ODZfb3BzLiBIb3dldmVyLCBubyB2ZW5kb3IgYmFja2VuZCBpbXBsZW1lbnRzIGNhcF9saXZlX21pZ3JhdGlvbiBvciBhbnkgb2YgdGhlIG1pZ3JhdGlvbiBjYWxsYmFja3MuIEFzIGEgcmVzdWx0LCBhbGwgbmV3IGlvY3RscyBpbW1lZGlhdGVseSByZXR1cm4gLUVOT1RUWSBhbmQgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBjaGVja3MgcmV0dXJuIDAsIG1ha2luZyB0aGUgaGFuZGxlciBsb2dpYyB1bnJlYWNoYWJsZSBhbmQgbm90IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWFmZWM1ZDE5NjIyZmQzYmE0YmNiMDEzNWJlODRiZjA2OTY4MjAzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA3OjI5OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CmluZGV4IGE1ZjllZTkyZjQzZTguLjlkNTQ2ZDI4OGFmNWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKQEAgLTY1NjYsNiAmIzQzOzY1NjYsMjAwIEBAIEtWTV9TMzkwX0tFWU9QX1NTS0UKICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXkKICAgc3BlY2lmaWVkIGluIGBga2V5YGAsIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUgaW4gYGBrZXlgYC4KIAomIzQzOy4uIF9LVk1fTUlHUkFURV9DTUQ6CiYjNDM7CiYjNDM7NC4xNDUgS1ZNX01JR1JBVEVfQ01ECiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT04KJiM0Mzs6QXJjaGl0ZWN0dXJlczogeDg2CiYjNDM7OlR5cGU6IHZtIGlvY3RsCiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgKGluL291dCkKJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCAmbHQ7IDAgb24gZXJyb3IKJiM0MzsKJiM0MztBbGxvd3MgdXNlcnNwYWNlIHRvIHNlbmQgbGl2ZSBtaWdyYXRpb24gcmVsYXRlZCBjb21tYW5kcyB0byBLVk0gZm9yIHZlbmRvcgomIzQzO3NwZWNpZmljIGhhbmRsaW5nLgomIzQzOwomIzQzO0ZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nLCBsaXZlIG1pZ3JhdGlvbiByZWxhdGVkIGNvbW1hbmRzIG1heSBiZSBuZWVkZWQuCiYjNDM7VGhlIGNvbW1hbmRzIHR5cGljYWxseSB1c2UgZW5jcnlwdGVkIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwYXNzZWQgYmV0d2VlbiB0aGUKJiM0Mztzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGhvc3RzLiBUaGUgaG9zdHMgbWF5IGFsc28gcmVxdWlyZSBzcGVjaWZpYyBjb29yZGluYXRpb24KJiM0MztzdGVwcyBkdXJpbmcgbWlncmF0aW9uIHRoYXQgbXVzdCBiZSB0cmlnZ2VyZWQgYXQgcHJlY2lzZSBwb2ludHMgaW4gdGhlCiYjNDM7bWlncmF0aW9uIHByb2Nlc3MuCiYjNDM7CiYjNDM7VGhlIHZlbmRvciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGxvY2tpbmcgYW5kIGNoZWNrcyB0aGUgdmFsaWQgZmxhZ3MKJiM0MztiaXRzLiBJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpcwomIzQzO3JldHVybmVkLgomIzQzOwomIzQzO1RoZSBLVk1fTUlHUkFURV9DTUQgc3ViY29tbWFuZCBwYXNzZWQgaW4gc3RydWN0IGt2bV9taWdyYXRlX2NtZCBpcyBvbmUgb2Y6OgomIzQzOwomIzQzOyAgI2RlZmluZSBLVk1fTUlHUkFURV9TRVRVUAkJMAomIzQzOyAgI2RlZmluZSBLVk1fTUlHUkFURV9JVEVSQVRJT04JCTEKJiM0MzsgICNkZWZpbmUgS1ZNX01JR1JBVEVfU1RPUF9BTkRfQ09QWQkyCiYjNDM7ICAjZGVmaW5lIEtWTV9NSUdSQVRFX0FCT1JUCQkzCiYjNDM7ICAjZGVmaW5lIEtWTV9NSUdSQVRFX0VORAkJNAomIzQzOwomIzQzO1RoZSBrdm1fdHJhbnNmZXJfYnVmZmVyIGlzOjoKJiM0MzsKJiM0MzsgIC8qKgomIzQzOyAgICogQGFkZHJlc3M6IFVzZXJzcGFjZSBidWZmZXIgYWRkcmVzcwomIzQzOyAgICogQHNpemU6IFNpemUgb2YgdGhlIHVzZXJzcGFjZSBidWZmZXIKJiM0MzsgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKJiM0MzsgICAqLwomIzQzOyAgc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgewomIzQzOwlfX3U2NCBhZGRyZXNzOwomIzQzOwlfX3UzMiBzaXplOwomIzQzOwlfX3UzMiByZXNlcnZlZDsKJiM0MzsgIH07CiYjNDM7CiYjNDM7VGhlIGt2bV9taWdyYXRlX2NtZCBpczo6CiYjNDM7CiYjNDM7ICAvKioKJiM0MzsgICAqIEBjb21tYW5kOiBPbmUgb2YgdGhlIGRlZmluZWQgS1ZNX01JR1JBVEUgY29tbWFuZHMKJiM0MzsgICAqIEBmbGFnczogSGFyZHdhcmUgc3BlY2lmaWMgZmxhZ3MKJiM0MzsgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKJiM0MzsgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgZm9yIGhhcmR3YXJlIHNwZWNpZmljIGRhdGEKJiM0MzsgICAqLwomIzQzOyAgc3RydWN0IGt2bV9taWdyYXRlX2NtZCB7CiYjNDM7CV9fdTE2IGNvbW1hbmQ7CiYjNDM7CV9fdTE2IGZsYWdzOwomIzQzOwlfX3UzMiByZXNlcnZlZDsKJiM0MzsJc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgYnVmOwomIzQzOyAgfTsKJiM0MzsKJiM0MzsuLiBfS1ZNX0VYUE9SVF9NRU1PUlk6CiYjNDM7CiYjNDM7NC4xNDYgS1ZNX0VYUE9SVF9NRU1PUlkKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OCiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NgomIzQzOzpUeXBlOiB2bSBpb2N0bAomIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAoaW4vb3V0KQomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsICZsdDsgMCBvbiBlcnJvcgomIzQzOwomIzQzO0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBleHBvcnQgYW4gYXJyYXkgb2YgbWVtb3J5IHBhZ2VzIHRvIGEKJiM0Mzt1c2Vyc3BhY2UgYnVmZmVyLgomIzQzOwomIzQzO1RoZSBwcml2YXRlIG1lbW9yeSBtYXkgbm90IGJlIGFjY2Vzc2libGUgdG8gS1ZNIGJlY2F1c2Ugb2YgZW5jcnlwdGlvbi4gRm9yCiYjNDM7Y29uZmlkZW50aWFsIGNvbXB1dGluZywgdGhlIGd1ZXN0IG1lbW9yeSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0bwomIzQzO3RoZSBndWVzdC4KJiM0MzsKJiM0MztJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpcyByZXR1cm5lZC4KJiM0MzsKJiM0MztUaGUgdmVuZG9yIHNwZWNpZmljIElEIGlzIHVzZWQgYXQgbGVhc3QgZm9yIFREWCBmb3IgdGhlIG1pZ3JhdGlvbiB0aHJlYWQKJiM0MztpbmRleC4KJiM0MzsKJiM0MztUaGUga3ZtX21lbW9yeV90cmFuc2ZlciBpczo6CiYjNDM7CiYjNDM7ICAvKioKJiM0MzsgICAqIEBnZm5zOiBVc2Vyc3BhY2UgYWRkcmVzcyBvZiBhbiBhcnJheSBvZiBucl9nZm5zIF9fdTY0IEdGTnMgdG8gZXhwb3J0CiYjNDM7ICAgKiBAbnJfZ2ZuczogTnVtYmVyIG9mIEdGTnMgaW4gdGhlIEBnZm5zIGFycmF5CiYjNDM7ICAgKiBAaWQ6IE9wdGlvbmFsIHZlbmRvciBzcGVjaWZpYyB0cmFuc2ZlciBJRAomIzQzOyAgICogQGZsYWdzOiBWZW5kb3Igc3BlY2lmaWMgZmxhZ3MKJiM0MzsgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKJiM0MzsgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgdG8gZXhwb3J0IG1lbW9yeSB0bwomIzQzOyAgICovCiYjNDM7ICBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciB7CiYjNDM7ICAgICAgIF9fdTY0IGdmbnM7CiYjNDM7ICAgICAgIF9fdTMyIG5yX2dmbnM7CiYjNDM7ICAgICAgIF9fdTE2IGlkOwomIzQzOyAgICAgICBfX3UxNiBmbGFnczsKJiM0MzsgICAgICAgX191NjQgcmVzZXJ2ZWQ7CiYjNDM7ICAgICAgIHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjsKJiM0MzsgIH07CiYjNDM7CiYjNDM7VGhlIHRyYW5zZmVyIGJ1ZmZlciBzaXplIGlzIHZlbmRvciBzcGVjaWZpYy4KJiM0MzsKJiM0MztGb3IgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgc2VlbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgJmx0O0tWTV9NSUdSQVRFX0NNRCZndDtgLgomIzQzOwomIzQzO0ZvciBtZW1vcnkgaW1wb3J0LCBzZWUgYWxzbyA6cmVmOmBLVk1fSU1QT1JUX01FTU9SWSAmbHQ7S1ZNX0lNUE9SVF9NRU1PUlkmZ3Q7YC4KJiM0MzsKJiM0MzsKJiM0MzsuLiBfS1ZNX0lNUE9SVF9NRU1PUlk6CiYjNDM7CiYjNDM7NC4xNDcgS1ZNX0lNUE9SVF9NRU1PUlkKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OCiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NgomIzQzOzpUeXBlOiB2bSBpb2N0bAomIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAoaW4vb3V0KQomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsICZsdDsgMCBvbiBlcnJvcgomIzQzOwomIzQzO0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBpbXBvcnQgYW4gYXJyYXkgb2YgbWVtb3J5IHBhZ2VzIGZyb20gYQomIzQzO3VzZXJzcGFjZSBidWZmZXIuCiYjNDM7CiYjNDM7VGhlIHByaXZhdGUgbWVtb3J5IG1heSBub3QgYmUgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3IKJiM0Mztjb25maWRlbnRpYWwgY29tcHV0aW5nLCB0aGUgZ3Vlc3QgbWVtb3J5IGlzIGVuY3J5cHRlZCBhbmQgb25seSBhY2Nlc3NpYmxlIHRvCiYjNDM7dGhlIGd1ZXN0LgomIzQzOwomIzQzO0lmIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIFZNLCAtRU5PVFRZIGlzIHJldHVybmVkLgomIzQzOwomIzQzO1RoZSB2ZW5kb3Igc3BlY2lmaWMgSUQgaXMgdXNlZCBhdCBsZWFzdCBmb3IgVERYIGZvciB0aGUgbWlncmF0aW9uIHRocmVhZAomIzQzO2luZGV4LgomIzQzOwomIzQzO1RoZSB0cmFuc2ZlciBidWZmZXIgc2l6ZSBpcyB2ZW5kb3Igc3BlY2lmaWMuCiYjNDM7CiYjNDM7Rm9yIGt2bV9tZW1vcnlfdHJhbnNmZXIsIHNlZSA6cmVmOmBLVk1fRVhQT1JUX01FTU9SWSAmbHQ7S1ZNX0VYUE9SVF9NRU1PUlkmZ3Q7YC4KJiM0MzsKJiM0MztGb3IgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgc2VlbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgJmx0O0tWTV9NSUdSQVRFX0NNRCZndDtgLgomIzQzOwomIzQzOy4uIF9LVk1fRVhQT1JUX1ZDUFU6CiYjNDM7CiYjNDM7NC4xNDkgS1ZNX0VYUE9SVF9WQ1BVCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT04KJiM0Mzs6QXJjaGl0ZWN0dXJlczogYXJtNjQsIHg4NgomIzQzOzpUeXBlOiB2Y3B1IGlvY3RsCiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciAoaW4vb3V0KQomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsICZsdDsgMCBvbiBlcnJvcgomIzQzOwomIzQzO0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBleHBvcnQgYSBWQ1BVIHN0YXRlIHRvIGEgdXNlcnNwYWNlCiYjNDM7YnVmZmVyLgomIzQzOwomIzQzO1RoZSBWQ1BVIHN0YXRlIG1heSBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3IKJiM0Mztjb25maWRlbnRpYWwgY29tcHV0aW5nLCB0aGUgVkNQVSBzdGF0ZSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0byB0aGUKJiM0MztndWVzdC4KJiM0MzsKJiM0MztUaGUgdmNwdV90cmFuc2ZlciBpczo6CiYjNDM7CiYjNDM7ICAvKioKJiM0MzsgICAqIEBmbGFnczogSGFyZHdhcmUgc3BlY2lmaWMgZmxhZ3MKJiM0MzsgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKJiM0MzsgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgdG8gZXhwb3J0IFZDUFUgc3RhdGUgdG8KJiM0MzsgICAqLwomIzQzOyAgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyIHsKJiM0MzsgICAgICAgIF9fdTMyIGZsYWdzOwomIzQzOyAgICAgICAgX191MzIgcmVzZXJ2ZWQ7CiYjNDM7CXN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjsKJiM0MzsgIH07CiYjNDM7CiYjNDM7Rm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZSA6cmVmOmBLVk1fTUlHUkFURV9DTUQgJmx0O0tWTV9NSUdSQVRFX0NNRCZndDtgLgomIzQzOwomIzQzO0ZvciB2Q1BVIGltcG9ydCwgc2VlIGFsc28gOnJlZjpgS1ZNX0lNUE9SVF9WQ1BVICZsdDtLVk1fSU1QT1JUX1ZDUFUmZ3Q7YC4KJiM0MzsKJiM0MzsuLiBfS1ZNX0lNUE9SVF9WQ1BVOgomIzQzOwomIzQzOzQuMTQ4IEtWTV9JTVBPUlRfVkNQVQomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OCiYjNDM7OkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODYKJiM0Mzs6VHlwZTogdmNwdSBpb2N0bAomIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKGluL291dCkKJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCAmbHQ7IDAgb24gZXJyb3IKJiM0MzsKJiM0MztBbGxvd3MgdXNlcnNwYWNlIHRvIHJlcXVlc3QgdGhlIGhvc3QgdG8gaW1wb3J0IGEgVkNQVSBzdGF0ZSBmcm9tIGEgdXNlcnNwYWNlCiYjNDM7YnVmZmVyLgomIzQzOwomIzQzO1RoZSBWQ1BVIHN0YXRlIG1heSBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3IKJiM0Mztjb25maWRlbnRpYWwgY29tcHV0aW5nLCB0aGUgVkNQVSBzdGF0ZSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0byB0aGUKJiM0MztndWVzdC4KJiM0MzsKJiM0MztGb3IgdmNwdV90cmFuc2ZlciBhbmQgdkNQVSBpbXBvcnQsIHNlZSA6cmVmOmBLVk1fSU1QT1JUX1ZDUFUgJmx0O0tWTV9JTVBPUlRfVkNQVSZndDtgLgomIzQzOwomIzQzO0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWUgYWxzbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgJmx0O0tWTV9NSUdSQVRFX0NNRCZndDtgLgomIzQzOwogLi4gX2t2bV9ydW46CiAKIDUuIFRoZSBrdm1fcnVuIHN0cnVjdHVyZQpAQCAtOTQ5Myw2ICYjNDM7OTY4NywxNyBAQCB0YWtlIGNhcmUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZXNlIGNhc2VzLgogVGhlIHByZXNlbmNlIG9mIHRoaXMgY2FwYWJpbGl0eSBpbmRpY2F0ZXMgdGhhdCB0aGUgbmVzdGVkIEtWTSBndWVzdCBjYW4KIHN0YXJ0IGluIEVTQSBtb2RlLgogCiYjNDM7OC40OCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NgomIzQzOzpUYXJnZXQ6IFZNCiYjNDM7OlBhcmFtZXRlcnM6IE5vbmUKJiM0MzsKJiM0MztJbmRpY2F0ZXMgdGhhdCB0aGUgVk0gbmVlZHMgdG8gdXNlIEtWTSBjYWxscyBmb3IgbGl2ZSBtaWdyYXRpb24sIGFuZCB0aGF0IHRoZQomIzQzO0tWTV9NSUdSQVRFX0NNRCBpb2N0bCBhbmQgdGhlIEtWTV9FWFBPUlRfTUVNT1JZLCBLVk1fSU1QT1JUX01FTU9SWSwKJiM0MztLVk1fRVhQT1JUX1ZDUFUgYW5kIEtWTV9JTVBPUlRfVkNQVSBpb2N0bHMgYXJlIGF2YWlsYWJsZS4KJiM0MzsKIDkuIEtub3duIEtWTSBBUEkgcHJvYmxlbXMKID09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKaW5kZXggODNkYzUwODYxMzhiMy4uN2YxMTBmODBkNmY4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCkBAIC0xNDgsNiAmIzQzOzE0OCwxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKQogS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fcHJlcGFyZSkKIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21heF9tYXBwaW5nX2xldmVsKQogS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGNhcF9saXZlX21pZ3JhdGlvbikKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKG1pZ3JhdGVfY21kKQomIzQzO0tWTV9YODZfT1BfT1BUSU9OQUwoZXhwb3J0X21lbW9yeSkKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGltcG9ydF9tZW1vcnkpCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfdmNwdSkKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGltcG9ydF92Y3B1KQogI2VuZGlmCiAKICN1bmRlZiBLVk1fWDg2X09QCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA1ZjZjMWNlOTY3M2I3Li5iNjM2MjQwOGRhYjgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTIwMTAsNiAmIzQzOzIwMTAsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHsKIAlpbnQgKCpnbWVtX3ByZXBhcmUpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTsKIAl2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpOwogCWludCAoKmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTsKJiM0MzsJYm9vbCAoKmNhcF9saXZlX21pZ3JhdGlvbikoc3RydWN0IGt2bSAqa3ZtKTsKJiM0MzsJaW50ICgqbWlncmF0ZV9jbWQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9taWdyYXRlX2NtZCAqY21kKTsKJiM0MzsJaW50ICgqZXhwb3J0X21lbW9yeSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAqbWVtKTsKJiM0MzsJaW50ICgqaW1wb3J0X21lbW9yeSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAqbWVtKTsKJiM0MzsJaW50ICgqZXhwb3J0X3ZjcHUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyICp2Y3B1X3N0YXRlKTsKJiM0MzsJaW50ICgqaW1wb3J0X3ZjcHUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyICp2Y3B1X3N0YXRlKTsKIH07CiAKIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IGFmY2FjMTA0Mjk0N2EuLmU4Mzg1MzI2ODk0YjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTQ5NzMsNiAmIzQzOzQ5NzMsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KQogCWNhc2UgS1ZNX0NBUF9SRUFET05MWV9NRU06CiAJCXIgPSBrdm0gPyBrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtKGt2bSkgOiAxOwogCQlicmVhazsKJiM0MzsJY2FzZSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OOgomIzQzOwkJciA9IGt2bSA/IGt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgOiAwOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNjE4Niw2ICYjNDM7NjE4OSwzOCBAQCBzdGF0aWMgaW50IGt2bV9nZXRfcmVnX2xpc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbXBvcnQsCiYjNDM7CQkJCQl2b2lkIF9fdXNlciAqYXJncCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciB2Y3B1X3N0YXRlOwomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHwKJiM0MzsJICAgIChpbXBvcnQgJmFtcDsmYW1wOyAha3ZtX3g4Nl9vcHMuaW1wb3J0X3ZjcHUpIHx8CiYjNDM7CSAgICAoIWltcG9ydCAmYW1wOyZhbXA7ICFrdm1feDg2X29wcy5leHBvcnRfdmNwdSkpCiYjNDM7CQlyZXR1cm4gLUVOT1RUWTsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dmNwdV9zdGF0ZSwgYXJncCwgc2l6ZW9mKHZjcHVfc3RhdGUpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlpZiAodmNwdV9zdGF0ZS5yZXNlcnZlZCB8fCB2Y3B1X3N0YXRlLmJ1Zi5yZXNlcnZlZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoaW1wb3J0KQomIzQzOwkJciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgJmFtcDt2Y3B1X3N0YXRlKTsKJiM0MzsJZWxzZQomIzQzOwkJciA9IGt2bV94ODZfY2FsbChleHBvcnRfdmNwdSkodmNwdSwgJmFtcDt2Y3B1X3N0YXRlKTsKJiM0MzsJaWYgKHIgJmd0OyAwKQomIzQzOwkJciA9IC1FSU87CiYjNDM7CiYjNDM7CS8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIHRyYW5zZmVyICovCiYjNDM7CWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmFtcDt2Y3B1X3N0YXRlLCBzaXplb2YodmNwdV9zdGF0ZSkpKQomIzQzOwkJciA9IC1FRkFVTFQ7CiYjNDM7CiYjNDM7CXJldHVybiByOwomIzQzO30KJiM0MzsKIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNjY1Niw2ICYjNDM7NjY5MSwxNCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQlnb3RvIG91dDsKIAkJciA9IGt2bV94ODZfb3BzLnZjcHVfbWVtX2VuY19pb2N0bCh2Y3B1LCBhcmdwKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgS1ZNX0VYUE9SVF9WQ1BVOiB7CiYjNDM7CQlyID0ga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdSh2Y3B1LCBmYWxzZSwgYXJncCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwljYXNlIEtWTV9JTVBPUlRfVkNQVTogewomIzQzOwkJciA9IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUodmNwdSwgdHJ1ZSwgYXJncCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQogCWRlZmF1bHQ6CiAJCXIgPSAtRUlOVkFMOwogCX0KQEAgLTcyNTUsNiAmIzQzOzcyOTgsMzcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsCiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3RyYW5zZmVyX21lbW9yeShzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW1wb3J0LAomIzQzOwkJCQkJdm9pZCBfX3VzZXIgKmFyZ3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciBtZW07CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHwKJiM0MzsJICAgIChpbXBvcnQgJmFtcDsmYW1wOyAha3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeSkgfHwKJiM0MzsJICAgICghaW1wb3J0ICZhbXA7JmFtcDsgIWt2bV94ODZfb3BzLmV4cG9ydF9tZW1vcnkpKQomIzQzOwkJcmV0dXJuIC1FTk9UVFk7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO21lbSwgYXJncCwgc2l6ZW9mKG1lbSkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmIChtZW0ucmVzZXJ2ZWQgfHwgbWVtLmJ1Zi5yZXNlcnZlZCB8fCAhbWVtLm5yX2dmbnMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGltcG9ydCkKJiM0MzsJCXIgPSBrdm1feDg2X2NhbGwoaW1wb3J0X21lbW9yeSkoa3ZtLCAmYW1wO21lbSk7CiYjNDM7CWVsc2UKJiM0MzsJCXIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X21lbW9yeSkoa3ZtLCAmYW1wO21lbSk7CiYjNDM7CWlmIChyICZndDsgMCkKJiM0MzsJCXIgPSAtRUlPOwomIzQzOwomIzQzOwkvKiBDb3B5IGJhY2sgYWxzbyBvbiBhbiBlcnJvciB0byByZXBvcnQgYSBwYXJ0aWFsbHkgZG9uZSB0cmFuc2ZlciAqLwomIzQzOwlpZiAoY29weV90b191c2VyKGFyZ3AsICZhbXA7bWVtLCBzaXplb2YobWVtKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwogaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtJmd0O3ByaXZhdGVfZGF0YTsKQEAgLTc2MTQsNiAmIzQzOzc2ODgsMzQgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9tc3JfZmlsdGVyKGt2bSwgJmFtcDtmaWx0ZXIpOwogCQlicmVhazsKIAl9CiYjNDM7CWNhc2UgS1ZNX01JR1JBVEVfQ01EOiB7CiYjNDM7CQlzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIGNtZDsKJiM0MzsKJiM0MzsJCWlmICgha3ZtX3g4Nl9vcHMubWlncmF0ZV9jbWQgfHwKJiM0MzsJCSAgICAha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSkKJiM0MzsJCQlyZXR1cm4gLUVOT1RUWTsKJiM0MzsKJiM0MzsJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2NtZCwgYXJncCwgc2l6ZW9mKGNtZCkpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwkJaWYgKGNtZC5yZXNlcnZlZCB8fCBjbWQuYnVmLnJlc2VydmVkKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJciA9IGt2bV94ODZfY2FsbChtaWdyYXRlX2NtZCkoa3ZtLCAmYW1wO2NtZCk7CiYjNDM7CQlpZiAociAmZ3Q7IDApCiYjNDM7CQkJciA9IC1FSU87CiYjNDM7CiYjNDM7CQkvKiBDb3B5IGJhY2sgYWxzbyBvbiBhbiBlcnJvciB0byByZXBvcnQgYSBwYXJ0aWFsbHkgZG9uZSBjb21tYW5kICovCiYjNDM7CQlpZiAoY29weV90b191c2VyKGFyZ3AsICZhbXA7Y21kLCBzaXplb2YoY21kKSkpCiYjNDM7CQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwljYXNlIEtWTV9FWFBPUlRfTUVNT1JZOgomIzQzOwkJciA9IGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnkoa3ZtLCBmYWxzZSwgYXJncCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBLVk1fSU1QT1JUX01FTU9SWToKJiM0MzsJCXIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgdHJ1ZSwgYXJncCk7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlyID0gLUVOT1RUWTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKaW5kZXggNDE5MDExMDk3ZmE4ZS4uMGE5YWExMjZkYWFkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaApAQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgewogI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDkKJiM0MzsjZGVmaW5lIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gMjUwCiAKIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7CiAJX191MzIgaXJxY2hpcDsKQEAgLTEzNTAsNiAmIzQzOzEzNTEsOCBAQCBzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3AgewogI2RlZmluZSBLVk1fR0VUX0RFVklDRV9BVFRSCSAgX0lPVyhLVk1JTywgIDB4ZTIsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpCiAjZGVmaW5lIEtWTV9IQVNfREVWSUNFX0FUVFIJICBfSU9XKEtWTUlPLCAgMHhlMywgc3RydWN0IGt2bV9kZXZpY2VfYXR0cikKIAomIzQzOyNkZWZpbmUgS1ZNX01JR1JBVEVfQ01ECQkgIF9JT1dSKEtWTUlPLCAweGU0LCBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kKQomIzQzOwogLyoKICAqIGlvY3RscyBmb3IgdmNwdSBmZHMKICAqLwpAQCAtMTQ5MCw2ICYjNDM7MTQ5MywxMiBAQCBzdHJ1Y3Qga3ZtX2VuY19yZWdpb24gewogI2RlZmluZSBLVk1fR0VUX1NSRUdTMiAgICAgICAgICAgICBfSU9SKEtWTUlPLCAgMHhjYywgc3RydWN0IGt2bV9zcmVnczIpCiAjZGVmaW5lIEtWTV9TRVRfU1JFR1MyICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweGNkLCBzdHJ1Y3Qga3ZtX3NyZWdzMikKIAomIzQzOy8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gKi8KJiM0MzsjZGVmaW5lIEtWTV9FWFBPUlRfTUVNT1JZCSAgX0lPV1IoS1ZNSU8sIDB4ZTUsIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyKQomIzQzOyNkZWZpbmUgS1ZNX0lNUE9SVF9NRU1PUlkJICBfSU9XUihLVk1JTywgMHhlNiwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIpCiYjNDM7I2RlZmluZSBLVk1fRVhQT1JUX1ZDUFUJCSAgX0lPV1IoS1ZNSU8sIDB4ZTcsIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlcikKJiM0MzsjZGVmaW5lIEtWTV9JTVBPUlRfVkNQVQkJICBfSU9XUihLVk1JTywgMHhlOCwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyKQomIzQzOwogI2RlZmluZSBLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSAgICAoMSAmbHQ7Jmx0OyAwKQogI2RlZmluZSBLVk1fRElSVFlfTE9HX0lOSVRJQUxMWV9TRVQgICAgICAgICAgICAoMSAmbHQ7Jmx0OyAxKQogCkBAIC0xNjcwLDQgJiM0MzsxNjc5LDM4IEBAIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7CiAJX191NjQgcGFkZGluZ1s1XTsKIH07CiAKJiM0MzsjZGVmaW5lIEtWTV9NSUdSQVRFX1NFVFVQCQkwCiYjNDM7I2RlZmluZSBLVk1fTUlHUkFURV9JVEVSQVRJT04JCTEKJiM0MzsjZGVmaW5lIEtWTV9NSUdSQVRFX1NUT1BfQU5EX0NPUFkJMgomIzQzOyNkZWZpbmUgS1ZNX01JR1JBVEVfQUJPUlQJCTMKJiM0MzsjZGVmaW5lIEtWTV9NSUdSQVRFX0VORAkJCTQKJiM0MzsKJiM0MztzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciB7CiYjNDM7CV9fdTY0IGFkZHJlc3M7CiYjNDM7CV9fdTMyIHNpemU7CiYjNDM7CV9fdTMyIHJlc2VydmVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGt2bV9taWdyYXRlX2NtZCB7CiYjNDM7CV9fdTE2IGNvbW1hbmQ7CiYjNDM7CV9fdTE2IGZsYWdzOwomIzQzOwlfX3UzMiByZXNlcnZlZDsKJiM0MzsJc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgYnVmOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgewomIzQzOwlfX3U2NCBnZm5zOwomIzQzOwlfX3UzMiBucl9nZm5zOwomIzQzOwlfX3UxNiBpZDsKJiM0MzsJX191MTYgZmxhZ3M7CiYjNDM7CV9fdTY0IHJlc2VydmVkOwomIzQzOwlzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgewomIzQzOwlfX3UzMiBmbGFnczsKJiM0MzsJX191MzIgcmVzZXJ2ZWQ7CiYjNDM7CXN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjsKJiM0Mzt9OwomIzQzOwogI2VuZGlmIC8qIF9fTElOVVhfS1ZNX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaCBmb3IgTGl2ZSBNaWdyYXRpb24gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLiBJdCYjMzk7cyB0b3VjaGluZyBgRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0YCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGFuZCB0aGVuIHdlIGhhdmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gaGVhZGVyIGZpbGVzIGFuZCB0aGUgY29yZSBgeDg2LmNgIGltcGxlbWVudGF0aW9uLiBMYXN0bHksIGl0IHRvdWNoZXMgYGluY2x1ZGUvdWFwaS9saW51eC9rdm0uaGAuIFRoYXQgbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gbG9vayBhdC4KCk5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBsaXZlIG1pZ3JhdGlvbi4gR2l2ZW4gdGhlIGFyZWFzIGJlaW5nIHRvdWNoZWQsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBob29rcyBvciBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gbGl2ZSBtaWdyYXRpb24gY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIHZlbmRvciBjYWxsYmFja3MgYmVpbmcgaW1wbGVtZW50ZWQsIG9yIGlmIHRoZSBgY2FwX2xpdmVfbWlncmF0aW9uYCBjYXBhYmlsaXR5IGlzIGJlaW5nIGV4cG9zZWQgYW55d2hlcmUgaW4gdGhlIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IGhhcyBiZWVuIGFkZGVkIG9yIGFsdGVyZWQuCgpJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBrZXJuZWwgc291cmNlIGZvciBrZXl3b3JkczogYGNhcF9saXZlX21pZ3JhdGlvbmAsIGBleHBvcnRfbWVtb3J5YCwgYGltcG9ydF9tZW1vcnlgLCBgZXhwb3J0X3ZjcHVgLCBgaW1wb3J0X3ZjcHVgLCBhbmQgYG1pZ3JhdGVfY21kYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlc2UgY3J1Y2lhbCBmZWF0dXJlcyBhbmQgd2lsbCBxdWlja2x5IGhpZ2hsaWdodCBhbnkgY2hhbmdlcyBvciBhZGRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBJIGV4cGVjdCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgc2VlIGlmIGFueSBvZiB0aGVzZSBhcmUgaW1wbGVtZW50ZWQgaW4gYGt2bV94ODZfb3BzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoY2FwX2xpdmVfbWlncmF0aW9ufG1pZ3JhdGVfY21kfGV4cG9ydF9tZW1vcnl8aW1wb3J0X21lbW9yeXxleHBvcnRfdmNwdXxpbXBvcnRfdmNwdSkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY1NjU9S1ZNX1MzOTBfS0VZT1BfU1NLRVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTc2LTpUeXBlOiB2bSBpb2N0bFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY1Nzc6OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgKGluL291dClcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTc4LTpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYyAwIG9uIGVycm9yXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY1OTE9cmV0dXJuZWQuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjU5Mi1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NTkzOlRoZSBLVk1fTUlHUkFURV9DTUQgc3ViY29tbWFuZCBwYXNzZWQgaW4gc3RydWN0IGt2bV9taWdyYXRlX2NtZCBpcyBvbmUgb2Y6OlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY1OTQtXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY2MDE9VGhlIGt2bV90cmFuc2Zlcl9idWZmZXIgaXM6OlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjEzLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY2MTQ6VGhlIGt2bV9taWdyYXRlX2NtZCBpczo6XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYxNS1cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYyMS0gICAqL1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY2MjI6ICBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIHtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjIzLVx0X191MTYgY29tbWFuZDtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oPTE1MD1LVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTUxOktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChjYXBfbGl2ZV9taWdyYXRpb24pXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjE1MjpLVk1fWDg2X09QX09QVElPTkFMKG1pZ3JhdGVfY21kKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTM6S1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfbWVtb3J5KVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTQ6S1ZNX1g4Nl9PUF9PUFRJT05BTChpbXBvcnRfbWVtb3J5KVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTU6S1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfdmNwdSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTU2OktWTV9YODZfT1BfT1BUSU9OQUwoaW1wb3J0X3ZjcHUpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTE1Ny0jZW5kaWZcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTE3ODU9c3RydWN0IGt2bV94ODZfb3BzIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwMTItXHRpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjIwMTM6XHRib29sICgqY2FwX2xpdmVfbWlncmF0aW9uKShzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoyMDE0Olx0aW50ICgqbWlncmF0ZV9jbWQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9taWdyYXRlX2NtZCAqY21kKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxNTpcdGludCAoKmV4cG9ydF9tZW1vcnkpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKm1lbSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjIwMTY6XHRpbnQgKCppbXBvcnRfbWVtb3J5KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyICptZW0pO1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoyMDE3Olx0aW50ICgqZXhwb3J0X3ZjcHUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyICp2Y3B1X3N0YXRlKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxODpcdGludCAoKmltcG9ydF92Y3B1KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciAqdmNwdV9zdGF0ZSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwMTktfTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NDc2OD1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy00OTc2LVx0Y2FzZSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OOlxuYXJjaC94ODYva3ZtL3g4Ni5jOjQ5Nzc6XHRcdHIgPSBrdm0gPyBrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIDogMDtcbmFyY2gveDg2L2t2bS94ODYuYy00OTc4LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjE5Mj1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGltcG9ydCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjE5OC1cbmFyY2gveDg2L2t2bS94ODYuYzo2MTk5Olx0aWYgKCFrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIHx8XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjIwMDpcdCAgICAoaW1wb3J0IFx1MDAyNlx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X3ZjcHUpIHx8XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjIwMTpcdCAgICAoIWltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF92Y3B1KSlcbmFyY2gveDg2L2t2bS94ODYuYy02MjAyLVx0XHRyZXR1cm4gLUVOT1RUWTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjIxMC1cdGlmIChpbXBvcnQpXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjIxMTpcdFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgXHUwMDI2dmNwdV9zdGF0ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjIxMi1cdGVsc2VcbmFyY2gveDg2L2t2bS94ODYuYzo2MjEzOlx0XHRyID0ga3ZtX3g4Nl9jYWxsKGV4cG9ydF92Y3B1KSh2Y3B1LCBcdTAwMjZ2Y3B1X3N0YXRlKTtcbmFyY2gveDg2L2t2bS94ODYuYy02MjE0LVx0aWYgKHIgXHUwMDNlIDApXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTczMDE9c3RhdGljIGludCBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbXBvcnQsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTczMDYtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMwNzpcdGlmICgha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSB8fFxuYXJjaC94ODYva3ZtL3g4Ni5jOjczMDg6XHQgICAgKGltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmltcG9ydF9tZW1vcnkpIHx8XG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMwOTpcdCAgICAoIWltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF9tZW1vcnkpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTczMTAtXHRcdHJldHVybiAtRU5PVFRZO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy03MzE4LVx0aWYgKGltcG9ydClcbmFyY2gveDg2L2t2bS94ODYuYzo3MzE5Olx0XHRyID0ga3ZtX3g4Nl9jYWxsKGltcG9ydF9tZW1vcnkpKGt2bSwgXHUwMDI2bWVtKTtcbmFyY2gveDg2L2t2bS94ODYuYy03MzIwLVx0ZWxzZVxuYXJjaC94ODYva3ZtL3g4Ni5jOjczMjE6XHRcdHIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X21lbW9yeSkoa3ZtLCBcdTAwMjZtZW0pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTczMjItXHRpZiAociBcdTAwM2UgMClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzMzMj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTEtXHRjYXNlIEtWTV9NSUdSQVRFX0NNRDoge1xuYXJjaC94ODYva3ZtL3g4Ni5jOjc2OTI6XHRcdHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgY21kO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTMtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzY5NDpcdFx0aWYgKCFrdm1feDg2X29wcy5taWdyYXRlX2NtZCB8fFxuYXJjaC94ODYva3ZtL3g4Ni5jOjc2OTU6XHRcdCAgICAha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSlcbmFyY2gveDg2L2t2bS94ODYuYy03Njk2LVx0XHRcdHJldHVybiAtRU5PVFRZO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy03NzAzLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjc3MDQ6XHRcdHIgPSBrdm1feDg2X2NhbGwobWlncmF0ZV9jbWQpKGt2bSwgXHUwMDI2Y21kKTtcbmFyY2gveDg2L2t2bS94ODYuYy03NzA1LVx0XHRpZiAociBcdTAwM2UgMClcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTI1Mz1zdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Age1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xMzUzLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjEzNTQ6I2RlZmluZSBLVk1fTUlHUkFURV9DTURcdFx0ICBfSU9XUihLVk1JTywgMHhlNCwgc3RydWN0IGt2bV9taWdyYXRlX2NtZClcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xMzU1LVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjg4PXN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY5My1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjk0OnN0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2OTUtXHRfX3UxNiBjb21tYW5kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODY3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogOTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gTGl2ZSBNaWdyYXRpb24gQ2FwYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiAob3IgbGFjayB0aGVyZW9mKSBvZiBgY2FwX2xpdmVfbWlncmF0aW9uYC4gIEZpcnN0LCBJJiMzOTttIGNoZWNraW5nIGZvciBpbXBsZW1lbnRhdGlvbnMgb2YgYGNhcF9saXZlX21pZ3JhdGlvbmAsIGBtaWdyYXRlX2NtZGAsIGBleHBvcnRfbWVtb3J5YCwgYGltcG9ydF9tZW1vcnlgLCBgZXhwb3J0X3ZjcHVgLCBhbmQgYGltcG9ydF92Y3B1YCB3aXRoaW4gdGhlIGtleSBLVk0gYXJjaCBmaWxlcyBsaWtlIGB2bXguY2AsIGBzdm0uY2AsIGB0ZHguY2AsIGFuZCBgc2V2LmNgLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgdmVuZG9yLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4KCkEgYnJvYWQgc2VhcmNoIHVzaW5nIGBncmVwYCBhY3Jvc3MgdGhlIGNvZGViYXNlIHNob3VsZCBiZSBkZWZpbml0aXZlLiBZZXMsIHRoZSBncmVwIHNob3dlZCAqYWxsKiBvY2N1cnJlbmNlcyBhY3Jvc3MgdGhlICplbnRpcmUqIGNvZGViYXNlLCBzbyB0aGF0IHNob3VsZCBiZSByZWxpYWJsZS4gTm93IEkmIzM5O20gdmVyaWZ5aW5nIHRoZSBncmVwIHBhdHRlcm4gdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgaXQmIzM5O3MgY2F0Y2hpbmcgYWxsIHRoZSByZWxldmFudCBzeW1ib2xzLiBUaGUgcGF0dGVybiBgKGNhcF9saXZlX21pZ3JhdGlvbnxtaWdyYXRlX2NtZHxleHBvcnRfbWVtb3J5fGltcG9ydF9tZW1vcnl8ZXhwb3J0X3ZjcHV8aW1wb3J0X3ZjcHUpYCBzZWVtcyBjb3JyZWN0IGFuZCBpdCBvbmx5IHlpZWxkZWQgcmVmZXJlbmNlcyBpbiBkb2N1bWVudGF0aW9uLCB0aGUgaGVhZGVyIGZpbGVzIGFuZCB0aGUgeDg2IGFuZCB1YXBpIGZpbGVzLiBOb3RoaW5nIHZlbmRvci1zcGVjaWZpYy4KCk5vdywgYSBjcnVjaWFsIHBvaW50OiBzaW5jZSBgY2FwX2xpdmVfbWlncmF0aW9uYCBpcyBkZWZpbmVkIGFzIGBLVk1fWDg2X09QX09QVElPTkFMX1JFVDBgLCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pYCB3aGVuIG5vIHZlbmRvciBpbXBsZW1lbnRhdGlvbiBpcyBwcmVzZW50IGlzIGVzc2VudGlhbGx5IDAgKGZhbHNlKSBiZWNhdXNlIGl0IGRlZmF1bHRzIHRvIE5VTEwgb3IgYSBzdHViIHJldHVybmluZyAwLiBUaGF04oCZcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBmbG93LgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyB2YWx1ZSBpcyB1c2VkLiBJbiBga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdWAsIGBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5YCwgYW5kIGBrdm1fYXJjaF92bV9pb2N0bGAsIGlmIGBjYXBfbGl2ZV9taWdyYXRpb25gIGlzIHplcm8gKGZhbHNlKSwgb3IgdGhlIHJlbGV2YW50IG9wcyBhcmUgTlVMTCwgaXQgcmV0dXJucyAtRU5PVFRZIGltbWVkaWF0ZWx5LiBBbmQgdGhlIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCBqdXN0IHJldHVybnMgdGhlIHZhbHVlIG9mIGBjYXBfbGl2ZV9taWdyYXRpb25gLiBTbyBubyBsaXZlIG1pZ3JhdGlvbiBpcyBhbGxvd2VkLgoKV2FpdCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIGFyY2hpdGVjdHVyZXMgYWRkaW5nIGFueXRoaW5nIGhlcmU/IExldCYjMzk7cyBjaGVjayBgYXJtNjRgLCBgczM5MGAsIG9yIGFueSBvdGhlcnMgZm9yIGFueSBtb2RpZmljYXRpb25zLgoKT2theSwgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyB4ODYgcmVsYXRlZCBmaWxlcy4gU3BlY2lmaWNhbGx5OiB0aGUgZG9jdW1lbnRhdGlvbiwgeDg2IGhlYWRlcnMsIHg4NiBLVk0gY29kZSwgYW5kIHRoZSBVQVBJIGhlYWRlci4KCkZpbmFsbHksIGp1c3QgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUsIGxldOKAmXMgcnVuIGEgcXVpY2sgYGdpdCBsb2dgIGFuZCBgZ2l0IHN0YXR1c2AgY2hlY2sgdG8gcnVsZSBvdXQgYW55IHJlY2VudCBjb21taXRzIG9yIGxvY2FsIG1vZGlmaWNhdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzZWFyY2ggcmVzdWx0cy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGhpZGluZyBpbiB0aGUgYnVzaGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9DQVBfTElWRV9NSUdSQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY1NjU9S1ZNX1MzOTBfS0VZT1BfU1NLRVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTczLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY1NzQ6OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTc1LTpBcmNoaXRlY3R1cmVzOiB4ODZcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjU4OT1UaGUgdmVuZG9yIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgbG9ja2luZyBhbmQgY2hlY2tzIHRoZSB2YWxpZCBmbGFnc1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY1OTA6Yml0cy4gSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXNcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTkxLXJldHVybmVkLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NjE0PVRoZSBrdm1fbWlncmF0ZV9jbWQgaXM6OlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjMzLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY2MzQ6OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjM1LTpBcmNoaXRlY3R1cmVzOiB4ODZcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjY0NT10aGUgZ3Vlc3QuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjY0Ni1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NjQ3OklmIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIFZNLCAtRU5PVFRZIGlzIHJldHVybmVkLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2NDgtXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY2NzU9Rm9yIG1lbW9yeSBpbXBvcnQsIHNlZSBhbHNvIDpyZWY6YEtWTV9JTVBPUlRfTUVNT1JZIFx1MDAzY0tWTV9JTVBPUlRfTUVNT1JZXHUwMDNlYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjY4Mi1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NjgzOjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjY4NC06QXJjaGl0ZWN0dXJlczogeDg2XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY2OTQ9dGhlIGd1ZXN0LlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2OTUtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjY5NjpJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpcyByZXR1cm5lZC5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02Njk3LVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NzA1PUZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWVvIDpyZWY6YEtWTV9NSUdSQVRFX0NNRCBcdTAwM2NLVk1fTUlHUkFURV9DTURcdTAwM2VgLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NzEwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY3MTE6OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NzEyLTpBcmNoaXRlY3R1cmVzOiBhcm02NCwgeDg2XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY3Mzk9Rm9yIHZDUFUgaW1wb3J0LCBzZWUgYWxzbyA6cmVmOmBLVk1fSU1QT1JUX1ZDUFUgXHUwMDNjS1ZNX0lNUE9SVF9WQ1BVXHUwMDNlYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjc0NS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NzQ2OjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjc0Ny06QXJjaGl0ZWN0dXJlczogYXJtNjQsIHg4NlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD05Njg4PXN0YXJ0IGluIEVTQSBtb2RlLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk2ODktXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6OTY5MDo4LjQ4IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NjkxLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz00NzY4PWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5NzUtXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjQ5NzY6XHRjYXNlIEtWTV9DQVBfTElWRV9NSUdSQVRJT046XG5hcmNoL3g4Ni9rdm0veDg2LmMtNDk3Ny1cdFx0ciA9IGt2bSA/IGt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgOiAwO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD02NzQ9c3RydWN0IGt2bV9lbmFibGVfY2FwIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtOTk5LSNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjEwMDA6I2RlZmluZSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIDI1MFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTEwMDEtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE0NDU9c3RydWN0IGt2bV9lbmNfcmVnaW9uIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTQ5NS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNDk2Oi8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNDk3LSNkZWZpbmUgS1ZNX0VYUE9SVF9NRU1PUllcdCAgX0lPV1IoS1ZNSU8sIDB4ZTUsIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzQ4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBLVk1fWDg2X09QX09QVElPTkFMX1JFVDBgIHRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSBLVk0geDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBncmVwIHdpdGhpbiB0aGUgYGFyY2gveDg2L2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgbWFjcm8gaXMgdXNlZCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBLVk0gaW1wbGVtZW50YXRpb24uIEhvcGVmdWxseSwgdGhlIHJlc3VsdHMgd2lsbCBwb2ludCBtZSB0b3dhcmRzIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFuZCBhbGxvdyBtZSB0byB1bnJhdmVsIGl0cyBmdW5jdGlvbiB3aXRoaW4gdGhlIHg4NiB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fWDg2X09QX09QVElPTkFMX1JFVDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTMtICAgICFkZWZpbmVkKEtWTV9YODZfT1BfT1BUSU9OQUwpIHx8IFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjQ6ICAgICFkZWZpbmVkKEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtNS0jZXJyb3IgTWlzc2luZyBvbmUgb3IgbW9yZSBLVk1fWDg2X09QICNkZWZpbmVzXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMi0gKiBLVk1fWDg2X09QX09QVElPTkFMKCkgY2FuIGJlIHVzZWQgZm9yIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGNhbiBoYXZlXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjEzOiAqIGEgTlVMTCBkZWZpbml0aW9uLiAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKCkgY2FuIGJlIHVzZWQgbGlrZXdpc2VcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTQtICogdG8gbWFrZSBhIGRlZmluaXRpb24gb3B0aW9uYWwsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGRlZmF1bHQgd2lsbFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9MjU9S1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9wcmVfZGVzdHJveSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MjY6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfcHJlY3JlYXRlKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0yNy1LVk1fWDg2X09QKHZjcHVfY3JlYXRlKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9NzU9S1ZNX1g4Nl9PUChpbmplY3Rfbm1pKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo3NjpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoaXNfdm5taV9wZW5kaW5nKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo3NzpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X3ZubWlfcGVuZGluZylcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtNzgtS1ZNX1g4Nl9PUChpbmplY3RfZXhjZXB0aW9uKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9OTM9S1ZNX1g4Nl9PUF9PUFRJT05BTChzeW5jX3Bpcl90b19pcnIpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjk0OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfdHNzX2FkZHIpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjk1OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfaWRlbnRpdHlfbWFwX2FkZHIpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjk2OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnZXRfbXRfbWFzaylcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6OTc6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtOTgtS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjk5OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfZXh0ZXJuYWxfc3B0ZSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTAwLUtWTV9YODZfT1BfT1BUSU9OQUwoZnJlZV9leHRlcm5hbF9zcHQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xMTY9S1ZNX1g4Nl9PUF9PUFRJT05BTChhcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjExNzpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZHlfYXBpY3ZfaGFzX3BlbmRpbmdfaW50ZXJydXB0KVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMTgtS1ZNX1g4Nl9PUF9PUFRJT05BTChwcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0KVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9MTQ0PUtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNDU6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTE0Ni1LVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNDc9S1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTQ4OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjE0OTpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYXhfbWFwcGluZ19sZXZlbClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTUwLUtWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTE6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGNhcF9saXZlX21pZ3JhdGlvbilcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTUyLUtWTV9YODZfT1BfT1BUSU9OQUwobWlncmF0ZV9jbWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNTY9S1ZNX1g4Nl9PUF9PUFRJT05BTChpbXBvcnRfdmNwdSlcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTE2MC0jdW5kZWYgS1ZNX1g4Nl9PUF9PUFRJT05BTFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNjE6I3VuZGVmIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MjA2OD1leHRlcm4gc3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjA3NC0jZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9PUFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoyMDc1OiNkZWZpbmUgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwIEtWTV9YODZfT1BcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjA3Ni0jaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1vcHMuaFx1MDAzZVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xNDM9c3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzIF9fcmVhZF9tb3N0bHk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTE0OC0jZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9PUFxuYXJjaC94ODYva3ZtL3g4Ni5jOjE0OTojZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X09QXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTUwLSNpbmNsdWRlIFx1MDAzY2FzbS9rdm0teDg2LW9wcy5oXHUwMDNlXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMTE5PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fb3BzX3VwZGF0ZShzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDEyNy0jZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUwgX19LVk1fWDg2X09QXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxMjg6I2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDEyOS1cdHN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2XyMjZnVuYywgKHZvaWQgKilrdm1feDg2X29wcy5mdW5jID8gOiBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTQ5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTQ1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLVk0gTGl2ZSBNaWdyYXRpb24gSW9jdGwgUGx1bWJpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBpbnRyb2R1Y2luZyB0aGUgcGx1bWJpbmcgZm9yIGxpdmUgbWlncmF0aW9uIGlvY3Rscywgc3BlY2lmaWNhbGx5IGZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nIGZlYXR1cmVzIGxpa2UgVERYL1NFVi1TTlAsIHdpdGhpbiB0aGUgS1ZNIFg4NiBmcmFtZXdvcmsuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChjYXBfbGl2ZV9taWdyYXRpb24pYC4gIFdlIGtub3csIGZyb20gdGhlIGNvZGUsIHRoYXQgYGt2bV94ODZfb3BzLmNhcF9saXZlX21pZ3JhdGlvbmAgaXMgY3VycmVudGx5IE5VTEwsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBzdGF0ZSBmb3IgYm90aCBJbnRlbCBhbmQgQU1EIGF0IHRoaXMgc3RhZ2UsIHNpbmNlIG5laXRoZXIgdm14IG5vciBzdm0gaGF2ZSBpbXBsZW1lbnRlZCBpdC4gVGhpcyByZXN1bHRzIGluIGBzdGF0aWNfY2FsbChrdm1feDg2X2NhcF9saXZlX21pZ3JhdGlvbilgIGNhbGxpbmcgYSBzdHViIHRoYXQgcmV0dXJucyAwLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgcmV0dXJuIHZhbHVlIG9mIDAgZnJvbSBgY2FwX2xpdmVfbWlncmF0aW9uKGt2bSlgIGxhbmRzLiBMb29raW5nIGF0IGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCwgd2UgaGF2ZSBhIGRpcmVjdCByZXR1cm4gb2YgMCwgd2hpY2ggaXMgc2ltcGxlIGVub3VnaC4gIGBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1YCwgYGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnlgLCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbGwgY29udGFpbiBjaGVja3MgbGlrZSBgIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSlgLCBhbmQgc2luY2UgYGNhcF9saXZlX21pZ3JhdGlvbmAgcmV0dXJucyAwLCB0aGUgY29kZSBpbW1lZGlhdGVseSByZXR1cm5zIGAtRU5PVFRZYCBpbiBhbGwgdGhlc2UgY2FzZXMuICAKCk15IG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgdGhpcyB0aG9yb3VnaCBhIGdyZXAgb2YgdGhlIGVudGlyZSBjb2RlYmFzZSBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgd2hlcmUgYGt2bV94ODZfb3BzLm1pZ3JhdGVfY21kYCwgYGt2bV94ODZfb3BzLmV4cG9ydF9tZW1vcnlgLCBga3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeWAsIGBrdm1feDg2X29wcy5leHBvcnRfdmNwdWAsIGBrdm1feDg2X29wcy5pbXBvcnRfdmNwdWAgb3IgYGt2bV94ODZfb3BzLmNhcF9saXZlX21pZ3JhdGlvbmAgYXJlICphY3R1YWxseSogc2V0LiBBbmQgd2UmIzM5O3ZlIGFscmVhZHkgZG9uZSB0aGF0LCBjb25maXJtaW5nIG5vIG90aGVyIG9jY3VycmVuY2VzLiBUaGlzLCBhcyBJIGV4cGVjdGVkLCBzdWdnZXN0cyB0aGlzIHBhdGNoIGlzICpvbmx5KiBzZXR0aW5nIHVwIHRoZSBpbnRlcmZhY2UsIHRoZSBpb2N0bCBkZWZpbml0aW9ucywgYW5kIHRoZSBpbml0aWFsIGRpc3BhdGNoZXIgc3RydWN0dXJlIGJ1dCBkb2VzbiYjMzk7dCBpbmNsdWRlIGFueSB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHlldC4KCk5vdywgYSBrZXkgcXVlc3Rpb246IGNhbiAqYW55KiB1c2VyLXByb3ZpZGVkIGlucHV0IGV2ZW4gKnRvdWNoKiBjb2RlIGJleW9uZCB0aGF0IGluaXRpYWwgY2hlY2s/ICBMb29raW5nIGRlZXBlciBhdCBga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdWAsIGl0JiMzOTtzIGNsZWFyIHRoZSBjaGVjayBpcyBhdCB0aGUgdmVyeSB0b3Agb2YgdGhlIGZ1bmN0aW9uLCBiZWZvcmUgYW55IGBjb3B5X2Zyb21fdXNlcmAgb3Igb3RoZXIgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSBjb2RlLiBUaGUgc2FtZSBob2xkcyB0cnVlIGZvciBga3ZtX3ZtX2lvY3RsX3RyYW5zZmVyX21lbW9yeWAgYW5kIGBLVk1fTUlHUkFURV9DTURgLiAgVGhlIGNydWNpYWwgY2hlY2sgaGFwcGVucyBpbW1lZGlhdGVseSwgZW5zdXJpbmcgYC1FTk9UVFlgIGlzIHJldHVybmVkIGJlZm9yZSBhbnkgZnVydGhlciBwcm9jZXNzaW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGd1aWRlbGluZXMgZm9yICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgdG8gY29uZmlybSBvdXIgYXNzdW1wdGlvbnMgaGVyZS4gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNoYW5nZXMgdG8gY29uc3RhbnRzIHRoYXQgZG9uJiMzOTt0IGFsdGVyIGV4ZWN1dGlvbiwgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBhbGwgZ2V0IGEgV29ydGhGdXp6aW5nPWZhbHNlLiBIZXJlLCBpdCBpcyBjbGVhciB0aGF0IHRoZSBuZXcgaW9jdGxzIGFyZSBzdHViYmVkIGFuZCB1bnJlYWNoYWJsZSBzaW5jZSBgY2FwX2xpdmVfbWlncmF0aW9uYCBhbmQgb3RoZXIgdmVuZG9yIGhvb2tzIGFyZSBub3QgaW1wbGVtZW50ZWQuIFRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgaW4gYSB3YXkgdGhhdCByZXR1cm5zIGJlZm9yZSB0aGUgZXhlY3V0aW9uIG9mIGNvcmUgbG9naWMgb3IgaGFuZGxpbmcgb2YgdXNlciBpbnB1dHMuCgpGb3IgYWRkZWQgYXNzdXJhbmNlLCBsZXQmIzM5O3MgdmVyaWZ5IHdpdGggYHJlYWQtZmlsZWAgb24gYGFyY2gveDg2L2t2bS94ODYuY2AsIGFyb3VuZCB0aG9zZSBmdW5jdGlvbnMsIGp1c3QgdG8gMTAwJSBlbnN1cmUgd2UgbWlzc2VkIG5vdGhpbmcuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBwcmltYXJpbHkgaW50cm9kdWNlcyB1bnJlYWNoYWJsZSBpb2N0bHMgYW5kIHN0dWJzIGZvciBmdXR1cmUgaW1wbGVtZW50YXRpb24sIHRoaXMgaXMgZGVmaW5pdGVseSBhICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgc2NlbmFyaW8uIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgZXhwb3NlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2VzIGFuZCB3aWxsIGxpa2VseSBiZSB3b3J0aCByZS1ldmFsdWF0aW5nIHdoZW4gdGhlIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgYXJlIGFkZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjE5MDpcdH1cbjYxOTE6XHRcbjYxOTI6XHRzdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGltcG9ydCxcbjYxOTM6XHRcdFx0XHRcdFx0dm9pZCBfX3VzZXIgKmFyZ3ApXG42MTk0Olx0e1xuNjE5NTpcdFx0c3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyIHZjcHVfc3RhdGU7XG42MTk2Olx0XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbjYxOTc6XHRcdGludCByO1xuNjE5ODpcdFxuNjE5OTpcdFx0aWYgKCFrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIHx8XG42MjAwOlx0XHQgICAgKGltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmltcG9ydF92Y3B1KSB8fFxuNjIwMTpcdFx0ICAgICghaW1wb3J0IFx1MDAyNlx1MDAyNiAha3ZtX3g4Nl9vcHMuZXhwb3J0X3ZjcHUpKVxuNjIwMjpcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbjYyMDM6XHRcbjYyMDQ6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ2Y3B1X3N0YXRlLCBhcmdwLCBzaXplb2YodmNwdV9zdGF0ZSkpKVxuNjIwNTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjYyMDY6XHRcbjYyMDc6XHRcdGlmICh2Y3B1X3N0YXRlLnJlc2VydmVkIHx8IHZjcHVfc3RhdGUuYnVmLnJlc2VydmVkKVxuNjIwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjYyMDk6XHRcbjYyMTA6XHRcdGlmIChpbXBvcnQpXG42MjExOlx0XHRcdHIgPSBrdm1feDg2X2NhbGwoaW1wb3J0X3ZjcHUpKHZjcHUsIFx1MDAyNnZjcHVfc3RhdGUpO1xuNjIxMjpcdFx0ZWxzZVxuNjIxMzpcdFx0XHRyID0ga3ZtX3g4Nl9jYWxsKGV4cG9ydF92Y3B1KSh2Y3B1LCBcdTAwMjZ2Y3B1X3N0YXRlKTtcbjYyMTQ6XHRcdGlmIChyIFx1MDAzZSAwKVxuNjIxNTpcdFx0XHRyID0gLUVJTztcbjYyMTY6XHRcbjYyMTc6XHRcdC8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIHRyYW5zZmVyICovXG42MjE4Olx0XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNnZjcHVfc3RhdGUsIHNpemVvZih2Y3B1X3N0YXRlKSkpXG42MjE5Olx0XHRcdHIgPSAtRUZBVUxUO1xuNjIyMDpcdFxuNjIyMTpcdFx0cmV0dXJuIHI7XG42MjIyOlx0fVxuNjIyMzpcdFxuNjIyNDpcdGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbjYyMjU6XHRcdFx0XHQgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbjYyMjY6XHR7XG42MjI3Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbjYyMjg6XHRcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuNjIyOTpcdFx0aW50IHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTM1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIGxvY2F0aW9ucywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRleHQsIGFzIHRob3VnaCB0aGV5IHdlcmUgbXkgaW1tZWRpYXRlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEtWTSB4ODYgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IEtWTSYjMzk7cyB4ODYgY29kZSwgYW5kIEkgbmVlZCB0byBob25lIGluIG9uIGEgY291cGxlIG9mIHNwZWNpZmljIGFyZWFzLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGludGVyZXN0aW5nIGhhcHBlbmluZyBhcm91bmQgbGluZXMgYDczMDAtNzM0MGAgYW5kIHRoZW4gYWxzbyBgNzY5MC03NzIwYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aG9zZSBzZWN0aW9ucyBhcmUgaGFuZGxpbmcgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIHg4NiBlbXVsYXRpb24gb3IgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIGFuZCBhbnkgc3VidGxlIGZsYXdzIGluIHRoZSBsb2dpYyB0aGVyZSBjb3VsZCBsZWFkIHRvIHBvdGVudGlhbCBleHBsb2l0cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRob3NlIGNodW5rcyBvZiBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MzAwOlx0XG43MzAxOlx0c3RhdGljIGludCBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbXBvcnQsXG43MzAyOlx0XHRcdFx0XHRcdHZvaWQgX191c2VyICphcmdwKVxuNzMwMzpcdHtcbjczMDQ6XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyIG1lbTtcbjczMDU6XHRcdGludCByO1xuNzMwNjpcdFxuNzMwNzpcdFx0aWYgKCFrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIHx8XG43MzA4Olx0XHQgICAgKGltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmltcG9ydF9tZW1vcnkpIHx8XG43MzA5Olx0XHQgICAgKCFpbXBvcnQgXHUwMDI2XHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfbWVtb3J5KSlcbjczMTA6XHRcdFx0cmV0dXJuIC1FTk9UVFk7XG43MzExOlx0XG43MzEyOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2bWVtLCBhcmdwLCBzaXplb2YobWVtKSkpXG43MzEzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuNzMxNDpcdFxuNzMxNTpcdFx0aWYgKG1lbS5yZXNlcnZlZCB8fCBtZW0uYnVmLnJlc2VydmVkIHx8ICFtZW0ubnJfZ2ZucylcbjczMTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MzE3Olx0XG43MzE4Olx0XHRpZiAoaW1wb3J0KVxuNzMxOTpcdFx0XHRyID0ga3ZtX3g4Nl9jYWxsKGltcG9ydF9tZW1vcnkpKGt2bSwgXHUwMDI2bWVtKTtcbjczMjA6XHRcdGVsc2VcbjczMjE6XHRcdFx0ciA9IGt2bV94ODZfY2FsbChleHBvcnRfbWVtb3J5KShrdm0sIFx1MDAyNm1lbSk7XG43MzIyOlx0XHRpZiAociBcdTAwM2UgMClcbjczMjM6XHRcdFx0ciA9IC1FSU87XG43MzI0Olx0XG43MzI1Olx0XHQvKiBDb3B5IGJhY2sgYWxzbyBvbiBhbiBlcnJvciB0byByZXBvcnQgYSBwYXJ0aWFsbHkgZG9uZSB0cmFuc2ZlciAqL1xuNzMyNjpcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZtZW0sIHNpemVvZihtZW0pKSlcbjczMjc6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG43MzI4Olx0XG43MzI5Olx0XHRyZXR1cm4gcjtcbjczMzA6XHR9XG43MzMxOlx0XG43MzMyOlx0aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuNzMzMzpcdHtcbjczMzQ6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuNzMzNTpcdFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG43MzM2Olx0XHRpbnQgciA9IC1FTk9UVFk7XG43MzM3Olx0XG43MzM4Olx0I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG43MzM5Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzNwoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIExpdmUgTWlncmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBLVk0gbGl2ZSBtaWdyYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIGNvZGUgKmludHJvZHVjZXMqIHRoZSBuZWNlc3NhcnkgZmVhdHVyZXMsIHNwZWNpZmljYWxseSB0aGUgYEtWTV9DQVBfTElWRV9NSUdSQVRJT05gIGNhcGFiaWxpdHkgYW5kIHRoZSBhc3NvY2lhdGVkIGlvY3RsczogYEtWTV9NSUdSQVRFX0NNRGAsIGBLVk1fRVhQT1JUX01FTU9SWWAsIGBLVk1fSU1QT1JUX01FTU9SWWAsIGBLVk1fRVhQT1JUX1ZDUFVgLCBhbmQgYEtWTV9JTVBPUlRfVkNQVWAuIFRoYXQmIzM5O3MgdGhlIHRoZW9yeSwgYW55d2F5LgoKQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiBpdCwgKm5vKiB2ZW5kb3IgYmFja2VuZCwgYXQgbGVhc3Qgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgdHJlZSwgYWN0dWFsbHkgKmltcGxlbWVudHMqIGBjYXBfbGl2ZV9taWdyYXRpb25gIG9yIGFueSBvZiB0aGUgbWlncmF0aW9uIGNhbGxiYWNrcy4gTWVhbmluZywgY2hlY2tpbmcgZm9yIHRoYXQgY2FwYWJpbGl0eSwgb3IgZXZlbiB0cnlpbmcgdG8gY2FsbCB0aG9zZSBuZXcgaW9jdGxzLCB3aWxsIGltbWVkaWF0ZWx5IGJhaWwgb3V0LiBUaGUgcmVzdWx0IHdpbGwgZWl0aGVyIGJlIGEgYDBgIG9yIGFuIGAtRU5PVFRZYCBlcnJvci4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIHRoaXMgdHJhbnNsYXRlcyB0byBhYnNvbHV0ZWx5ICpub3RoaW5nKiBpbiB0aGUgdW5kZXJseWluZyBsb2dpYyBiZWluZyByZWFjaGFibGUsIGxldCBhbG9uZSBleGVjdXRhYmxlLiBJdCYjMzk7cyBhIGRlYWQgZW5kLgoKVGhlcmVmb3JlLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCBpcyBhIG5vbi1zdGFydGVyLiBUaGVyZSYjMzk7cyBubyB2YWx1ZSBpbiB0cnlpbmcgdG8gcG9rZSBhcm91bmQgdGhpcyBhcmVhIGFzLWlzLiBJdCYjMzk7cyBub3Qgd29ydGggdGhlIGVmZm9ydC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgS1ZNIGxpdmUgbWlncmF0aW9uIGlvY3RscyAoS1ZNX01JR1JBVEVfQ01ELCBLVk1fRVhQT1JUX01FTU9SWSwgS1ZNX0lNUE9SVF9NRU1PUlksIEtWTV9FWFBPUlRfVkNQVSwgS1ZNX0lNUE9SVF9WQ1BVKSBhbmQgY2FwYWJpbGl0eSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OLCBhbG9uZyB3aXRoIGRpc3BhdGNoZXIgaG9va3MgaW4ga3ZtX3g4Nl9vcHMuIEhvd2V2ZXIsIG5vIHZlbmRvciBiYWNrZW5kIGltcGxlbWVudHMgY2FwX2xpdmVfbWlncmF0aW9uIG9yIGFueSBvZiB0aGUgbWlncmF0aW9uIGNhbGxiYWNrcy4gQXMgYSByZXN1bHQsIGFsbCBuZXcgaW9jdGxzIGltbWVkaWF0ZWx5IHJldHVybiAtRU5PVFRZIGFuZCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGNoZWNrcyByZXR1cm4gMCwgbWFraW5nIHRoZSBoYW5kbGVyIGxvZ2ljIHVucmVhY2hhYmxlIGFuZCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgS1ZNIGxpdmUgbWlncmF0aW9uIGlvY3RscyAoS1ZNX01JR1JBVEVfQ01ELCBLVk1fRVhQT1JUX01FTU9SWSwgS1ZNX0lNUE9SVF9NRU1PUlksIEtWTV9FWFBPUlRfVkNQVSwgS1ZNX0lNUE9SVF9WQ1BVKSBhbmQgY2FwYWJpbGl0eSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OLCBhbG9uZyB3aXRoIGRpc3BhdGNoZXIgaG9va3MgaW4ga3ZtX3g4Nl9vcHMuIEhvd2V2ZXIsIG5vIHZlbmRvciBiYWNrZW5kIGltcGxlbWVudHMgY2FwX2xpdmVfbWlncmF0aW9uIG9yIGFueSBvZiB0aGUgbWlncmF0aW9uIGNhbGxiYWNrcy4gQXMgYSByZXN1bHQsIGFsbCBuZXcgaW9jdGxzIGltbWVkaWF0ZWx5IHJldHVybiAtRU5PVFRZIGFuZCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGNoZWNrcyByZXR1cm4gMCwgbWFraW5nIHRoZSBoYW5kbGVyIGxvZ2ljIHVucmVhY2hhYmxlIGFuZCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTozMS45NzQ0NjAyMzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk5Mzc5MjkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgS1ZNIGxpdmUgbWlncmF0aW9uIGlvY3RscyAoS1ZNX01JR1JBVEVfQ01ELCBLVk1fRVhQT1JUX01FTU9SWSwgS1ZNX0lNUE9SVF9NRU1PUlksIEtWTV9FWFBPUlRfVkNQVSwgS1ZNX0lNUE9SVF9WQ1BVKSBhbmQgY2FwYWJpbGl0eSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OLCBhbG9uZyB3aXRoIGRpc3BhdGNoZXIgaG9va3MgaW4ga3ZtX3g4Nl9vcHMuIEhvd2V2ZXIsIG5vIHZlbmRvciBiYWNrZW5kIGltcGxlbWVudHMgY2FwX2xpdmVfbWlncmF0aW9uIG9yIGFueSBvZiB0aGUgbWlncmF0aW9uIGNhbGxiYWNrcy4gQXMgYSByZXN1bHQsIGFsbCBuZXcgaW9jdGxzIGltbWVkaWF0ZWx5IHJldHVybiAtRU5PVFRZIGFuZCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGNoZWNrcyByZXR1cm4gMCwgbWFraW5nIHRoZSBoYW5kbGVyIGxvZ2ljIHVucmVhY2hhYmxlIGFuZCBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjI5OjMxLjk3NDQ2MzcxNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjA5ODc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVhZmVjNWQxOTYyMmZkM2JhNGJjYjAxMzViZTg0YmYwNjk2ODIwM2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDc6Mjk6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuaW5kZXggYTVmOWVlOTJmNDNlOC4uOWQ1NDZkMjg4YWY1ZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5AQCAtNjU2Niw2ICs2NTY2LDIwMCBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFXFxuICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXlcXG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxcbiBcXG4rLi4gX0tWTV9NSUdSQVRFX0NNRDpcXG4rXFxuKzQuMTQ1IEtWTV9NSUdSQVRFX0NNRFxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuKzpBcmNoaXRlY3R1cmVzOiB4ODZcXG4rOlR5cGU6IHZtIGlvY3RsXFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIChpbi9vdXQpXFxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MgMCBvbiBlcnJvclxcbitcXG4rQWxsb3dzIHVzZXJzcGFjZSB0byBzZW5kIGxpdmUgbWlncmF0aW9uIHJlbGF0ZWQgY29tbWFuZHMgdG8gS1ZNIGZvciB2ZW5kb3JcXG4rc3BlY2lmaWMgaGFuZGxpbmcuXFxuK1xcbitGb3IgY29uZmlkZW50aWFsIGNvbXB1dGluZywgbGl2ZSBtaWdyYXRpb24gcmVsYXRlZCBjb21tYW5kcyBtYXkgYmUgbmVlZGVkLlxcbitUaGUgY29tbWFuZHMgdHlwaWNhbGx5IHVzZSBlbmNyeXB0ZWQgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHBhc3NlZCBiZXR3ZWVuIHRoZVxcbitzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGhvc3RzLiBUaGUgaG9zdHMgbWF5IGFsc28gcmVxdWlyZSBzcGVjaWZpYyBjb29yZGluYXRpb25cXG4rc3RlcHMgZHVyaW5nIG1pZ3JhdGlvbiB0aGF0IG11c3QgYmUgdHJpZ2dlcmVkIGF0IHByZWNpc2UgcG9pbnRzIGluIHRoZVxcbittaWdyYXRpb24gcHJvY2Vzcy5cXG4rXFxuK1RoZSB2ZW5kb3Igc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBsb2NraW5nIGFuZCBjaGVja3MgdGhlIHZhbGlkIGZsYWdzXFxuK2JpdHMuIElmIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIFZNLCAtRU5PVFRZIGlzXFxuK3JldHVybmVkLlxcbitcXG4rVGhlIEtWTV9NSUdSQVRFX0NNRCBzdWJjb21tYW5kIHBhc3NlZCBpbiBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIGlzIG9uZSBvZjo6XFxuK1xcbisgICNkZWZpbmUgS1ZNX01JR1JBVEVfU0VUVVBcXHRcXHQwXFxuKyAgI2RlZmluZSBLVk1fTUlHUkFURV9JVEVSQVRJT05cXHRcXHQxXFxuKyAgI2RlZmluZSBLVk1fTUlHUkFURV9TVE9QX0FORF9DT1BZXFx0MlxcbisgICNkZWZpbmUgS1ZNX01JR1JBVEVfQUJPUlRcXHRcXHQzXFxuKyAgI2RlZmluZSBLVk1fTUlHUkFURV9FTkRcXHRcXHQ0XFxuK1xcbitUaGUga3ZtX3RyYW5zZmVyX2J1ZmZlciBpczo6XFxuK1xcbisgIC8qKlxcbisgICAqIEBhZGRyZXNzOiBVc2Vyc3BhY2UgYnVmZmVyIGFkZHJlc3NcXG4rICAgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgdXNlcnNwYWNlIGJ1ZmZlclxcbisgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcXG4rICAgKi9cXG4rICBzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciB7XFxuK1xcdF9fdTY0IGFkZHJlc3M7XFxuK1xcdF9fdTMyIHNpemU7XFxuK1xcdF9fdTMyIHJlc2VydmVkO1xcbisgIH07XFxuK1xcbitUaGUga3ZtX21pZ3JhdGVfY21kIGlzOjpcXG4rXFxuKyAgLyoqXFxuKyAgICogQGNvbW1hbmQ6IE9uZSBvZiB0aGUgZGVmaW5lZCBLVk1fTUlHUkFURSBjb21tYW5kc1xcbisgICAqIEBmbGFnczogSGFyZHdhcmUgc3BlY2lmaWMgZmxhZ3NcXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXFxuKyAgICogQGJ1ZjogVXNlcnNwYWNlIGJ1ZmZlciBmb3IgaGFyZHdhcmUgc3BlY2lmaWMgZGF0YVxcbisgICAqL1xcbisgIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xcbitcXHRfX3UxNiBjb21tYW5kO1xcbitcXHRfX3UxNiBmbGFncztcXG4rXFx0X191MzIgcmVzZXJ2ZWQ7XFxuK1xcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcXG4rICB9O1xcbitcXG4rLi4gX0tWTV9FWFBPUlRfTUVNT1JZOlxcbitcXG4rNC4xNDYgS1ZNX0VYUE9SVF9NRU1PUllcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuKzpBcmNoaXRlY3R1cmVzOiB4ODZcXG4rOlR5cGU6IHZtIGlvY3RsXFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAoaW4vb3V0KVxcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBcXHUwMDNjIDAgb24gZXJyb3JcXG4rXFxuK0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBleHBvcnQgYW4gYXJyYXkgb2YgbWVtb3J5IHBhZ2VzIHRvIGFcXG4rdXNlcnNwYWNlIGJ1ZmZlci5cXG4rXFxuK1RoZSBwcml2YXRlIG1lbW9yeSBtYXkgbm90IGJlIGFjY2Vzc2libGUgdG8gS1ZNIGJlY2F1c2Ugb2YgZW5jcnlwdGlvbi4gRm9yXFxuK2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBndWVzdCBtZW1vcnkgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG9cXG4rdGhlIGd1ZXN0LlxcbitcXG4rSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXMgcmV0dXJuZWQuXFxuK1xcbitUaGUgdmVuZG9yIHNwZWNpZmljIElEIGlzIHVzZWQgYXQgbGVhc3QgZm9yIFREWCBmb3IgdGhlIG1pZ3JhdGlvbiB0aHJlYWRcXG4raW5kZXguXFxuK1xcbitUaGUga3ZtX21lbW9yeV90cmFuc2ZlciBpczo6XFxuK1xcbisgIC8qKlxcbisgICAqIEBnZm5zOiBVc2Vyc3BhY2UgYWRkcmVzcyBvZiBhbiBhcnJheSBvZiBucl9nZm5zIF9fdTY0IEdGTnMgdG8gZXhwb3J0XFxuKyAgICogQG5yX2dmbnM6IE51bWJlciBvZiBHRk5zIGluIHRoZSBAZ2ZucyBhcnJheVxcbisgICAqIEBpZDogT3B0aW9uYWwgdmVuZG9yIHNwZWNpZmljIHRyYW5zZmVyIElEXFxuKyAgICogQGZsYWdzOiBWZW5kb3Igc3BlY2lmaWMgZmxhZ3NcXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXFxuKyAgICogQGJ1ZjogVXNlcnNwYWNlIGJ1ZmZlciB0byBleHBvcnQgbWVtb3J5IHRvXFxuKyAgICovXFxuKyAgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIge1xcbisgICAgICAgX191NjQgZ2ZucztcXG4rICAgICAgIF9fdTMyIG5yX2dmbnM7XFxuKyAgICAgICBfX3UxNiBpZDtcXG4rICAgICAgIF9fdTE2IGZsYWdzO1xcbisgICAgICAgX191NjQgcmVzZXJ2ZWQ7XFxuKyAgICAgICBzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XFxuKyAgfTtcXG4rXFxuK1RoZSB0cmFuc2ZlciBidWZmZXIgc2l6ZSBpcyB2ZW5kb3Igc3BlY2lmaWMuXFxuK1xcbitGb3IgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgc2VlbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXFx1MDAzY0tWTV9NSUdSQVRFX0NNRFxcdTAwM2VgLlxcbitcXG4rRm9yIG1lbW9yeSBpbXBvcnQsIHNlZSBhbHNvIDpyZWY6YEtWTV9JTVBPUlRfTUVNT1JZIFxcdTAwM2NLVk1fSU1QT1JUX01FTU9SWVxcdTAwM2VgLlxcbitcXG4rXFxuKy4uIF9LVk1fSU1QT1JUX01FTU9SWTpcXG4rXFxuKzQuMTQ3IEtWTV9JTVBPUlRfTUVNT1JZXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxcbis6QXJjaGl0ZWN0dXJlczogeDg2XFxuKzpUeXBlOiB2bSBpb2N0bFxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKGluL291dClcXG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgXFx1MDAzYyAwIG9uIGVycm9yXFxuK1xcbitBbGxvd3MgdXNlcnNwYWNlIHRvIHJlcXVlc3QgdGhlIGhvc3QgdG8gaW1wb3J0IGFuIGFycmF5IG9mIG1lbW9yeSBwYWdlcyBmcm9tIGFcXG4rdXNlcnNwYWNlIGJ1ZmZlci5cXG4rXFxuK1RoZSBwcml2YXRlIG1lbW9yeSBtYXkgbm90IGJlIGFjY2Vzc2libGUgdG8gS1ZNIGJlY2F1c2Ugb2YgZW5jcnlwdGlvbi4gRm9yXFxuK2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBndWVzdCBtZW1vcnkgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG9cXG4rdGhlIGd1ZXN0LlxcbitcXG4rSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXMgcmV0dXJuZWQuXFxuK1xcbitUaGUgdmVuZG9yIHNwZWNpZmljIElEIGlzIHVzZWQgYXQgbGVhc3QgZm9yIFREWCBmb3IgdGhlIG1pZ3JhdGlvbiB0aHJlYWRcXG4raW5kZXguXFxuK1xcbitUaGUgdHJhbnNmZXIgYnVmZmVyIHNpemUgaXMgdmVuZG9yIHNwZWNpZmljLlxcbitcXG4rRm9yIGt2bV9tZW1vcnlfdHJhbnNmZXIsIHNlZSA6cmVmOmBLVk1fRVhQT1JUX01FTU9SWSBcXHUwMDNjS1ZNX0VYUE9SVF9NRU1PUllcXHUwMDNlYC5cXG4rXFxuK0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWVvIDpyZWY6YEtWTV9NSUdSQVRFX0NNRCBcXHUwMDNjS1ZNX01JR1JBVEVfQ01EXFx1MDAzZWAuXFxuK1xcbisuLiBfS1ZNX0VYUE9SVF9WQ1BVOlxcbitcXG4rNC4xNDkgS1ZNX0VYUE9SVF9WQ1BVXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxcbis6QXJjaGl0ZWN0dXJlczogYXJtNjQsIHg4Nlxcbis6VHlwZTogdmNwdSBpb2N0bFxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyIChpbi9vdXQpXFxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MgMCBvbiBlcnJvclxcbitcXG4rQWxsb3dzIHVzZXJzcGFjZSB0byByZXF1ZXN0IHRoZSBob3N0IHRvIGV4cG9ydCBhIFZDUFUgc3RhdGUgdG8gYSB1c2Vyc3BhY2VcXG4rYnVmZmVyLlxcbitcXG4rVGhlIFZDUFUgc3RhdGUgbWF5IG5vdCBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlIHRvIEtWTSBiZWNhdXNlIG9mIGVuY3J5cHRpb24uIEZvclxcbitjb25maWRlbnRpYWwgY29tcHV0aW5nLCB0aGUgVkNQVSBzdGF0ZSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0byB0aGVcXG4rZ3Vlc3QuXFxuK1xcbitUaGUgdmNwdV90cmFuc2ZlciBpczo6XFxuK1xcbisgIC8qKlxcbisgICAqIEBmbGFnczogSGFyZHdhcmUgc3BlY2lmaWMgZmxhZ3NcXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXFxuKyAgICogQGJ1ZjogVXNlcnNwYWNlIGJ1ZmZlciB0byBleHBvcnQgVkNQVSBzdGF0ZSB0b1xcbisgICAqL1xcbisgIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciB7XFxuKyAgICAgICAgX191MzIgZmxhZ3M7XFxuKyAgICAgICAgX191MzIgcmVzZXJ2ZWQ7XFxuK1xcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcXG4rICB9O1xcbitcXG4rRm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZSA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXFx1MDAzY0tWTV9NSUdSQVRFX0NNRFxcdTAwM2VgLlxcbitcXG4rRm9yIHZDUFUgaW1wb3J0LCBzZWUgYWxzbyA6cmVmOmBLVk1fSU1QT1JUX1ZDUFUgXFx1MDAzY0tWTV9JTVBPUlRfVkNQVVxcdTAwM2VgLlxcbitcXG4rLi4gX0tWTV9JTVBPUlRfVkNQVTpcXG4rXFxuKzQuMTQ4IEtWTV9JTVBPUlRfVkNQVVxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuKzpBcmNoaXRlY3R1cmVzOiBhcm02NCwgeDg2XFxuKzpUeXBlOiB2Y3B1IGlvY3RsXFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKGluL291dClcXG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgXFx1MDAzYyAwIG9uIGVycm9yXFxuK1xcbitBbGxvd3MgdXNlcnNwYWNlIHRvIHJlcXVlc3QgdGhlIGhvc3QgdG8gaW1wb3J0IGEgVkNQVSBzdGF0ZSBmcm9tIGEgdXNlcnNwYWNlXFxuK2J1ZmZlci5cXG4rXFxuK1RoZSBWQ1BVIHN0YXRlIG1heSBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3JcXG4rY29uZmlkZW50aWFsIGNvbXB1dGluZywgdGhlIFZDUFUgc3RhdGUgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG8gdGhlXFxuK2d1ZXN0LlxcbitcXG4rRm9yIHZjcHVfdHJhbnNmZXIgYW5kIHZDUFUgaW1wb3J0LCBzZWUgOnJlZjpgS1ZNX0lNUE9SVF9WQ1BVIFxcdTAwM2NLVk1fSU1QT1JUX1ZDUFVcXHUwMDNlYC5cXG4rXFxuK0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWUgYWxzbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXFx1MDAzY0tWTV9NSUdSQVRFX0NNRFxcdTAwM2VgLlxcbitcXG4gLi4gX2t2bV9ydW46XFxuIFxcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcXG5AQCAtOTQ5Myw2ICs5Njg3LDE3IEBAIHRha2UgY2FyZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlc2UgY2FzZXMuXFxuIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgdGhlIG5lc3RlZCBLVk0gZ3Vlc3QgY2FuXFxuIHN0YXJ0IGluIEVTQSBtb2RlLlxcbiBcXG4rOC40OCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitcXG4rOkFyY2hpdGVjdHVyZXM6IHg4Nlxcbis6VGFyZ2V0OiBWTVxcbis6UGFyYW1ldGVyczogTm9uZVxcbitcXG4rSW5kaWNhdGVzIHRoYXQgdGhlIFZNIG5lZWRzIHRvIHVzZSBLVk0gY2FsbHMgZm9yIGxpdmUgbWlncmF0aW9uLCBhbmQgdGhhdCB0aGVcXG4rS1ZNX01JR1JBVEVfQ01EIGlvY3RsIGFuZCB0aGUgS1ZNX0VYUE9SVF9NRU1PUlksIEtWTV9JTVBPUlRfTUVNT1JZLFxcbitLVk1fRVhQT1JUX1ZDUFUgYW5kIEtWTV9JTVBPUlRfVkNQVSBpb2N0bHMgYXJlIGF2YWlsYWJsZS5cXG4rXFxuIDkuIEtub3duIEtWTSBBUEkgcHJvYmxlbXNcXG4gPT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG5pbmRleCA4M2RjNTA4NjEzOGIzLi43ZjExMGY4MGQ2ZjgyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuQEAgLTE0OCw2ICsxNDgsMTIgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSlcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fcHJlcGFyZSlcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpXFxuIEtWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlKVxcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoY2FwX2xpdmVfbWlncmF0aW9uKVxcbitLVk1fWDg2X09QX09QVElPTkFMKG1pZ3JhdGVfY21kKVxcbitLVk1fWDg2X09QX09QVElPTkFMKGV4cG9ydF9tZW1vcnkpXFxuK0tWTV9YODZfT1BfT1BUSU9OQUwoaW1wb3J0X21lbW9yeSlcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfdmNwdSlcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChpbXBvcnRfdmNwdSlcXG4gI2VuZGlmXFxuIFxcbiAjdW5kZWYgS1ZNX1g4Nl9PUFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDVmNmMxY2U5NjczYjcuLmI2MzYyNDA4ZGFiODAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMjAxMCw2ICsyMDEwLDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdGludCAoKmdtZW1fcHJlcGFyZSkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpO1xcbiBcXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbiBcXHRpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XFxuK1xcdGJvb2wgKCpjYXBfbGl2ZV9taWdyYXRpb24pKHN0cnVjdCBrdm0gKmt2bSk7XFxuK1xcdGludCAoKm1pZ3JhdGVfY21kKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgKmNtZCk7XFxuK1xcdGludCAoKmV4cG9ydF9tZW1vcnkpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKm1lbSk7XFxuK1xcdGludCAoKmltcG9ydF9tZW1vcnkpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKm1lbSk7XFxuK1xcdGludCAoKmV4cG9ydF92Y3B1KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciAqdmNwdV9zdGF0ZSk7XFxuK1xcdGludCAoKmltcG9ydF92Y3B1KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciAqdmNwdV9zdGF0ZSk7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggYWZjYWMxMDQyOTQ3YS4uZTgzODUzMjY4OTRiMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtNDk3Myw2ICs0OTczLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4gXFx0Y2FzZSBLVk1fQ0FQX1JFQURPTkxZX01FTTpcXG4gXFx0XFx0ciA9IGt2bSA/IGt2bV9hcmNoX2hhc19yZWFkb25seV9tZW0oa3ZtKSA6IDE7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEtWTV9DQVBfTElWRV9NSUdSQVRJT046XFxuK1xcdFxcdHIgPSBrdm0gPyBrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIDogMDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTYxODYsNiArNjE4OSwzOCBAQCBzdGF0aWMgaW50IGt2bV9nZXRfcmVnX2xpc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbXBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmdwKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciB2Y3B1X3N0YXRlO1xcbitcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuK1xcdGludCByO1xcbitcXG4rXFx0aWYgKCFrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIHx8XFxuK1xcdCAgICAoaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5pbXBvcnRfdmNwdSkgfHxcXG4rXFx0ICAgICghaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfdmNwdSkpXFxuK1xcdFxcdHJldHVybiAtRU5PVFRZO1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ2Y3B1X3N0YXRlLCBhcmdwLCBzaXplb2YodmNwdV9zdGF0ZSkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmICh2Y3B1X3N0YXRlLnJlc2VydmVkIHx8IHZjcHVfc3RhdGUuYnVmLnJlc2VydmVkKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChpbXBvcnQpXFxuK1xcdFxcdHIgPSBrdm1feDg2X2NhbGwoaW1wb3J0X3ZjcHUpKHZjcHUsIFxcdTAwMjZ2Y3B1X3N0YXRlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyID0ga3ZtX3g4Nl9jYWxsKGV4cG9ydF92Y3B1KSh2Y3B1LCBcXHUwMDI2dmNwdV9zdGF0ZSk7XFxuK1xcdGlmIChyIFxcdTAwM2UgMClcXG4rXFx0XFx0ciA9IC1FSU87XFxuK1xcbitcXHQvKiBDb3B5IGJhY2sgYWxzbyBvbiBhbiBlcnJvciB0byByZXBvcnQgYSBwYXJ0aWFsbHkgZG9uZSB0cmFuc2ZlciAqL1xcbitcXHRpZiAoY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZ2Y3B1X3N0YXRlLCBzaXplb2YodmNwdV9zdGF0ZSkpKVxcbitcXHRcXHRyID0gLUVGQVVMVDtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbiBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiB7XFxuQEAgLTY2NTYsNiArNjY5MSwxNCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRyID0ga3ZtX3g4Nl9vcHMudmNwdV9tZW1fZW5jX2lvY3RsKHZjcHUsIGFyZ3ApO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBLVk1fRVhQT1JUX1ZDUFU6IHtcXG4rXFx0XFx0ciA9IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUodmNwdSwgZmFsc2UsIGFyZ3ApO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRjYXNlIEtWTV9JTVBPUlRfVkNQVToge1xcbitcXHRcXHRyID0ga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdSh2Y3B1LCB0cnVlLCBhcmdwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0ciA9IC1FSU5WQUw7XFxuIFxcdH1cXG5AQCAtNzI1NSw2ICs3Mjk4LDM3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbiBcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnkoc3RydWN0IGt2bSAqa3ZtLCBib29sIGltcG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0dm9pZCBfX3VzZXIgKmFyZ3ApXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgbWVtO1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlmICgha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSB8fFxcbitcXHQgICAgKGltcG9ydCBcXHUwMDI2XFx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeSkgfHxcXG4rXFx0ICAgICghaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfbWVtb3J5KSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNm1lbSwgYXJncCwgc2l6ZW9mKG1lbSkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChtZW0ucmVzZXJ2ZWQgfHwgbWVtLmJ1Zi5yZXNlcnZlZCB8fCAhbWVtLm5yX2dmbnMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGltcG9ydClcXG4rXFx0XFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfbWVtb3J5KShrdm0sIFxcdTAwMjZtZW0pO1xcbitcXHRlbHNlXFxuK1xcdFxcdHIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X21lbW9yeSkoa3ZtLCBcXHUwMDI2bWVtKTtcXG4rXFx0aWYgKHIgXFx1MDAzZSAwKVxcbitcXHRcXHRyID0gLUVJTztcXG4rXFxuK1xcdC8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIHRyYW5zZmVyICovXFxuK1xcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNm1lbSwgc2l6ZW9mKG1lbSkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbiBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIHtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbkBAIC03NjE0LDYgKzc2ODgsMzQgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX3NldF9tc3JfZmlsdGVyKGt2bSwgXFx1MDAyNmZpbHRlcik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcdGNhc2UgS1ZNX01JR1JBVEVfQ01EOiB7XFxuK1xcdFxcdHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgY21kO1xcbitcXG4rXFx0XFx0aWYgKCFrdm1feDg2X29wcy5taWdyYXRlX2NtZCB8fFxcbitcXHRcXHQgICAgIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbitcXG4rXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZjbWQsIGFyZ3AsIHNpemVvZihjbWQpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRcXHRpZiAoY21kLnJlc2VydmVkIHx8IGNtZC5idWYucmVzZXJ2ZWQpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0ciA9IGt2bV94ODZfY2FsbChtaWdyYXRlX2NtZCkoa3ZtLCBcXHUwMDI2Y21kKTtcXG4rXFx0XFx0aWYgKHIgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRyID0gLUVJTztcXG4rXFxuK1xcdFxcdC8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIGNvbW1hbmQgKi9cXG4rXFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2Y21kLCBzaXplb2YoY21kKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRjYXNlIEtWTV9FWFBPUlRfTUVNT1JZOlxcbitcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX3RyYW5zZmVyX21lbW9yeShrdm0sIGZhbHNlLCBhcmdwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgS1ZNX0lNUE9SVF9NRU1PUlk6XFxuK1xcdFxcdHIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgdHJ1ZSwgYXJncCk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyID0gLUVOT1RUWTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5pbmRleCA0MTkwMTEwOTdmYThlLi4wYTlhYTEyNmRhYWRiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxcbkBAIC05OTcsNiArOTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHtcXG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcXG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5XFxuKyNkZWZpbmUgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiAyNTBcXG4gXFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XFxuIFxcdF9fdTMyIGlycWNoaXA7XFxuQEAgLTEzNTAsNiArMTM1MSw4IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XFxuICNkZWZpbmUgS1ZNX0dFVF9ERVZJQ0VfQVRUUlxcdCAgX0lPVyhLVk1JTywgIDB4ZTIsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXFxuICNkZWZpbmUgS1ZNX0hBU19ERVZJQ0VfQVRUUlxcdCAgX0lPVyhLVk1JTywgIDB4ZTMsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXFxuIFxcbisjZGVmaW5lIEtWTV9NSUdSQVRFX0NNRFxcdFxcdCAgX0lPV1IoS1ZNSU8sIDB4ZTQsIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQpXFxuK1xcbiAvKlxcbiAgKiBpb2N0bHMgZm9yIHZjcHUgZmRzXFxuICAqL1xcbkBAIC0xNDkwLDYgKzE0OTMsMTIgQEAgc3RydWN0IGt2bV9lbmNfcmVnaW9uIHtcXG4gI2RlZmluZSBLVk1fR0VUX1NSRUdTMiAgICAgICAgICAgICBfSU9SKEtWTUlPLCAgMHhjYywgc3RydWN0IGt2bV9zcmVnczIpXFxuICNkZWZpbmUgS1ZNX1NFVF9TUkVHUzIgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4Y2QsIHN0cnVjdCBrdm1fc3JlZ3MyKVxcbiBcXG4rLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9MSVZFX01JR1JBVElPTiAqL1xcbisjZGVmaW5lIEtWTV9FWFBPUlRfTUVNT1JZXFx0ICBfSU9XUihLVk1JTywgMHhlNSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIpXFxuKyNkZWZpbmUgS1ZNX0lNUE9SVF9NRU1PUllcXHQgIF9JT1dSKEtWTUlPLCAweGU2LCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlcilcXG4rI2RlZmluZSBLVk1fRVhQT1JUX1ZDUFVcXHRcXHQgIF9JT1dSKEtWTUlPLCAweGU3LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIpXFxuKyNkZWZpbmUgS1ZNX0lNUE9SVF9WQ1BVXFx0XFx0ICBfSU9XUihLVk1JTywgMHhlOCwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyKVxcbitcXG4gI2RlZmluZSBLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSAgICAoMSBcXHUwMDNjXFx1MDAzYyAwKVxcbiAjZGVmaW5lIEtWTV9ESVJUWV9MT0dfSU5JVElBTExZX1NFVCAgICAgICAgICAgICgxIFxcdTAwM2NcXHUwMDNjIDEpXFxuIFxcbkBAIC0xNjcwLDQgKzE2NzksMzggQEAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcXG4gXFx0X191NjQgcGFkZGluZ1s1XTtcXG4gfTtcXG4gXFxuKyNkZWZpbmUgS1ZNX01JR1JBVEVfU0VUVVBcXHRcXHQwXFxuKyNkZWZpbmUgS1ZNX01JR1JBVEVfSVRFUkFUSU9OXFx0XFx0MVxcbisjZGVmaW5lIEtWTV9NSUdSQVRFX1NUT1BfQU5EX0NPUFlcXHQyXFxuKyNkZWZpbmUgS1ZNX01JR1JBVEVfQUJPUlRcXHRcXHQzXFxuKyNkZWZpbmUgS1ZNX01JR1JBVEVfRU5EXFx0XFx0XFx0NFxcbitcXG4rc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIge1xcbitcXHRfX3U2NCBhZGRyZXNzO1xcbitcXHRfX3UzMiBzaXplO1xcbitcXHRfX3UzMiByZXNlcnZlZDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xcbitcXHRfX3UxNiBjb21tYW5kO1xcbitcXHRfX3UxNiBmbGFncztcXG4rXFx0X191MzIgcmVzZXJ2ZWQ7XFxuK1xcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcXG4rfTtcXG4rXFxuK3N0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyIHtcXG4rXFx0X191NjQgZ2ZucztcXG4rXFx0X191MzIgbnJfZ2ZucztcXG4rXFx0X191MTYgaWQ7XFxuK1xcdF9fdTE2IGZsYWdzO1xcbitcXHRfX3U2NCByZXNlcnZlZDtcXG4rXFx0c3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgYnVmO1xcbit9O1xcbitcXG4rc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyIHtcXG4rXFx0X191MzIgZmxhZ3M7XFxuK1xcdF9fdTMyIHJlc2VydmVkO1xcbitcXHRzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XFxuK307XFxuK1xcbiAjZW5kaWYgLyogX19MSU5VWF9LVk1fSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTozMy4zMjcxMjU4NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2NjQxMTE0NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEtWTSBsaXZlIG1pZ3JhdGlvbiBpb2N0bHMgKEtWTV9NSUdSQVRFX0NNRCwgS1ZNX0VYUE9SVF9NRU1PUlksIEtWTV9JTVBPUlRfTUVNT1JZLCBLVk1fRVhQT1JUX1ZDUFUsIEtWTV9JTVBPUlRfVkNQVSkgYW5kIGNhcGFiaWxpdHkgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiwgYWxvbmcgd2l0aCBkaXNwYXRjaGVyIGhvb2tzIGluIGt2bV94ODZfb3BzLiBIb3dldmVyLCBubyB2ZW5kb3IgYmFja2VuZCBpbXBsZW1lbnRzIGNhcF9saXZlX21pZ3JhdGlvbiBvciBhbnkgb2YgdGhlIG1pZ3JhdGlvbiBjYWxsYmFja3MuIEFzIGEgcmVzdWx0LCBhbGwgbmV3IGlvY3RscyBpbW1lZGlhdGVseSByZXR1cm4gLUVOT1RUWSBhbmQgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBjaGVja3MgcmV0dXJuIDAsIG1ha2luZyB0aGUgaGFuZGxlciBsb2dpYyB1bnJlYWNoYWJsZSBhbmQgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYWZlYzVkMTk2MjJmZDNiYTRiY2IwMTM1YmU4NGJmMDY5NjgyMDNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDc6Mjk6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZTguLjlkNTQ2ZDI4OGFmNWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTY1NjYsNiArNjU2NiwyMDAgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRVxuICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXlcbiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuXG4gXG4rLi4gX0tWTV9NSUdSQVRFX0NNRDpcbitcbis0LjE0NSBLVk1fTUlHUkFURV9DTURcbistLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxuKzpBcmNoaXRlY3R1cmVzOiB4ODZcbis6VHlwZTogdm0gaW9jdGxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV9taWdyYXRlX2NtZCAoaW4vb3V0KVxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYyAwIG9uIGVycm9yXG4rXG4rQWxsb3dzIHVzZXJzcGFjZSB0byBzZW5kIGxpdmUgbWlncmF0aW9uIHJlbGF0ZWQgY29tbWFuZHMgdG8gS1ZNIGZvciB2ZW5kb3JcbitzcGVjaWZpYyBoYW5kbGluZy5cbitcbitGb3IgY29uZmlkZW50aWFsIGNvbXB1dGluZywgbGl2ZSBtaWdyYXRpb24gcmVsYXRlZCBjb21tYW5kcyBtYXkgYmUgbmVlZGVkLlxuK1RoZSBjb21tYW5kcyB0eXBpY2FsbHkgdXNlIGVuY3J5cHRlZCBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgcGFzc2VkIGJldHdlZW4gdGhlXG4rc291cmNlIGFuZCBkZXN0aW5hdGlvbiBob3N0cy4gVGhlIGhvc3RzIG1heSBhbHNvIHJlcXVpcmUgc3BlY2lmaWMgY29vcmRpbmF0aW9uXG4rc3RlcHMgZHVyaW5nIG1pZ3JhdGlvbiB0aGF0IG11c3QgYmUgdHJpZ2dlcmVkIGF0IHByZWNpc2UgcG9pbnRzIGluIHRoZVxuK21pZ3JhdGlvbiBwcm9jZXNzLlxuK1xuK1RoZSB2ZW5kb3Igc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBsb2NraW5nIGFuZCBjaGVja3MgdGhlIHZhbGlkIGZsYWdzXG4rYml0cy4gSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXNcbityZXR1cm5lZC5cbitcbitUaGUgS1ZNX01JR1JBVEVfQ01EIHN1YmNvbW1hbmQgcGFzc2VkIGluIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgaXMgb25lIG9mOjpcbitcbisgICNkZWZpbmUgS1ZNX01JR1JBVEVfU0VUVVBcdFx0MFxuKyAgI2RlZmluZSBLVk1fTUlHUkFURV9JVEVSQVRJT05cdFx0MVxuKyAgI2RlZmluZSBLVk1fTUlHUkFURV9TVE9QX0FORF9DT1BZXHQyXG4rICAjZGVmaW5lIEtWTV9NSUdSQVRFX0FCT1JUXHRcdDNcbisgICNkZWZpbmUgS1ZNX01JR1JBVEVfRU5EXHRcdDRcbitcbitUaGUga3ZtX3RyYW5zZmVyX2J1ZmZlciBpczo6XG4rXG4rICAvKipcbisgICAqIEBhZGRyZXNzOiBVc2Vyc3BhY2UgYnVmZmVyIGFkZHJlc3NcbisgICAqIEBzaXplOiBTaXplIG9mIHRoZSB1c2Vyc3BhY2UgYnVmZmVyXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4rICAgKi9cbisgIHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIHtcbitcdF9fdTY0IGFkZHJlc3M7XG4rXHRfX3UzMiBzaXplO1xuK1x0X191MzIgcmVzZXJ2ZWQ7XG4rICB9O1xuK1xuK1RoZSBrdm1fbWlncmF0ZV9jbWQgaXM6OlxuK1xuKyAgLyoqXG4rICAgKiBAY29tbWFuZDogT25lIG9mIHRoZSBkZWZpbmVkIEtWTV9NSUdSQVRFIGNvbW1hbmRzXG4rICAgKiBAZmxhZ3M6IEhhcmR3YXJlIHNwZWNpZmljIGZsYWdzXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4rICAgKiBAYnVmOiBVc2Vyc3BhY2UgYnVmZmVyIGZvciBoYXJkd2FyZSBzcGVjaWZpYyBkYXRhXG4rICAgKi9cbisgIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xuK1x0X191MTYgY29tbWFuZDtcbitcdF9fdTE2IGZsYWdzO1xuK1x0X191MzIgcmVzZXJ2ZWQ7XG4rXHRzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XG4rICB9O1xuK1xuKy4uIF9LVk1fRVhQT1JUX01FTU9SWTpcbitcbis0LjE0NiBLVk1fRVhQT1JUX01FTU9SWVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rOkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbis6QXJjaGl0ZWN0dXJlczogeDg2XG4rOlR5cGU6IHZtIGlvY3RsXG4rOlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyIChpbi9vdXQpXG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgXHUwMDNjIDAgb24gZXJyb3JcbitcbitBbGxvd3MgdXNlcnNwYWNlIHRvIHJlcXVlc3QgdGhlIGhvc3QgdG8gZXhwb3J0IGFuIGFycmF5IG9mIG1lbW9yeSBwYWdlcyB0byBhXG4rdXNlcnNwYWNlIGJ1ZmZlci5cbitcbitUaGUgcHJpdmF0ZSBtZW1vcnkgbWF5IG5vdCBiZSBhY2Nlc3NpYmxlIHRvIEtWTSBiZWNhdXNlIG9mIGVuY3J5cHRpb24uIEZvclxuK2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBndWVzdCBtZW1vcnkgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG9cbit0aGUgZ3Vlc3QuXG4rXG4rSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXMgcmV0dXJuZWQuXG4rXG4rVGhlIHZlbmRvciBzcGVjaWZpYyBJRCBpcyB1c2VkIGF0IGxlYXN0IGZvciBURFggZm9yIHRoZSBtaWdyYXRpb24gdGhyZWFkXG4raW5kZXguXG4rXG4rVGhlIGt2bV9tZW1vcnlfdHJhbnNmZXIgaXM6OlxuK1xuKyAgLyoqXG4rICAgKiBAZ2ZuczogVXNlcnNwYWNlIGFkZHJlc3Mgb2YgYW4gYXJyYXkgb2YgbnJfZ2ZucyBfX3U2NCBHRk5zIHRvIGV4cG9ydFxuKyAgICogQG5yX2dmbnM6IE51bWJlciBvZiBHRk5zIGluIHRoZSBAZ2ZucyBhcnJheVxuKyAgICogQGlkOiBPcHRpb25hbCB2ZW5kb3Igc3BlY2lmaWMgdHJhbnNmZXIgSURcbisgICAqIEBmbGFnczogVmVuZG9yIHNwZWNpZmljIGZsYWdzXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4rICAgKiBAYnVmOiBVc2Vyc3BhY2UgYnVmZmVyIHRvIGV4cG9ydCBtZW1vcnkgdG9cbisgICAqL1xuKyAgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIge1xuKyAgICAgICBfX3U2NCBnZm5zO1xuKyAgICAgICBfX3UzMiBucl9nZm5zO1xuKyAgICAgICBfX3UxNiBpZDtcbisgICAgICAgX191MTYgZmxhZ3M7XG4rICAgICAgIF9fdTY0IHJlc2VydmVkO1xuKyAgICAgICBzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XG4rICB9O1xuK1xuK1RoZSB0cmFuc2ZlciBidWZmZXIgc2l6ZSBpcyB2ZW5kb3Igc3BlY2lmaWMuXG4rXG4rRm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZW8gOnJlZjpgS1ZNX01JR1JBVEVfQ01EIFx1MDAzY0tWTV9NSUdSQVRFX0NNRFx1MDAzZWAuXG4rXG4rRm9yIG1lbW9yeSBpbXBvcnQsIHNlZSBhbHNvIDpyZWY6YEtWTV9JTVBPUlRfTUVNT1JZIFx1MDAzY0tWTV9JTVBPUlRfTUVNT1JZXHUwMDNlYC5cbitcbitcbisuLiBfS1ZNX0lNUE9SVF9NRU1PUlk6XG4rXG4rNC4xNDcgS1ZNX0lNUE9SVF9NRU1PUllcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4rOkFyY2hpdGVjdHVyZXM6IHg4NlxuKzpUeXBlOiB2bSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAoaW4vb3V0KVxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYyAwIG9uIGVycm9yXG4rXG4rQWxsb3dzIHVzZXJzcGFjZSB0byByZXF1ZXN0IHRoZSBob3N0IHRvIGltcG9ydCBhbiBhcnJheSBvZiBtZW1vcnkgcGFnZXMgZnJvbSBhXG4rdXNlcnNwYWNlIGJ1ZmZlci5cbitcbitUaGUgcHJpdmF0ZSBtZW1vcnkgbWF5IG5vdCBiZSBhY2Nlc3NpYmxlIHRvIEtWTSBiZWNhdXNlIG9mIGVuY3J5cHRpb24uIEZvclxuK2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBndWVzdCBtZW1vcnkgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG9cbit0aGUgZ3Vlc3QuXG4rXG4rSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXMgcmV0dXJuZWQuXG4rXG4rVGhlIHZlbmRvciBzcGVjaWZpYyBJRCBpcyB1c2VkIGF0IGxlYXN0IGZvciBURFggZm9yIHRoZSBtaWdyYXRpb24gdGhyZWFkXG4raW5kZXguXG4rXG4rVGhlIHRyYW5zZmVyIGJ1ZmZlciBzaXplIGlzIHZlbmRvciBzcGVjaWZpYy5cbitcbitGb3Iga3ZtX21lbW9yeV90cmFuc2Zlciwgc2VlIDpyZWY6YEtWTV9FWFBPUlRfTUVNT1JZIFx1MDAzY0tWTV9FWFBPUlRfTUVNT1JZXHUwMDNlYC5cbitcbitGb3IgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgc2VlbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXHUwMDNjS1ZNX01JR1JBVEVfQ01EXHUwMDNlYC5cbitcbisuLiBfS1ZNX0VYUE9SVF9WQ1BVOlxuK1xuKzQuMTQ5IEtWTV9FWFBPUlRfVkNQVVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4rOkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODZcbis6VHlwZTogdmNwdSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKGluL291dClcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBcdTAwM2MgMCBvbiBlcnJvclxuK1xuK0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBleHBvcnQgYSBWQ1BVIHN0YXRlIHRvIGEgdXNlcnNwYWNlXG4rYnVmZmVyLlxuK1xuK1RoZSBWQ1BVIHN0YXRlIG1heSBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3Jcbitjb25maWRlbnRpYWwgY29tcHV0aW5nLCB0aGUgVkNQVSBzdGF0ZSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0byB0aGVcbitndWVzdC5cbitcbitUaGUgdmNwdV90cmFuc2ZlciBpczo6XG4rXG4rICAvKipcbisgICAqIEBmbGFnczogSGFyZHdhcmUgc3BlY2lmaWMgZmxhZ3NcbisgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbisgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgdG8gZXhwb3J0IFZDUFUgc3RhdGUgdG9cbisgICAqL1xuKyAgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyIHtcbisgICAgICAgIF9fdTMyIGZsYWdzO1xuKyAgICAgICAgX191MzIgcmVzZXJ2ZWQ7XG4rXHRzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XG4rICB9O1xuK1xuK0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWUgOnJlZjpgS1ZNX01JR1JBVEVfQ01EIFx1MDAzY0tWTV9NSUdSQVRFX0NNRFx1MDAzZWAuXG4rXG4rRm9yIHZDUFUgaW1wb3J0LCBzZWUgYWxzbyA6cmVmOmBLVk1fSU1QT1JUX1ZDUFUgXHUwMDNjS1ZNX0lNUE9SVF9WQ1BVXHUwMDNlYC5cbitcbisuLiBfS1ZNX0lNUE9SVF9WQ1BVOlxuK1xuKzQuMTQ4IEtWTV9JTVBPUlRfVkNQVVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4rOkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODZcbis6VHlwZTogdmNwdSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKGluL291dClcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBcdTAwM2MgMCBvbiBlcnJvclxuK1xuK0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBpbXBvcnQgYSBWQ1BVIHN0YXRlIGZyb20gYSB1c2Vyc3BhY2VcbitidWZmZXIuXG4rXG4rVGhlIFZDUFUgc3RhdGUgbWF5IG5vdCBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlIHRvIEtWTSBiZWNhdXNlIG9mIGVuY3J5cHRpb24uIEZvclxuK2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBWQ1BVIHN0YXRlIGlzIGVuY3J5cHRlZCBhbmQgb25seSBhY2Nlc3NpYmxlIHRvIHRoZVxuK2d1ZXN0LlxuK1xuK0ZvciB2Y3B1X3RyYW5zZmVyIGFuZCB2Q1BVIGltcG9ydCwgc2VlIDpyZWY6YEtWTV9JTVBPUlRfVkNQVSBcdTAwM2NLVk1fSU1QT1JUX1ZDUFVcdTAwM2VgLlxuK1xuK0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWUgYWxzbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXHUwMDNjS1ZNX01JR1JBVEVfQ01EXHUwMDNlYC5cbitcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbkBAIC05NDkzLDYgKzk2ODcsMTcgQEAgdGFrZSBjYXJlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGVzZSBjYXNlcy5cbiBUaGUgcHJlc2VuY2Ugb2YgdGhpcyBjYXBhYmlsaXR5IGluZGljYXRlcyB0aGF0IHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0IGNhblxuIHN0YXJ0IGluIEVTQSBtb2RlLlxuIFxuKzguNDggS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuKzpBcmNoaXRlY3R1cmVzOiB4ODZcbis6VGFyZ2V0OiBWTVxuKzpQYXJhbWV0ZXJzOiBOb25lXG4rXG4rSW5kaWNhdGVzIHRoYXQgdGhlIFZNIG5lZWRzIHRvIHVzZSBLVk0gY2FsbHMgZm9yIGxpdmUgbWlncmF0aW9uLCBhbmQgdGhhdCB0aGVcbitLVk1fTUlHUkFURV9DTUQgaW9jdGwgYW5kIHRoZSBLVk1fRVhQT1JUX01FTU9SWSwgS1ZNX0lNUE9SVF9NRU1PUlksXG4rS1ZNX0VYUE9SVF9WQ1BVIGFuZCBLVk1fSU1QT1JUX1ZDUFUgaW9jdGxzIGFyZSBhdmFpbGFibGUuXG4rXG4gOS4gS25vd24gS1ZNIEFQSSBwcm9ibGVtc1xuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggODNkYzUwODYxMzhiMy4uN2YxMTBmODBkNmY4MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbkBAIC0xNDgsNiArMTQ4LDEyIEBAIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fcHJlcGFyZSlcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYXhfbWFwcGluZ19sZXZlbClcbiBLVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZSlcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoY2FwX2xpdmVfbWlncmF0aW9uKVxuK0tWTV9YODZfT1BfT1BUSU9OQUwobWlncmF0ZV9jbWQpXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfbWVtb3J5KVxuK0tWTV9YODZfT1BfT1BUSU9OQUwoaW1wb3J0X21lbW9yeSlcbitLVk1fWDg2X09QX09QVElPTkFMKGV4cG9ydF92Y3B1KVxuK0tWTV9YODZfT1BfT1BUSU9OQUwoaW1wb3J0X3ZjcHUpXG4gI2VuZGlmXG4gXG4gI3VuZGVmIEtWTV9YODZfT1BcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNWY2YzFjZTk2NzNiNy4uYjYzNjI0MDhkYWI4MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0yMDEwLDYgKzIwMTAsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcdGludCAoKmdtZW1fcHJlcGFyZSkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpO1xuIFx0dm9pZCAoKmdtZW1faW52YWxpZGF0ZSkoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbiBcdGludCAoKmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTtcbitcdGJvb2wgKCpjYXBfbGl2ZV9taWdyYXRpb24pKHN0cnVjdCBrdm0gKmt2bSk7XG4rXHRpbnQgKCptaWdyYXRlX2NtZCkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kICpjbWQpO1xuK1x0aW50ICgqZXhwb3J0X21lbW9yeSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAqbWVtKTtcbitcdGludCAoKmltcG9ydF9tZW1vcnkpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKm1lbSk7XG4rXHRpbnQgKCpleHBvcnRfdmNwdSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKnZjcHVfc3RhdGUpO1xuK1x0aW50ICgqaW1wb3J0X3ZjcHUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyICp2Y3B1X3N0YXRlKTtcbiB9O1xuIFxuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggYWZjYWMxMDQyOTQ3YS4uZTgzODUzMjY4OTRiMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNDk3Myw2ICs0OTczLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdGNhc2UgS1ZNX0NBUF9SRUFET05MWV9NRU06XG4gXHRcdHIgPSBrdm0gPyBrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtKGt2bSkgOiAxO1xuIFx0XHRicmVhaztcbitcdGNhc2UgS1ZNX0NBUF9MSVZFX01JR1JBVElPTjpcbitcdFx0ciA9IGt2bSA/IGt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgOiAwO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTYxODYsNiArNjE4OSwzOCBAQCBzdGF0aWMgaW50IGt2bV9nZXRfcmVnX2xpc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW1wb3J0LFxuK1x0XHRcdFx0XHR2b2lkIF9fdXNlciAqYXJncClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgdmNwdV9zdGF0ZTtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuK1x0aW50IHI7XG4rXG4rXHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcbitcdCAgICAoaW1wb3J0IFx1MDAyNlx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X3ZjcHUpIHx8XG4rXHQgICAgKCFpbXBvcnQgXHUwMDI2XHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfdmNwdSkpXG4rXHRcdHJldHVybiAtRU5PVFRZO1xuK1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnZjcHVfc3RhdGUsIGFyZ3AsIHNpemVvZih2Y3B1X3N0YXRlKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0aWYgKHZjcHVfc3RhdGUucmVzZXJ2ZWQgfHwgdmNwdV9zdGF0ZS5idWYucmVzZXJ2ZWQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKGltcG9ydClcbitcdFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgXHUwMDI2dmNwdV9zdGF0ZSk7XG4rXHRlbHNlXG4rXHRcdHIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X3ZjcHUpKHZjcHUsIFx1MDAyNnZjcHVfc3RhdGUpO1xuK1x0aWYgKHIgXHUwMDNlIDApXG4rXHRcdHIgPSAtRUlPO1xuK1xuK1x0LyogQ29weSBiYWNrIGFsc28gb24gYW4gZXJyb3IgdG8gcmVwb3J0IGEgcGFydGlhbGx5IGRvbmUgdHJhbnNmZXIgKi9cbitcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2dmNwdV9zdGF0ZSwgc2l6ZW9mKHZjcHVfc3RhdGUpKSlcbitcdFx0ciA9IC1FRkFVTFQ7XG4rXG4rXHRyZXR1cm4gcjtcbit9XG4rXG4gbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC02NjU2LDYgKzY2OTEsMTQgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRyID0ga3ZtX3g4Nl9vcHMudmNwdV9tZW1fZW5jX2lvY3RsKHZjcHUsIGFyZ3ApO1xuIFx0XHRicmVhaztcbitcdGNhc2UgS1ZNX0VYUE9SVF9WQ1BVOiB7XG4rXHRcdHIgPSBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1KHZjcHUsIGZhbHNlLCBhcmdwKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjYXNlIEtWTV9JTVBPUlRfVkNQVToge1xuK1x0XHRyID0ga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdSh2Y3B1LCB0cnVlLCBhcmdwKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gLUVJTlZBTDtcbiBcdH1cbkBAIC03MjU1LDYgKzcyOTgsMzcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnkoc3RydWN0IGt2bSAqa3ZtLCBib29sIGltcG9ydCxcbitcdFx0XHRcdFx0dm9pZCBfX3VzZXIgKmFyZ3ApXG4re1xuK1x0c3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgbWVtO1xuK1x0aW50IHI7XG4rXG4rXHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcbitcdCAgICAoaW1wb3J0IFx1MDAyNlx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeSkgfHxcbitcdCAgICAoIWltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF9tZW1vcnkpKVxuK1x0XHRyZXR1cm4gLUVOT1RUWTtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZtZW0sIGFyZ3AsIHNpemVvZihtZW0pKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAobWVtLnJlc2VydmVkIHx8IG1lbS5idWYucmVzZXJ2ZWQgfHwgIW1lbS5ucl9nZm5zKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChpbXBvcnQpXG4rXHRcdHIgPSBrdm1feDg2X2NhbGwoaW1wb3J0X21lbW9yeSkoa3ZtLCBcdTAwMjZtZW0pO1xuK1x0ZWxzZVxuK1x0XHRyID0ga3ZtX3g4Nl9jYWxsKGV4cG9ydF9tZW1vcnkpKGt2bSwgXHUwMDI2bWVtKTtcbitcdGlmIChyIFx1MDAzZSAwKVxuK1x0XHRyID0gLUVJTztcbitcbitcdC8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIHRyYW5zZmVyICovXG4rXHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNm1lbSwgc2l6ZW9mKG1lbSkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHJldHVybiByO1xuK31cbitcbiBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG5AQCAtNzYxNCw2ICs3Njg4LDM0IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IGt2bV92bV9pb2N0bF9zZXRfbXNyX2ZpbHRlcihrdm0sIFx1MDAyNmZpbHRlcik7XG4gXHRcdGJyZWFrO1xuIFx0fVxuK1x0Y2FzZSBLVk1fTUlHUkFURV9DTUQ6IHtcbitcdFx0c3RydWN0IGt2bV9taWdyYXRlX2NtZCBjbWQ7XG4rXG4rXHRcdGlmICgha3ZtX3g4Nl9vcHMubWlncmF0ZV9jbWQgfHxcbitcdFx0ICAgICFrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pKVxuK1x0XHRcdHJldHVybiAtRU5PVFRZO1xuK1xuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2Y21kLCBhcmdwLCBzaXplb2YoY21kKSkpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRcdGlmIChjbWQucmVzZXJ2ZWQgfHwgY21kLmJ1Zi5yZXNlcnZlZClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0ciA9IGt2bV94ODZfY2FsbChtaWdyYXRlX2NtZCkoa3ZtLCBcdTAwMjZjbWQpO1xuK1x0XHRpZiAociBcdTAwM2UgMClcbitcdFx0XHRyID0gLUVJTztcbitcbitcdFx0LyogQ29weSBiYWNrIGFsc28gb24gYW4gZXJyb3IgdG8gcmVwb3J0IGEgcGFydGlhbGx5IGRvbmUgY29tbWFuZCAqL1xuK1x0XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCkpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGNhc2UgS1ZNX0VYUE9SVF9NRU1PUlk6XG4rXHRcdHIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgZmFsc2UsIGFyZ3ApO1xuK1x0XHRicmVhaztcbitcdGNhc2UgS1ZNX0lNUE9SVF9NRU1PUlk6XG4rXHRcdHIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgdHJ1ZSwgYXJncCk7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ciA9IC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5pbmRleCA0MTkwMTEwOTdmYThlLi4wYTlhYTEyNmRhYWRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbkBAIC05OTcsNiArOTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHtcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9LRVlPUCAyNDdcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5XG4rI2RlZmluZSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTEzNTAsNiArMTM1MSw4IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XG4gI2RlZmluZSBLVk1fR0VUX0RFVklDRV9BVFRSXHQgIF9JT1coS1ZNSU8sICAweGUyLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyKVxuICNkZWZpbmUgS1ZNX0hBU19ERVZJQ0VfQVRUUlx0ICBfSU9XKEtWTUlPLCAgMHhlMywgc3RydWN0IGt2bV9kZXZpY2VfYXR0cilcbiBcbisjZGVmaW5lIEtWTV9NSUdSQVRFX0NNRFx0XHQgIF9JT1dSKEtWTUlPLCAweGU0LCBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kKVxuK1xuIC8qXG4gICogaW9jdGxzIGZvciB2Y3B1IGZkc1xuICAqL1xuQEAgLTE0OTAsNiArMTQ5MywxMiBAQCBzdHJ1Y3Qga3ZtX2VuY19yZWdpb24ge1xuICNkZWZpbmUgS1ZNX0dFVF9TUkVHUzIgICAgICAgICAgICAgX0lPUihLVk1JTywgIDB4Y2MsIHN0cnVjdCBrdm1fc3JlZ3MyKVxuICNkZWZpbmUgS1ZNX1NFVF9TUkVHUzIgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4Y2QsIHN0cnVjdCBrdm1fc3JlZ3MyKVxuIFxuKy8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gKi9cbisjZGVmaW5lIEtWTV9FWFBPUlRfTUVNT1JZXHQgIF9JT1dSKEtWTUlPLCAweGU1LCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlcilcbisjZGVmaW5lIEtWTV9JTVBPUlRfTUVNT1JZXHQgIF9JT1dSKEtWTUlPLCAweGU2LCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlcilcbisjZGVmaW5lIEtWTV9FWFBPUlRfVkNQVVx0XHQgIF9JT1dSKEtWTUlPLCAweGU3LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIpXG4rI2RlZmluZSBLVk1fSU1QT1JUX1ZDUFVcdFx0ICBfSU9XUihLVk1JTywgMHhlOCwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyKVxuK1xuICNkZWZpbmUgS1ZNX0RJUlRZX0xPR19NQU5VQUxfUFJPVEVDVF9FTkFCTEUgICAgKDEgXHUwMDNjXHUwMDNjIDApXG4gI2RlZmluZSBLVk1fRElSVFlfTE9HX0lOSVRJQUxMWV9TRVQgICAgICAgICAgICAoMSBcdTAwM2NcdTAwM2MgMSlcbiBcbkBAIC0xNjcwLDQgKzE2NzksMzggQEAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcbiBcdF9fdTY0IHBhZGRpbmdbNV07XG4gfTtcbiBcbisjZGVmaW5lIEtWTV9NSUdSQVRFX1NFVFVQXHRcdDBcbisjZGVmaW5lIEtWTV9NSUdSQVRFX0lURVJBVElPTlx0XHQxXG4rI2RlZmluZSBLVk1fTUlHUkFURV9TVE9QX0FORF9DT1BZXHQyXG4rI2RlZmluZSBLVk1fTUlHUkFURV9BQk9SVFx0XHQzXG4rI2RlZmluZSBLVk1fTUlHUkFURV9FTkRcdFx0XHQ0XG4rXG4rc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIge1xuK1x0X191NjQgYWRkcmVzcztcbitcdF9fdTMyIHNpemU7XG4rXHRfX3UzMiByZXNlcnZlZDtcbit9O1xuK1xuK3N0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xuK1x0X191MTYgY29tbWFuZDtcbitcdF9fdTE2IGZsYWdzO1xuK1x0X191MzIgcmVzZXJ2ZWQ7XG4rXHRzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XG4rfTtcbitcbitzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciB7XG4rXHRfX3U2NCBnZm5zO1xuK1x0X191MzIgbnJfZ2ZucztcbitcdF9fdTE2IGlkO1xuK1x0X191MTYgZmxhZ3M7XG4rXHRfX3U2NCByZXNlcnZlZDtcbitcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1Zjtcbit9O1xuK1xuK3N0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciB7XG4rXHRfX3UzMiBmbGFncztcbitcdF9fdTMyIHJlc2VydmVkO1xuK1x0c3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgYnVmO1xuK307XG4rXG4gI2VuZGlmIC8qIF9fTElOVVhfS1ZNX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjI5OjMzLjMyNzEyNjk3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTg0Mzc5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIExpdmUgTWlncmF0aW9uIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIEl0J3MgdG91Y2hpbmcgYERvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdGAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBhbmQgdGhlbiB3ZSBoYXZlIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIGhlYWRlciBmaWxlcyBhbmQgdGhlIGNvcmUgYHg4Ni5jYCBpbXBsZW1lbnRhdGlvbi4gTGFzdGx5LCBpdCB0b3VjaGVzIGBpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhgLiBUaGF0IG1ha2VzIG1lIHRoaW5rIHRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGxvb2sgYXQuXG5cbk5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBsaXZlIG1pZ3JhdGlvbi4gR2l2ZW4gdGhlIGFyZWFzIGJlaW5nIHRvdWNoZWQsIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGhvb2tzIG9yIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBsaXZlIG1pZ3JhdGlvbiBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBhcmUgdmVuZG9yIGNhbGxiYWNrcyBiZWluZyBpbXBsZW1lbnRlZCwgb3IgaWYgdGhlIGBjYXBfbGl2ZV9taWdyYXRpb25gIGNhcGFiaWxpdHkgaXMgYmVpbmcgZXhwb3NlZCBhbnl3aGVyZSBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCBoYXMgYmVlbiBhZGRlZCBvciBhbHRlcmVkLlxuXG5JJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGtleXdvcmRzOiBgY2FwX2xpdmVfbWlncmF0aW9uYCwgYGV4cG9ydF9tZW1vcnlgLCBgaW1wb3J0X21lbW9yeWAsIGBleHBvcnRfdmNwdWAsIGBpbXBvcnRfdmNwdWAsIGFuZCBgbWlncmF0ZV9jbWRgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldyBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGVzZSBjcnVjaWFsIGZlYXR1cmVzIGFuZCB3aWxsIHF1aWNrbHkgaGlnaGxpZ2h0IGFueSBjaGFuZ2VzIG9yIGFkZGl0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEkgZXhwZWN0IEknbGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSBpZiBhbnkgb2YgdGhlc2UgYXJlIGltcGxlbWVudGVkIGluIGBrdm1feDg2X29wc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTozNy41ODU1NjcyMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjcyMTAwNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihjYXBfbGl2ZV9taWdyYXRpb258bWlncmF0ZV9jbWR8ZXhwb3J0X21lbW9yeXxpbXBvcnRfbWVtb3J5fGV4cG9ydF92Y3B1fGltcG9ydF92Y3B1KVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjU2NT1LVk1fUzM5MF9LRVlPUF9TU0tFXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjU3Ni06VHlwZTogdm0gaW9jdGxcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjU3Nzo6UGFyYW1ldGVyczogc3RydWN0IGt2bV9taWdyYXRlX2NtZCAoaW4vb3V0KVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTc4LTpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MgMCBvbiBlcnJvclxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY1OTE9cmV0dXJuZWQuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY1OTItXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY1OTM6VGhlIEtWTV9NSUdSQVRFX0NNRCBzdWJjb21tYW5kIHBhc3NlZCBpbiBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIGlzIG9uZSBvZjo6XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY1OTQtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjYwMT1UaGUga3ZtX3RyYW5zZmVyX2J1ZmZlciBpczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYxMy1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjYxNDpUaGUga3ZtX21pZ3JhdGVfY21kIGlzOjpcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYxNS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjIxLSAgICovXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY2MjI6ICBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIHtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYyMy1cXHRfX3UxNiBjb21tYW5kO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNTA9S1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTE6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGNhcF9saXZlX21pZ3JhdGlvbilcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjE1MjpLVk1fWDg2X09QX09QVElPTkFMKG1pZ3JhdGVfY21kKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTUzOktWTV9YODZfT1BfT1BUSU9OQUwoZXhwb3J0X21lbW9yeSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjE1NDpLVk1fWDg2X09QX09QVElPTkFMKGltcG9ydF9tZW1vcnkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTU6S1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfdmNwdSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjE1NjpLVk1fWDg2X09QX09QVElPTkFMKGltcG9ydF92Y3B1KVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTU3LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNzg1PXN0cnVjdCBrdm1feDg2X29wcyB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwMTItXFx0aW50ICgqZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxMzpcXHRib29sICgqY2FwX2xpdmVfbWlncmF0aW9uKShzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxNDpcXHRpbnQgKCptaWdyYXRlX2NtZCkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kICpjbWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxNTpcXHRpbnQgKCpleHBvcnRfbWVtb3J5KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyICptZW0pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxNjpcXHRpbnQgKCppbXBvcnRfbWVtb3J5KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyICptZW0pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxNzpcXHRpbnQgKCpleHBvcnRfdmNwdSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKnZjcHVfc3RhdGUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxODpcXHRpbnQgKCppbXBvcnRfdmNwdSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKnZjcHVfc3RhdGUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjAxOS19O1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTQ3Njg9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy00OTc2LVxcdGNhc2UgS1ZNX0NBUF9MSVZFX01JR1JBVElPTjpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDk3NzpcXHRcXHRyID0ga3ZtID8ga3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSA6IDA7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5NzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjE5Mj1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGltcG9ydCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02MTk4LVxcbmFyY2gveDg2L2t2bS94ODYuYzo2MTk5OlxcdGlmICgha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSB8fFxcbmFyY2gveDg2L2t2bS94ODYuYzo2MjAwOlxcdCAgICAoaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5pbXBvcnRfdmNwdSkgfHxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjIwMTpcXHQgICAgKCFpbXBvcnQgXFx1MDAyNlxcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF92Y3B1KSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjIwMi1cXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02MjEwLVxcdGlmIChpbXBvcnQpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjYyMTE6XFx0XFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgXFx1MDAyNnZjcHVfc3RhdGUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02MjEyLVxcdGVsc2VcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjIxMzpcXHRcXHRyID0ga3ZtX3g4Nl9jYWxsKGV4cG9ydF92Y3B1KSh2Y3B1LCBcXHUwMDI2dmNwdV9zdGF0ZSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTYyMTQtXFx0aWYgKHIgXFx1MDAzZSAwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTczMDE9c3RhdGljIGludCBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbXBvcnQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzMwNi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMwNzpcXHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMwODpcXHQgICAgKGltcG9ydCBcXHUwMDI2XFx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeSkgfHxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMwOTpcXHQgICAgKCFpbXBvcnQgXFx1MDAyNlxcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF9tZW1vcnkpKVxcbmFyY2gveDg2L2t2bS94ODYuYy03MzEwLVxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTczMTgtXFx0aWYgKGltcG9ydClcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMxOTpcXHRcXHRyID0ga3ZtX3g4Nl9jYWxsKGltcG9ydF9tZW1vcnkpKGt2bSwgXFx1MDAyNm1lbSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTczMjAtXFx0ZWxzZVxcbmFyY2gveDg2L2t2bS94ODYuYzo3MzIxOlxcdFxcdHIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X21lbW9yeSkoa3ZtLCBcXHUwMDI2bWVtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzMyMi1cXHRpZiAociBcXHUwMDNlIDApXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzMzMj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzY5MS1cXHRjYXNlIEtWTV9NSUdSQVRFX0NNRDoge1xcbmFyY2gveDg2L2t2bS94ODYuYzo3NjkyOlxcdFxcdHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgY21kO1xcbmFyY2gveDg2L2t2bS94ODYuYy03NjkzLVxcbmFyY2gveDg2L2t2bS94ODYuYzo3Njk0OlxcdFxcdGlmICgha3ZtX3g4Nl9vcHMubWlncmF0ZV9jbWQgfHxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzY5NTpcXHRcXHQgICAgIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTYtXFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzcwMy1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzcwNDpcXHRcXHRyID0ga3ZtX3g4Nl9jYWxsKG1pZ3JhdGVfY21kKShrdm0sIFxcdTAwMjZjbWQpO1xcbmFyY2gveDg2L2t2bS94ODYuYy03NzA1LVxcdFxcdGlmIChyIFxcdTAwM2UgMClcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xMjUzPXN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTM1My1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTM1NDojZGVmaW5lIEtWTV9NSUdSQVRFX0NNRFxcdFxcdCAgX0lPV1IoS1ZNSU8sIDB4ZTQsIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTEzNTUtXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTY4OD1zdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY5My1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY5NDpzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIHtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY5NS1cXHRfX3UxNiBjb21tYW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTo0MC44NTc2NzI3MzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjQxNDcyMDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIExpdmUgTWlncmF0aW9uIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIChvciBsYWNrIHRoZXJlb2YpIG9mIGBjYXBfbGl2ZV9taWdyYXRpb25gLiAgRmlyc3QsIEknbSBjaGVja2luZyBmb3IgaW1wbGVtZW50YXRpb25zIG9mIGBjYXBfbGl2ZV9taWdyYXRpb25gLCBgbWlncmF0ZV9jbWRgLCBgZXhwb3J0X21lbW9yeWAsIGBpbXBvcnRfbWVtb3J5YCwgYGV4cG9ydF92Y3B1YCwgYW5kIGBpbXBvcnRfdmNwdWAgd2l0aGluIHRoZSBrZXkgS1ZNIGFyY2ggZmlsZXMgbGlrZSBgdm14LmNgLCBgc3ZtLmNgLCBgdGR4LmNgLCBhbmQgYHNldi5jYC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgdmVuZG9yLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucy5cblxuQSBicm9hZCBzZWFyY2ggdXNpbmcgYGdyZXBgIGFjcm9zcyB0aGUgY29kZWJhc2Ugc2hvdWxkIGJlIGRlZmluaXRpdmUuIFllcywgdGhlIGdyZXAgc2hvd2VkICphbGwqIG9jY3VycmVuY2VzIGFjcm9zcyB0aGUgKmVudGlyZSogY29kZWJhc2UsIHNvIHRoYXQgc2hvdWxkIGJlIHJlbGlhYmxlLiBOb3cgSSdtIHZlcmlmeWluZyB0aGUgZ3JlcCBwYXR0ZXJuIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0J3MgY2F0Y2hpbmcgYWxsIHRoZSByZWxldmFudCBzeW1ib2xzLiBUaGUgcGF0dGVybiBgKGNhcF9saXZlX21pZ3JhdGlvbnxtaWdyYXRlX2NtZHxleHBvcnRfbWVtb3J5fGltcG9ydF9tZW1vcnl8ZXhwb3J0X3ZjcHV8aW1wb3J0X3ZjcHUpYCBzZWVtcyBjb3JyZWN0IGFuZCBpdCBvbmx5IHlpZWxkZWQgcmVmZXJlbmNlcyBpbiBkb2N1bWVudGF0aW9uLCB0aGUgaGVhZGVyIGZpbGVzIGFuZCB0aGUgeDg2IGFuZCB1YXBpIGZpbGVzLiBOb3RoaW5nIHZlbmRvci1zcGVjaWZpYy5cblxuTm93LCBhIGNydWNpYWwgcG9pbnQ6IHNpbmNlIGBjYXBfbGl2ZV9taWdyYXRpb25gIGlzIGRlZmluZWQgYXMgYEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMGAsIHRoZSByZXR1cm4gdmFsdWUgb2YgYGt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSlgIHdoZW4gbm8gdmVuZG9yIGltcGxlbWVudGF0aW9uIGlzIHByZXNlbnQgaXMgZXNzZW50aWFsbHkgMCAoZmFsc2UpIGJlY2F1c2UgaXQgZGVmYXVsdHMgdG8gTlVMTCBvciBhIHN0dWIgcmV0dXJuaW5nIDAuIFRoYXTigJlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGZsb3cuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgdmFsdWUgaXMgdXNlZC4gSW4gYGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHVgLCBga3ZtX3ZtX2lvY3RsX3RyYW5zZmVyX21lbW9yeWAsIGFuZCBga3ZtX2FyY2hfdm1faW9jdGxgLCBpZiBgY2FwX2xpdmVfbWlncmF0aW9uYCBpcyB6ZXJvIChmYWxzZSksIG9yIHRoZSByZWxldmFudCBvcHMgYXJlIE5VTEwsIGl0IHJldHVybnMgLUVOT1RUWSBpbW1lZGlhdGVseS4gQW5kIHRoZSBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAganVzdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiBgY2FwX2xpdmVfbWlncmF0aW9uYC4gU28gbm8gbGl2ZSBtaWdyYXRpb24gaXMgYWxsb3dlZC5cblxuV2FpdCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIGFyY2hpdGVjdHVyZXMgYWRkaW5nIGFueXRoaW5nIGhlcmU/IExldCdzIGNoZWNrIGBhcm02NGAsIGBzMzkwYCwgb3IgYW55IG90aGVycyBmb3IgYW55IG1vZGlmaWNhdGlvbnMuXG5cbk9rYXksIHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgeDg2IHJlbGF0ZWQgZmlsZXMuIFNwZWNpZmljYWxseTogdGhlIGRvY3VtZW50YXRpb24sIHg4NiBoZWFkZXJzLCB4ODYgS1ZNIGNvZGUsIGFuZCB0aGUgVUFQSSBoZWFkZXIuXG5cbkZpbmFsbHksIGp1c3QgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUsIGxldOKAmXMgcnVuIGEgcXVpY2sgYGdpdCBsb2dgIGFuZCBgZ2l0IHN0YXR1c2AgY2hlY2sgdG8gcnVsZSBvdXQgYW55IHJlY2VudCBjb21taXRzIG9yIGxvY2FsIG1vZGlmaWNhdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzZWFyY2ggcmVzdWx0cy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGhpZGluZyBpbiB0aGUgYnVzaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg2NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTo1Ny4yNzIzOTY1NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTE0Nzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NTY1PUtWTV9TMzkwX0tFWU9QX1NTS0VcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTczLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NTc0OjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY1NzUtOkFyY2hpdGVjdHVyZXM6IHg4Nlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY1ODk9VGhlIHZlbmRvciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGxvY2tpbmcgYW5kIGNoZWNrcyB0aGUgdmFsaWQgZmxhZ3NcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjU5MDpiaXRzLiBJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpc1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTkxLXJldHVybmVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY2MTQ9VGhlIGt2bV9taWdyYXRlX2NtZCBpczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYzMy1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjYzNDo6Q2FwYWJpbGl0eTogS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjM1LTpBcmNoaXRlY3R1cmVzOiB4ODZcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NjQ1PXRoZSBndWVzdC5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjY0Ni1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjY0NzpJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpcyByZXR1cm5lZC5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjY0OC1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02Njc1PUZvciBtZW1vcnkgaW1wb3J0LCBzZWUgYWxzbyA6cmVmOmBLVk1fSU1QT1JUX01FTU9SWSBcXHUwMDNjS1ZNX0lNUE9SVF9NRU1PUllcXHUwMDNlYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjgyLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NjgzOjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2ODQtOkFyY2hpdGVjdHVyZXM6IHg4Nlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY2OTQ9dGhlIGd1ZXN0LlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02Njk1LVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2Njk2OklmIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIFZNLCAtRU5PVFRZIGlzIHJldHVybmVkLlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02Njk3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY3MDU9Rm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZW8gOnJlZjpgS1ZNX01JR1JBVEVfQ01EIFxcdTAwM2NLVk1fTUlHUkFURV9DTURcXHUwMDNlYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NzEwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NzExOjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY3MTItOkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODZcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NzM5PUZvciB2Q1BVIGltcG9ydCwgc2VlIGFsc28gOnJlZjpgS1ZNX0lNUE9SVF9WQ1BVIFxcdTAwM2NLVk1fSU1QT1JUX1ZDUFVcXHUwMDNlYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NzQ1LVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NzQ2OjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY3NDctOkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODZcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD05Njg4PXN0YXJ0IGluIEVTQSBtb2RlLlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05Njg5LVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NjkwOjguNDggS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NjkxLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTQ3Njg9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy00OTc1LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS94ODYuYzo0OTc2OlxcdGNhc2UgS1ZNX0NBUF9MSVZFX01JR1JBVElPTjpcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDk3Ny1cXHRcXHRyID0ga3ZtID8ga3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSA6IDA7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9Njc0PXN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtOTk5LSNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxMDAwOiNkZWZpbmUgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiAyNTBcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTAwMS1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNDQ1PXN0cnVjdCBrdm1fZW5jX3JlZ2lvbiB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTQ5NS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTQ5NjovKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE0OTctI2RlZmluZSBLVk1fRVhQT1JUX01FTU9SWVxcdCAgX0lPV1IoS1ZNSU8sIDB4ZTUsIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTo1OC44MTE1NTI1OTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQwMTgxNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBLVk1fWDg2X09QX09QVElPTkFMX1JFVDBgIHRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSBLVk0geDg2IGFyY2hpdGVjdHVyZS4gSSdsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIGdyZXAgd2l0aGluIHRoZSBgYXJjaC94ODYvYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcgb2Ygd2hlcmUgdGhpcyBtYWNybyBpcyB1c2VkIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIEtWTSBpbXBsZW1lbnRhdGlvbi4gSG9wZWZ1bGx5LCB0aGUgcmVzdWx0cyB3aWxsIHBvaW50IG1lIHRvd2FyZHMgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIGFsbG93IG1lIHRvIHVucmF2ZWwgaXRzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgeDg2IHZpcnR1YWxpemF0aW9uIGNvbnRleHQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQ4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MzA6MDEuMjUxNzM2ODc3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzI4ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTMtICAgICFkZWZpbmVkKEtWTV9YODZfT1BfT1BUSU9OQUwpIHx8IFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjQ6ICAgICFkZWZpbmVkKEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTUtI2Vycm9yIE1pc3Npbmcgb25lIG9yIG1vcmUgS1ZNX1g4Nl9PUCAjZGVmaW5lc1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMi0gKiBLVk1fWDg2X09QX09QVElPTkFMKCkgY2FuIGJlIHVzZWQgZm9yIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGNhbiBoYXZlXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxMzogKiBhIE5VTEwgZGVmaW5pdGlvbi4gIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCgpIGNhbiBiZSB1c2VkIGxpa2V3aXNlXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xNC0gKiB0byBtYWtlIGEgZGVmaW5pdGlvbiBvcHRpb25hbCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgZGVmYXVsdCB3aWxsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oPTI1PUtWTV9YODZfT1BfT1BUSU9OQUwodm1fcHJlX2Rlc3Ryb3kpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoyNjpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9wcmVjcmVhdGUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0yNy1LVk1fWDg2X09QKHZjcHVfY3JlYXRlKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD03NT1LVk1fWDg2X09QKGluamVjdF9ubWkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo3NjpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoaXNfdm5taV9wZW5kaW5nKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6Nzc6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF92bm1pX3BlbmRpbmcpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC03OC1LVk1fWDg2X09QKGluamVjdF9leGNlcHRpb24pXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oPTkzPUtWTV9YODZfT1BfT1BUSU9OQUwoc3luY19waXJfdG9faXJyKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6OTQ6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF90c3NfYWRkcilcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjk1OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfaWRlbnRpdHlfbWFwX2FkZHIpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo5NjpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ2V0X210X21hc2spXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo5NzpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodGRwX2hhc19zbWVwKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtOTgtS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo5OTpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMDAtS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9MTE2PUtWTV9YODZfT1BfT1BUSU9OQUwoYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTE3OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChkeV9hcGljdl9oYXNfcGVuZGluZ19pbnRlcnJ1cHQpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMTgtS1ZNX1g4Nl9PUF9PUFRJT05BTChwcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0KVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNDQ9S1ZNX1g4Nl9PUCh2Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNDU6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xNDYtS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oPTE0Nz1LVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTQ4OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNDk6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xNTAtS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTE6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGNhcF9saXZlX21pZ3JhdGlvbilcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTE1Mi1LVk1fWDg2X09QX09QVElPTkFMKG1pZ3JhdGVfY21kKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNTY9S1ZNX1g4Nl9PUF9PUFRJT05BTChpbXBvcnRfdmNwdSlcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTYwLSN1bmRlZiBLVk1fWDg2X09QX09QVElPTkFMXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNjE6I3VuZGVmIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0yMDY4PWV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwNzQtI2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMIEtWTV9YODZfT1BcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjIwNzU6I2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9PUFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjA3Ni0jaW5jbHVkZSBcXHUwMDNjYXNtL2t2bS14ODYtb3BzLmhcXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTQzPXN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTE0OC0jZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9PUFxcbmFyY2gveDg2L2t2bS94ODYuYzoxNDk6I2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9PUFxcbmFyY2gveDg2L2t2bS94ODYuYy0xNTAtI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0teDg2LW9wcy5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMTE5PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fb3BzX3VwZGF0ZShzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTI3LSNkZWZpbmUgS1ZNX1g4Nl9PUF9PUFRJT05BTCBfX0tWTV9YODZfT1BcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxMjg6I2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcXFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDEyOS1cXHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl8jI2Z1bmMsICh2b2lkICopa3ZtX3g4Nl9vcHMuZnVuYyA/IDogXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzozMDowMS4zMTI0NjkzMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MzU2NDkyMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtWTSBMaXZlIE1pZ3JhdGlvbiBJb2N0bCBQbHVtYmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGludHJvZHVjaW5nIHRoZSBwbHVtYmluZyBmb3IgbGl2ZSBtaWdyYXRpb24gaW9jdGxzLCBzcGVjaWZpY2FsbHkgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZmVhdHVyZXMgbGlrZSBURFgvU0VWLVNOUCwgd2l0aGluIHRoZSBLVk0gWDg2IGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBvZiBgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGNhcF9saXZlX21pZ3JhdGlvbilgLiAgV2Uga25vdywgZnJvbSB0aGUgY29kZSwgdGhhdCBga3ZtX3g4Nl9vcHMuY2FwX2xpdmVfbWlncmF0aW9uYCBpcyBjdXJyZW50bHkgTlVMTCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIHN0YXRlIGZvciBib3RoIEludGVsIGFuZCBBTUQgYXQgdGhpcyBzdGFnZSwgc2luY2UgbmVpdGhlciB2bXggbm9yIHN2bSBoYXZlIGltcGxlbWVudGVkIGl0LiBUaGlzIHJlc3VsdHMgaW4gYHN0YXRpY19jYWxsKGt2bV94ODZfY2FwX2xpdmVfbWlncmF0aW9uKWAgY2FsbGluZyBhIHN0dWIgdGhhdCByZXR1cm5zIDAuXG5cbk5vdywgbGV0J3Mgc2VlIHdoZXJlIHRoYXQgcmV0dXJuIHZhbHVlIG9mIDAgZnJvbSBgY2FwX2xpdmVfbWlncmF0aW9uKGt2bSlgIGxhbmRzLiBMb29raW5nIGF0IGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCwgd2UgaGF2ZSBhIGRpcmVjdCByZXR1cm4gb2YgMCwgd2hpY2ggaXMgc2ltcGxlIGVub3VnaC4gIGBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1YCwgYGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnlgLCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbGwgY29udGFpbiBjaGVja3MgbGlrZSBgIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSlgLCBhbmQgc2luY2UgYGNhcF9saXZlX21pZ3JhdGlvbmAgcmV0dXJucyAwLCB0aGUgY29kZSBpbW1lZGlhdGVseSByZXR1cm5zIGAtRU5PVFRZYCBpbiBhbGwgdGhlc2UgY2FzZXMuICBcblxuTXkgbmV4dCBzdGVwIGlzIHRvIHZlcmlmeSB0aGlzIHRob3JvdWdoIGEgZ3JlcCBvZiB0aGUgZW50aXJlIGNvZGViYXNlIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSBga3ZtX3g4Nl9vcHMubWlncmF0ZV9jbWRgLCBga3ZtX3g4Nl9vcHMuZXhwb3J0X21lbW9yeWAsIGBrdm1feDg2X29wcy5pbXBvcnRfbWVtb3J5YCwgYGt2bV94ODZfb3BzLmV4cG9ydF92Y3B1YCwgYGt2bV94ODZfb3BzLmltcG9ydF92Y3B1YCBvciBga3ZtX3g4Nl9vcHMuY2FwX2xpdmVfbWlncmF0aW9uYCBhcmUgKmFjdHVhbGx5KiBzZXQuIEFuZCB3ZSd2ZSBhbHJlYWR5IGRvbmUgdGhhdCwgY29uZmlybWluZyBubyBvdGhlciBvY2N1cnJlbmNlcy4gVGhpcywgYXMgSSBleHBlY3RlZCwgc3VnZ2VzdHMgdGhpcyBwYXRjaCBpcyAqb25seSogc2V0dGluZyB1cCB0aGUgaW50ZXJmYWNlLCB0aGUgaW9jdGwgZGVmaW5pdGlvbnMsIGFuZCB0aGUgaW5pdGlhbCBkaXNwYXRjaGVyIHN0cnVjdHVyZSBidXQgZG9lc24ndCBpbmNsdWRlIGFueSB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHlldC5cblxuTm93LCBhIGtleSBxdWVzdGlvbjogY2FuICphbnkqIHVzZXItcHJvdmlkZWQgaW5wdXQgZXZlbiAqdG91Y2gqIGNvZGUgYmV5b25kIHRoYXQgaW5pdGlhbCBjaGVjaz8gIExvb2tpbmcgZGVlcGVyIGF0IGBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1YCwgaXQncyBjbGVhciB0aGUgY2hlY2sgaXMgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBmdW5jdGlvbiwgYmVmb3JlIGFueSBgY29weV9mcm9tX3VzZXJgIG9yIG90aGVyIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgY29kZS4gVGhlIHNhbWUgaG9sZHMgdHJ1ZSBmb3IgYGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnlgIGFuZCBgS1ZNX01JR1JBVEVfQ01EYC4gIFRoZSBjcnVjaWFsIGNoZWNrIGhhcHBlbnMgaW1tZWRpYXRlbHksIGVuc3VyaW5nIGAtRU5PVFRZYCBpcyByZXR1cm5lZCBiZWZvcmUgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZy5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgZ3VpZGVsaW5lcyBmb3IgXCJXb3J0aEZ1enppbmdcIiB0byBjb25maXJtIG91ciBhc3N1bXB0aW9ucyBoZXJlLiBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgY2hhbmdlcyB0byBjb25zdGFudHMgdGhhdCBkb24ndCBhbHRlciBleGVjdXRpb24sIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgYWxsIGdldCBhIFdvcnRoRnV6emluZz1mYWxzZS4gSGVyZSwgaXQgaXMgY2xlYXIgdGhhdCB0aGUgbmV3IGlvY3RscyBhcmUgc3R1YmJlZCBhbmQgdW5yZWFjaGFibGUgc2luY2UgYGNhcF9saXZlX21pZ3JhdGlvbmAgYW5kIG90aGVyIHZlbmRvciBob29rcyBhcmUgbm90IGltcGxlbWVudGVkLiBUaGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGluIGEgd2F5IHRoYXQgcmV0dXJucyBiZWZvcmUgdGhlIGV4ZWN1dGlvbiBvZiBjb3JlIGxvZ2ljIG9yIGhhbmRsaW5nIG9mIHVzZXIgaW5wdXRzLlxuXG5Gb3IgYWRkZWQgYXNzdXJhbmNlLCBsZXQncyB2ZXJpZnkgd2l0aCBgcmVhZC1maWxlYCBvbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucywganVzdCB0byAxMDAlIGVuc3VyZSB3ZSBtaXNzZWQgbm90aGluZy5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGludHJvZHVjZXMgdW5yZWFjaGFibGUgaW9jdGxzIGFuZCBzdHVicyBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBcIldvcnRoRnV6emluZz1mYWxzZVwiIHNjZW5hcmlvLiBUaGlzIHBhdGNoIGRvZXNuJ3QgZXhwb3NlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2VzIGFuZCB3aWxsIGxpa2VseSBiZSB3b3J0aCByZS1ldmFsdWF0aW5nIHdoZW4gdGhlIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgYXJlIGFkZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE0OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MzA6MTAuNjY4OTYzNDc3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjE5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjE5MDpcXHR9XFxuNjE5MTpcXHRcXG42MTkyOlxcdHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW1wb3J0LFxcbjYxOTM6XFx0XFx0XFx0XFx0XFx0XFx0dm9pZCBfX3VzZXIgKmFyZ3ApXFxuNjE5NDpcXHR7XFxuNjE5NTpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgdmNwdV9zdGF0ZTtcXG42MTk2OlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG42MTk3OlxcdFxcdGludCByO1xcbjYxOTg6XFx0XFxuNjE5OTpcXHRcXHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcXG42MjAwOlxcdFxcdCAgICAoaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5pbXBvcnRfdmNwdSkgfHxcXG42MjAxOlxcdFxcdCAgICAoIWltcG9ydCBcXHUwMDI2XFx1MDAyNiAha3ZtX3g4Nl9vcHMuZXhwb3J0X3ZjcHUpKVxcbjYyMDI6XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuNjIwMzpcXHRcXG42MjA0OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2dmNwdV9zdGF0ZSwgYXJncCwgc2l6ZW9mKHZjcHVfc3RhdGUpKSlcXG42MjA1OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjYyMDY6XFx0XFxuNjIwNzpcXHRcXHRpZiAodmNwdV9zdGF0ZS5yZXNlcnZlZCB8fCB2Y3B1X3N0YXRlLmJ1Zi5yZXNlcnZlZClcXG42MjA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjYyMDk6XFx0XFxuNjIxMDpcXHRcXHRpZiAoaW1wb3J0KVxcbjYyMTE6XFx0XFx0XFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgXFx1MDAyNnZjcHVfc3RhdGUpO1xcbjYyMTI6XFx0XFx0ZWxzZVxcbjYyMTM6XFx0XFx0XFx0ciA9IGt2bV94ODZfY2FsbChleHBvcnRfdmNwdSkodmNwdSwgXFx1MDAyNnZjcHVfc3RhdGUpO1xcbjYyMTQ6XFx0XFx0aWYgKHIgXFx1MDAzZSAwKVxcbjYyMTU6XFx0XFx0XFx0ciA9IC1FSU87XFxuNjIxNjpcXHRcXG42MjE3OlxcdFxcdC8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIHRyYW5zZmVyICovXFxuNjIxODpcXHRcXHRpZiAoY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZ2Y3B1X3N0YXRlLCBzaXplb2YodmNwdV9zdGF0ZSkpKVxcbjYyMTk6XFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuNjIyMDpcXHRcXG42MjIxOlxcdFxcdHJldHVybiByO1xcbjYyMjI6XFx0fVxcbjYyMjM6XFx0XFxuNjIyNDpcXHRsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuNjIyNTpcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG42MjI2OlxcdHtcXG42MjI3OlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG42MjI4OlxcdFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbjYyMjk6XFx0XFx0aW50IHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjMwOjEwLjY2OTY0ODc3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Nzc1MzQ0MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIGxvY2F0aW9ucywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRleHQsIGFzIHRob3VnaCB0aGV5IHdlcmUgbXkgaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgS1ZNIHg4NiBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IEtWTSdzIHg4NiBjb2RlLCBhbmQgSSBuZWVkIHRvIGhvbmUgaW4gb24gYSBjb3VwbGUgb2Ygc3BlY2lmaWMgYXJlYXMuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIGFyb3VuZCBsaW5lcyBgNzMwMC03MzQwYCBhbmQgdGhlbiBhbHNvIGA3NjkwLTc3MjBgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRob3NlIHNlY3Rpb25zIGFyZSBoYW5kbGluZyBhIGNydWNpYWwgcGFydCBvZiB0aGUgeDg2IGVtdWxhdGlvbiBvciBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgYW5kIGFueSBzdWJ0bGUgZmxhd3MgaW4gdGhlIGxvZ2ljIHRoZXJlIGNvdWxkIGxlYWQgdG8gcG90ZW50aWFsIGV4cGxvaXRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aG9zZSBjaHVua3Mgb2YgY29kZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzozMDoxNi40NDQ5OTQ5NTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI2NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MzAwOlxcdFxcbjczMDE6XFx0c3RhdGljIGludCBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbXBvcnQsXFxuNzMwMjpcXHRcXHRcXHRcXHRcXHRcXHR2b2lkIF9fdXNlciAqYXJncClcXG43MzAzOlxcdHtcXG43MzA0OlxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyIG1lbTtcXG43MzA1OlxcdFxcdGludCByO1xcbjczMDY6XFx0XFxuNzMwNzpcXHRcXHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcXG43MzA4OlxcdFxcdCAgICAoaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5pbXBvcnRfbWVtb3J5KSB8fFxcbjczMDk6XFx0XFx0ICAgICghaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfbWVtb3J5KSlcXG43MzEwOlxcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbjczMTE6XFx0XFxuNzMxMjpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNm1lbSwgYXJncCwgc2l6ZW9mKG1lbSkpKVxcbjczMTM6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNzMxNDpcXHRcXG43MzE1OlxcdFxcdGlmIChtZW0ucmVzZXJ2ZWQgfHwgbWVtLmJ1Zi5yZXNlcnZlZCB8fCAhbWVtLm5yX2dmbnMpXFxuNzMxNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MzE3OlxcdFxcbjczMTg6XFx0XFx0aWYgKGltcG9ydClcXG43MzE5OlxcdFxcdFxcdHIgPSBrdm1feDg2X2NhbGwoaW1wb3J0X21lbW9yeSkoa3ZtLCBcXHUwMDI2bWVtKTtcXG43MzIwOlxcdFxcdGVsc2VcXG43MzIxOlxcdFxcdFxcdHIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X21lbW9yeSkoa3ZtLCBcXHUwMDI2bWVtKTtcXG43MzIyOlxcdFxcdGlmIChyIFxcdTAwM2UgMClcXG43MzIzOlxcdFxcdFxcdHIgPSAtRUlPO1xcbjczMjQ6XFx0XFxuNzMyNTpcXHRcXHQvKiBDb3B5IGJhY2sgYWxzbyBvbiBhbiBlcnJvciB0byByZXBvcnQgYSBwYXJ0aWFsbHkgZG9uZSB0cmFuc2ZlciAqL1xcbjczMjY6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2bWVtLCBzaXplb2YobWVtKSkpXFxuNzMyNzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG43MzI4OlxcdFxcbjczMjk6XFx0XFx0cmV0dXJuIHI7XFxuNzMzMDpcXHR9XFxuNzMzMTpcXHRcXG43MzMyOlxcdGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG43MzMzOlxcdHtcXG43MzM0OlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG43MzM1OlxcdFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbjczMzY6XFx0XFx0aW50IHIgPSAtRU5PVFRZO1xcbjczMzc6XFx0XFxuNzMzODpcXHQjaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG43MzM5OlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjMwOjE2LjQ0NTcyMzExOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTIyNDkwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBMaXZlIE1pZ3JhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIEtWTSBsaXZlIG1pZ3JhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSAqaW50cm9kdWNlcyogdGhlIG5lY2Vzc2FyeSBmZWF0dXJlcywgc3BlY2lmaWNhbGx5IHRoZSBgS1ZNX0NBUF9MSVZFX01JR1JBVElPTmAgY2FwYWJpbGl0eSBhbmQgdGhlIGFzc29jaWF0ZWQgaW9jdGxzOiBgS1ZNX01JR1JBVEVfQ01EYCwgYEtWTV9FWFBPUlRfTUVNT1JZYCwgYEtWTV9JTVBPUlRfTUVNT1JZYCwgYEtWTV9FWFBPUlRfVkNQVWAsIGFuZCBgS1ZNX0lNUE9SVF9WQ1BVYC4gVGhhdCdzIHRoZSB0aGVvcnksIGFueXdheS5cblxuQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiBpdCwgKm5vKiB2ZW5kb3IgYmFja2VuZCwgYXQgbGVhc3Qgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgdHJlZSwgYWN0dWFsbHkgKmltcGxlbWVudHMqIGBjYXBfbGl2ZV9taWdyYXRpb25gIG9yIGFueSBvZiB0aGUgbWlncmF0aW9uIGNhbGxiYWNrcy4gTWVhbmluZywgY2hlY2tpbmcgZm9yIHRoYXQgY2FwYWJpbGl0eSwgb3IgZXZlbiB0cnlpbmcgdG8gY2FsbCB0aG9zZSBuZXcgaW9jdGxzLCB3aWxsIGltbWVkaWF0ZWx5IGJhaWwgb3V0LiBUaGUgcmVzdWx0IHdpbGwgZWl0aGVyIGJlIGEgYDBgIG9yIGFuIGAtRU5PVFRZYCBlcnJvci4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIHRoaXMgdHJhbnNsYXRlcyB0byBhYnNvbHV0ZWx5ICpub3RoaW5nKiBpbiB0aGUgdW5kZXJseWluZyBsb2dpYyBiZWluZyByZWFjaGFibGUsIGxldCBhbG9uZSBleGVjdXRhYmxlLiBJdCdzIGEgZGVhZCBlbmQuXG5cblRoZXJlZm9yZSwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgcGF0Y2ggaXMgYSBub24tc3RhcnRlci4gVGhlcmUncyBubyB2YWx1ZSBpbiB0cnlpbmcgdG8gcG9rZSBhcm91bmQgdGhpcyBhcmVhIGFzLWlzLiBJdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0LlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMzcsIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MzA6MTkuOTY4MjE2NjA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBLVk0gbGl2ZSBtaWdyYXRpb24gaW9jdGxzIChLVk1fTUlHUkFURV9DTUQsIEtWTV9FWFBPUlRfTUVNT1JZLCBLVk1fSU1QT1JUX01FTU9SWSwgS1ZNX0VYUE9SVF9WQ1BVLCBLVk1fSU1QT1JUX1ZDUFUpIGFuZCBjYXBhYmlsaXR5IEtWTV9DQVBfTElWRV9NSUdSQVRJT04sIGFsb25nIHdpdGggZGlzcGF0Y2hlciBob29rcyBpbiBrdm1feDg2X29wcy4gSG93ZXZlciwgbm8gdmVuZG9yIGJhY2tlbmQgaW1wbGVtZW50cyBjYXBfbGl2ZV9taWdyYXRpb24gb3IgYW55IG9mIHRoZSBtaWdyYXRpb24gY2FsbGJhY2tzLiBBcyBhIHJlc3VsdCwgYWxsIG5ldyBpb2N0bHMgaW1tZWRpYXRlbHkgcmV0dXJuIC1FTk9UVFkgYW5kIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gY2hlY2tzIHJldHVybiAwLCBtYWtpbmcgdGhlIGhhbmRsZXIgbG9naWMgdW5yZWFjaGFibGUgYW5kIG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBLVk0gbGl2ZSBtaWdyYXRpb24gaW9jdGxzIChLVk1fTUlHUkFURV9DTUQsIEtWTV9FWFBPUlRfTUVNT1JZLCBLVk1fSU1QT1JUX01FTU9SWSwgS1ZNX0VYUE9SVF9WQ1BVLCBLVk1fSU1QT1JUX1ZDUFUpIGFuZCBjYXBhYmlsaXR5IEtWTV9DQVBfTElWRV9NSUdSQVRJT04sIGFsb25nIHdpdGggZGlzcGF0Y2hlciBob29rcyBpbiBrdm1feDg2X29wcy4gSG93ZXZlciwgbm8gdmVuZG9yIGJhY2tlbmQgaW1wbGVtZW50cyBjYXBfbGl2ZV9taWdyYXRpb24gb3IgYW55IG9mIHRoZSBtaWdyYXRpb24gY2FsbGJhY2tzLiBBcyBhIHJlc3VsdCwgYWxsIG5ldyBpb2N0bHMgaW1tZWRpYXRlbHkgcmV0dXJuIC1FTk9UVFkgYW5kIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gY2hlY2tzIHJldHVybiAwLCBtYWtpbmcgdGhlIGhhbmRsZXIgbG9naWMgdW5yZWFjaGFibGUgYW5kIG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MzA6MTkuOTY4MjQyNDc5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowb4wlr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-31 07:28:13 +0000 UTC FinishedAt: 2026-08-31 07:30:22 +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+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjI5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBLVk0gbGl2ZSBtaWdyYXRpb24gaW9jdGxzIChLVk1fTUlHUkFURV9DTUQsIEtWTV9FWFBPUlRfTUVNT1JZLCBLVk1fSU1QT1JUX01FTU9SWSwgS1ZNX0VYUE9SVF9WQ1BVLCBLVk1fSU1QT1JUX1ZDUFUpIGFuZCBjYXBhYmlsaXR5IEtWTV9DQVBfTElWRV9NSUdSQVRJT04sIGFsb25nIHdpdGggZGlzcGF0Y2hlciBob29rcyBpbiBrdm1feDg2X29wcy4gSG93ZXZlciwgbm8gdmVuZG9yIGJhY2tlbmQgaW1wbGVtZW50cyBjYXBfbGl2ZV9taWdyYXRpb24gb3IgYW55IG9mIHRoZSBtaWdyYXRpb24gY2FsbGJhY2tzLiBBcyBhIHJlc3VsdCwgYWxsIG5ldyBpb2N0bHMgaW1tZWRpYXRlbHkgcmV0dXJuIC1FTk9UVFkgYW5kIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gY2hlY2tzIHJldHVybiAwLCBtYWtpbmcgdGhlIGhhbmRsZXIgbG9naWMgdW5yZWFjaGFibGUgYW5kIG5vdCB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoyOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGVhZmVjNWQxOTYyMmZkM2JhNGJjYjAxMzViZTg0YmYwNjk2ODIwM2ZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAwNzoyOTozMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZTguLjlkNTQ2ZDI4OGFmNWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTY1NjYsNiAmIzQzOzY1NjYsMjAwIEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuJiM0MzsuLiBfS1ZNX01JR1JBVEVfQ01EOlxuJiM0MztcbiYjNDM7NC4xNDUgS1ZNX01JR1JBVEVfQ01EXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NlxuJiM0Mzs6VHlwZTogdm0gaW9jdGxcbiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgKGluL291dClcbiYjNDM7OlJldHVybnM6IDAgb24gc3VjY2VzcywgXHUwMDNjIDAgb24gZXJyb3JcbiYjNDM7XG4mIzQzO0FsbG93cyB1c2Vyc3BhY2UgdG8gc2VuZCBsaXZlIG1pZ3JhdGlvbiByZWxhdGVkIGNvbW1hbmRzIHRvIEtWTSBmb3IgdmVuZG9yXG4mIzQzO3NwZWNpZmljIGhhbmRsaW5nLlxuJiM0MztcbiYjNDM7Rm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcsIGxpdmUgbWlncmF0aW9uIHJlbGF0ZWQgY29tbWFuZHMgbWF5IGJlIG5lZWRlZC5cbiYjNDM7VGhlIGNvbW1hbmRzIHR5cGljYWxseSB1c2UgZW5jcnlwdGVkIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwYXNzZWQgYmV0d2VlbiB0aGVcbiYjNDM7c291cmNlIGFuZCBkZXN0aW5hdGlvbiBob3N0cy4gVGhlIGhvc3RzIG1heSBhbHNvIHJlcXVpcmUgc3BlY2lmaWMgY29vcmRpbmF0aW9uXG4mIzQzO3N0ZXBzIGR1cmluZyBtaWdyYXRpb24gdGhhdCBtdXN0IGJlIHRyaWdnZXJlZCBhdCBwcmVjaXNlIHBvaW50cyBpbiB0aGVcbiYjNDM7bWlncmF0aW9uIHByb2Nlc3MuXG4mIzQzO1xuJiM0MztUaGUgdmVuZG9yIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgbG9ja2luZyBhbmQgY2hlY2tzIHRoZSB2YWxpZCBmbGFnc1xuJiM0MztiaXRzLiBJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpc1xuJiM0MztyZXR1cm5lZC5cbiYjNDM7XG4mIzQzO1RoZSBLVk1fTUlHUkFURV9DTUQgc3ViY29tbWFuZCBwYXNzZWQgaW4gc3RydWN0IGt2bV9taWdyYXRlX2NtZCBpcyBvbmUgb2Y6OlxuJiM0MztcbiYjNDM7ICAjZGVmaW5lIEtWTV9NSUdSQVRFX1NFVFVQXHRcdDBcbiYjNDM7ICAjZGVmaW5lIEtWTV9NSUdSQVRFX0lURVJBVElPTlx0XHQxXG4mIzQzOyAgI2RlZmluZSBLVk1fTUlHUkFURV9TVE9QX0FORF9DT1BZXHQyXG4mIzQzOyAgI2RlZmluZSBLVk1fTUlHUkFURV9BQk9SVFx0XHQzXG4mIzQzOyAgI2RlZmluZSBLVk1fTUlHUkFURV9FTkRcdFx0NFxuJiM0MztcbiYjNDM7VGhlIGt2bV90cmFuc2Zlcl9idWZmZXIgaXM6OlxuJiM0MztcbiYjNDM7ICAvKipcbiYjNDM7ICAgKiBAYWRkcmVzczogVXNlcnNwYWNlIGJ1ZmZlciBhZGRyZXNzXG4mIzQzOyAgICogQHNpemU6IFNpemUgb2YgdGhlIHVzZXJzcGFjZSBidWZmZXJcbiYjNDM7ICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4mIzQzOyAgICovXG4mIzQzOyAgc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIge1xuJiM0MztcdF9fdTY0IGFkZHJlc3M7XG4mIzQzO1x0X191MzIgc2l6ZTtcbiYjNDM7XHRfX3UzMiByZXNlcnZlZDtcbiYjNDM7ICB9O1xuJiM0MztcbiYjNDM7VGhlIGt2bV9taWdyYXRlX2NtZCBpczo6XG4mIzQzO1xuJiM0MzsgIC8qKlxuJiM0MzsgICAqIEBjb21tYW5kOiBPbmUgb2YgdGhlIGRlZmluZWQgS1ZNX01JR1JBVEUgY29tbWFuZHNcbiYjNDM7ICAgKiBAZmxhZ3M6IEhhcmR3YXJlIHNwZWNpZmljIGZsYWdzXG4mIzQzOyAgICogQHJlc2VydmVkOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxuJiM0MzsgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgZm9yIGhhcmR3YXJlIHNwZWNpZmljIGRhdGFcbiYjNDM7ICAgKi9cbiYjNDM7ICBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIHtcbiYjNDM7XHRfX3UxNiBjb21tYW5kO1xuJiM0MztcdF9fdTE2IGZsYWdzO1xuJiM0MztcdF9fdTMyIHJlc2VydmVkO1xuJiM0MztcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcbiYjNDM7ICB9O1xuJiM0MztcbiYjNDM7Li4gX0tWTV9FWFBPUlRfTUVNT1JZOlxuJiM0MztcbiYjNDM7NC4xNDYgS1ZNX0VYUE9SVF9NRU1PUllcbiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7XG4mIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4mIzQzOzpBcmNoaXRlY3R1cmVzOiB4ODZcbiYjNDM7OlR5cGU6IHZtIGlvY3RsXG4mIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAoaW4vb3V0KVxuJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBcdTAwM2MgMCBvbiBlcnJvclxuJiM0MztcbiYjNDM7QWxsb3dzIHVzZXJzcGFjZSB0byByZXF1ZXN0IHRoZSBob3N0IHRvIGV4cG9ydCBhbiBhcnJheSBvZiBtZW1vcnkgcGFnZXMgdG8gYVxuJiM0Mzt1c2Vyc3BhY2UgYnVmZmVyLlxuJiM0MztcbiYjNDM7VGhlIHByaXZhdGUgbWVtb3J5IG1heSBub3QgYmUgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3JcbiYjNDM7Y29uZmlkZW50aWFsIGNvbXB1dGluZywgdGhlIGd1ZXN0IG1lbW9yeSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0b1xuJiM0Mzt0aGUgZ3Vlc3QuXG4mIzQzO1xuJiM0MztJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpcyByZXR1cm5lZC5cbiYjNDM7XG4mIzQzO1RoZSB2ZW5kb3Igc3BlY2lmaWMgSUQgaXMgdXNlZCBhdCBsZWFzdCBmb3IgVERYIGZvciB0aGUgbWlncmF0aW9uIHRocmVhZFxuJiM0MztpbmRleC5cbiYjNDM7XG4mIzQzO1RoZSBrdm1fbWVtb3J5X3RyYW5zZmVyIGlzOjpcbiYjNDM7XG4mIzQzOyAgLyoqXG4mIzQzOyAgICogQGdmbnM6IFVzZXJzcGFjZSBhZGRyZXNzIG9mIGFuIGFycmF5IG9mIG5yX2dmbnMgX191NjQgR0ZOcyB0byBleHBvcnRcbiYjNDM7ICAgKiBAbnJfZ2ZuczogTnVtYmVyIG9mIEdGTnMgaW4gdGhlIEBnZm5zIGFycmF5XG4mIzQzOyAgICogQGlkOiBPcHRpb25hbCB2ZW5kb3Igc3BlY2lmaWMgdHJhbnNmZXIgSURcbiYjNDM7ICAgKiBAZmxhZ3M6IFZlbmRvciBzcGVjaWZpYyBmbGFnc1xuJiM0MzsgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbiYjNDM7ICAgKiBAYnVmOiBVc2Vyc3BhY2UgYnVmZmVyIHRvIGV4cG9ydCBtZW1vcnkgdG9cbiYjNDM7ICAgKi9cbiYjNDM7ICBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciB7XG4mIzQzOyAgICAgICBfX3U2NCBnZm5zO1xuJiM0MzsgICAgICAgX191MzIgbnJfZ2ZucztcbiYjNDM7ICAgICAgIF9fdTE2IGlkO1xuJiM0MzsgICAgICAgX191MTYgZmxhZ3M7XG4mIzQzOyAgICAgICBfX3U2NCByZXNlcnZlZDtcbiYjNDM7ICAgICAgIHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcbiYjNDM7ICB9O1xuJiM0MztcbiYjNDM7VGhlIHRyYW5zZmVyIGJ1ZmZlciBzaXplIGlzIHZlbmRvciBzcGVjaWZpYy5cbiYjNDM7XG4mIzQzO0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWVvIDpyZWY6YEtWTV9NSUdSQVRFX0NNRCBcdTAwM2NLVk1fTUlHUkFURV9DTURcdTAwM2VgLlxuJiM0MztcbiYjNDM7Rm9yIG1lbW9yeSBpbXBvcnQsIHNlZSBhbHNvIDpyZWY6YEtWTV9JTVBPUlRfTUVNT1JZIFx1MDAzY0tWTV9JTVBPUlRfTUVNT1JZXHUwMDNlYC5cbiYjNDM7XG4mIzQzO1xuJiM0MzsuLiBfS1ZNX0lNUE9SVF9NRU1PUlk6XG4mIzQzO1xuJiM0Mzs0LjE0NyBLVk1fSU1QT1JUX01FTU9SWVxuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NlxuJiM0Mzs6VHlwZTogdm0gaW9jdGxcbiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyIChpbi9vdXQpXG4mIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYyAwIG9uIGVycm9yXG4mIzQzO1xuJiM0MztBbGxvd3MgdXNlcnNwYWNlIHRvIHJlcXVlc3QgdGhlIGhvc3QgdG8gaW1wb3J0IGFuIGFycmF5IG9mIG1lbW9yeSBwYWdlcyBmcm9tIGFcbiYjNDM7dXNlcnNwYWNlIGJ1ZmZlci5cbiYjNDM7XG4mIzQzO1RoZSBwcml2YXRlIG1lbW9yeSBtYXkgbm90IGJlIGFjY2Vzc2libGUgdG8gS1ZNIGJlY2F1c2Ugb2YgZW5jcnlwdGlvbi4gRm9yXG4mIzQzO2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBndWVzdCBtZW1vcnkgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG9cbiYjNDM7dGhlIGd1ZXN0LlxuJiM0MztcbiYjNDM7SWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXMgcmV0dXJuZWQuXG4mIzQzO1xuJiM0MztUaGUgdmVuZG9yIHNwZWNpZmljIElEIGlzIHVzZWQgYXQgbGVhc3QgZm9yIFREWCBmb3IgdGhlIG1pZ3JhdGlvbiB0aHJlYWRcbiYjNDM7aW5kZXguXG4mIzQzO1xuJiM0MztUaGUgdHJhbnNmZXIgYnVmZmVyIHNpemUgaXMgdmVuZG9yIHNwZWNpZmljLlxuJiM0MztcbiYjNDM7Rm9yIGt2bV9tZW1vcnlfdHJhbnNmZXIsIHNlZSA6cmVmOmBLVk1fRVhQT1JUX01FTU9SWSBcdTAwM2NLVk1fRVhQT1JUX01FTU9SWVx1MDAzZWAuXG4mIzQzO1xuJiM0MztGb3IgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgc2VlbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXHUwMDNjS1ZNX01JR1JBVEVfQ01EXHUwMDNlYC5cbiYjNDM7XG4mIzQzOy4uIF9LVk1fRVhQT1JUX1ZDUFU6XG4mIzQzO1xuJiM0Mzs0LjE0OSBLVk1fRVhQT1JUX1ZDUFVcbiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4mIzQzOzpBcmNoaXRlY3R1cmVzOiBhcm02NCwgeDg2XG4mIzQzOzpUeXBlOiB2Y3B1IGlvY3RsXG4mIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKGluL291dClcbiYjNDM7OlJldHVybnM6IDAgb24gc3VjY2VzcywgXHUwMDNjIDAgb24gZXJyb3JcbiYjNDM7XG4mIzQzO0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBleHBvcnQgYSBWQ1BVIHN0YXRlIHRvIGEgdXNlcnNwYWNlXG4mIzQzO2J1ZmZlci5cbiYjNDM7XG4mIzQzO1RoZSBWQ1BVIHN0YXRlIG1heSBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3JcbiYjNDM7Y29uZmlkZW50aWFsIGNvbXB1dGluZywgdGhlIFZDUFUgc3RhdGUgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG8gdGhlXG4mIzQzO2d1ZXN0LlxuJiM0MztcbiYjNDM7VGhlIHZjcHVfdHJhbnNmZXIgaXM6OlxuJiM0MztcbiYjNDM7ICAvKipcbiYjNDM7ICAgKiBAZmxhZ3M6IEhhcmR3YXJlIHNwZWNpZmljIGZsYWdzXG4mIzQzOyAgICogQHJlc2VydmVkOiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZVxuJiM0MzsgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgdG8gZXhwb3J0IFZDUFUgc3RhdGUgdG9cbiYjNDM7ICAgKi9cbiYjNDM7ICBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIge1xuJiM0MzsgICAgICAgIF9fdTMyIGZsYWdzO1xuJiM0MzsgICAgICAgIF9fdTMyIHJlc2VydmVkO1xuJiM0MztcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcbiYjNDM7ICB9O1xuJiM0MztcbiYjNDM7Rm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZSA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXHUwMDNjS1ZNX01JR1JBVEVfQ01EXHUwMDNlYC5cbiYjNDM7XG4mIzQzO0ZvciB2Q1BVIGltcG9ydCwgc2VlIGFsc28gOnJlZjpgS1ZNX0lNUE9SVF9WQ1BVIFx1MDAzY0tWTV9JTVBPUlRfVkNQVVx1MDAzZWAuXG4mIzQzO1xuJiM0MzsuLiBfS1ZNX0lNUE9SVF9WQ1BVOlxuJiM0MztcbiYjNDM7NC4xNDggS1ZNX0lNUE9SVF9WQ1BVXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbiYjNDM7OkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODZcbiYjNDM7OlR5cGU6IHZjcHUgaW9jdGxcbiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciAoaW4vb3V0KVxuJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBcdTAwM2MgMCBvbiBlcnJvclxuJiM0MztcbiYjNDM7QWxsb3dzIHVzZXJzcGFjZSB0byByZXF1ZXN0IHRoZSBob3N0IHRvIGltcG9ydCBhIFZDUFUgc3RhdGUgZnJvbSBhIHVzZXJzcGFjZVxuJiM0MztidWZmZXIuXG4mIzQzO1xuJiM0MztUaGUgVkNQVSBzdGF0ZSBtYXkgbm90IGJlIGRpcmVjdGx5IGFjY2Vzc2libGUgdG8gS1ZNIGJlY2F1c2Ugb2YgZW5jcnlwdGlvbi4gRm9yXG4mIzQzO2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBWQ1BVIHN0YXRlIGlzIGVuY3J5cHRlZCBhbmQgb25seSBhY2Nlc3NpYmxlIHRvIHRoZVxuJiM0MztndWVzdC5cbiYjNDM7XG4mIzQzO0ZvciB2Y3B1X3RyYW5zZmVyIGFuZCB2Q1BVIGltcG9ydCwgc2VlIDpyZWY6YEtWTV9JTVBPUlRfVkNQVSBcdTAwM2NLVk1fSU1QT1JUX1ZDUFVcdTAwM2VgLlxuJiM0MztcbiYjNDM7Rm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZSBhbHNvIDpyZWY6YEtWTV9NSUdSQVRFX0NNRCBcdTAwM2NLVk1fTUlHUkFURV9DTURcdTAwM2VgLlxuJiM0MztcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbkBAIC05NDkzLDYgJiM0Mzs5Njg3LDE3IEBAIHRha2UgY2FyZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlc2UgY2FzZXMuXG4gVGhlIHByZXNlbmNlIG9mIHRoaXMgY2FwYWJpbGl0eSBpbmRpY2F0ZXMgdGhhdCB0aGUgbmVzdGVkIEtWTSBndWVzdCBjYW5cbiBzdGFydCBpbiBFU0EgbW9kZS5cbiBcbiYjNDM7OC40OCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4mIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuJiM0MztcbiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NlxuJiM0Mzs6VGFyZ2V0OiBWTVxuJiM0Mzs6UGFyYW1ldGVyczogTm9uZVxuJiM0MztcbiYjNDM7SW5kaWNhdGVzIHRoYXQgdGhlIFZNIG5lZWRzIHRvIHVzZSBLVk0gY2FsbHMgZm9yIGxpdmUgbWlncmF0aW9uLCBhbmQgdGhhdCB0aGVcbiYjNDM7S1ZNX01JR1JBVEVfQ01EIGlvY3RsIGFuZCB0aGUgS1ZNX0VYUE9SVF9NRU1PUlksIEtWTV9JTVBPUlRfTUVNT1JZLFxuJiM0MztLVk1fRVhQT1JUX1ZDUFUgYW5kIEtWTV9JTVBPUlRfVkNQVSBpb2N0bHMgYXJlIGF2YWlsYWJsZS5cbiYjNDM7XG4gOS4gS25vd24gS1ZNIEFQSSBwcm9ibGVtc1xuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggODNkYzUwODYxMzhiMy4uN2YxMTBmODBkNmY4MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbkBAIC0xNDgsNiAmIzQzOzE0OCwxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKVxuIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChjYXBfbGl2ZV9taWdyYXRpb24pXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUwobWlncmF0ZV9jbWQpXG4mIzQzO0tWTV9YODZfT1BfT1BUSU9OQUwoZXhwb3J0X21lbW9yeSlcbiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChpbXBvcnRfbWVtb3J5KVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGV4cG9ydF92Y3B1KVxuJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGltcG9ydF92Y3B1KVxuICNlbmRpZlxuIFxuICN1bmRlZiBLVk1fWDg2X09QXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbmluZGV4IDVmNmMxY2U5NjczYjcuLmI2MzYyNDA4ZGFiODAgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oXG5AQCAtMjAxMCw2ICYjNDM7MjAxMCwxMiBAQCBzdHJ1Y3Qga3ZtX3g4Nl9vcHMge1xuIFx0aW50ICgqZ21lbV9wcmVwYXJlKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGdmbl90IGdmbiwgaW50IG1heF9vcmRlcik7XG4gXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xuIFx0aW50ICgqZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xuJiM0MztcdGJvb2wgKCpjYXBfbGl2ZV9taWdyYXRpb24pKHN0cnVjdCBrdm0gKmt2bSk7XG4mIzQzO1x0aW50ICgqbWlncmF0ZV9jbWQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9taWdyYXRlX2NtZCAqY21kKTtcbiYjNDM7XHRpbnQgKCpleHBvcnRfbWVtb3J5KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyICptZW0pO1xuJiM0MztcdGludCAoKmltcG9ydF9tZW1vcnkpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKm1lbSk7XG4mIzQzO1x0aW50ICgqZXhwb3J0X3ZjcHUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyICp2Y3B1X3N0YXRlKTtcbiYjNDM7XHRpbnQgKCppbXBvcnRfdmNwdSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKnZjcHVfc3RhdGUpO1xuIH07XG4gXG4gc3RydWN0IGt2bV94ODZfbmVzdGVkX29wcyB7XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5pbmRleCBhZmNhYzEwNDI5NDdhLi5lODM4NTMyNjg5NGIxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmNcbkBAIC00OTczLDYgJiM0Mzs0OTczLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdGNhc2UgS1ZNX0NBUF9SRUFET05MWV9NRU06XG4gXHRcdHIgPSBrdm0gPyBrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtKGt2bSkgOiAxO1xuIFx0XHRicmVhaztcbiYjNDM7XHRjYXNlIEtWTV9DQVBfTElWRV9NSUdSQVRJT046XG4mIzQzO1x0XHRyID0ga3ZtID8ga3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSA6IDA7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTYxODYsNiAmIzQzOzYxODksMzggQEAgc3RhdGljIGludCBrdm1fZ2V0X3JlZ19saXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbXBvcnQsXG4mIzQzO1x0XHRcdFx0XHR2b2lkIF9fdXNlciAqYXJncClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciB2Y3B1X3N0YXRlO1xuJiM0MztcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcbiYjNDM7XHQgICAgKGltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmltcG9ydF92Y3B1KSB8fFxuJiM0MztcdCAgICAoIWltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF92Y3B1KSlcbiYjNDM7XHRcdHJldHVybiAtRU5PVFRZO1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dmNwdV9zdGF0ZSwgYXJncCwgc2l6ZW9mKHZjcHVfc3RhdGUpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHRpZiAodmNwdV9zdGF0ZS5yZXNlcnZlZCB8fCB2Y3B1X3N0YXRlLmJ1Zi5yZXNlcnZlZClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoaW1wb3J0KVxuJiM0MztcdFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgXHUwMDI2dmNwdV9zdGF0ZSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ciA9IGt2bV94ODZfY2FsbChleHBvcnRfdmNwdSkodmNwdSwgXHUwMDI2dmNwdV9zdGF0ZSk7XG4mIzQzO1x0aWYgKHIgXHUwMDNlIDApXG4mIzQzO1x0XHRyID0gLUVJTztcbiYjNDM7XG4mIzQzO1x0LyogQ29weSBiYWNrIGFsc28gb24gYW4gZXJyb3IgdG8gcmVwb3J0IGEgcGFydGlhbGx5IGRvbmUgdHJhbnNmZXIgKi9cbiYjNDM7XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNnZjcHVfc3RhdGUsIHNpemVvZih2Y3B1X3N0YXRlKSkpXG4mIzQzO1x0XHRyID0gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHI7XG4mIzQzO31cbiYjNDM7XG4gbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC02NjU2LDYgJiM0Mzs2NjkxLDE0IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0ciA9IGt2bV94ODZfb3BzLnZjcHVfbWVtX2VuY19pb2N0bCh2Y3B1LCBhcmdwKTtcbiBcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBLVk1fRVhQT1JUX1ZDUFU6IHtcbiYjNDM7XHRcdHIgPSBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1KHZjcHUsIGZhbHNlLCBhcmdwKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XHRjYXNlIEtWTV9JTVBPUlRfVkNQVToge1xuJiM0MztcdFx0ciA9IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUodmNwdSwgdHJ1ZSwgYXJncCk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gLUVJTlZBTDtcbiBcdH1cbkBAIC03MjU1LDYgJiM0Mzs3Mjk4LDM3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxuIFx0cmV0dXJuIC1FTk9JT0NUTENNRDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3RyYW5zZmVyX21lbW9yeShzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW1wb3J0LFxuJiM0MztcdFx0XHRcdFx0dm9pZCBfX3VzZXIgKmFyZ3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciBtZW07XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdGlmICgha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSB8fFxuJiM0MztcdCAgICAoaW1wb3J0IFx1MDAyNlx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeSkgfHxcbiYjNDM7XHQgICAgKCFpbXBvcnQgXHUwMDI2XHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfbWVtb3J5KSlcbiYjNDM7XHRcdHJldHVybiAtRU5PVFRZO1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2bWVtLCBhcmdwLCBzaXplb2YobWVtKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0aWYgKG1lbS5yZXNlcnZlZCB8fCBtZW0uYnVmLnJlc2VydmVkIHx8ICFtZW0ubnJfZ2ZucylcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoaW1wb3J0KVxuJiM0MztcdFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfbWVtb3J5KShrdm0sIFx1MDAyNm1lbSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0ciA9IGt2bV94ODZfY2FsbChleHBvcnRfbWVtb3J5KShrdm0sIFx1MDAyNm1lbSk7XG4mIzQzO1x0aWYgKHIgXHUwMDNlIDApXG4mIzQzO1x0XHRyID0gLUVJTztcbiYjNDM7XG4mIzQzO1x0LyogQ29weSBiYWNrIGFsc28gb24gYW4gZXJyb3IgdG8gcmVwb3J0IGEgcGFydGlhbGx5IGRvbmUgdHJhbnNmZXIgKi9cbiYjNDM7XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNm1lbSwgc2l6ZW9mKG1lbSkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiByO1xuJiM0Mzt9XG4mIzQzO1xuIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiB7XG4gXHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbkBAIC03NjE0LDYgJiM0Mzs3Njg4LDM0IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IGt2bV92bV9pb2N0bF9zZXRfbXNyX2ZpbHRlcihrdm0sIFx1MDAyNmZpbHRlcik7XG4gXHRcdGJyZWFrO1xuIFx0fVxuJiM0MztcdGNhc2UgS1ZNX01JR1JBVEVfQ01EOiB7XG4mIzQzO1x0XHRzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIGNtZDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWt2bV94ODZfb3BzLm1pZ3JhdGVfY21kIHx8XG4mIzQzO1x0XHQgICAgIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkpXG4mIzQzO1x0XHRcdHJldHVybiAtRU5PVFRZO1xuJiM0MztcbiYjNDM7XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZjbWQsIGFyZ3AsIHNpemVvZihjbWQpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGNtZC5yZXNlcnZlZCB8fCBjbWQuYnVmLnJlc2VydmVkKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0XHRyID0ga3ZtX3g4Nl9jYWxsKG1pZ3JhdGVfY21kKShrdm0sIFx1MDAyNmNtZCk7XG4mIzQzO1x0XHRpZiAociBcdTAwM2UgMClcbiYjNDM7XHRcdFx0ciA9IC1FSU87XG4mIzQzO1xuJiM0MztcdFx0LyogQ29weSBiYWNrIGFsc28gb24gYW4gZXJyb3IgdG8gcmVwb3J0IGEgcGFydGlhbGx5IGRvbmUgY29tbWFuZCAqL1xuJiM0MztcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZjbWQsIHNpemVvZihjbWQpKSlcbiYjNDM7XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1x0Y2FzZSBLVk1fRVhQT1JUX01FTU9SWTpcbiYjNDM7XHRcdHIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgZmFsc2UsIGFyZ3ApO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBLVk1fSU1QT1JUX01FTU9SWTpcbiYjNDM7XHRcdHIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgdHJ1ZSwgYXJncCk7XG4mIzQzO1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHIgPSAtRU5PVFRZO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuaW5kZXggNDE5MDExMDk3ZmE4ZS4uMGE5YWExMjZkYWFkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbiYjNDM7I2RlZmluZSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTEzNTAsNiAmIzQzOzEzNTEsOCBAQCBzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Age1xuICNkZWZpbmUgS1ZNX0dFVF9ERVZJQ0VfQVRUUlx0ICBfSU9XKEtWTUlPLCAgMHhlMiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0cilcbiAjZGVmaW5lIEtWTV9IQVNfREVWSUNFX0FUVFJcdCAgX0lPVyhLVk1JTywgIDB4ZTMsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXG4gXG4mIzQzOyNkZWZpbmUgS1ZNX01JR1JBVEVfQ01EXHRcdCAgX0lPV1IoS1ZNSU8sIDB4ZTQsIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQpXG4mIzQzO1xuIC8qXG4gICogaW9jdGxzIGZvciB2Y3B1IGZkc1xuICAqL1xuQEAgLTE0OTAsNiAmIzQzOzE0OTMsMTIgQEAgc3RydWN0IGt2bV9lbmNfcmVnaW9uIHtcbiAjZGVmaW5lIEtWTV9HRVRfU1JFR1MyICAgICAgICAgICAgIF9JT1IoS1ZNSU8sICAweGNjLCBzdHJ1Y3Qga3ZtX3NyZWdzMilcbiAjZGVmaW5lIEtWTV9TRVRfU1JFR1MyICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweGNkLCBzdHJ1Y3Qga3ZtX3NyZWdzMilcbiBcbiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9MSVZFX01JR1JBVElPTiAqL1xuJiM0MzsjZGVmaW5lIEtWTV9FWFBPUlRfTUVNT1JZXHQgIF9JT1dSKEtWTUlPLCAweGU1LCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlcilcbiYjNDM7I2RlZmluZSBLVk1fSU1QT1JUX01FTU9SWVx0ICBfSU9XUihLVk1JTywgMHhlNiwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIpXG4mIzQzOyNkZWZpbmUgS1ZNX0VYUE9SVF9WQ1BVXHRcdCAgX0lPV1IoS1ZNSU8sIDB4ZTcsIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlcilcbiYjNDM7I2RlZmluZSBLVk1fSU1QT1JUX1ZDUFVcdFx0ICBfSU9XUihLVk1JTywgMHhlOCwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyKVxuJiM0MztcbiAjZGVmaW5lIEtWTV9ESVJUWV9MT0dfTUFOVUFMX1BST1RFQ1RfRU5BQkxFICAgICgxIFx1MDAzY1x1MDAzYyAwKVxuICNkZWZpbmUgS1ZNX0RJUlRZX0xPR19JTklUSUFMTFlfU0VUICAgICAgICAgICAgKDEgXHUwMDNjXHUwMDNjIDEpXG4gXG5AQCAtMTY3MCw0ICYjNDM7MTY3OSwzOCBAQCBzdHJ1Y3Qga3ZtX3ByZV9mYXVsdF9tZW1vcnkge1xuIFx0X191NjQgcGFkZGluZ1s1XTtcbiB9O1xuIFxuJiM0MzsjZGVmaW5lIEtWTV9NSUdSQVRFX1NFVFVQXHRcdDBcbiYjNDM7I2RlZmluZSBLVk1fTUlHUkFURV9JVEVSQVRJT05cdFx0MVxuJiM0MzsjZGVmaW5lIEtWTV9NSUdSQVRFX1NUT1BfQU5EX0NPUFlcdDJcbiYjNDM7I2RlZmluZSBLVk1fTUlHUkFURV9BQk9SVFx0XHQzXG4mIzQzOyNkZWZpbmUgS1ZNX01JR1JBVEVfRU5EXHRcdFx0NFxuJiM0MztcbiYjNDM7c3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIge1xuJiM0MztcdF9fdTY0IGFkZHJlc3M7XG4mIzQzO1x0X191MzIgc2l6ZTtcbiYjNDM7XHRfX3UzMiByZXNlcnZlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xuJiM0MztcdF9fdTE2IGNvbW1hbmQ7XG4mIzQzO1x0X191MTYgZmxhZ3M7XG4mIzQzO1x0X191MzIgcmVzZXJ2ZWQ7XG4mIzQzO1x0c3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgYnVmO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIge1xuJiM0MztcdF9fdTY0IGdmbnM7XG4mIzQzO1x0X191MzIgbnJfZ2ZucztcbiYjNDM7XHRfX3UxNiBpZDtcbiYjNDM7XHRfX3UxNiBmbGFncztcbiYjNDM7XHRfX3U2NCByZXNlcnZlZDtcbiYjNDM7XHRzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIge1xuJiM0MztcdF9fdTMyIGZsYWdzO1xuJiM0MztcdF9fdTMyIHJlc2VydmVkO1xuJiM0MztcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcbiYjNDM7fTtcbiYjNDM7XG4gI2VuZGlmIC8qIF9fTElOVVhfS1ZNX0ggKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIEtWTSBsaXZlIG1pZ3JhdGlvbiBpb2N0bHMgKEtWTV9NSUdSQVRFX0NNRCwgS1ZNX0VYUE9SVF9NRU1PUlksIEtWTV9JTVBPUlRfTUVNT1JZLCBLVk1fRVhQT1JUX1ZDUFUsIEtWTV9JTVBPUlRfVkNQVSkgYW5kIGNhcGFiaWxpdHkgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiwgYWxvbmcgd2l0aCBkaXNwYXRjaGVyIGhvb2tzIGluIGt2bV94ODZfb3BzLiBIb3dldmVyLCBubyB2ZW5kb3IgYmFja2VuZCBpbXBsZW1lbnRzIGNhcF9saXZlX21pZ3JhdGlvbiBvciBhbnkgb2YgdGhlIG1pZ3JhdGlvbiBjYWxsYmFja3MuIEFzIGEgcmVzdWx0LCBhbGwgbmV3IGlvY3RscyBpbW1lZGlhdGVseSByZXR1cm4gLUVOT1RUWSBhbmQgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBjaGVja3MgcmV0dXJuIDAsIG1ha2luZyB0aGUgaGFuZGxlciBsb2dpYyB1bnJlYWNoYWJsZSBhbmQgbm90IHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZWFmZWM1ZDE5NjIyZmQzYmE0YmNiMDEzNWJlODRiZjA2OTY4MjAzZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDMxIDA3OjI5OjMwIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0CmluZGV4IGE1ZjllZTkyZjQzZTguLjlkNTQ2ZDI4OGFmNWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKQEAgLTY1NjYsNiAmIzQzOzY1NjYsMjAwIEBAIEtWTV9TMzkwX0tFWU9QX1NTS0UKICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXkKICAgc3BlY2lmaWVkIGluIGBga2V5YGAsIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUgaW4gYGBrZXlgYC4KIAomIzQzOy4uIF9LVk1fTUlHUkFURV9DTUQ6CiYjNDM7CiYjNDM7NC4xNDUgS1ZNX01JR1JBVEVfQ01ECiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT04KJiM0Mzs6QXJjaGl0ZWN0dXJlczogeDg2CiYjNDM7OlR5cGU6IHZtIGlvY3RsCiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgKGluL291dCkKJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCAmbHQ7IDAgb24gZXJyb3IKJiM0MzsKJiM0MztBbGxvd3MgdXNlcnNwYWNlIHRvIHNlbmQgbGl2ZSBtaWdyYXRpb24gcmVsYXRlZCBjb21tYW5kcyB0byBLVk0gZm9yIHZlbmRvcgomIzQzO3NwZWNpZmljIGhhbmRsaW5nLgomIzQzOwomIzQzO0ZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nLCBsaXZlIG1pZ3JhdGlvbiByZWxhdGVkIGNvbW1hbmRzIG1heSBiZSBuZWVkZWQuCiYjNDM7VGhlIGNvbW1hbmRzIHR5cGljYWxseSB1c2UgZW5jcnlwdGVkIGRhdGEgdGhhdCBuZWVkcyB0byBiZSBwYXNzZWQgYmV0d2VlbiB0aGUKJiM0Mztzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGhvc3RzLiBUaGUgaG9zdHMgbWF5IGFsc28gcmVxdWlyZSBzcGVjaWZpYyBjb29yZGluYXRpb24KJiM0MztzdGVwcyBkdXJpbmcgbWlncmF0aW9uIHRoYXQgbXVzdCBiZSB0cmlnZ2VyZWQgYXQgcHJlY2lzZSBwb2ludHMgaW4gdGhlCiYjNDM7bWlncmF0aW9uIHByb2Nlc3MuCiYjNDM7CiYjNDM7VGhlIHZlbmRvciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGxvY2tpbmcgYW5kIGNoZWNrcyB0aGUgdmFsaWQgZmxhZ3MKJiM0MztiaXRzLiBJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpcwomIzQzO3JldHVybmVkLgomIzQzOwomIzQzO1RoZSBLVk1fTUlHUkFURV9DTUQgc3ViY29tbWFuZCBwYXNzZWQgaW4gc3RydWN0IGt2bV9taWdyYXRlX2NtZCBpcyBvbmUgb2Y6OgomIzQzOwomIzQzOyAgI2RlZmluZSBLVk1fTUlHUkFURV9TRVRVUAkJMAomIzQzOyAgI2RlZmluZSBLVk1fTUlHUkFURV9JVEVSQVRJT04JCTEKJiM0MzsgICNkZWZpbmUgS1ZNX01JR1JBVEVfU1RPUF9BTkRfQ09QWQkyCiYjNDM7ICAjZGVmaW5lIEtWTV9NSUdSQVRFX0FCT1JUCQkzCiYjNDM7ICAjZGVmaW5lIEtWTV9NSUdSQVRFX0VORAkJNAomIzQzOwomIzQzO1RoZSBrdm1fdHJhbnNmZXJfYnVmZmVyIGlzOjoKJiM0MzsKJiM0MzsgIC8qKgomIzQzOyAgICogQGFkZHJlc3M6IFVzZXJzcGFjZSBidWZmZXIgYWRkcmVzcwomIzQzOyAgICogQHNpemU6IFNpemUgb2YgdGhlIHVzZXJzcGFjZSBidWZmZXIKJiM0MzsgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKJiM0MzsgICAqLwomIzQzOyAgc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgewomIzQzOwlfX3U2NCBhZGRyZXNzOwomIzQzOwlfX3UzMiBzaXplOwomIzQzOwlfX3UzMiByZXNlcnZlZDsKJiM0MzsgIH07CiYjNDM7CiYjNDM7VGhlIGt2bV9taWdyYXRlX2NtZCBpczo6CiYjNDM7CiYjNDM7ICAvKioKJiM0MzsgICAqIEBjb21tYW5kOiBPbmUgb2YgdGhlIGRlZmluZWQgS1ZNX01JR1JBVEUgY29tbWFuZHMKJiM0MzsgICAqIEBmbGFnczogSGFyZHdhcmUgc3BlY2lmaWMgZmxhZ3MKJiM0MzsgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKJiM0MzsgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgZm9yIGhhcmR3YXJlIHNwZWNpZmljIGRhdGEKJiM0MzsgICAqLwomIzQzOyAgc3RydWN0IGt2bV9taWdyYXRlX2NtZCB7CiYjNDM7CV9fdTE2IGNvbW1hbmQ7CiYjNDM7CV9fdTE2IGZsYWdzOwomIzQzOwlfX3UzMiByZXNlcnZlZDsKJiM0MzsJc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgYnVmOwomIzQzOyAgfTsKJiM0MzsKJiM0MzsuLiBfS1ZNX0VYUE9SVF9NRU1PUlk6CiYjNDM7CiYjNDM7NC4xNDYgS1ZNX0VYUE9SVF9NRU1PUlkKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OCiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NgomIzQzOzpUeXBlOiB2bSBpb2N0bAomIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAoaW4vb3V0KQomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsICZsdDsgMCBvbiBlcnJvcgomIzQzOwomIzQzO0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBleHBvcnQgYW4gYXJyYXkgb2YgbWVtb3J5IHBhZ2VzIHRvIGEKJiM0Mzt1c2Vyc3BhY2UgYnVmZmVyLgomIzQzOwomIzQzO1RoZSBwcml2YXRlIG1lbW9yeSBtYXkgbm90IGJlIGFjY2Vzc2libGUgdG8gS1ZNIGJlY2F1c2Ugb2YgZW5jcnlwdGlvbi4gRm9yCiYjNDM7Y29uZmlkZW50aWFsIGNvbXB1dGluZywgdGhlIGd1ZXN0IG1lbW9yeSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0bwomIzQzO3RoZSBndWVzdC4KJiM0MzsKJiM0MztJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpcyByZXR1cm5lZC4KJiM0MzsKJiM0MztUaGUgdmVuZG9yIHNwZWNpZmljIElEIGlzIHVzZWQgYXQgbGVhc3QgZm9yIFREWCBmb3IgdGhlIG1pZ3JhdGlvbiB0aHJlYWQKJiM0MztpbmRleC4KJiM0MzsKJiM0MztUaGUga3ZtX21lbW9yeV90cmFuc2ZlciBpczo6CiYjNDM7CiYjNDM7ICAvKioKJiM0MzsgICAqIEBnZm5zOiBVc2Vyc3BhY2UgYWRkcmVzcyBvZiBhbiBhcnJheSBvZiBucl9nZm5zIF9fdTY0IEdGTnMgdG8gZXhwb3J0CiYjNDM7ICAgKiBAbnJfZ2ZuczogTnVtYmVyIG9mIEdGTnMgaW4gdGhlIEBnZm5zIGFycmF5CiYjNDM7ICAgKiBAaWQ6IE9wdGlvbmFsIHZlbmRvciBzcGVjaWZpYyB0cmFuc2ZlciBJRAomIzQzOyAgICogQGZsYWdzOiBWZW5kb3Igc3BlY2lmaWMgZmxhZ3MKJiM0MzsgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKJiM0MzsgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgdG8gZXhwb3J0IG1lbW9yeSB0bwomIzQzOyAgICovCiYjNDM7ICBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciB7CiYjNDM7ICAgICAgIF9fdTY0IGdmbnM7CiYjNDM7ICAgICAgIF9fdTMyIG5yX2dmbnM7CiYjNDM7ICAgICAgIF9fdTE2IGlkOwomIzQzOyAgICAgICBfX3UxNiBmbGFnczsKJiM0MzsgICAgICAgX191NjQgcmVzZXJ2ZWQ7CiYjNDM7ICAgICAgIHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjsKJiM0MzsgIH07CiYjNDM7CiYjNDM7VGhlIHRyYW5zZmVyIGJ1ZmZlciBzaXplIGlzIHZlbmRvciBzcGVjaWZpYy4KJiM0MzsKJiM0MztGb3IgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgc2VlbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgJmx0O0tWTV9NSUdSQVRFX0NNRCZndDtgLgomIzQzOwomIzQzO0ZvciBtZW1vcnkgaW1wb3J0LCBzZWUgYWxzbyA6cmVmOmBLVk1fSU1QT1JUX01FTU9SWSAmbHQ7S1ZNX0lNUE9SVF9NRU1PUlkmZ3Q7YC4KJiM0MzsKJiM0MzsKJiM0MzsuLiBfS1ZNX0lNUE9SVF9NRU1PUlk6CiYjNDM7CiYjNDM7NC4xNDcgS1ZNX0lNUE9SVF9NRU1PUlkKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OCiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NgomIzQzOzpUeXBlOiB2bSBpb2N0bAomIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAoaW4vb3V0KQomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsICZsdDsgMCBvbiBlcnJvcgomIzQzOwomIzQzO0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBpbXBvcnQgYW4gYXJyYXkgb2YgbWVtb3J5IHBhZ2VzIGZyb20gYQomIzQzO3VzZXJzcGFjZSBidWZmZXIuCiYjNDM7CiYjNDM7VGhlIHByaXZhdGUgbWVtb3J5IG1heSBub3QgYmUgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3IKJiM0Mztjb25maWRlbnRpYWwgY29tcHV0aW5nLCB0aGUgZ3Vlc3QgbWVtb3J5IGlzIGVuY3J5cHRlZCBhbmQgb25seSBhY2Nlc3NpYmxlIHRvCiYjNDM7dGhlIGd1ZXN0LgomIzQzOwomIzQzO0lmIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIFZNLCAtRU5PVFRZIGlzIHJldHVybmVkLgomIzQzOwomIzQzO1RoZSB2ZW5kb3Igc3BlY2lmaWMgSUQgaXMgdXNlZCBhdCBsZWFzdCBmb3IgVERYIGZvciB0aGUgbWlncmF0aW9uIHRocmVhZAomIzQzO2luZGV4LgomIzQzOwomIzQzO1RoZSB0cmFuc2ZlciBidWZmZXIgc2l6ZSBpcyB2ZW5kb3Igc3BlY2lmaWMuCiYjNDM7CiYjNDM7Rm9yIGt2bV9tZW1vcnlfdHJhbnNmZXIsIHNlZSA6cmVmOmBLVk1fRVhQT1JUX01FTU9SWSAmbHQ7S1ZNX0VYUE9SVF9NRU1PUlkmZ3Q7YC4KJiM0MzsKJiM0MztGb3IgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgc2VlbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgJmx0O0tWTV9NSUdSQVRFX0NNRCZndDtgLgomIzQzOwomIzQzOy4uIF9LVk1fRVhQT1JUX1ZDUFU6CiYjNDM7CiYjNDM7NC4xNDkgS1ZNX0VYUE9SVF9WQ1BVCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT04KJiM0Mzs6QXJjaGl0ZWN0dXJlczogYXJtNjQsIHg4NgomIzQzOzpUeXBlOiB2Y3B1IGlvY3RsCiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciAoaW4vb3V0KQomIzQzOzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsICZsdDsgMCBvbiBlcnJvcgomIzQzOwomIzQzO0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBleHBvcnQgYSBWQ1BVIHN0YXRlIHRvIGEgdXNlcnNwYWNlCiYjNDM7YnVmZmVyLgomIzQzOwomIzQzO1RoZSBWQ1BVIHN0YXRlIG1heSBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3IKJiM0Mztjb25maWRlbnRpYWwgY29tcHV0aW5nLCB0aGUgVkNQVSBzdGF0ZSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0byB0aGUKJiM0MztndWVzdC4KJiM0MzsKJiM0MztUaGUgdmNwdV90cmFuc2ZlciBpczo6CiYjNDM7CiYjNDM7ICAvKioKJiM0MzsgICAqIEBmbGFnczogSGFyZHdhcmUgc3BlY2lmaWMgZmxhZ3MKJiM0MzsgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UKJiM0MzsgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgdG8gZXhwb3J0IFZDUFUgc3RhdGUgdG8KJiM0MzsgICAqLwomIzQzOyAgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyIHsKJiM0MzsgICAgICAgIF9fdTMyIGZsYWdzOwomIzQzOyAgICAgICAgX191MzIgcmVzZXJ2ZWQ7CiYjNDM7CXN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjsKJiM0MzsgIH07CiYjNDM7CiYjNDM7Rm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZSA6cmVmOmBLVk1fTUlHUkFURV9DTUQgJmx0O0tWTV9NSUdSQVRFX0NNRCZndDtgLgomIzQzOwomIzQzO0ZvciB2Q1BVIGltcG9ydCwgc2VlIGFsc28gOnJlZjpgS1ZNX0lNUE9SVF9WQ1BVICZsdDtLVk1fSU1QT1JUX1ZDUFUmZ3Q7YC4KJiM0MzsKJiM0MzsuLiBfS1ZNX0lNUE9SVF9WQ1BVOgomIzQzOwomIzQzOzQuMTQ4IEtWTV9JTVBPUlRfVkNQVQomIzQzOy0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOwomIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OCiYjNDM7OkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODYKJiM0Mzs6VHlwZTogdmNwdSBpb2N0bAomIzQzOzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKGluL291dCkKJiM0Mzs6UmV0dXJuczogMCBvbiBzdWNjZXNzLCAmbHQ7IDAgb24gZXJyb3IKJiM0MzsKJiM0MztBbGxvd3MgdXNlcnNwYWNlIHRvIHJlcXVlc3QgdGhlIGhvc3QgdG8gaW1wb3J0IGEgVkNQVSBzdGF0ZSBmcm9tIGEgdXNlcnNwYWNlCiYjNDM7YnVmZmVyLgomIzQzOwomIzQzO1RoZSBWQ1BVIHN0YXRlIG1heSBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3IKJiM0Mztjb25maWRlbnRpYWwgY29tcHV0aW5nLCB0aGUgVkNQVSBzdGF0ZSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0byB0aGUKJiM0MztndWVzdC4KJiM0MzsKJiM0MztGb3IgdmNwdV90cmFuc2ZlciBhbmQgdkNQVSBpbXBvcnQsIHNlZSA6cmVmOmBLVk1fSU1QT1JUX1ZDUFUgJmx0O0tWTV9JTVBPUlRfVkNQVSZndDtgLgomIzQzOwomIzQzO0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWUgYWxzbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgJmx0O0tWTV9NSUdSQVRFX0NNRCZndDtgLgomIzQzOwogLi4gX2t2bV9ydW46CiAKIDUuIFRoZSBrdm1fcnVuIHN0cnVjdHVyZQpAQCAtOTQ5Myw2ICYjNDM7OTY4NywxNyBAQCB0YWtlIGNhcmUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHRoZXNlIGNhc2VzLgogVGhlIHByZXNlbmNlIG9mIHRoaXMgY2FwYWJpbGl0eSBpbmRpY2F0ZXMgdGhhdCB0aGUgbmVzdGVkIEtWTSBndWVzdCBjYW4KIHN0YXJ0IGluIEVTQSBtb2RlLgogCiYjNDM7OC40OCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OCiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7OkFyY2hpdGVjdHVyZXM6IHg4NgomIzQzOzpUYXJnZXQ6IFZNCiYjNDM7OlBhcmFtZXRlcnM6IE5vbmUKJiM0MzsKJiM0MztJbmRpY2F0ZXMgdGhhdCB0aGUgVk0gbmVlZHMgdG8gdXNlIEtWTSBjYWxscyBmb3IgbGl2ZSBtaWdyYXRpb24sIGFuZCB0aGF0IHRoZQomIzQzO0tWTV9NSUdSQVRFX0NNRCBpb2N0bCBhbmQgdGhlIEtWTV9FWFBPUlRfTUVNT1JZLCBLVk1fSU1QT1JUX01FTU9SWSwKJiM0MztLVk1fRVhQT1JUX1ZDUFUgYW5kIEtWTV9JTVBPUlRfVkNQVSBpb2N0bHMgYXJlIGF2YWlsYWJsZS4KJiM0MzsKIDkuIEtub3duIEtWTSBBUEkgcHJvYmxlbXMKID09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgKaW5kZXggODNkYzUwODYxMzhiMy4uN2YxMTBmODBkNmY4MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oCkBAIC0xNDgsNiAmIzQzOzE0OCwxMiBAQCBLVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKQogS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fcHJlcGFyZSkKIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX21heF9tYXBwaW5nX2xldmVsKQogS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGNhcF9saXZlX21pZ3JhdGlvbikKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKG1pZ3JhdGVfY21kKQomIzQzO0tWTV9YODZfT1BfT1BUSU9OQUwoZXhwb3J0X21lbW9yeSkKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGltcG9ydF9tZW1vcnkpCiYjNDM7S1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfdmNwdSkKJiM0MztLVk1fWDg2X09QX09QVElPTkFMKGltcG9ydF92Y3B1KQogI2VuZGlmCiAKICN1bmRlZiBLVk1fWDg2X09QCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAppbmRleCA1ZjZjMWNlOTY3M2I3Li5iNjM2MjQwOGRhYjgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTIwMTAsNiAmIzQzOzIwMTAsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHsKIAlpbnQgKCpnbWVtX3ByZXBhcmUpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgZ2ZuX3QgZ2ZuLCBpbnQgbWF4X29yZGVyKTsKIAl2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpOwogCWludCAoKmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTsKJiM0MzsJYm9vbCAoKmNhcF9saXZlX21pZ3JhdGlvbikoc3RydWN0IGt2bSAqa3ZtKTsKJiM0MzsJaW50ICgqbWlncmF0ZV9jbWQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9taWdyYXRlX2NtZCAqY21kKTsKJiM0MzsJaW50ICgqZXhwb3J0X21lbW9yeSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAqbWVtKTsKJiM0MzsJaW50ICgqaW1wb3J0X21lbW9yeSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAqbWVtKTsKJiM0MzsJaW50ICgqZXhwb3J0X3ZjcHUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyICp2Y3B1X3N0YXRlKTsKJiM0MzsJaW50ICgqaW1wb3J0X3ZjcHUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyICp2Y3B1X3N0YXRlKTsKIH07CiAKIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jCmluZGV4IGFmY2FjMTA0Mjk0N2EuLmU4Mzg1MzI2ODk0YjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS94ODYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0veDg2LmMKQEAgLTQ5NzMsNiAmIzQzOzQ5NzMsOSBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KQogCWNhc2UgS1ZNX0NBUF9SRUFET05MWV9NRU06CiAJCXIgPSBrdm0gPyBrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtKGt2bSkgOiAxOwogCQlicmVhazsKJiM0MzsJY2FzZSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OOgomIzQzOwkJciA9IGt2bSA/IGt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgOiAwOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtNjE4Niw2ICYjNDM7NjE4OSwzOCBAQCBzdGF0aWMgaW50IGt2bV9nZXRfcmVnX2xpc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbXBvcnQsCiYjNDM7CQkJCQl2b2lkIF9fdXNlciAqYXJncCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciB2Y3B1X3N0YXRlOwomIzQzOwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LSZndDtrdm07CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHwKJiM0MzsJICAgIChpbXBvcnQgJmFtcDsmYW1wOyAha3ZtX3g4Nl9vcHMuaW1wb3J0X3ZjcHUpIHx8CiYjNDM7CSAgICAoIWltcG9ydCAmYW1wOyZhbXA7ICFrdm1feDg2X29wcy5leHBvcnRfdmNwdSkpCiYjNDM7CQlyZXR1cm4gLUVOT1RUWTsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dmNwdV9zdGF0ZSwgYXJncCwgc2l6ZW9mKHZjcHVfc3RhdGUpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlpZiAodmNwdV9zdGF0ZS5yZXNlcnZlZCB8fCB2Y3B1X3N0YXRlLmJ1Zi5yZXNlcnZlZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoaW1wb3J0KQomIzQzOwkJciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgJmFtcDt2Y3B1X3N0YXRlKTsKJiM0MzsJZWxzZQomIzQzOwkJciA9IGt2bV94ODZfY2FsbChleHBvcnRfdmNwdSkodmNwdSwgJmFtcDt2Y3B1X3N0YXRlKTsKJiM0MzsJaWYgKHIgJmd0OyAwKQomIzQzOwkJciA9IC1FSU87CiYjNDM7CiYjNDM7CS8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIHRyYW5zZmVyICovCiYjNDM7CWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmFtcDt2Y3B1X3N0YXRlLCBzaXplb2YodmNwdV9zdGF0ZSkpKQomIzQzOwkJciA9IC1FRkFVTFQ7CiYjNDM7CiYjNDM7CXJldHVybiByOwomIzQzO30KJiM0MzsKIGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNjY1Niw2ICYjNDM7NjY5MSwxNCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsCiAJCQlnb3RvIG91dDsKIAkJciA9IGt2bV94ODZfb3BzLnZjcHVfbWVtX2VuY19pb2N0bCh2Y3B1LCBhcmdwKTsKIAkJYnJlYWs7CiYjNDM7CWNhc2UgS1ZNX0VYUE9SVF9WQ1BVOiB7CiYjNDM7CQlyID0ga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdSh2Y3B1LCBmYWxzZSwgYXJncCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwljYXNlIEtWTV9JTVBPUlRfVkNQVTogewomIzQzOwkJciA9IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUodmNwdSwgdHJ1ZSwgYXJncCk7CiYjNDM7CQlicmVhazsKJiM0MzsJfQogCWRlZmF1bHQ6CiAJCXIgPSAtRUlOVkFMOwogCX0KQEAgLTcyNTUsNiAmIzQzOzcyOTgsMzcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsCiAJcmV0dXJuIC1FTk9JT0NUTENNRDsKIH0KIAomIzQzO3N0YXRpYyBpbnQga3ZtX3ZtX2lvY3RsX3RyYW5zZmVyX21lbW9yeShzdHJ1Y3Qga3ZtICprdm0sIGJvb2wgaW1wb3J0LAomIzQzOwkJCQkJdm9pZCBfX3VzZXIgKmFyZ3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciBtZW07CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHwKJiM0MzsJICAgIChpbXBvcnQgJmFtcDsmYW1wOyAha3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeSkgfHwKJiM0MzsJICAgICghaW1wb3J0ICZhbXA7JmFtcDsgIWt2bV94ODZfb3BzLmV4cG9ydF9tZW1vcnkpKQomIzQzOwkJcmV0dXJuIC1FTk9UVFk7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO21lbSwgYXJncCwgc2l6ZW9mKG1lbSkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmIChtZW0ucmVzZXJ2ZWQgfHwgbWVtLmJ1Zi5yZXNlcnZlZCB8fCAhbWVtLm5yX2dmbnMpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaWYgKGltcG9ydCkKJiM0MzsJCXIgPSBrdm1feDg2X2NhbGwoaW1wb3J0X21lbW9yeSkoa3ZtLCAmYW1wO21lbSk7CiYjNDM7CWVsc2UKJiM0MzsJCXIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X21lbW9yeSkoa3ZtLCAmYW1wO21lbSk7CiYjNDM7CWlmIChyICZndDsgMCkKJiM0MzsJCXIgPSAtRUlPOwomIzQzOwomIzQzOwkvKiBDb3B5IGJhY2sgYWxzbyBvbiBhbiBlcnJvciB0byByZXBvcnQgYSBwYXJ0aWFsbHkgZG9uZSB0cmFuc2ZlciAqLwomIzQzOwlpZiAoY29weV90b191c2VyKGFyZ3AsICZhbXA7bWVtLCBzaXplb2YobWVtKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwogaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtJmd0O3ByaXZhdGVfZGF0YTsKQEAgLTc2MTQsNiAmIzQzOzc2ODgsMzQgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0ga3ZtX3ZtX2lvY3RsX3NldF9tc3JfZmlsdGVyKGt2bSwgJmFtcDtmaWx0ZXIpOwogCQlicmVhazsKIAl9CiYjNDM7CWNhc2UgS1ZNX01JR1JBVEVfQ01EOiB7CiYjNDM7CQlzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIGNtZDsKJiM0MzsKJiM0MzsJCWlmICgha3ZtX3g4Nl9vcHMubWlncmF0ZV9jbWQgfHwKJiM0MzsJCSAgICAha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSkKJiM0MzsJCQlyZXR1cm4gLUVOT1RUWTsKJiM0MzsKJiM0MzsJCWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO2NtZCwgYXJncCwgc2l6ZW9mKGNtZCkpKQomIzQzOwkJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwkJaWYgKGNtZC5yZXNlcnZlZCB8fCBjbWQuYnVmLnJlc2VydmVkKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkJciA9IGt2bV94ODZfY2FsbChtaWdyYXRlX2NtZCkoa3ZtLCAmYW1wO2NtZCk7CiYjNDM7CQlpZiAociAmZ3Q7IDApCiYjNDM7CQkJciA9IC1FSU87CiYjNDM7CiYjNDM7CQkvKiBDb3B5IGJhY2sgYWxzbyBvbiBhbiBlcnJvciB0byByZXBvcnQgYSBwYXJ0aWFsbHkgZG9uZSBjb21tYW5kICovCiYjNDM7CQlpZiAoY29weV90b191c2VyKGFyZ3AsICZhbXA7Y21kLCBzaXplb2YoY21kKSkpCiYjNDM7CQkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwljYXNlIEtWTV9FWFBPUlRfTUVNT1JZOgomIzQzOwkJciA9IGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnkoa3ZtLCBmYWxzZSwgYXJncCk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBLVk1fSU1QT1JUX01FTU9SWToKJiM0MzsJCXIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgdHJ1ZSwgYXJncCk7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQlyID0gLUVOT1RUWTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKaW5kZXggNDE5MDExMDk3ZmE4ZS4uMGE5YWExMjZkYWFkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaApAQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAgewogI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4CiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDkKJiM0MzsjZGVmaW5lIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gMjUwCiAKIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7CiAJX191MzIgaXJxY2hpcDsKQEAgLTEzNTAsNiAmIzQzOzEzNTEsOCBAQCBzdHJ1Y3Qga3ZtX3MzOTBfa2V5b3AgewogI2RlZmluZSBLVk1fR0VUX0RFVklDRV9BVFRSCSAgX0lPVyhLVk1JTywgIDB4ZTIsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpCiAjZGVmaW5lIEtWTV9IQVNfREVWSUNFX0FUVFIJICBfSU9XKEtWTUlPLCAgMHhlMywgc3RydWN0IGt2bV9kZXZpY2VfYXR0cikKIAomIzQzOyNkZWZpbmUgS1ZNX01JR1JBVEVfQ01ECQkgIF9JT1dSKEtWTUlPLCAweGU0LCBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kKQomIzQzOwogLyoKICAqIGlvY3RscyBmb3IgdmNwdSBmZHMKICAqLwpAQCAtMTQ5MCw2ICYjNDM7MTQ5MywxMiBAQCBzdHJ1Y3Qga3ZtX2VuY19yZWdpb24gewogI2RlZmluZSBLVk1fR0VUX1NSRUdTMiAgICAgICAgICAgICBfSU9SKEtWTUlPLCAgMHhjYywgc3RydWN0IGt2bV9zcmVnczIpCiAjZGVmaW5lIEtWTV9TRVRfU1JFR1MyICAgICAgICAgICAgIF9JT1coS1ZNSU8sICAweGNkLCBzdHJ1Y3Qga3ZtX3NyZWdzMikKIAomIzQzOy8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gKi8KJiM0MzsjZGVmaW5lIEtWTV9FWFBPUlRfTUVNT1JZCSAgX0lPV1IoS1ZNSU8sIDB4ZTUsIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyKQomIzQzOyNkZWZpbmUgS1ZNX0lNUE9SVF9NRU1PUlkJICBfSU9XUihLVk1JTywgMHhlNiwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIpCiYjNDM7I2RlZmluZSBLVk1fRVhQT1JUX1ZDUFUJCSAgX0lPV1IoS1ZNSU8sIDB4ZTcsIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlcikKJiM0MzsjZGVmaW5lIEtWTV9JTVBPUlRfVkNQVQkJICBfSU9XUihLVk1JTywgMHhlOCwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyKQomIzQzOwogI2RlZmluZSBLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSAgICAoMSAmbHQ7Jmx0OyAwKQogI2RlZmluZSBLVk1fRElSVFlfTE9HX0lOSVRJQUxMWV9TRVQgICAgICAgICAgICAoMSAmbHQ7Jmx0OyAxKQogCkBAIC0xNjcwLDQgJiM0MzsxNjc5LDM4IEBAIHN0cnVjdCBrdm1fcHJlX2ZhdWx0X21lbW9yeSB7CiAJX191NjQgcGFkZGluZ1s1XTsKIH07CiAKJiM0MzsjZGVmaW5lIEtWTV9NSUdSQVRFX1NFVFVQCQkwCiYjNDM7I2RlZmluZSBLVk1fTUlHUkFURV9JVEVSQVRJT04JCTEKJiM0MzsjZGVmaW5lIEtWTV9NSUdSQVRFX1NUT1BfQU5EX0NPUFkJMgomIzQzOyNkZWZpbmUgS1ZNX01JR1JBVEVfQUJPUlQJCTMKJiM0MzsjZGVmaW5lIEtWTV9NSUdSQVRFX0VORAkJCTQKJiM0MzsKJiM0MztzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciB7CiYjNDM7CV9fdTY0IGFkZHJlc3M7CiYjNDM7CV9fdTMyIHNpemU7CiYjNDM7CV9fdTMyIHJlc2VydmVkOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGt2bV9taWdyYXRlX2NtZCB7CiYjNDM7CV9fdTE2IGNvbW1hbmQ7CiYjNDM7CV9fdTE2IGZsYWdzOwomIzQzOwlfX3UzMiByZXNlcnZlZDsKJiM0MzsJc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgYnVmOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgewomIzQzOwlfX3U2NCBnZm5zOwomIzQzOwlfX3UzMiBucl9nZm5zOwomIzQzOwlfX3UxNiBpZDsKJiM0MzsJX191MTYgZmxhZ3M7CiYjNDM7CV9fdTY0IHJlc2VydmVkOwomIzQzOwlzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgewomIzQzOwlfX3UzMiBmbGFnczsKJiM0MzsJX191MzIgcmVzZXJ2ZWQ7CiYjNDM7CXN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjsKJiM0Mzt9OwomIzQzOwogI2VuZGlmIC8qIF9fTElOVVhfS1ZNX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMDc6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5MgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDIwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhpcyBQYXRjaCBmb3IgTGl2ZSBNaWdyYXRpb24gSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlLiBJdCYjMzk7cyB0b3VjaGluZyBgRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0YCwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGFuZCB0aGVuIHdlIGhhdmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gaGVhZGVyIGZpbGVzIGFuZCB0aGUgY29yZSBgeDg2LmNgIGltcGxlbWVudGF0aW9uLiBMYXN0bHksIGl0IHRvdWNoZXMgYGluY2x1ZGUvdWFwaS9saW51eC9rdm0uaGAuIFRoYXQgbWFrZXMgbWUgdGhpbmsgdGhpcyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gbG9vayBhdC4KCk5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBsaXZlIG1pZ3JhdGlvbi4gR2l2ZW4gdGhlIGFyZWFzIGJlaW5nIHRvdWNoZWQsIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBob29rcyBvciBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gbGl2ZSBtaWdyYXRpb24gY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgdGhlcmUgYXJlIHZlbmRvciBjYWxsYmFja3MgYmVpbmcgaW1wbGVtZW50ZWQsIG9yIGlmIHRoZSBgY2FwX2xpdmVfbWlncmF0aW9uYCBjYXBhYmlsaXR5IGlzIGJlaW5nIGV4cG9zZWQgYW55d2hlcmUgaW4gdGhlIGNvZGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZyB0aGF0IGhhcyBiZWVuIGFkZGVkIG9yIGFsdGVyZWQuCgpJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIHN0YXJ0IGJ5IGdyZXBwaW5nIHRoZSBrZXJuZWwgc291cmNlIGZvciBrZXl3b3JkczogYGNhcF9saXZlX21pZ3JhdGlvbmAsIGBleHBvcnRfbWVtb3J5YCwgYGltcG9ydF9tZW1vcnlgLCBgZXhwb3J0X3ZjcHVgLCBgaW1wb3J0X3ZjcHVgLCBhbmQgYG1pZ3JhdGVfY21kYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIHZpZXcgb2YgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlc2UgY3J1Y2lhbCBmZWF0dXJlcyBhbmQgd2lsbCBxdWlja2x5IGhpZ2hsaWdodCBhbnkgY2hhbmdlcyBvciBhZGRpdGlvbnMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLiBJIGV4cGVjdCBJJiMzOTtsbCBiZSBhYmxlIHRvIHF1aWNrbHkgc2VlIGlmIGFueSBvZiB0aGVzZSBhcmUgaW1wbGVtZW50ZWQgaW4gYGt2bV94ODZfb3BzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzoyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoY2FwX2xpdmVfbWlncmF0aW9ufG1pZ3JhdGVfY21kfGV4cG9ydF9tZW1vcnl8aW1wb3J0X21lbW9yeXxleHBvcnRfdmNwdXxpbXBvcnRfdmNwdSkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY1NjU9S1ZNX1MzOTBfS0VZT1BfU1NLRVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTc2LTpUeXBlOiB2bSBpb2N0bFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY1Nzc6OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgKGluL291dClcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTc4LTpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYyAwIG9uIGVycm9yXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY1OTE9cmV0dXJuZWQuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjU5Mi1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NTkzOlRoZSBLVk1fTUlHUkFURV9DTUQgc3ViY29tbWFuZCBwYXNzZWQgaW4gc3RydWN0IGt2bV9taWdyYXRlX2NtZCBpcyBvbmUgb2Y6OlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY1OTQtXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY2MDE9VGhlIGt2bV90cmFuc2Zlcl9idWZmZXIgaXM6OlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjEzLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY2MTQ6VGhlIGt2bV9taWdyYXRlX2NtZCBpczo6XG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYxNS1cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYyMS0gICAqL1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY2MjI6ICBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIHtcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjIzLVx0X191MTYgY29tbWFuZDtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oPTE1MD1LVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTUxOktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChjYXBfbGl2ZV9taWdyYXRpb24pXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjE1MjpLVk1fWDg2X09QX09QVElPTkFMKG1pZ3JhdGVfY21kKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTM6S1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfbWVtb3J5KVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTQ6S1ZNX1g4Nl9PUF9PUFRJT05BTChpbXBvcnRfbWVtb3J5KVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTU6S1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfdmNwdSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTU2OktWTV9YODZfT1BfT1BUSU9OQUwoaW1wb3J0X3ZjcHUpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTE1Ny0jZW5kaWZcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oPTE3ODU9c3RydWN0IGt2bV94ODZfb3BzIHtcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwMTItXHRpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjIwMTM6XHRib29sICgqY2FwX2xpdmVfbWlncmF0aW9uKShzdHJ1Y3Qga3ZtICprdm0pO1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoyMDE0Olx0aW50ICgqbWlncmF0ZV9jbWQpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9taWdyYXRlX2NtZCAqY21kKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxNTpcdGludCAoKmV4cG9ydF9tZW1vcnkpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKm1lbSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjIwMTY6XHRpbnQgKCppbXBvcnRfbWVtb3J5KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyICptZW0pO1xuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoyMDE3Olx0aW50ICgqZXhwb3J0X3ZjcHUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyICp2Y3B1X3N0YXRlKTtcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxODpcdGludCAoKmltcG9ydF92Y3B1KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciAqdmNwdV9zdGF0ZSk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwMTktfTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NDc2OD1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy00OTc2LVx0Y2FzZSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OOlxuYXJjaC94ODYva3ZtL3g4Ni5jOjQ5Nzc6XHRcdHIgPSBrdm0gPyBrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIDogMDtcbmFyY2gveDg2L2t2bS94ODYuYy00OTc4LVx0XHRicmVhaztcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjE5Mj1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGltcG9ydCxcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjE5OC1cbmFyY2gveDg2L2t2bS94ODYuYzo2MTk5Olx0aWYgKCFrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIHx8XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjIwMDpcdCAgICAoaW1wb3J0IFx1MDAyNlx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X3ZjcHUpIHx8XG5hcmNoL3g4Ni9rdm0veDg2LmM6NjIwMTpcdCAgICAoIWltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF92Y3B1KSlcbmFyY2gveDg2L2t2bS94ODYuYy02MjAyLVx0XHRyZXR1cm4gLUVOT1RUWTtcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjIxMC1cdGlmIChpbXBvcnQpXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjIxMTpcdFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgXHUwMDI2dmNwdV9zdGF0ZSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtNjIxMi1cdGVsc2VcbmFyY2gveDg2L2t2bS94ODYuYzo2MjEzOlx0XHRyID0ga3ZtX3g4Nl9jYWxsKGV4cG9ydF92Y3B1KSh2Y3B1LCBcdTAwMjZ2Y3B1X3N0YXRlKTtcbmFyY2gveDg2L2t2bS94ODYuYy02MjE0LVx0aWYgKHIgXHUwMDNlIDApXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTczMDE9c3RhdGljIGludCBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbXBvcnQsXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTczMDYtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMwNzpcdGlmICgha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSB8fFxuYXJjaC94ODYva3ZtL3g4Ni5jOjczMDg6XHQgICAgKGltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmltcG9ydF9tZW1vcnkpIHx8XG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMwOTpcdCAgICAoIWltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF9tZW1vcnkpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTczMTAtXHRcdHJldHVybiAtRU5PVFRZO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy03MzE4LVx0aWYgKGltcG9ydClcbmFyY2gveDg2L2t2bS94ODYuYzo3MzE5Olx0XHRyID0ga3ZtX3g4Nl9jYWxsKGltcG9ydF9tZW1vcnkpKGt2bSwgXHUwMDI2bWVtKTtcbmFyY2gveDg2L2t2bS94ODYuYy03MzIwLVx0ZWxzZVxuYXJjaC94ODYva3ZtL3g4Ni5jOjczMjE6XHRcdHIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X21lbW9yeSkoa3ZtLCBcdTAwMjZtZW0pO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTczMjItXHRpZiAociBcdTAwM2UgMClcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzMzMj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTEtXHRjYXNlIEtWTV9NSUdSQVRFX0NNRDoge1xuYXJjaC94ODYva3ZtL3g4Ni5jOjc2OTI6XHRcdHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgY21kO1xuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTMtXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzY5NDpcdFx0aWYgKCFrdm1feDg2X29wcy5taWdyYXRlX2NtZCB8fFxuYXJjaC94ODYva3ZtL3g4Ni5jOjc2OTU6XHRcdCAgICAha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSlcbmFyY2gveDg2L2t2bS94ODYuYy03Njk2LVx0XHRcdHJldHVybiAtRU5PVFRZO1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy03NzAzLVxuYXJjaC94ODYva3ZtL3g4Ni5jOjc3MDQ6XHRcdHIgPSBrdm1feDg2X2NhbGwobWlncmF0ZV9jbWQpKGt2bSwgXHUwMDI2Y21kKTtcbmFyY2gveDg2L2t2bS94ODYuYy03NzA1LVx0XHRpZiAociBcdTAwM2UgMClcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTI1Mz1zdHJ1Y3Qga3ZtX3MzOTBfa2V5b3Age1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xMzUzLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjEzNTQ6I2RlZmluZSBLVk1fTUlHUkFURV9DTURcdFx0ICBfSU9XUihLVk1JTywgMHhlNCwgc3RydWN0IGt2bV9taWdyYXRlX2NtZClcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xMzU1LVxuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNjg4PXN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY5My1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNjk0OnN0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE2OTUtXHRfX3UxNiBjb21tYW5kO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODY3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogOTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLVk0gTGl2ZSBNaWdyYXRpb24gQ2FwYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsZW1lbnRhdGlvbiAob3IgbGFjayB0aGVyZW9mKSBvZiBgY2FwX2xpdmVfbWlncmF0aW9uYC4gIEZpcnN0LCBJJiMzOTttIGNoZWNraW5nIGZvciBpbXBsZW1lbnRhdGlvbnMgb2YgYGNhcF9saXZlX21pZ3JhdGlvbmAsIGBtaWdyYXRlX2NtZGAsIGBleHBvcnRfbWVtb3J5YCwgYGltcG9ydF9tZW1vcnlgLCBgZXhwb3J0X3ZjcHVgLCBhbmQgYGltcG9ydF92Y3B1YCB3aXRoaW4gdGhlIGtleSBLVk0gYXJjaCBmaWxlcyBsaWtlIGB2bXguY2AsIGBzdm0uY2AsIGB0ZHguY2AsIGFuZCBgc2V2LmNgLiBJJiMzOTttIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgdmVuZG9yLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucy4KCkEgYnJvYWQgc2VhcmNoIHVzaW5nIGBncmVwYCBhY3Jvc3MgdGhlIGNvZGViYXNlIHNob3VsZCBiZSBkZWZpbml0aXZlLiBZZXMsIHRoZSBncmVwIHNob3dlZCAqYWxsKiBvY2N1cnJlbmNlcyBhY3Jvc3MgdGhlICplbnRpcmUqIGNvZGViYXNlLCBzbyB0aGF0IHNob3VsZCBiZSByZWxpYWJsZS4gTm93IEkmIzM5O20gdmVyaWZ5aW5nIHRoZSBncmVwIHBhdHRlcm4gdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgaXQmIzM5O3MgY2F0Y2hpbmcgYWxsIHRoZSByZWxldmFudCBzeW1ib2xzLiBUaGUgcGF0dGVybiBgKGNhcF9saXZlX21pZ3JhdGlvbnxtaWdyYXRlX2NtZHxleHBvcnRfbWVtb3J5fGltcG9ydF9tZW1vcnl8ZXhwb3J0X3ZjcHV8aW1wb3J0X3ZjcHUpYCBzZWVtcyBjb3JyZWN0IGFuZCBpdCBvbmx5IHlpZWxkZWQgcmVmZXJlbmNlcyBpbiBkb2N1bWVudGF0aW9uLCB0aGUgaGVhZGVyIGZpbGVzIGFuZCB0aGUgeDg2IGFuZCB1YXBpIGZpbGVzLiBOb3RoaW5nIHZlbmRvci1zcGVjaWZpYy4KCk5vdywgYSBjcnVjaWFsIHBvaW50OiBzaW5jZSBgY2FwX2xpdmVfbWlncmF0aW9uYCBpcyBkZWZpbmVkIGFzIGBLVk1fWDg2X09QX09QVElPTkFMX1JFVDBgLCB0aGUgcmV0dXJuIHZhbHVlIG9mIGBrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pYCB3aGVuIG5vIHZlbmRvciBpbXBsZW1lbnRhdGlvbiBpcyBwcmVzZW50IGlzIGVzc2VudGlhbGx5IDAgKGZhbHNlKSBiZWNhdXNlIGl0IGRlZmF1bHRzIHRvIE5VTEwgb3IgYSBzdHViIHJldHVybmluZyAwLiBUaGF04oCZcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBmbG93LgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyB2YWx1ZSBpcyB1c2VkLiBJbiBga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdWAsIGBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5YCwgYW5kIGBrdm1fYXJjaF92bV9pb2N0bGAsIGlmIGBjYXBfbGl2ZV9taWdyYXRpb25gIGlzIHplcm8gKGZhbHNlKSwgb3IgdGhlIHJlbGV2YW50IG9wcyBhcmUgTlVMTCwgaXQgcmV0dXJucyAtRU5PVFRZIGltbWVkaWF0ZWx5LiBBbmQgdGhlIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCBqdXN0IHJldHVybnMgdGhlIHZhbHVlIG9mIGBjYXBfbGl2ZV9taWdyYXRpb25gLiBTbyBubyBsaXZlIG1pZ3JhdGlvbiBpcyBhbGxvd2VkLgoKV2FpdCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIGFyY2hpdGVjdHVyZXMgYWRkaW5nIGFueXRoaW5nIGhlcmU/IExldCYjMzk7cyBjaGVjayBgYXJtNjRgLCBgczM5MGAsIG9yIGFueSBvdGhlcnMgZm9yIGFueSBtb2RpZmljYXRpb25zLgoKT2theSwgdGhlIHBhdGNoIG9ubHkgdG91Y2hlcyB4ODYgcmVsYXRlZCBmaWxlcy4gU3BlY2lmaWNhbGx5OiB0aGUgZG9jdW1lbnRhdGlvbiwgeDg2IGhlYWRlcnMsIHg4NiBLVk0gY29kZSwgYW5kIHRoZSBVQVBJIGhlYWRlci4KCkZpbmFsbHksIGp1c3QgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUsIGxldOKAmXMgcnVuIGEgcXVpY2sgYGdpdCBsb2dgIGFuZCBgZ2l0IHN0YXR1c2AgY2hlY2sgdG8gcnVsZSBvdXQgYW55IHJlY2VudCBjb21taXRzIG9yIGxvY2FsIG1vZGlmaWNhdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzZWFyY2ggcmVzdWx0cy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGhpZGluZyBpbiB0aGUgYnVzaGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9DQVBfTElWRV9NSUdSQVRJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY1NjU9S1ZNX1MzOTBfS0VZT1BfU1NLRVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTczLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY1NzQ6OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTc1LTpBcmNoaXRlY3R1cmVzOiB4ODZcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjU4OT1UaGUgdmVuZG9yIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGhhbmRsZXMgbG9ja2luZyBhbmQgY2hlY2tzIHRoZSB2YWxpZCBmbGFnc1xuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY1OTA6Yml0cy4gSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXNcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTkxLXJldHVybmVkLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NjE0PVRoZSBrdm1fbWlncmF0ZV9jbWQgaXM6OlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjMzLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY2MzQ6OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjM1LTpBcmNoaXRlY3R1cmVzOiB4ODZcbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjY0NT10aGUgZ3Vlc3QuXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjY0Ni1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NjQ3OklmIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIFZNLCAtRU5PVFRZIGlzIHJldHVybmVkLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2NDgtXG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY2NzU9Rm9yIG1lbW9yeSBpbXBvcnQsIHNlZSBhbHNvIDpyZWY6YEtWTV9JTVBPUlRfTUVNT1JZIFx1MDAzY0tWTV9JTVBPUlRfTUVNT1JZXHUwMDNlYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjY4Mi1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NjgzOjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjY4NC06QXJjaGl0ZWN0dXJlczogeDg2XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY2OTQ9dGhlIGd1ZXN0LlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2OTUtXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjY5NjpJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpcyByZXR1cm5lZC5cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02Njk3LVxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NzA1PUZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWVvIDpyZWY6YEtWTV9NSUdSQVRFX0NNRCBcdTAwM2NLVk1fTUlHUkFURV9DTURcdTAwM2VgLlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NzEwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY3MTE6OkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NzEyLTpBcmNoaXRlY3R1cmVzOiBhcm02NCwgeDg2XG4tLVxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY3Mzk9Rm9yIHZDUFUgaW1wb3J0LCBzZWUgYWxzbyA6cmVmOmBLVk1fSU1QT1JUX1ZDUFUgXHUwMDNjS1ZNX0lNUE9SVF9WQ1BVXHUwMDNlYC5cbi0tXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjc0NS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NzQ2OjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjc0Ny06QXJjaGl0ZWN0dXJlczogYXJtNjQsIHg4NlxuLS1cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD05Njg4PXN0YXJ0IGluIEVTQSBtb2RlLlxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTk2ODktXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6OTY5MDo4LjQ4IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NjkxLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz00NzY4PWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5NzUtXHRcdGJyZWFrO1xuYXJjaC94ODYva3ZtL3g4Ni5jOjQ5NzY6XHRjYXNlIEtWTV9DQVBfTElWRV9NSUdSQVRJT046XG5hcmNoL3g4Ni9rdm0veDg2LmMtNDk3Ny1cdFx0ciA9IGt2bSA/IGt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgOiAwO1xuLS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD02NzQ9c3RydWN0IGt2bV9lbmFibGVfY2FwIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtOTk5LSNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oOjEwMDA6I2RlZmluZSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIDI1MFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTEwMDEtXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oPTE0NDU9c3RydWN0IGt2bV9lbmNfcmVnaW9uIHtcbi0tXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTQ5NS1cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxNDk2Oi8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gKi9cbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaC0xNDk3LSNkZWZpbmUgS1ZNX0VYUE9SVF9NRU1PUllcdCAgX0lPV1IoS1ZNSU8sIDB4ZTUsIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjI5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzQ4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBLVk1fWDg2X09QX09QVElPTkFMX1JFVDBgIHRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSBLVk0geDg2IGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgc3RhcnQgYnkgZG9pbmcgYSBxdWljayBncmVwIHdpdGhpbiB0aGUgYGFyY2gveDg2L2AgZGlyZWN0b3J5LiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIG92ZXJ2aWV3IG9mIHdoZXJlIHRoaXMgbWFjcm8gaXMgdXNlZCBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBLVk0gaW1wbGVtZW50YXRpb24uIEhvcGVmdWxseSwgdGhlIHJlc3VsdHMgd2lsbCBwb2ludCBtZSB0b3dhcmRzIHRoZSByZWxldmFudCBjb2RlIHBhdGhzIGFuZCBhbGxvdyBtZSB0byB1bnJhdmVsIGl0cyBmdW5jdGlvbiB3aXRoaW4gdGhlIHg4NiB2aXJ0dWFsaXphdGlvbiBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fWDg2X09QX09QVElPTkFMX1JFVDAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4NiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTMtICAgICFkZWZpbmVkKEtWTV9YODZfT1BfT1BUSU9OQUwpIHx8IFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjQ6ICAgICFkZWZpbmVkKEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtNS0jZXJyb3IgTWlzc2luZyBvbmUgb3IgbW9yZSBLVk1fWDg2X09QICNkZWZpbmVzXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMi0gKiBLVk1fWDg2X09QX09QVElPTkFMKCkgY2FuIGJlIHVzZWQgZm9yIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGNhbiBoYXZlXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjEzOiAqIGEgTlVMTCBkZWZpbml0aW9uLiAgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKCkgY2FuIGJlIHVzZWQgbGlrZXdpc2VcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTQtICogdG8gbWFrZSBhIGRlZmluaXRpb24gb3B0aW9uYWwsIGJ1dCBpbiB0aGlzIGNhc2UgdGhlIGRlZmF1bHQgd2lsbFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9MjU9S1ZNX1g4Nl9PUF9PUFRJT05BTCh2bV9wcmVfZGVzdHJveSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MjY6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfcHJlY3JlYXRlKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0yNy1LVk1fWDg2X09QKHZjcHVfY3JlYXRlKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9NzU9S1ZNX1g4Nl9PUChpbmplY3Rfbm1pKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo3NjpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoaXNfdm5taV9wZW5kaW5nKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo3NzpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X3ZubWlfcGVuZGluZylcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtNzgtS1ZNX1g4Nl9PUChpbmplY3RfZXhjZXB0aW9uKVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9OTM9S1ZNX1g4Nl9PUF9PUFRJT05BTChzeW5jX3Bpcl90b19pcnIpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjk0OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfdHNzX2FkZHIpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjk1OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfaWRlbnRpdHlfbWFwX2FkZHIpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjk2OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnZXRfbXRfbWFzaylcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6OTc6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHRkcF9oYXNfc21lcClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtOTgtS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjk5OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfZXh0ZXJuYWxfc3B0ZSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTAwLUtWTV9YODZfT1BfT1BUSU9OQUwoZnJlZV9leHRlcm5hbF9zcHQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xMTY9S1ZNX1g4Nl9PUF9PUFRJT05BTChhcGljdl9wb3N0X3N0YXRlX3Jlc3RvcmUpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjExNzpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZHlfYXBpY3ZfaGFzX3BlbmRpbmdfaW50ZXJydXB0KVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMTgtS1ZNX1g4Nl9PUF9PUFRJT05BTChwcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0KVxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9MTQ0PUtWTV9YODZfT1AodmNwdV9kZWxpdmVyX3NpcGlfdmVjdG9yKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNDU6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7XG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTE0Ni1LVk1fWDg2X09QX09QVElPTkFMKGdldF91bnRhZ2dlZF9hZGRyKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNDc9S1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSlcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTQ4OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjE0OTpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYXhfbWFwcGluZ19sZXZlbClcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTUwLUtWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlKVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTE6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGNhcF9saXZlX21pZ3JhdGlvbilcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTUyLUtWTV9YODZfT1BfT1BUSU9OQUwobWlncmF0ZV9jbWQpXG4tLVxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNTY9S1ZNX1g4Nl9PUF9PUFRJT05BTChpbXBvcnRfdmNwdSlcbi0tXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTE2MC0jdW5kZWYgS1ZNX1g4Nl9PUF9PUFRJT05BTFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNjE6I3VuZGVmIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMFxuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg9MjA2OD1leHRlcm4gc3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzO1xuLS1cbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjA3NC0jZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9PUFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaDoyMDc1OiNkZWZpbmUgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwIEtWTV9YODZfT1BcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjA3Ni0jaW5jbHVkZSBcdTAwM2Nhc20va3ZtLXg4Ni1vcHMuaFx1MDAzZVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYz0xNDM9c3RydWN0IGt2bV94ODZfb3BzIGt2bV94ODZfb3BzIF9fcmVhZF9tb3N0bHk7XG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jLTE0OC0jZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9PUFxuYXJjaC94ODYva3ZtL3g4Ni5jOjE0OTojZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCBLVk1fWDg2X09QXG5hcmNoL3g4Ni9rdm0veDg2LmMtMTUwLSNpbmNsdWRlIFx1MDAzY2FzbS9rdm0teDg2LW9wcy5oXHUwMDNlXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMTE5PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fb3BzX3VwZGF0ZShzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy0xMDEyNy0jZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUwgX19LVk1fWDg2X09QXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxMjg6I2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDEyOS1cdHN0YXRpY19jYWxsX3VwZGF0ZShrdm1feDg2XyMjZnVuYywgKHZvaWQgKilrdm1feDg2X29wcy5mdW5jID8gOiBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTQ5CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTQ1OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBLVk0gTGl2ZSBNaWdyYXRpb24gSW9jdGwgUGx1bWJpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCBpbnRyb2R1Y2luZyB0aGUgcGx1bWJpbmcgZm9yIGxpdmUgbWlncmF0aW9uIGlvY3Rscywgc3BlY2lmaWNhbGx5IGZvciBjb25maWRlbnRpYWwgY29tcHV0aW5nIGZlYXR1cmVzIGxpa2UgVERYL1NFVi1TTlAsIHdpdGhpbiB0aGUgS1ZNIFg4NiBmcmFtZXdvcmsuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgZXhlY3V0aW9uIHBhdGggb2YgYEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChjYXBfbGl2ZV9taWdyYXRpb24pYC4gIFdlIGtub3csIGZyb20gdGhlIGNvZGUsIHRoYXQgYGt2bV94ODZfb3BzLmNhcF9saXZlX21pZ3JhdGlvbmAgaXMgY3VycmVudGx5IE5VTEwsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBzdGF0ZSBmb3IgYm90aCBJbnRlbCBhbmQgQU1EIGF0IHRoaXMgc3RhZ2UsIHNpbmNlIG5laXRoZXIgdm14IG5vciBzdm0gaGF2ZSBpbXBsZW1lbnRlZCBpdC4gVGhpcyByZXN1bHRzIGluIGBzdGF0aWNfY2FsbChrdm1feDg2X2NhcF9saXZlX21pZ3JhdGlvbilgIGNhbGxpbmcgYSBzdHViIHRoYXQgcmV0dXJucyAwLgoKTm93LCBsZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgcmV0dXJuIHZhbHVlIG9mIDAgZnJvbSBgY2FwX2xpdmVfbWlncmF0aW9uKGt2bSlgIGxhbmRzLiBMb29raW5nIGF0IGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCwgd2UgaGF2ZSBhIGRpcmVjdCByZXR1cm4gb2YgMCwgd2hpY2ggaXMgc2ltcGxlIGVub3VnaC4gIGBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1YCwgYGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnlgLCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbGwgY29udGFpbiBjaGVja3MgbGlrZSBgIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSlgLCBhbmQgc2luY2UgYGNhcF9saXZlX21pZ3JhdGlvbmAgcmV0dXJucyAwLCB0aGUgY29kZSBpbW1lZGlhdGVseSByZXR1cm5zIGAtRU5PVFRZYCBpbiBhbGwgdGhlc2UgY2FzZXMuICAKCk15IG5leHQgc3RlcCBpcyB0byB2ZXJpZnkgdGhpcyB0aG9yb3VnaCBhIGdyZXAgb2YgdGhlIGVudGlyZSBjb2RlYmFzZSBhbmQgZW5zdXJlIHRoZXJlIGFyZSBubyBvdGhlciBwbGFjZXMgd2hlcmUgYGt2bV94ODZfb3BzLm1pZ3JhdGVfY21kYCwgYGt2bV94ODZfb3BzLmV4cG9ydF9tZW1vcnlgLCBga3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeWAsIGBrdm1feDg2X29wcy5leHBvcnRfdmNwdWAsIGBrdm1feDg2X29wcy5pbXBvcnRfdmNwdWAgb3IgYGt2bV94ODZfb3BzLmNhcF9saXZlX21pZ3JhdGlvbmAgYXJlICphY3R1YWxseSogc2V0LiBBbmQgd2UmIzM5O3ZlIGFscmVhZHkgZG9uZSB0aGF0LCBjb25maXJtaW5nIG5vIG90aGVyIG9jY3VycmVuY2VzLiBUaGlzLCBhcyBJIGV4cGVjdGVkLCBzdWdnZXN0cyB0aGlzIHBhdGNoIGlzICpvbmx5KiBzZXR0aW5nIHVwIHRoZSBpbnRlcmZhY2UsIHRoZSBpb2N0bCBkZWZpbml0aW9ucywgYW5kIHRoZSBpbml0aWFsIGRpc3BhdGNoZXIgc3RydWN0dXJlIGJ1dCBkb2VzbiYjMzk7dCBpbmNsdWRlIGFueSB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHlldC4KCk5vdywgYSBrZXkgcXVlc3Rpb246IGNhbiAqYW55KiB1c2VyLXByb3ZpZGVkIGlucHV0IGV2ZW4gKnRvdWNoKiBjb2RlIGJleW9uZCB0aGF0IGluaXRpYWwgY2hlY2s/ICBMb29raW5nIGRlZXBlciBhdCBga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdWAsIGl0JiMzOTtzIGNsZWFyIHRoZSBjaGVjayBpcyBhdCB0aGUgdmVyeSB0b3Agb2YgdGhlIGZ1bmN0aW9uLCBiZWZvcmUgYW55IGBjb3B5X2Zyb21fdXNlcmAgb3Igb3RoZXIgcG90ZW50aWFsbHkgdnVsbmVyYWJsZSBjb2RlLiBUaGUgc2FtZSBob2xkcyB0cnVlIGZvciBga3ZtX3ZtX2lvY3RsX3RyYW5zZmVyX21lbW9yeWAgYW5kIGBLVk1fTUlHUkFURV9DTURgLiAgVGhlIGNydWNpYWwgY2hlY2sgaGFwcGVucyBpbW1lZGlhdGVseSwgZW5zdXJpbmcgYC1FTk9UVFlgIGlzIHJldHVybmVkIGJlZm9yZSBhbnkgZnVydGhlciBwcm9jZXNzaW5nLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIGd1aWRlbGluZXMgZm9yICYjMzQ7V29ydGhGdXp6aW5nJiMzNDsgdG8gY29uZmlybSBvdXIgYXNzdW1wdGlvbnMgaGVyZS4gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcyBsaWtlIGxvZ2dpbmcsIGNoYW5nZXMgdG8gY29uc3RhbnRzIHRoYXQgZG9uJiMzOTt0IGFsdGVyIGV4ZWN1dGlvbiwgb3IgdW5yZWFjaGFibGUgY29kZSBwYXRocyBhbGwgZ2V0IGEgV29ydGhGdXp6aW5nPWZhbHNlLiBIZXJlLCBpdCBpcyBjbGVhciB0aGF0IHRoZSBuZXcgaW9jdGxzIGFyZSBzdHViYmVkIGFuZCB1bnJlYWNoYWJsZSBzaW5jZSBgY2FwX2xpdmVfbWlncmF0aW9uYCBhbmQgb3RoZXIgdmVuZG9yIGhvb2tzIGFyZSBub3QgaW1wbGVtZW50ZWQuIFRoZSBjb2RlIGlzIHN0cnVjdHVyZWQgaW4gYSB3YXkgdGhhdCByZXR1cm5zIGJlZm9yZSB0aGUgZXhlY3V0aW9uIG9mIGNvcmUgbG9naWMgb3IgaGFuZGxpbmcgb2YgdXNlciBpbnB1dHMuCgpGb3IgYWRkZWQgYXNzdXJhbmNlLCBsZXQmIzM5O3MgdmVyaWZ5IHdpdGggYHJlYWQtZmlsZWAgb24gYGFyY2gveDg2L2t2bS94ODYuY2AsIGFyb3VuZCB0aG9zZSBmdW5jdGlvbnMsIGp1c3QgdG8gMTAwJSBlbnN1cmUgd2UgbWlzc2VkIG5vdGhpbmcuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBwYXRjaCBwcmltYXJpbHkgaW50cm9kdWNlcyB1bnJlYWNoYWJsZSBpb2N0bHMgYW5kIHN0dWJzIGZvciBmdXR1cmUgaW1wbGVtZW50YXRpb24sIHRoaXMgaXMgZGVmaW5pdGVseSBhICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgc2NlbmFyaW8uIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgZXhwb3NlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2VzIGFuZCB3aWxsIGxpa2VseSBiZSB3b3J0aCByZS1ldmFsdWF0aW5nIHdoZW4gdGhlIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgYXJlIGFkZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS94ODYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYxOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjE5MDpcdH1cbjYxOTE6XHRcbjYxOTI6XHRzdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGltcG9ydCxcbjYxOTM6XHRcdFx0XHRcdFx0dm9pZCBfX3VzZXIgKmFyZ3ApXG42MTk0Olx0e1xuNjE5NTpcdFx0c3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyIHZjcHVfc3RhdGU7XG42MTk2Olx0XHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVx1MDAzZWt2bTtcbjYxOTc6XHRcdGludCByO1xuNjE5ODpcdFxuNjE5OTpcdFx0aWYgKCFrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIHx8XG42MjAwOlx0XHQgICAgKGltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmltcG9ydF92Y3B1KSB8fFxuNjIwMTpcdFx0ICAgICghaW1wb3J0IFx1MDAyNlx1MDAyNiAha3ZtX3g4Nl9vcHMuZXhwb3J0X3ZjcHUpKVxuNjIwMjpcdFx0XHRyZXR1cm4gLUVOT1RUWTtcbjYyMDM6XHRcbjYyMDQ6XHRcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ2Y3B1X3N0YXRlLCBhcmdwLCBzaXplb2YodmNwdV9zdGF0ZSkpKVxuNjIwNTpcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbjYyMDY6XHRcbjYyMDc6XHRcdGlmICh2Y3B1X3N0YXRlLnJlc2VydmVkIHx8IHZjcHVfc3RhdGUuYnVmLnJlc2VydmVkKVxuNjIwODpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjYyMDk6XHRcbjYyMTA6XHRcdGlmIChpbXBvcnQpXG42MjExOlx0XHRcdHIgPSBrdm1feDg2X2NhbGwoaW1wb3J0X3ZjcHUpKHZjcHUsIFx1MDAyNnZjcHVfc3RhdGUpO1xuNjIxMjpcdFx0ZWxzZVxuNjIxMzpcdFx0XHRyID0ga3ZtX3g4Nl9jYWxsKGV4cG9ydF92Y3B1KSh2Y3B1LCBcdTAwMjZ2Y3B1X3N0YXRlKTtcbjYyMTQ6XHRcdGlmIChyIFx1MDAzZSAwKVxuNjIxNTpcdFx0XHRyID0gLUVJTztcbjYyMTY6XHRcbjYyMTc6XHRcdC8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIHRyYW5zZmVyICovXG42MjE4Olx0XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNnZjcHVfc3RhdGUsIHNpemVvZih2Y3B1X3N0YXRlKSkpXG42MjE5Olx0XHRcdHIgPSAtRUZBVUxUO1xuNjIyMDpcdFxuNjIyMTpcdFx0cmV0dXJuIHI7XG42MjIyOlx0fVxuNjIyMzpcdFxuNjIyNDpcdGxvbmcga3ZtX2FyY2hfdmNwdV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCxcbjYyMjU6XHRcdFx0XHQgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbjYyMjY6XHR7XG42MjI3Olx0XHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUgPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbjYyMjg6XHRcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xuNjIyOTpcdFx0aW50IHI7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTM1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIGxvY2F0aW9ucywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRleHQsIGFzIHRob3VnaCB0aGV5IHdlcmUgbXkgaW1tZWRpYXRlIHRob3VnaHRzOgoKKipBbmFseXppbmcgUG90ZW50aWFsIEtWTSB4ODYgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IEtWTSYjMzk7cyB4ODYgY29kZSwgYW5kIEkgbmVlZCB0byBob25lIGluIG9uIGEgY291cGxlIG9mIHNwZWNpZmljIGFyZWFzLiBNeSBndXQgdGVsbHMgbWUgdGhlcmUgbWlnaHQgYmUgc29tZXRoaW5nIGludGVyZXN0aW5nIGhhcHBlbmluZyBhcm91bmQgbGluZXMgYDczMDAtNzM0MGAgYW5kIHRoZW4gYWxzbyBgNzY5MC03NzIwYCBpbiBgYXJjaC94ODYva3ZtL3g4Ni5jYC4gSSBoYXZlIGEgZmVlbGluZyB0aG9zZSBzZWN0aW9ucyBhcmUgaGFuZGxpbmcgYSBjcnVjaWFsIHBhcnQgb2YgdGhlIHg4NiBlbXVsYXRpb24gb3IgaGFyZHdhcmUgaW50ZXJhY3Rpb24sIGFuZCBhbnkgc3VidGxlIGZsYXdzIGluIHRoZSBsb2dpYyB0aGVyZSBjb3VsZCBsZWFkIHRvIHBvdGVudGlhbCBleHBsb2l0cy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IGdvaW5nIG9uIGluIHRob3NlIGNodW5rcyBvZiBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL3g4Ni5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3MzAwOlx0XG43MzAxOlx0c3RhdGljIGludCBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbXBvcnQsXG43MzAyOlx0XHRcdFx0XHRcdHZvaWQgX191c2VyICphcmdwKVxuNzMwMzpcdHtcbjczMDQ6XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyIG1lbTtcbjczMDU6XHRcdGludCByO1xuNzMwNjpcdFxuNzMwNzpcdFx0aWYgKCFrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIHx8XG43MzA4Olx0XHQgICAgKGltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmltcG9ydF9tZW1vcnkpIHx8XG43MzA5Olx0XHQgICAgKCFpbXBvcnQgXHUwMDI2XHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfbWVtb3J5KSlcbjczMTA6XHRcdFx0cmV0dXJuIC1FTk9UVFk7XG43MzExOlx0XG43MzEyOlx0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2bWVtLCBhcmdwLCBzaXplb2YobWVtKSkpXG43MzEzOlx0XHRcdHJldHVybiAtRUZBVUxUO1xuNzMxNDpcdFxuNzMxNTpcdFx0aWYgKG1lbS5yZXNlcnZlZCB8fCBtZW0uYnVmLnJlc2VydmVkIHx8ICFtZW0ubnJfZ2ZucylcbjczMTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG43MzE3Olx0XG43MzE4Olx0XHRpZiAoaW1wb3J0KVxuNzMxOTpcdFx0XHRyID0ga3ZtX3g4Nl9jYWxsKGltcG9ydF9tZW1vcnkpKGt2bSwgXHUwMDI2bWVtKTtcbjczMjA6XHRcdGVsc2VcbjczMjE6XHRcdFx0ciA9IGt2bV94ODZfY2FsbChleHBvcnRfbWVtb3J5KShrdm0sIFx1MDAyNm1lbSk7XG43MzIyOlx0XHRpZiAociBcdTAwM2UgMClcbjczMjM6XHRcdFx0ciA9IC1FSU87XG43MzI0Olx0XG43MzI1Olx0XHQvKiBDb3B5IGJhY2sgYWxzbyBvbiBhbiBlcnJvciB0byByZXBvcnQgYSBwYXJ0aWFsbHkgZG9uZSB0cmFuc2ZlciAqL1xuNzMyNjpcdFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcdTAwMjZtZW0sIHNpemVvZihtZW0pKSlcbjczMjc6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG43MzI4Olx0XG43MzI5Olx0XHRyZXR1cm4gcjtcbjczMzA6XHR9XG43MzMxOlx0XG43MzMyOlx0aW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuNzMzMzpcdHtcbjczMzQ6XHRcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuNzMzNTpcdFx0dm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7XG43MzM2Olx0XHRpbnQgciA9IC1FTk9UVFk7XG43MzM3Olx0XG43MzM4Olx0I2lmZGVmIENPTkZJR19LVk1fSU9BUElDXG43MzM5Olx0XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDAzNwoJCQkJCQkJb3V0cHV0OiAxNjgKCQkJCQkJCXRob3VnaHRzOiAxNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS1ZNIExpdmUgTWlncmF0aW9uIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBLVk0gbGl2ZSBtaWdyYXRpb24uIEl0IGxvb2tzIGxpa2UgdGhlIGNvZGUgKmludHJvZHVjZXMqIHRoZSBuZWNlc3NhcnkgZmVhdHVyZXMsIHNwZWNpZmljYWxseSB0aGUgYEtWTV9DQVBfTElWRV9NSUdSQVRJT05gIGNhcGFiaWxpdHkgYW5kIHRoZSBhc3NvY2lhdGVkIGlvY3RsczogYEtWTV9NSUdSQVRFX0NNRGAsIGBLVk1fRVhQT1JUX01FTU9SWWAsIGBLVk1fSU1QT1JUX01FTU9SWWAsIGBLVk1fRVhQT1JUX1ZDUFVgLCBhbmQgYEtWTV9JTVBPUlRfVkNQVWAuIFRoYXQmIzM5O3MgdGhlIHRoZW9yeSwgYW55d2F5LgoKQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiBpdCwgKm5vKiB2ZW5kb3IgYmFja2VuZCwgYXQgbGVhc3Qgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgdHJlZSwgYWN0dWFsbHkgKmltcGxlbWVudHMqIGBjYXBfbGl2ZV9taWdyYXRpb25gIG9yIGFueSBvZiB0aGUgbWlncmF0aW9uIGNhbGxiYWNrcy4gTWVhbmluZywgY2hlY2tpbmcgZm9yIHRoYXQgY2FwYWJpbGl0eSwgb3IgZXZlbiB0cnlpbmcgdG8gY2FsbCB0aG9zZSBuZXcgaW9jdGxzLCB3aWxsIGltbWVkaWF0ZWx5IGJhaWwgb3V0LiBUaGUgcmVzdWx0IHdpbGwgZWl0aGVyIGJlIGEgYDBgIG9yIGFuIGAtRU5PVFRZYCBlcnJvci4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIHRoaXMgdHJhbnNsYXRlcyB0byBhYnNvbHV0ZWx5ICpub3RoaW5nKiBpbiB0aGUgdW5kZXJseWluZyBsb2dpYyBiZWluZyByZWFjaGFibGUsIGxldCBhbG9uZSBleGVjdXRhYmxlLiBJdCYjMzk7cyBhIGRlYWQgZW5kLgoKVGhlcmVmb3JlLCBmcm9tIGEgZnV6emluZyBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCBpcyBhIG5vbi1zdGFydGVyLiBUaGVyZSYjMzk7cyBubyB2YWx1ZSBpbiB0cnlpbmcgdG8gcG9rZSBhcm91bmQgdGhpcyBhcmVhIGFzLWlzLiBJdCYjMzk7cyBub3Qgd29ydGggdGhlIGVmZm9ydC4KClRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAwNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgS1ZNIGxpdmUgbWlncmF0aW9uIGlvY3RscyAoS1ZNX01JR1JBVEVfQ01ELCBLVk1fRVhQT1JUX01FTU9SWSwgS1ZNX0lNUE9SVF9NRU1PUlksIEtWTV9FWFBPUlRfVkNQVSwgS1ZNX0lNUE9SVF9WQ1BVKSBhbmQgY2FwYWJpbGl0eSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OLCBhbG9uZyB3aXRoIGRpc3BhdGNoZXIgaG9va3MgaW4ga3ZtX3g4Nl9vcHMuIEhvd2V2ZXIsIG5vIHZlbmRvciBiYWNrZW5kIGltcGxlbWVudHMgY2FwX2xpdmVfbWlncmF0aW9uIG9yIGFueSBvZiB0aGUgbWlncmF0aW9uIGNhbGxiYWNrcy4gQXMgYSByZXN1bHQsIGFsbCBuZXcgaW9jdGxzIGltbWVkaWF0ZWx5IHJldHVybiAtRU5PVFRZIGFuZCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGNoZWNrcyByZXR1cm4gMCwgbWFraW5nIHRoZSBoYW5kbGVyIGxvZ2ljIHVucmVhY2hhYmxlIGFuZCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgS1ZNIGxpdmUgbWlncmF0aW9uIGlvY3RscyAoS1ZNX01JR1JBVEVfQ01ELCBLVk1fRVhQT1JUX01FTU9SWSwgS1ZNX0lNUE9SVF9NRU1PUlksIEtWTV9FWFBPUlRfVkNQVSwgS1ZNX0lNUE9SVF9WQ1BVKSBhbmQgY2FwYWJpbGl0eSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OLCBhbG9uZyB3aXRoIGRpc3BhdGNoZXIgaG9va3MgaW4ga3ZtX3g4Nl9vcHMuIEhvd2V2ZXIsIG5vIHZlbmRvciBiYWNrZW5kIGltcGxlbWVudHMgY2FwX2xpdmVfbWlncmF0aW9uIG9yIGFueSBvZiB0aGUgbWlncmF0aW9uIGNhbGxiYWNrcy4gQXMgYSByZXN1bHQsIGFsbCBuZXcgaW9jdGxzIGltbWVkaWF0ZWx5IHJldHVybiAtRU5PVFRZIGFuZCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGNoZWNrcyByZXR1cm4gMCwgbWFraW5nIHRoZSBoYW5kbGVyIGxvZ2ljIHVucmVhY2hhYmxlIGFuZCBub3Qgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDA3OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTozMS45NzQ0NjAyMzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0Nzk5Mzc5MjkzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgS1ZNIGxpdmUgbWlncmF0aW9uIGlvY3RscyAoS1ZNX01JR1JBVEVfQ01ELCBLVk1fRVhQT1JUX01FTU9SWSwgS1ZNX0lNUE9SVF9NRU1PUlksIEtWTV9FWFBPUlRfVkNQVSwgS1ZNX0lNUE9SVF9WQ1BVKSBhbmQgY2FwYWJpbGl0eSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OLCBhbG9uZyB3aXRoIGRpc3BhdGNoZXIgaG9va3MgaW4ga3ZtX3g4Nl9vcHMuIEhvd2V2ZXIsIG5vIHZlbmRvciBiYWNrZW5kIGltcGxlbWVudHMgY2FwX2xpdmVfbWlncmF0aW9uIG9yIGFueSBvZiB0aGUgbWlncmF0aW9uIGNhbGxiYWNrcy4gQXMgYSByZXN1bHQsIGFsbCBuZXcgaW9jdGxzIGltbWVkaWF0ZWx5IHJldHVybiAtRU5PVFRZIGFuZCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGNoZWNrcyByZXR1cm4gMCwgbWFraW5nIHRoZSBoYW5kbGVyIGxvZ2ljIHVucmVhY2hhYmxlIGFuZCBub3Qgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjI5OjMxLjk3NDQ2MzcxNloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM1MjA5ODc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGVhZmVjNWQxOTYyMmZkM2JhNGJjYjAxMzViZTg0YmYwNjk2ODIwM2ZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDc6Mjk6MzAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XFxuaW5kZXggYTVmOWVlOTJmNDNlOC4uOWQ1NDZkMjg4YWY1ZiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5AQCAtNjU2Niw2ICs2NTY2LDIwMCBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFXFxuICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXlcXG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxcbiBcXG4rLi4gX0tWTV9NSUdSQVRFX0NNRDpcXG4rXFxuKzQuMTQ1IEtWTV9NSUdSQVRFX0NNRFxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuKzpBcmNoaXRlY3R1cmVzOiB4ODZcXG4rOlR5cGU6IHZtIGlvY3RsXFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIChpbi9vdXQpXFxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MgMCBvbiBlcnJvclxcbitcXG4rQWxsb3dzIHVzZXJzcGFjZSB0byBzZW5kIGxpdmUgbWlncmF0aW9uIHJlbGF0ZWQgY29tbWFuZHMgdG8gS1ZNIGZvciB2ZW5kb3JcXG4rc3BlY2lmaWMgaGFuZGxpbmcuXFxuK1xcbitGb3IgY29uZmlkZW50aWFsIGNvbXB1dGluZywgbGl2ZSBtaWdyYXRpb24gcmVsYXRlZCBjb21tYW5kcyBtYXkgYmUgbmVlZGVkLlxcbitUaGUgY29tbWFuZHMgdHlwaWNhbGx5IHVzZSBlbmNyeXB0ZWQgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHBhc3NlZCBiZXR3ZWVuIHRoZVxcbitzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGhvc3RzLiBUaGUgaG9zdHMgbWF5IGFsc28gcmVxdWlyZSBzcGVjaWZpYyBjb29yZGluYXRpb25cXG4rc3RlcHMgZHVyaW5nIG1pZ3JhdGlvbiB0aGF0IG11c3QgYmUgdHJpZ2dlcmVkIGF0IHByZWNpc2UgcG9pbnRzIGluIHRoZVxcbittaWdyYXRpb24gcHJvY2Vzcy5cXG4rXFxuK1RoZSB2ZW5kb3Igc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBsb2NraW5nIGFuZCBjaGVja3MgdGhlIHZhbGlkIGZsYWdzXFxuK2JpdHMuIElmIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIFZNLCAtRU5PVFRZIGlzXFxuK3JldHVybmVkLlxcbitcXG4rVGhlIEtWTV9NSUdSQVRFX0NNRCBzdWJjb21tYW5kIHBhc3NlZCBpbiBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIGlzIG9uZSBvZjo6XFxuK1xcbisgICNkZWZpbmUgS1ZNX01JR1JBVEVfU0VUVVBcXHRcXHQwXFxuKyAgI2RlZmluZSBLVk1fTUlHUkFURV9JVEVSQVRJT05cXHRcXHQxXFxuKyAgI2RlZmluZSBLVk1fTUlHUkFURV9TVE9QX0FORF9DT1BZXFx0MlxcbisgICNkZWZpbmUgS1ZNX01JR1JBVEVfQUJPUlRcXHRcXHQzXFxuKyAgI2RlZmluZSBLVk1fTUlHUkFURV9FTkRcXHRcXHQ0XFxuK1xcbitUaGUga3ZtX3RyYW5zZmVyX2J1ZmZlciBpczo6XFxuK1xcbisgIC8qKlxcbisgICAqIEBhZGRyZXNzOiBVc2Vyc3BhY2UgYnVmZmVyIGFkZHJlc3NcXG4rICAgKiBAc2l6ZTogU2l6ZSBvZiB0aGUgdXNlcnNwYWNlIGJ1ZmZlclxcbisgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcXG4rICAgKi9cXG4rICBzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciB7XFxuK1xcdF9fdTY0IGFkZHJlc3M7XFxuK1xcdF9fdTMyIHNpemU7XFxuK1xcdF9fdTMyIHJlc2VydmVkO1xcbisgIH07XFxuK1xcbitUaGUga3ZtX21pZ3JhdGVfY21kIGlzOjpcXG4rXFxuKyAgLyoqXFxuKyAgICogQGNvbW1hbmQ6IE9uZSBvZiB0aGUgZGVmaW5lZCBLVk1fTUlHUkFURSBjb21tYW5kc1xcbisgICAqIEBmbGFnczogSGFyZHdhcmUgc3BlY2lmaWMgZmxhZ3NcXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXFxuKyAgICogQGJ1ZjogVXNlcnNwYWNlIGJ1ZmZlciBmb3IgaGFyZHdhcmUgc3BlY2lmaWMgZGF0YVxcbisgICAqL1xcbisgIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xcbitcXHRfX3UxNiBjb21tYW5kO1xcbitcXHRfX3UxNiBmbGFncztcXG4rXFx0X191MzIgcmVzZXJ2ZWQ7XFxuK1xcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcXG4rICB9O1xcbitcXG4rLi4gX0tWTV9FWFBPUlRfTUVNT1JZOlxcbitcXG4rNC4xNDYgS1ZNX0VYUE9SVF9NRU1PUllcXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuKzpBcmNoaXRlY3R1cmVzOiB4ODZcXG4rOlR5cGU6IHZtIGlvY3RsXFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAoaW4vb3V0KVxcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBcXHUwMDNjIDAgb24gZXJyb3JcXG4rXFxuK0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBleHBvcnQgYW4gYXJyYXkgb2YgbWVtb3J5IHBhZ2VzIHRvIGFcXG4rdXNlcnNwYWNlIGJ1ZmZlci5cXG4rXFxuK1RoZSBwcml2YXRlIG1lbW9yeSBtYXkgbm90IGJlIGFjY2Vzc2libGUgdG8gS1ZNIGJlY2F1c2Ugb2YgZW5jcnlwdGlvbi4gRm9yXFxuK2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBndWVzdCBtZW1vcnkgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG9cXG4rdGhlIGd1ZXN0LlxcbitcXG4rSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXMgcmV0dXJuZWQuXFxuK1xcbitUaGUgdmVuZG9yIHNwZWNpZmljIElEIGlzIHVzZWQgYXQgbGVhc3QgZm9yIFREWCBmb3IgdGhlIG1pZ3JhdGlvbiB0aHJlYWRcXG4raW5kZXguXFxuK1xcbitUaGUga3ZtX21lbW9yeV90cmFuc2ZlciBpczo6XFxuK1xcbisgIC8qKlxcbisgICAqIEBnZm5zOiBVc2Vyc3BhY2UgYWRkcmVzcyBvZiBhbiBhcnJheSBvZiBucl9nZm5zIF9fdTY0IEdGTnMgdG8gZXhwb3J0XFxuKyAgICogQG5yX2dmbnM6IE51bWJlciBvZiBHRk5zIGluIHRoZSBAZ2ZucyBhcnJheVxcbisgICAqIEBpZDogT3B0aW9uYWwgdmVuZG9yIHNwZWNpZmljIHRyYW5zZmVyIElEXFxuKyAgICogQGZsYWdzOiBWZW5kb3Igc3BlY2lmaWMgZmxhZ3NcXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXFxuKyAgICogQGJ1ZjogVXNlcnNwYWNlIGJ1ZmZlciB0byBleHBvcnQgbWVtb3J5IHRvXFxuKyAgICovXFxuKyAgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIge1xcbisgICAgICAgX191NjQgZ2ZucztcXG4rICAgICAgIF9fdTMyIG5yX2dmbnM7XFxuKyAgICAgICBfX3UxNiBpZDtcXG4rICAgICAgIF9fdTE2IGZsYWdzO1xcbisgICAgICAgX191NjQgcmVzZXJ2ZWQ7XFxuKyAgICAgICBzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XFxuKyAgfTtcXG4rXFxuK1RoZSB0cmFuc2ZlciBidWZmZXIgc2l6ZSBpcyB2ZW5kb3Igc3BlY2lmaWMuXFxuK1xcbitGb3IgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgc2VlbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXFx1MDAzY0tWTV9NSUdSQVRFX0NNRFxcdTAwM2VgLlxcbitcXG4rRm9yIG1lbW9yeSBpbXBvcnQsIHNlZSBhbHNvIDpyZWY6YEtWTV9JTVBPUlRfTUVNT1JZIFxcdTAwM2NLVk1fSU1QT1JUX01FTU9SWVxcdTAwM2VgLlxcbitcXG4rXFxuKy4uIF9LVk1fSU1QT1JUX01FTU9SWTpcXG4rXFxuKzQuMTQ3IEtWTV9JTVBPUlRfTUVNT1JZXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxcbis6QXJjaGl0ZWN0dXJlczogeDg2XFxuKzpUeXBlOiB2bSBpb2N0bFxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKGluL291dClcXG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgXFx1MDAzYyAwIG9uIGVycm9yXFxuK1xcbitBbGxvd3MgdXNlcnNwYWNlIHRvIHJlcXVlc3QgdGhlIGhvc3QgdG8gaW1wb3J0IGFuIGFycmF5IG9mIG1lbW9yeSBwYWdlcyBmcm9tIGFcXG4rdXNlcnNwYWNlIGJ1ZmZlci5cXG4rXFxuK1RoZSBwcml2YXRlIG1lbW9yeSBtYXkgbm90IGJlIGFjY2Vzc2libGUgdG8gS1ZNIGJlY2F1c2Ugb2YgZW5jcnlwdGlvbi4gRm9yXFxuK2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBndWVzdCBtZW1vcnkgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG9cXG4rdGhlIGd1ZXN0LlxcbitcXG4rSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXMgcmV0dXJuZWQuXFxuK1xcbitUaGUgdmVuZG9yIHNwZWNpZmljIElEIGlzIHVzZWQgYXQgbGVhc3QgZm9yIFREWCBmb3IgdGhlIG1pZ3JhdGlvbiB0aHJlYWRcXG4raW5kZXguXFxuK1xcbitUaGUgdHJhbnNmZXIgYnVmZmVyIHNpemUgaXMgdmVuZG9yIHNwZWNpZmljLlxcbitcXG4rRm9yIGt2bV9tZW1vcnlfdHJhbnNmZXIsIHNlZSA6cmVmOmBLVk1fRVhQT1JUX01FTU9SWSBcXHUwMDNjS1ZNX0VYUE9SVF9NRU1PUllcXHUwMDNlYC5cXG4rXFxuK0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWVvIDpyZWY6YEtWTV9NSUdSQVRFX0NNRCBcXHUwMDNjS1ZNX01JR1JBVEVfQ01EXFx1MDAzZWAuXFxuK1xcbisuLiBfS1ZNX0VYUE9SVF9WQ1BVOlxcbitcXG4rNC4xNDkgS1ZNX0VYUE9SVF9WQ1BVXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxcbis6QXJjaGl0ZWN0dXJlczogYXJtNjQsIHg4Nlxcbis6VHlwZTogdmNwdSBpb2N0bFxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyIChpbi9vdXQpXFxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MgMCBvbiBlcnJvclxcbitcXG4rQWxsb3dzIHVzZXJzcGFjZSB0byByZXF1ZXN0IHRoZSBob3N0IHRvIGV4cG9ydCBhIFZDUFUgc3RhdGUgdG8gYSB1c2Vyc3BhY2VcXG4rYnVmZmVyLlxcbitcXG4rVGhlIFZDUFUgc3RhdGUgbWF5IG5vdCBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlIHRvIEtWTSBiZWNhdXNlIG9mIGVuY3J5cHRpb24uIEZvclxcbitjb25maWRlbnRpYWwgY29tcHV0aW5nLCB0aGUgVkNQVSBzdGF0ZSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0byB0aGVcXG4rZ3Vlc3QuXFxuK1xcbitUaGUgdmNwdV90cmFuc2ZlciBpczo6XFxuK1xcbisgIC8qKlxcbisgICAqIEBmbGFnczogSGFyZHdhcmUgc3BlY2lmaWMgZmxhZ3NcXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXFxuKyAgICogQGJ1ZjogVXNlcnNwYWNlIGJ1ZmZlciB0byBleHBvcnQgVkNQVSBzdGF0ZSB0b1xcbisgICAqL1xcbisgIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciB7XFxuKyAgICAgICAgX191MzIgZmxhZ3M7XFxuKyAgICAgICAgX191MzIgcmVzZXJ2ZWQ7XFxuK1xcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcXG4rICB9O1xcbitcXG4rRm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZSA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXFx1MDAzY0tWTV9NSUdSQVRFX0NNRFxcdTAwM2VgLlxcbitcXG4rRm9yIHZDUFUgaW1wb3J0LCBzZWUgYWxzbyA6cmVmOmBLVk1fSU1QT1JUX1ZDUFUgXFx1MDAzY0tWTV9JTVBPUlRfVkNQVVxcdTAwM2VgLlxcbitcXG4rLi4gX0tWTV9JTVBPUlRfVkNQVTpcXG4rXFxuKzQuMTQ4IEtWTV9JTVBPUlRfVkNQVVxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rXFxuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuKzpBcmNoaXRlY3R1cmVzOiBhcm02NCwgeDg2XFxuKzpUeXBlOiB2Y3B1IGlvY3RsXFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKGluL291dClcXG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgXFx1MDAzYyAwIG9uIGVycm9yXFxuK1xcbitBbGxvd3MgdXNlcnNwYWNlIHRvIHJlcXVlc3QgdGhlIGhvc3QgdG8gaW1wb3J0IGEgVkNQVSBzdGF0ZSBmcm9tIGEgdXNlcnNwYWNlXFxuK2J1ZmZlci5cXG4rXFxuK1RoZSBWQ1BVIHN0YXRlIG1heSBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3JcXG4rY29uZmlkZW50aWFsIGNvbXB1dGluZywgdGhlIFZDUFUgc3RhdGUgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG8gdGhlXFxuK2d1ZXN0LlxcbitcXG4rRm9yIHZjcHVfdHJhbnNmZXIgYW5kIHZDUFUgaW1wb3J0LCBzZWUgOnJlZjpgS1ZNX0lNUE9SVF9WQ1BVIFxcdTAwM2NLVk1fSU1QT1JUX1ZDUFVcXHUwMDNlYC5cXG4rXFxuK0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWUgYWxzbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXFx1MDAzY0tWTV9NSUdSQVRFX0NNRFxcdTAwM2VgLlxcbitcXG4gLi4gX2t2bV9ydW46XFxuIFxcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcXG5AQCAtOTQ5Myw2ICs5Njg3LDE3IEBAIHRha2UgY2FyZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gdGhlc2UgY2FzZXMuXFxuIFRoZSBwcmVzZW5jZSBvZiB0aGlzIGNhcGFiaWxpdHkgaW5kaWNhdGVzIHRoYXQgdGhlIG5lc3RlZCBLVk0gZ3Vlc3QgY2FuXFxuIHN0YXJ0IGluIEVTQSBtb2RlLlxcbiBcXG4rOC40OCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbitcXG4rOkFyY2hpdGVjdHVyZXM6IHg4Nlxcbis6VGFyZ2V0OiBWTVxcbis6UGFyYW1ldGVyczogTm9uZVxcbitcXG4rSW5kaWNhdGVzIHRoYXQgdGhlIFZNIG5lZWRzIHRvIHVzZSBLVk0gY2FsbHMgZm9yIGxpdmUgbWlncmF0aW9uLCBhbmQgdGhhdCB0aGVcXG4rS1ZNX01JR1JBVEVfQ01EIGlvY3RsIGFuZCB0aGUgS1ZNX0VYUE9SVF9NRU1PUlksIEtWTV9JTVBPUlRfTUVNT1JZLFxcbitLVk1fRVhQT1JUX1ZDUFUgYW5kIEtWTV9JTVBPUlRfVkNQVSBpb2N0bHMgYXJlIGF2YWlsYWJsZS5cXG4rXFxuIDkuIEtub3duIEtWTSBBUEkgcHJvYmxlbXNcXG4gPT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG5pbmRleCA4M2RjNTA4NjEzOGIzLi43ZjExMGY4MGQ2ZjgyIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcXG4rKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oXFxuQEAgLTE0OCw2ICsxNDgsMTIgQEAgS1ZNX1g4Nl9PUF9PUFRJT05BTChhbGxvY19hcGljX2JhY2tpbmdfcGFnZSlcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fcHJlcGFyZSlcXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpXFxuIEtWTV9YODZfT1BfT1BUSU9OQUwoZ21lbV9pbnZhbGlkYXRlKVxcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoY2FwX2xpdmVfbWlncmF0aW9uKVxcbitLVk1fWDg2X09QX09QVElPTkFMKG1pZ3JhdGVfY21kKVxcbitLVk1fWDg2X09QX09QVElPTkFMKGV4cG9ydF9tZW1vcnkpXFxuK0tWTV9YODZfT1BfT1BUSU9OQUwoaW1wb3J0X21lbW9yeSlcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfdmNwdSlcXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChpbXBvcnRfdmNwdSlcXG4gI2VuZGlmXFxuIFxcbiAjdW5kZWYgS1ZNX1g4Nl9PUFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbmluZGV4IDVmNmMxY2U5NjczYjcuLmI2MzYyNDA4ZGFiODAgMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcXG5AQCAtMjAxMCw2ICsyMDEwLDEyIEBAIHN0cnVjdCBrdm1feDg2X29wcyB7XFxuIFxcdGludCAoKmdtZW1fcHJlcGFyZSkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpO1xcbiBcXHR2b2lkICgqZ21lbV9pbnZhbGlkYXRlKShrdm1fcGZuX3Qgc3RhcnQsIGt2bV9wZm5fdCBlbmQpO1xcbiBcXHRpbnQgKCpnbWVtX21heF9tYXBwaW5nX2xldmVsKShzdHJ1Y3Qga3ZtICprdm0sIGt2bV9wZm5fdCBwZm4sIGJvb2wgaXNfcHJpdmF0ZSk7XFxuK1xcdGJvb2wgKCpjYXBfbGl2ZV9taWdyYXRpb24pKHN0cnVjdCBrdm0gKmt2bSk7XFxuK1xcdGludCAoKm1pZ3JhdGVfY21kKShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgKmNtZCk7XFxuK1xcdGludCAoKmV4cG9ydF9tZW1vcnkpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKm1lbSk7XFxuK1xcdGludCAoKmltcG9ydF9tZW1vcnkpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKm1lbSk7XFxuK1xcdGludCAoKmV4cG9ydF92Y3B1KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciAqdmNwdV9zdGF0ZSk7XFxuK1xcdGludCAoKmltcG9ydF92Y3B1KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciAqdmNwdV9zdGF0ZSk7XFxuIH07XFxuIFxcbiBzdHJ1Y3Qga3ZtX3g4Nl9uZXN0ZWRfb3BzIHtcXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL3g4Ni5jIGIvYXJjaC94ODYva3ZtL3g4Ni5jXFxuaW5kZXggYWZjYWMxMDQyOTQ3YS4uZTgzODUzMjY4OTRiMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rdm0veDg2LmNcXG4rKysgYi9hcmNoL3g4Ni9rdm0veDg2LmNcXG5AQCAtNDk3Myw2ICs0OTczLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4gXFx0Y2FzZSBLVk1fQ0FQX1JFQURPTkxZX01FTTpcXG4gXFx0XFx0ciA9IGt2bSA/IGt2bV9hcmNoX2hhc19yZWFkb25seV9tZW0oa3ZtKSA6IDE7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEtWTV9DQVBfTElWRV9NSUdSQVRJT046XFxuK1xcdFxcdHIgPSBrdm0gPyBrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIDogMDtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuQEAgLTYxODYsNiArNjE4OSwzOCBAQCBzdGF0aWMgaW50IGt2bV9nZXRfcmVnX2xpc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgYm9vbCBpbXBvcnQsXFxuK1xcdFxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmdwKVxcbit7XFxuK1xcdHN0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciB2Y3B1X3N0YXRlO1xcbitcXHRzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LVxcdTAwM2Vrdm07XFxuK1xcdGludCByO1xcbitcXG4rXFx0aWYgKCFrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pIHx8XFxuK1xcdCAgICAoaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5pbXBvcnRfdmNwdSkgfHxcXG4rXFx0ICAgICghaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfdmNwdSkpXFxuK1xcdFxcdHJldHVybiAtRU5PVFRZO1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ2Y3B1X3N0YXRlLCBhcmdwLCBzaXplb2YodmNwdV9zdGF0ZSkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmICh2Y3B1X3N0YXRlLnJlc2VydmVkIHx8IHZjcHVfc3RhdGUuYnVmLnJlc2VydmVkKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChpbXBvcnQpXFxuK1xcdFxcdHIgPSBrdm1feDg2X2NhbGwoaW1wb3J0X3ZjcHUpKHZjcHUsIFxcdTAwMjZ2Y3B1X3N0YXRlKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyID0ga3ZtX3g4Nl9jYWxsKGV4cG9ydF92Y3B1KSh2Y3B1LCBcXHUwMDI2dmNwdV9zdGF0ZSk7XFxuK1xcdGlmIChyIFxcdTAwM2UgMClcXG4rXFx0XFx0ciA9IC1FSU87XFxuK1xcbitcXHQvKiBDb3B5IGJhY2sgYWxzbyBvbiBhbiBlcnJvciB0byByZXBvcnQgYSBwYXJ0aWFsbHkgZG9uZSB0cmFuc2ZlciAqL1xcbitcXHRpZiAoY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZ2Y3B1X3N0YXRlLCBzaXplb2YodmNwdV9zdGF0ZSkpKVxcbitcXHRcXHRyID0gLUVGQVVMVDtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbiBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdFxcdFxcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiB7XFxuQEAgLTY2NTYsNiArNjY5MSwxNCBAQCBsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHRcXHRyID0ga3ZtX3g4Nl9vcHMudmNwdV9tZW1fZW5jX2lvY3RsKHZjcHUsIGFyZ3ApO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBLVk1fRVhQT1JUX1ZDUFU6IHtcXG4rXFx0XFx0ciA9IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUodmNwdSwgZmFsc2UsIGFyZ3ApO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRjYXNlIEtWTV9JTVBPUlRfVkNQVToge1xcbitcXHRcXHRyID0ga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdSh2Y3B1LCB0cnVlLCBhcmdwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0ciA9IC1FSU5WQUw7XFxuIFxcdH1cXG5AQCAtNzI1NSw2ICs3Mjk4LDM3IEBAIGxvbmcga3ZtX2FyY2hfdmNwdV91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLFxcbiBcXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnkoc3RydWN0IGt2bSAqa3ZtLCBib29sIGltcG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0dm9pZCBfX3VzZXIgKmFyZ3ApXFxuK3tcXG4rXFx0c3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgbWVtO1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlmICgha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSB8fFxcbitcXHQgICAgKGltcG9ydCBcXHUwMDI2XFx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeSkgfHxcXG4rXFx0ICAgICghaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfbWVtb3J5KSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNm1lbSwgYXJncCwgc2l6ZW9mKG1lbSkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChtZW0ucmVzZXJ2ZWQgfHwgbWVtLmJ1Zi5yZXNlcnZlZCB8fCAhbWVtLm5yX2dmbnMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGltcG9ydClcXG4rXFx0XFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfbWVtb3J5KShrdm0sIFxcdTAwMjZtZW0pO1xcbitcXHRlbHNlXFxuK1xcdFxcdHIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X21lbW9yeSkoa3ZtLCBcXHUwMDI2bWVtKTtcXG4rXFx0aWYgKHIgXFx1MDAzZSAwKVxcbitcXHRcXHRyID0gLUVJTztcXG4rXFxuK1xcdC8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIHRyYW5zZmVyICovXFxuK1xcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXFx1MDAyNm1lbSwgc2l6ZW9mKG1lbSkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbiBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIHtcXG4gXFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbkBAIC03NjE0LDYgKzc2ODgsMzQgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxcbiBcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX3NldF9tc3JfZmlsdGVyKGt2bSwgXFx1MDAyNmZpbHRlcik7XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuK1xcdGNhc2UgS1ZNX01JR1JBVEVfQ01EOiB7XFxuK1xcdFxcdHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgY21kO1xcbitcXG4rXFx0XFx0aWYgKCFrdm1feDg2X29wcy5taWdyYXRlX2NtZCB8fFxcbitcXHRcXHQgICAgIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbitcXG4rXFx0XFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZjbWQsIGFyZ3AsIHNpemVvZihjbWQpKSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRcXHRpZiAoY21kLnJlc2VydmVkIHx8IGNtZC5idWYucmVzZXJ2ZWQpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0XFx0ciA9IGt2bV94ODZfY2FsbChtaWdyYXRlX2NtZCkoa3ZtLCBcXHUwMDI2Y21kKTtcXG4rXFx0XFx0aWYgKHIgXFx1MDAzZSAwKVxcbitcXHRcXHRcXHRyID0gLUVJTztcXG4rXFxuK1xcdFxcdC8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIGNvbW1hbmQgKi9cXG4rXFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2Y21kLCBzaXplb2YoY21kKSkpXFxuK1xcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXHRjYXNlIEtWTV9FWFBPUlRfTUVNT1JZOlxcbitcXHRcXHRyID0ga3ZtX3ZtX2lvY3RsX3RyYW5zZmVyX21lbW9yeShrdm0sIGZhbHNlLCBhcmdwKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgS1ZNX0lNUE9SVF9NRU1PUlk6XFxuK1xcdFxcdHIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgdHJ1ZSwgYXJncCk7XFxuK1xcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyID0gLUVOT1RUWTtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5pbmRleCA0MTkwMTEwOTdmYThlLi4wYTlhYTEyNmRhYWRiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxcbkBAIC05OTcsNiArOTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHtcXG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfS0VZT1AgMjQ3XFxuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcXG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5XFxuKyNkZWZpbmUgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiAyNTBcXG4gXFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XFxuIFxcdF9fdTMyIGlycWNoaXA7XFxuQEAgLTEzNTAsNiArMTM1MSw4IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XFxuICNkZWZpbmUgS1ZNX0dFVF9ERVZJQ0VfQVRUUlxcdCAgX0lPVyhLVk1JTywgIDB4ZTIsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXFxuICNkZWZpbmUgS1ZNX0hBU19ERVZJQ0VfQVRUUlxcdCAgX0lPVyhLVk1JTywgIDB4ZTMsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXFxuIFxcbisjZGVmaW5lIEtWTV9NSUdSQVRFX0NNRFxcdFxcdCAgX0lPV1IoS1ZNSU8sIDB4ZTQsIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQpXFxuK1xcbiAvKlxcbiAgKiBpb2N0bHMgZm9yIHZjcHUgZmRzXFxuICAqL1xcbkBAIC0xNDkwLDYgKzE0OTMsMTIgQEAgc3RydWN0IGt2bV9lbmNfcmVnaW9uIHtcXG4gI2RlZmluZSBLVk1fR0VUX1NSRUdTMiAgICAgICAgICAgICBfSU9SKEtWTUlPLCAgMHhjYywgc3RydWN0IGt2bV9zcmVnczIpXFxuICNkZWZpbmUgS1ZNX1NFVF9TUkVHUzIgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4Y2QsIHN0cnVjdCBrdm1fc3JlZ3MyKVxcbiBcXG4rLyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9MSVZFX01JR1JBVElPTiAqL1xcbisjZGVmaW5lIEtWTV9FWFBPUlRfTUVNT1JZXFx0ICBfSU9XUihLVk1JTywgMHhlNSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIpXFxuKyNkZWZpbmUgS1ZNX0lNUE9SVF9NRU1PUllcXHQgIF9JT1dSKEtWTUlPLCAweGU2LCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlcilcXG4rI2RlZmluZSBLVk1fRVhQT1JUX1ZDUFVcXHRcXHQgIF9JT1dSKEtWTUlPLCAweGU3LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIpXFxuKyNkZWZpbmUgS1ZNX0lNUE9SVF9WQ1BVXFx0XFx0ICBfSU9XUihLVk1JTywgMHhlOCwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyKVxcbitcXG4gI2RlZmluZSBLVk1fRElSVFlfTE9HX01BTlVBTF9QUk9URUNUX0VOQUJMRSAgICAoMSBcXHUwMDNjXFx1MDAzYyAwKVxcbiAjZGVmaW5lIEtWTV9ESVJUWV9MT0dfSU5JVElBTExZX1NFVCAgICAgICAgICAgICgxIFxcdTAwM2NcXHUwMDNjIDEpXFxuIFxcbkBAIC0xNjcwLDQgKzE2NzksMzggQEAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcXG4gXFx0X191NjQgcGFkZGluZ1s1XTtcXG4gfTtcXG4gXFxuKyNkZWZpbmUgS1ZNX01JR1JBVEVfU0VUVVBcXHRcXHQwXFxuKyNkZWZpbmUgS1ZNX01JR1JBVEVfSVRFUkFUSU9OXFx0XFx0MVxcbisjZGVmaW5lIEtWTV9NSUdSQVRFX1NUT1BfQU5EX0NPUFlcXHQyXFxuKyNkZWZpbmUgS1ZNX01JR1JBVEVfQUJPUlRcXHRcXHQzXFxuKyNkZWZpbmUgS1ZNX01JR1JBVEVfRU5EXFx0XFx0XFx0NFxcbitcXG4rc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIge1xcbitcXHRfX3U2NCBhZGRyZXNzO1xcbitcXHRfX3UzMiBzaXplO1xcbitcXHRfX3UzMiByZXNlcnZlZDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xcbitcXHRfX3UxNiBjb21tYW5kO1xcbitcXHRfX3UxNiBmbGFncztcXG4rXFx0X191MzIgcmVzZXJ2ZWQ7XFxuK1xcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1ZjtcXG4rfTtcXG4rXFxuK3N0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyIHtcXG4rXFx0X191NjQgZ2ZucztcXG4rXFx0X191MzIgbnJfZ2ZucztcXG4rXFx0X191MTYgaWQ7XFxuK1xcdF9fdTE2IGZsYWdzO1xcbitcXHRfX3U2NCByZXNlcnZlZDtcXG4rXFx0c3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgYnVmO1xcbit9O1xcbitcXG4rc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyIHtcXG4rXFx0X191MzIgZmxhZ3M7XFxuK1xcdF9fdTMyIHJlc2VydmVkO1xcbitcXHRzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XFxuK307XFxuK1xcbiAjZW5kaWYgLyogX19MSU5VWF9LVk1fSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTozMy4zMjcxMjU4NDNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2NjQxMTE0NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIEtWTSBsaXZlIG1pZ3JhdGlvbiBpb2N0bHMgKEtWTV9NSUdSQVRFX0NNRCwgS1ZNX0VYUE9SVF9NRU1PUlksIEtWTV9JTVBPUlRfTUVNT1JZLCBLVk1fRVhQT1JUX1ZDUFUsIEtWTV9JTVBPUlRfVkNQVSkgYW5kIGNhcGFiaWxpdHkgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiwgYWxvbmcgd2l0aCBkaXNwYXRjaGVyIGhvb2tzIGluIGt2bV94ODZfb3BzLiBIb3dldmVyLCBubyB2ZW5kb3IgYmFja2VuZCBpbXBsZW1lbnRzIGNhcF9saXZlX21pZ3JhdGlvbiBvciBhbnkgb2YgdGhlIG1pZ3JhdGlvbiBjYWxsYmFja3MuIEFzIGEgcmVzdWx0LCBhbGwgbmV3IGlvY3RscyBpbW1lZGlhdGVseSByZXR1cm4gLUVOT1RUWSBhbmQgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBjaGVja3MgcmV0dXJuIDAsIG1ha2luZyB0aGUgaGFuZGxlciBsb2dpYyB1bnJlYWNoYWJsZSBhbmQgbm90IHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBlYWZlYzVkMTk2MjJmZDNiYTRiY2IwMTM1YmU4NGJmMDY5NjgyMDNmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMDc6Mjk6MzAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZTguLjlkNTQ2ZDI4OGFmNWYgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuQEAgLTY1NjYsNiArNjU2NiwyMDAgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRVxuICAgU2V0cyB0aGUgc3RvcmFnZSBrZXkgZm9yIHRoZSBndWVzdCBhZGRyZXNzIGBgZ3Vlc3RfYWRkcmBgIHRvIHRoZSBrZXlcbiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuXG4gXG4rLi4gX0tWTV9NSUdSQVRFX0NNRDpcbitcbis0LjE0NSBLVk1fTUlHUkFURV9DTURcbistLS0tLS0tLS0tLS0tLS0tLS0tLS1cbitcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxuKzpBcmNoaXRlY3R1cmVzOiB4ODZcbis6VHlwZTogdm0gaW9jdGxcbis6UGFyYW1ldGVyczogc3RydWN0IGt2bV9taWdyYXRlX2NtZCAoaW4vb3V0KVxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYyAwIG9uIGVycm9yXG4rXG4rQWxsb3dzIHVzZXJzcGFjZSB0byBzZW5kIGxpdmUgbWlncmF0aW9uIHJlbGF0ZWQgY29tbWFuZHMgdG8gS1ZNIGZvciB2ZW5kb3JcbitzcGVjaWZpYyBoYW5kbGluZy5cbitcbitGb3IgY29uZmlkZW50aWFsIGNvbXB1dGluZywgbGl2ZSBtaWdyYXRpb24gcmVsYXRlZCBjb21tYW5kcyBtYXkgYmUgbmVlZGVkLlxuK1RoZSBjb21tYW5kcyB0eXBpY2FsbHkgdXNlIGVuY3J5cHRlZCBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgcGFzc2VkIGJldHdlZW4gdGhlXG4rc291cmNlIGFuZCBkZXN0aW5hdGlvbiBob3N0cy4gVGhlIGhvc3RzIG1heSBhbHNvIHJlcXVpcmUgc3BlY2lmaWMgY29vcmRpbmF0aW9uXG4rc3RlcHMgZHVyaW5nIG1pZ3JhdGlvbiB0aGF0IG11c3QgYmUgdHJpZ2dlcmVkIGF0IHByZWNpc2UgcG9pbnRzIGluIHRoZVxuK21pZ3JhdGlvbiBwcm9jZXNzLlxuK1xuK1RoZSB2ZW5kb3Igc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gaGFuZGxlcyBsb2NraW5nIGFuZCBjaGVja3MgdGhlIHZhbGlkIGZsYWdzXG4rYml0cy4gSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXNcbityZXR1cm5lZC5cbitcbitUaGUgS1ZNX01JR1JBVEVfQ01EIHN1YmNvbW1hbmQgcGFzc2VkIGluIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgaXMgb25lIG9mOjpcbitcbisgICNkZWZpbmUgS1ZNX01JR1JBVEVfU0VUVVBcdFx0MFxuKyAgI2RlZmluZSBLVk1fTUlHUkFURV9JVEVSQVRJT05cdFx0MVxuKyAgI2RlZmluZSBLVk1fTUlHUkFURV9TVE9QX0FORF9DT1BZXHQyXG4rICAjZGVmaW5lIEtWTV9NSUdSQVRFX0FCT1JUXHRcdDNcbisgICNkZWZpbmUgS1ZNX01JR1JBVEVfRU5EXHRcdDRcbitcbitUaGUga3ZtX3RyYW5zZmVyX2J1ZmZlciBpczo6XG4rXG4rICAvKipcbisgICAqIEBhZGRyZXNzOiBVc2Vyc3BhY2UgYnVmZmVyIGFkZHJlc3NcbisgICAqIEBzaXplOiBTaXplIG9mIHRoZSB1c2Vyc3BhY2UgYnVmZmVyXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4rICAgKi9cbisgIHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIHtcbitcdF9fdTY0IGFkZHJlc3M7XG4rXHRfX3UzMiBzaXplO1xuK1x0X191MzIgcmVzZXJ2ZWQ7XG4rICB9O1xuK1xuK1RoZSBrdm1fbWlncmF0ZV9jbWQgaXM6OlxuK1xuKyAgLyoqXG4rICAgKiBAY29tbWFuZDogT25lIG9mIHRoZSBkZWZpbmVkIEtWTV9NSUdSQVRFIGNvbW1hbmRzXG4rICAgKiBAZmxhZ3M6IEhhcmR3YXJlIHNwZWNpZmljIGZsYWdzXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4rICAgKiBAYnVmOiBVc2Vyc3BhY2UgYnVmZmVyIGZvciBoYXJkd2FyZSBzcGVjaWZpYyBkYXRhXG4rICAgKi9cbisgIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xuK1x0X191MTYgY29tbWFuZDtcbitcdF9fdTE2IGZsYWdzO1xuK1x0X191MzIgcmVzZXJ2ZWQ7XG4rXHRzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XG4rICB9O1xuK1xuKy4uIF9LVk1fRVhQT1JUX01FTU9SWTpcbitcbis0LjE0NiBLVk1fRVhQT1JUX01FTU9SWVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rOkNhcGFiaWxpdHk6IEtWTV9DQVBfTElWRV9NSUdSQVRJT05cbis6QXJjaGl0ZWN0dXJlczogeDg2XG4rOlR5cGU6IHZtIGlvY3RsXG4rOlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyIChpbi9vdXQpXG4rOlJldHVybnM6IDAgb24gc3VjY2VzcywgXHUwMDNjIDAgb24gZXJyb3JcbitcbitBbGxvd3MgdXNlcnNwYWNlIHRvIHJlcXVlc3QgdGhlIGhvc3QgdG8gZXhwb3J0IGFuIGFycmF5IG9mIG1lbW9yeSBwYWdlcyB0byBhXG4rdXNlcnNwYWNlIGJ1ZmZlci5cbitcbitUaGUgcHJpdmF0ZSBtZW1vcnkgbWF5IG5vdCBiZSBhY2Nlc3NpYmxlIHRvIEtWTSBiZWNhdXNlIG9mIGVuY3J5cHRpb24uIEZvclxuK2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBndWVzdCBtZW1vcnkgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG9cbit0aGUgZ3Vlc3QuXG4rXG4rSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXMgcmV0dXJuZWQuXG4rXG4rVGhlIHZlbmRvciBzcGVjaWZpYyBJRCBpcyB1c2VkIGF0IGxlYXN0IGZvciBURFggZm9yIHRoZSBtaWdyYXRpb24gdGhyZWFkXG4raW5kZXguXG4rXG4rVGhlIGt2bV9tZW1vcnlfdHJhbnNmZXIgaXM6OlxuK1xuKyAgLyoqXG4rICAgKiBAZ2ZuczogVXNlcnNwYWNlIGFkZHJlc3Mgb2YgYW4gYXJyYXkgb2YgbnJfZ2ZucyBfX3U2NCBHRk5zIHRvIGV4cG9ydFxuKyAgICogQG5yX2dmbnM6IE51bWJlciBvZiBHRk5zIGluIHRoZSBAZ2ZucyBhcnJheVxuKyAgICogQGlkOiBPcHRpb25hbCB2ZW5kb3Igc3BlY2lmaWMgdHJhbnNmZXIgSURcbisgICAqIEBmbGFnczogVmVuZG9yIHNwZWNpZmljIGZsYWdzXG4rICAgKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG4rICAgKiBAYnVmOiBVc2Vyc3BhY2UgYnVmZmVyIHRvIGV4cG9ydCBtZW1vcnkgdG9cbisgICAqL1xuKyAgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIge1xuKyAgICAgICBfX3U2NCBnZm5zO1xuKyAgICAgICBfX3UzMiBucl9nZm5zO1xuKyAgICAgICBfX3UxNiBpZDtcbisgICAgICAgX191MTYgZmxhZ3M7XG4rICAgICAgIF9fdTY0IHJlc2VydmVkO1xuKyAgICAgICBzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XG4rICB9O1xuK1xuK1RoZSB0cmFuc2ZlciBidWZmZXIgc2l6ZSBpcyB2ZW5kb3Igc3BlY2lmaWMuXG4rXG4rRm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZW8gOnJlZjpgS1ZNX01JR1JBVEVfQ01EIFx1MDAzY0tWTV9NSUdSQVRFX0NNRFx1MDAzZWAuXG4rXG4rRm9yIG1lbW9yeSBpbXBvcnQsIHNlZSBhbHNvIDpyZWY6YEtWTV9JTVBPUlRfTUVNT1JZIFx1MDAzY0tWTV9JTVBPUlRfTUVNT1JZXHUwMDNlYC5cbitcbitcbisuLiBfS1ZNX0lNUE9SVF9NRU1PUlk6XG4rXG4rNC4xNDcgS1ZNX0lNUE9SVF9NRU1PUllcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4rOkFyY2hpdGVjdHVyZXM6IHg4NlxuKzpUeXBlOiB2bSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAoaW4vb3V0KVxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFx1MDAzYyAwIG9uIGVycm9yXG4rXG4rQWxsb3dzIHVzZXJzcGFjZSB0byByZXF1ZXN0IHRoZSBob3N0IHRvIGltcG9ydCBhbiBhcnJheSBvZiBtZW1vcnkgcGFnZXMgZnJvbSBhXG4rdXNlcnNwYWNlIGJ1ZmZlci5cbitcbitUaGUgcHJpdmF0ZSBtZW1vcnkgbWF5IG5vdCBiZSBhY2Nlc3NpYmxlIHRvIEtWTSBiZWNhdXNlIG9mIGVuY3J5cHRpb24uIEZvclxuK2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBndWVzdCBtZW1vcnkgaXMgZW5jcnlwdGVkIGFuZCBvbmx5IGFjY2Vzc2libGUgdG9cbit0aGUgZ3Vlc3QuXG4rXG4rSWYgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGUgVk0sIC1FTk9UVFkgaXMgcmV0dXJuZWQuXG4rXG4rVGhlIHZlbmRvciBzcGVjaWZpYyBJRCBpcyB1c2VkIGF0IGxlYXN0IGZvciBURFggZm9yIHRoZSBtaWdyYXRpb24gdGhyZWFkXG4raW5kZXguXG4rXG4rVGhlIHRyYW5zZmVyIGJ1ZmZlciBzaXplIGlzIHZlbmRvciBzcGVjaWZpYy5cbitcbitGb3Iga3ZtX21lbW9yeV90cmFuc2Zlciwgc2VlIDpyZWY6YEtWTV9FWFBPUlRfTUVNT1JZIFx1MDAzY0tWTV9FWFBPUlRfTUVNT1JZXHUwMDNlYC5cbitcbitGb3IgdGhlIHRyYW5zZmVyIGJ1ZmZlciwgc2VlbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXHUwMDNjS1ZNX01JR1JBVEVfQ01EXHUwMDNlYC5cbitcbisuLiBfS1ZNX0VYUE9SVF9WQ1BVOlxuK1xuKzQuMTQ5IEtWTV9FWFBPUlRfVkNQVVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4rOkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODZcbis6VHlwZTogdmNwdSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKGluL291dClcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBcdTAwM2MgMCBvbiBlcnJvclxuK1xuK0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBleHBvcnQgYSBWQ1BVIHN0YXRlIHRvIGEgdXNlcnNwYWNlXG4rYnVmZmVyLlxuK1xuK1RoZSBWQ1BVIHN0YXRlIG1heSBub3QgYmUgZGlyZWN0bHkgYWNjZXNzaWJsZSB0byBLVk0gYmVjYXVzZSBvZiBlbmNyeXB0aW9uLiBGb3Jcbitjb25maWRlbnRpYWwgY29tcHV0aW5nLCB0aGUgVkNQVSBzdGF0ZSBpcyBlbmNyeXB0ZWQgYW5kIG9ubHkgYWNjZXNzaWJsZSB0byB0aGVcbitndWVzdC5cbitcbitUaGUgdmNwdV90cmFuc2ZlciBpczo6XG4rXG4rICAvKipcbisgICAqIEBmbGFnczogSGFyZHdhcmUgc3BlY2lmaWMgZmxhZ3NcbisgICAqIEByZXNlcnZlZDogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2VcbisgICAqIEBidWY6IFVzZXJzcGFjZSBidWZmZXIgdG8gZXhwb3J0IFZDUFUgc3RhdGUgdG9cbisgICAqL1xuKyAgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyIHtcbisgICAgICAgIF9fdTMyIGZsYWdzO1xuKyAgICAgICAgX191MzIgcmVzZXJ2ZWQ7XG4rXHRzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XG4rICB9O1xuK1xuK0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWUgOnJlZjpgS1ZNX01JR1JBVEVfQ01EIFx1MDAzY0tWTV9NSUdSQVRFX0NNRFx1MDAzZWAuXG4rXG4rRm9yIHZDUFUgaW1wb3J0LCBzZWUgYWxzbyA6cmVmOmBLVk1fSU1QT1JUX1ZDUFUgXHUwMDNjS1ZNX0lNUE9SVF9WQ1BVXHUwMDNlYC5cbitcbisuLiBfS1ZNX0lNUE9SVF9WQ1BVOlxuK1xuKzQuMTQ4IEtWTV9JTVBPUlRfVkNQVVxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuKzpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXG4rOkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODZcbis6VHlwZTogdmNwdSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKGluL291dClcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBcdTAwM2MgMCBvbiBlcnJvclxuK1xuK0FsbG93cyB1c2Vyc3BhY2UgdG8gcmVxdWVzdCB0aGUgaG9zdCB0byBpbXBvcnQgYSBWQ1BVIHN0YXRlIGZyb20gYSB1c2Vyc3BhY2VcbitidWZmZXIuXG4rXG4rVGhlIFZDUFUgc3RhdGUgbWF5IG5vdCBiZSBkaXJlY3RseSBhY2Nlc3NpYmxlIHRvIEtWTSBiZWNhdXNlIG9mIGVuY3J5cHRpb24uIEZvclxuK2NvbmZpZGVudGlhbCBjb21wdXRpbmcsIHRoZSBWQ1BVIHN0YXRlIGlzIGVuY3J5cHRlZCBhbmQgb25seSBhY2Nlc3NpYmxlIHRvIHRoZVxuK2d1ZXN0LlxuK1xuK0ZvciB2Y3B1X3RyYW5zZmVyIGFuZCB2Q1BVIGltcG9ydCwgc2VlIDpyZWY6YEtWTV9JTVBPUlRfVkNQVSBcdTAwM2NLVk1fSU1QT1JUX1ZDUFVcdTAwM2VgLlxuK1xuK0ZvciB0aGUgdHJhbnNmZXIgYnVmZmVyLCBzZWUgYWxzbyA6cmVmOmBLVk1fTUlHUkFURV9DTUQgXHUwMDNjS1ZNX01JR1JBVEVfQ01EXHUwMDNlYC5cbitcbiAuLiBfa3ZtX3J1bjpcbiBcbiA1LiBUaGUga3ZtX3J1biBzdHJ1Y3R1cmVcbkBAIC05NDkzLDYgKzk2ODcsMTcgQEAgdGFrZSBjYXJlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGVzZSBjYXNlcy5cbiBUaGUgcHJlc2VuY2Ugb2YgdGhpcyBjYXBhYmlsaXR5IGluZGljYXRlcyB0aGF0IHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0IGNhblxuIHN0YXJ0IGluIEVTQSBtb2RlLlxuIFxuKzguNDggS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuK1xuKzpBcmNoaXRlY3R1cmVzOiB4ODZcbis6VGFyZ2V0OiBWTVxuKzpQYXJhbWV0ZXJzOiBOb25lXG4rXG4rSW5kaWNhdGVzIHRoYXQgdGhlIFZNIG5lZWRzIHRvIHVzZSBLVk0gY2FsbHMgZm9yIGxpdmUgbWlncmF0aW9uLCBhbmQgdGhhdCB0aGVcbitLVk1fTUlHUkFURV9DTUQgaW9jdGwgYW5kIHRoZSBLVk1fRVhQT1JUX01FTU9SWSwgS1ZNX0lNUE9SVF9NRU1PUlksXG4rS1ZNX0VYUE9SVF9WQ1BVIGFuZCBLVk1fSU1QT1JUX1ZDUFUgaW9jdGxzIGFyZSBhdmFpbGFibGUuXG4rXG4gOS4gS25vd24gS1ZNIEFQSSBwcm9ibGVtc1xuID09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaFxuaW5kZXggODNkYzUwODYxMzhiMy4uN2YxMTBmODBkNmY4MiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmhcbkBAIC0xNDgsNiArMTQ4LDEyIEBAIEtWTV9YODZfT1BfT1BUSU9OQUwoYWxsb2NfYXBpY19iYWNraW5nX3BhZ2UpXG4gS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fcHJlcGFyZSlcbiBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ21lbV9tYXhfbWFwcGluZ19sZXZlbClcbiBLVk1fWDg2X09QX09QVElPTkFMKGdtZW1faW52YWxpZGF0ZSlcbitLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoY2FwX2xpdmVfbWlncmF0aW9uKVxuK0tWTV9YODZfT1BfT1BUSU9OQUwobWlncmF0ZV9jbWQpXG4rS1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfbWVtb3J5KVxuK0tWTV9YODZfT1BfT1BUSU9OQUwoaW1wb3J0X21lbW9yeSlcbitLVk1fWDg2X09QX09QVElPTkFMKGV4cG9ydF92Y3B1KVxuK0tWTV9YODZfT1BfT1BUSU9OQUwoaW1wb3J0X3ZjcHUpXG4gI2VuZGlmXG4gXG4gI3VuZGVmIEtWTV9YODZfT1BcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaFxuaW5kZXggNWY2YzFjZTk2NzNiNy4uYjYzNjI0MDhkYWI4MCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmhcbkBAIC0yMDEwLDYgKzIwMTAsMTIgQEAgc3RydWN0IGt2bV94ODZfb3BzIHtcbiBcdGludCAoKmdtZW1fcHJlcGFyZSkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBnZm5fdCBnZm4sIGludCBtYXhfb3JkZXIpO1xuIFx0dm9pZCAoKmdtZW1faW52YWxpZGF0ZSkoa3ZtX3Bmbl90IHN0YXJ0LCBrdm1fcGZuX3QgZW5kKTtcbiBcdGludCAoKmdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpKHN0cnVjdCBrdm0gKmt2bSwga3ZtX3Bmbl90IHBmbiwgYm9vbCBpc19wcml2YXRlKTtcbitcdGJvb2wgKCpjYXBfbGl2ZV9taWdyYXRpb24pKHN0cnVjdCBrdm0gKmt2bSk7XG4rXHRpbnQgKCptaWdyYXRlX2NtZCkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kICpjbWQpO1xuK1x0aW50ICgqZXhwb3J0X21lbW9yeSkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciAqbWVtKTtcbitcdGludCAoKmltcG9ydF9tZW1vcnkpKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgKm1lbSk7XG4rXHRpbnQgKCpleHBvcnRfdmNwdSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKnZjcHVfc3RhdGUpO1xuK1x0aW50ICgqaW1wb3J0X3ZjcHUpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyICp2Y3B1X3N0YXRlKTtcbiB9O1xuIFxuIHN0cnVjdCBrdm1feDg2X25lc3RlZF9vcHMge1xuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuY1xuaW5kZXggYWZjYWMxMDQyOTQ3YS4uZTgzODUzMjY4OTRiMSAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L2t2bS94ODYuY1xuKysrIGIvYXJjaC94ODYva3ZtL3g4Ni5jXG5AQCAtNDk3Myw2ICs0OTczLDkgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbiBcdGNhc2UgS1ZNX0NBUF9SRUFET05MWV9NRU06XG4gXHRcdHIgPSBrdm0gPyBrdm1fYXJjaF9oYXNfcmVhZG9ubHlfbWVtKGt2bSkgOiAxO1xuIFx0XHRicmVhaztcbitcdGNhc2UgS1ZNX0NBUF9MSVZFX01JR1JBVElPTjpcbitcdFx0ciA9IGt2bSA/IGt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgOiAwO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuIFx0fVxuQEAgLTYxODYsNiArNjE4OSwzOCBAQCBzdGF0aWMgaW50IGt2bV9nZXRfcmVnX2xpc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW1wb3J0LFxuK1x0XHRcdFx0XHR2b2lkIF9fdXNlciAqYXJncClcbit7XG4rXHRzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgdmNwdV9zdGF0ZTtcbitcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXHUwMDNla3ZtO1xuK1x0aW50IHI7XG4rXG4rXHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcbitcdCAgICAoaW1wb3J0IFx1MDAyNlx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X3ZjcHUpIHx8XG4rXHQgICAgKCFpbXBvcnQgXHUwMDI2XHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfdmNwdSkpXG4rXHRcdHJldHVybiAtRU5PVFRZO1xuK1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnZjcHVfc3RhdGUsIGFyZ3AsIHNpemVvZih2Y3B1X3N0YXRlKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0aWYgKHZjcHVfc3RhdGUucmVzZXJ2ZWQgfHwgdmNwdV9zdGF0ZS5idWYucmVzZXJ2ZWQpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKGltcG9ydClcbitcdFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgXHUwMDI2dmNwdV9zdGF0ZSk7XG4rXHRlbHNlXG4rXHRcdHIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X3ZjcHUpKHZjcHUsIFx1MDAyNnZjcHVfc3RhdGUpO1xuK1x0aWYgKHIgXHUwMDNlIDApXG4rXHRcdHIgPSAtRUlPO1xuK1xuK1x0LyogQ29weSBiYWNrIGFsc28gb24gYW4gZXJyb3IgdG8gcmVwb3J0IGEgcGFydGlhbGx5IGRvbmUgdHJhbnNmZXIgKi9cbitcdGlmIChjb3B5X3RvX3VzZXIoYXJncCwgXHUwMDI2dmNwdV9zdGF0ZSwgc2l6ZW9mKHZjcHVfc3RhdGUpKSlcbitcdFx0ciA9IC1FRkFVTFQ7XG4rXG4rXHRyZXR1cm4gcjtcbit9XG4rXG4gbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIHtcbkBAIC02NjU2LDYgKzY2OTEsMTQgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLFxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRyID0ga3ZtX3g4Nl9vcHMudmNwdV9tZW1fZW5jX2lvY3RsKHZjcHUsIGFyZ3ApO1xuIFx0XHRicmVhaztcbitcdGNhc2UgS1ZNX0VYUE9SVF9WQ1BVOiB7XG4rXHRcdHIgPSBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1KHZjcHUsIGZhbHNlLCBhcmdwKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXHRjYXNlIEtWTV9JTVBPUlRfVkNQVToge1xuK1x0XHRyID0ga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdSh2Y3B1LCB0cnVlLCBhcmdwKTtcbitcdFx0YnJlYWs7XG4rXHR9XG4gXHRkZWZhdWx0OlxuIFx0XHRyID0gLUVJTlZBTDtcbiBcdH1cbkBAIC03MjU1LDYgKzcyOTgsMzcgQEAgbG9uZyBrdm1fYXJjaF92Y3B1X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsXG4gXHRyZXR1cm4gLUVOT0lPQ1RMQ01EO1xuIH1cbiBcbitzdGF0aWMgaW50IGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnkoc3RydWN0IGt2bSAqa3ZtLCBib29sIGltcG9ydCxcbitcdFx0XHRcdFx0dm9pZCBfX3VzZXIgKmFyZ3ApXG4re1xuK1x0c3RydWN0IGt2bV9tZW1vcnlfdHJhbnNmZXIgbWVtO1xuK1x0aW50IHI7XG4rXG4rXHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcbitcdCAgICAoaW1wb3J0IFx1MDAyNlx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeSkgfHxcbitcdCAgICAoIWltcG9ydCBcdTAwMjZcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF9tZW1vcnkpKVxuK1x0XHRyZXR1cm4gLUVOT1RUWTtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZtZW0sIGFyZ3AsIHNpemVvZihtZW0pKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAobWVtLnJlc2VydmVkIHx8IG1lbS5idWYucmVzZXJ2ZWQgfHwgIW1lbS5ucl9nZm5zKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChpbXBvcnQpXG4rXHRcdHIgPSBrdm1feDg2X2NhbGwoaW1wb3J0X21lbW9yeSkoa3ZtLCBcdTAwMjZtZW0pO1xuK1x0ZWxzZVxuK1x0XHRyID0ga3ZtX3g4Nl9jYWxsKGV4cG9ydF9tZW1vcnkpKGt2bSwgXHUwMDI2bWVtKTtcbitcdGlmIChyIFx1MDAzZSAwKVxuK1x0XHRyID0gLUVJTztcbitcbitcdC8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIHRyYW5zZmVyICovXG4rXHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNm1lbSwgc2l6ZW9mKG1lbSkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHJldHVybiByO1xuK31cbitcbiBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4ge1xuIFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG5AQCAtNzYxNCw2ICs3Njg4LDM0IEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IGt2bV92bV9pb2N0bF9zZXRfbXNyX2ZpbHRlcihrdm0sIFx1MDAyNmZpbHRlcik7XG4gXHRcdGJyZWFrO1xuIFx0fVxuK1x0Y2FzZSBLVk1fTUlHUkFURV9DTUQ6IHtcbitcdFx0c3RydWN0IGt2bV9taWdyYXRlX2NtZCBjbWQ7XG4rXG4rXHRcdGlmICgha3ZtX3g4Nl9vcHMubWlncmF0ZV9jbWQgfHxcbitcdFx0ICAgICFrdm1feDg2X2NhbGwoY2FwX2xpdmVfbWlncmF0aW9uKShrdm0pKVxuK1x0XHRcdHJldHVybiAtRU5PVFRZO1xuK1xuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2Y21kLCBhcmdwLCBzaXplb2YoY21kKSkpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRcdGlmIChjbWQucmVzZXJ2ZWQgfHwgY21kLmJ1Zi5yZXNlcnZlZClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdFx0ciA9IGt2bV94ODZfY2FsbChtaWdyYXRlX2NtZCkoa3ZtLCBcdTAwMjZjbWQpO1xuK1x0XHRpZiAociBcdTAwM2UgMClcbitcdFx0XHRyID0gLUVJTztcbitcbitcdFx0LyogQ29weSBiYWNrIGFsc28gb24gYW4gZXJyb3IgdG8gcmVwb3J0IGEgcGFydGlhbGx5IGRvbmUgY29tbWFuZCAqL1xuK1x0XHRpZiAoY29weV90b191c2VyKGFyZ3AsIFx1MDAyNmNtZCwgc2l6ZW9mKGNtZCkpKVxuK1x0XHRcdHJldHVybiAtRUZBVUxUO1xuK1x0XHRicmVhaztcbitcdH1cbitcdGNhc2UgS1ZNX0VYUE9SVF9NRU1PUlk6XG4rXHRcdHIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgZmFsc2UsIGFyZ3ApO1xuK1x0XHRicmVhaztcbitcdGNhc2UgS1ZNX0lNUE9SVF9NRU1PUlk6XG4rXHRcdHIgPSBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KGt2bSwgdHJ1ZSwgYXJncCk7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0ciA9IC1FTk9UVFk7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5pbmRleCA0MTkwMTEwOTdmYThlLi4wYTlhYTEyNmRhYWRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbkBAIC05OTcsNiArOTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHtcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9LRVlPUCAyNDdcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9WU0lFX0VTQU1PREUgMjQ4XG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5XG4rI2RlZmluZSBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTEzNTAsNiArMTM1MSw4IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XG4gI2RlZmluZSBLVk1fR0VUX0RFVklDRV9BVFRSXHQgIF9JT1coS1ZNSU8sICAweGUyLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyKVxuICNkZWZpbmUgS1ZNX0hBU19ERVZJQ0VfQVRUUlx0ICBfSU9XKEtWTUlPLCAgMHhlMywgc3RydWN0IGt2bV9kZXZpY2VfYXR0cilcbiBcbisjZGVmaW5lIEtWTV9NSUdSQVRFX0NNRFx0XHQgIF9JT1dSKEtWTUlPLCAweGU0LCBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kKVxuK1xuIC8qXG4gICogaW9jdGxzIGZvciB2Y3B1IGZkc1xuICAqL1xuQEAgLTE0OTAsNiArMTQ5MywxMiBAQCBzdHJ1Y3Qga3ZtX2VuY19yZWdpb24ge1xuICNkZWZpbmUgS1ZNX0dFVF9TUkVHUzIgICAgICAgICAgICAgX0lPUihLVk1JTywgIDB4Y2MsIHN0cnVjdCBrdm1fc3JlZ3MyKVxuICNkZWZpbmUgS1ZNX1NFVF9TUkVHUzIgICAgICAgICAgICAgX0lPVyhLVk1JTywgIDB4Y2QsIHN0cnVjdCBrdm1fc3JlZ3MyKVxuIFxuKy8qIEF2YWlsYWJsZSB3aXRoIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gKi9cbisjZGVmaW5lIEtWTV9FWFBPUlRfTUVNT1JZXHQgIF9JT1dSKEtWTUlPLCAweGU1LCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlcilcbisjZGVmaW5lIEtWTV9JTVBPUlRfTUVNT1JZXHQgIF9JT1dSKEtWTUlPLCAweGU2LCBzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlcilcbisjZGVmaW5lIEtWTV9FWFBPUlRfVkNQVVx0XHQgIF9JT1dSKEtWTUlPLCAweGU3LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIpXG4rI2RlZmluZSBLVk1fSU1QT1JUX1ZDUFVcdFx0ICBfSU9XUihLVk1JTywgMHhlOCwgc3RydWN0IGt2bV92Y3B1X3RyYW5zZmVyKVxuK1xuICNkZWZpbmUgS1ZNX0RJUlRZX0xPR19NQU5VQUxfUFJPVEVDVF9FTkFCTEUgICAgKDEgXHUwMDNjXHUwMDNjIDApXG4gI2RlZmluZSBLVk1fRElSVFlfTE9HX0lOSVRJQUxMWV9TRVQgICAgICAgICAgICAoMSBcdTAwM2NcdTAwM2MgMSlcbiBcbkBAIC0xNjcwLDQgKzE2NzksMzggQEAgc3RydWN0IGt2bV9wcmVfZmF1bHRfbWVtb3J5IHtcbiBcdF9fdTY0IHBhZGRpbmdbNV07XG4gfTtcbiBcbisjZGVmaW5lIEtWTV9NSUdSQVRFX1NFVFVQXHRcdDBcbisjZGVmaW5lIEtWTV9NSUdSQVRFX0lURVJBVElPTlx0XHQxXG4rI2RlZmluZSBLVk1fTUlHUkFURV9TVE9QX0FORF9DT1BZXHQyXG4rI2RlZmluZSBLVk1fTUlHUkFURV9BQk9SVFx0XHQzXG4rI2RlZmluZSBLVk1fTUlHUkFURV9FTkRcdFx0XHQ0XG4rXG4rc3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIge1xuK1x0X191NjQgYWRkcmVzcztcbitcdF9fdTMyIHNpemU7XG4rXHRfX3UzMiByZXNlcnZlZDtcbit9O1xuK1xuK3N0cnVjdCBrdm1fbWlncmF0ZV9jbWQge1xuK1x0X191MTYgY29tbWFuZDtcbitcdF9fdTE2IGZsYWdzO1xuK1x0X191MzIgcmVzZXJ2ZWQ7XG4rXHRzdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciBidWY7XG4rfTtcbitcbitzdHJ1Y3Qga3ZtX21lbW9yeV90cmFuc2ZlciB7XG4rXHRfX3U2NCBnZm5zO1xuK1x0X191MzIgbnJfZ2ZucztcbitcdF9fdTE2IGlkO1xuK1x0X191MTYgZmxhZ3M7XG4rXHRfX3U2NCByZXNlcnZlZDtcbitcdHN0cnVjdCBrdm1fdHJhbnNmZXJfYnVmZmVyIGJ1Zjtcbit9O1xuK1xuK3N0cnVjdCBrdm1fdmNwdV90cmFuc2ZlciB7XG4rXHRfX3UzMiBmbGFncztcbitcdF9fdTMyIHJlc2VydmVkO1xuK1x0c3RydWN0IGt2bV90cmFuc2Zlcl9idWZmZXIgYnVmO1xuK307XG4rXG4gI2VuZGlmIC8qIF9fTElOVVhfS1ZNX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjI5OjMzLjMyNzEyNjk3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQyNTg0Mzc5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoaXMgUGF0Y2ggZm9yIExpdmUgTWlncmF0aW9uIEltcGxpY2F0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUuIEl0J3MgdG91Y2hpbmcgYERvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdGAsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBhbmQgdGhlbiB3ZSBoYXZlIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIGhlYWRlciBmaWxlcyBhbmQgdGhlIGNvcmUgYHg4Ni5jYCBpbXBsZW1lbnRhdGlvbi4gTGFzdGx5LCBpdCB0b3VjaGVzIGBpbmNsdWRlL3VhcGkvbGludXgva3ZtLmhgLiBUaGF0IG1ha2VzIG1lIHRoaW5rIHRoaXMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGxvb2sgYXQuXG5cbk5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBsaXZlIG1pZ3JhdGlvbi4gR2l2ZW4gdGhlIGFyZWFzIGJlaW5nIHRvdWNoZWQsIEknbSBnb2luZyB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIGhvb2tzIG9yIG1vZGlmaWNhdGlvbnMgcmVsYXRlZCB0byBsaXZlIG1pZ3JhdGlvbiBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSBpZiB0aGVyZSBhcmUgdmVuZG9yIGNhbGxiYWNrcyBiZWluZyBpbXBsZW1lbnRlZCwgb3IgaWYgdGhlIGBjYXBfbGl2ZV9taWdyYXRpb25gIGNhcGFiaWxpdHkgaXMgYmVpbmcgZXhwb3NlZCBhbnl3aGVyZSBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCBoYXMgYmVlbiBhZGRlZCBvciBhbHRlcmVkLlxuXG5JJ20gdGhpbmtpbmcgSSBzaG91bGQgc3RhcnQgYnkgZ3JlcHBpbmcgdGhlIGtlcm5lbCBzb3VyY2UgZm9yIGtleXdvcmRzOiBgY2FwX2xpdmVfbWlncmF0aW9uYCwgYGV4cG9ydF9tZW1vcnlgLCBgaW1wb3J0X21lbW9yeWAsIGBleHBvcnRfdmNwdWAsIGBpbXBvcnRfdmNwdWAsIGFuZCBgbWlncmF0ZV9jbWRgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc29saWQgdmlldyBvZiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGVzZSBjcnVjaWFsIGZlYXR1cmVzIGFuZCB3aWxsIHF1aWNrbHkgaGlnaGxpZ2h0IGFueSBjaGFuZ2VzIG9yIGFkZGl0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2guIEkgZXhwZWN0IEknbGwgYmUgYWJsZSB0byBxdWlja2x5IHNlZSBpZiBhbnkgb2YgdGhlc2UgYXJlIGltcGxlbWVudGVkIGluIGBrdm1feDg2X29wc2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2OTIsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTozNy41ODU1NjcyMVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjcyMTAwNDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihjYXBfbGl2ZV9taWdyYXRpb258bWlncmF0ZV9jbWR8ZXhwb3J0X21lbW9yeXxpbXBvcnRfbWVtb3J5fGV4cG9ydF92Y3B1fGltcG9ydF92Y3B1KVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjU2NT1LVk1fUzM5MF9LRVlPUF9TU0tFXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjU3Ni06VHlwZTogdm0gaW9jdGxcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjU3Nzo6UGFyYW1ldGVyczogc3RydWN0IGt2bV9taWdyYXRlX2NtZCAoaW4vb3V0KVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTc4LTpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIFxcdTAwM2MgMCBvbiBlcnJvclxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY1OTE9cmV0dXJuZWQuXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY1OTItXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY1OTM6VGhlIEtWTV9NSUdSQVRFX0NNRCBzdWJjb21tYW5kIHBhc3NlZCBpbiBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIGlzIG9uZSBvZjo6XFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY1OTQtXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q9NjYwMT1UaGUga3ZtX3RyYW5zZmVyX2J1ZmZlciBpczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYxMy1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjYxNDpUaGUga3ZtX21pZ3JhdGVfY21kIGlzOjpcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYxNS1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjIxLSAgICovXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0OjY2MjI6ICBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIHtcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYyMy1cXHRfX3UxNiBjb21tYW5kO1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNTA9S1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTE6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGNhcF9saXZlX21pZ3JhdGlvbilcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjE1MjpLVk1fWDg2X09QX09QVElPTkFMKG1pZ3JhdGVfY21kKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTUzOktWTV9YODZfT1BfT1BUSU9OQUwoZXhwb3J0X21lbW9yeSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjE1NDpLVk1fWDg2X09QX09QVElPTkFMKGltcG9ydF9tZW1vcnkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTU6S1ZNX1g4Nl9PUF9PUFRJT05BTChleHBvcnRfdmNwdSlcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjE1NjpLVk1fWDg2X09QX09QVElPTkFMKGltcG9ydF92Y3B1KVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTU3LSNlbmRpZlxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0xNzg1PXN0cnVjdCBrdm1feDg2X29wcyB7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwMTItXFx0aW50ICgqZ21lbV9tYXhfbWFwcGluZ19sZXZlbCkoc3RydWN0IGt2bSAqa3ZtLCBrdm1fcGZuX3QgcGZuLCBib29sIGlzX3ByaXZhdGUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxMzpcXHRib29sICgqY2FwX2xpdmVfbWlncmF0aW9uKShzdHJ1Y3Qga3ZtICprdm0pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxNDpcXHRpbnQgKCptaWdyYXRlX2NtZCkoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kICpjbWQpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxNTpcXHRpbnQgKCpleHBvcnRfbWVtb3J5KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyICptZW0pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxNjpcXHRpbnQgKCppbXBvcnRfbWVtb3J5KShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyICptZW0pO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxNzpcXHRpbnQgKCpleHBvcnRfdmNwdSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKnZjcHVfc3RhdGUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmg6MjAxODpcXHRpbnQgKCppbXBvcnRfdmNwdSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgKnZjcHVfc3RhdGUpO1xcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjAxOS19O1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTQ3Njg9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy00OTc2LVxcdGNhc2UgS1ZNX0NBUF9MSVZFX01JR1JBVElPTjpcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NDk3NzpcXHRcXHRyID0ga3ZtID8ga3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSA6IDA7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTQ5NzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NjE5Mj1zdGF0aWMgaW50IGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBib29sIGltcG9ydCxcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02MTk4LVxcbmFyY2gveDg2L2t2bS94ODYuYzo2MTk5OlxcdGlmICgha3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSB8fFxcbmFyY2gveDg2L2t2bS94ODYuYzo2MjAwOlxcdCAgICAoaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5pbXBvcnRfdmNwdSkgfHxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjIwMTpcXHQgICAgKCFpbXBvcnQgXFx1MDAyNlxcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF92Y3B1KSlcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNjIwMi1cXHRcXHRyZXR1cm4gLUVOT1RUWTtcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy02MjEwLVxcdGlmIChpbXBvcnQpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjYyMTE6XFx0XFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgXFx1MDAyNnZjcHVfc3RhdGUpO1xcbmFyY2gveDg2L2t2bS94ODYuYy02MjEyLVxcdGVsc2VcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NjIxMzpcXHRcXHRyID0ga3ZtX3g4Nl9jYWxsKGV4cG9ydF92Y3B1KSh2Y3B1LCBcXHUwMDI2dmNwdV9zdGF0ZSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTYyMTQtXFx0aWYgKHIgXFx1MDAzZSAwKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTczMDE9c3RhdGljIGludCBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbXBvcnQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzMwNi1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMwNzpcXHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMwODpcXHQgICAgKGltcG9ydCBcXHUwMDI2XFx1MDAyNiAha3ZtX3g4Nl9vcHMuaW1wb3J0X21lbW9yeSkgfHxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMwOTpcXHQgICAgKCFpbXBvcnQgXFx1MDAyNlxcdTAwMjYgIWt2bV94ODZfb3BzLmV4cG9ydF9tZW1vcnkpKVxcbmFyY2gveDg2L2t2bS94ODYuYy03MzEwLVxcdFxcdHJldHVybiAtRU5PVFRZO1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTczMTgtXFx0aWYgKGltcG9ydClcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzMxOTpcXHRcXHRyID0ga3ZtX3g4Nl9jYWxsKGltcG9ydF9tZW1vcnkpKGt2bSwgXFx1MDAyNm1lbSk7XFxuYXJjaC94ODYva3ZtL3g4Ni5jLTczMjAtXFx0ZWxzZVxcbmFyY2gveDg2L2t2bS94ODYuYzo3MzIxOlxcdFxcdHIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X21lbW9yeSkoa3ZtLCBcXHUwMDI2bWVtKTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzMyMi1cXHRpZiAociBcXHUwMDNlIDApXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9NzMzMj1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzY5MS1cXHRjYXNlIEtWTV9NSUdSQVRFX0NNRDoge1xcbmFyY2gveDg2L2t2bS94ODYuYzo3NjkyOlxcdFxcdHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQgY21kO1xcbmFyY2gveDg2L2t2bS94ODYuYy03NjkzLVxcbmFyY2gveDg2L2t2bS94ODYuYzo3Njk0OlxcdFxcdGlmICgha3ZtX3g4Nl9vcHMubWlncmF0ZV9jbWQgfHxcXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzY5NTpcXHRcXHQgICAgIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTc2OTYtXFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmMtNzcwMy1cXG5hcmNoL3g4Ni9rdm0veDg2LmM6NzcwNDpcXHRcXHRyID0ga3ZtX3g4Nl9jYWxsKG1pZ3JhdGVfY21kKShrdm0sIFxcdTAwMjZjbWQpO1xcbmFyY2gveDg2L2t2bS94ODYuYy03NzA1LVxcdFxcdGlmIChyIFxcdTAwM2UgMClcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xMjUzPXN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTM1My1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTM1NDojZGVmaW5lIEtWTV9NSUdSQVRFX0NNRFxcdFxcdCAgX0lPV1IoS1ZNSU8sIDB4ZTQsIHN0cnVjdCBrdm1fbWlncmF0ZV9jbWQpXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTEzNTUtXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9MTY4OD1zdHJ1Y3Qga3ZtX3RyYW5zZmVyX2J1ZmZlciB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY5My1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTY5NDpzdHJ1Y3Qga3ZtX21pZ3JhdGVfY21kIHtcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTY5NS1cXHRfX3UxNiBjb21tYW5kO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTo0MC44NTc2NzI3MzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNjQxNDcyMDg0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIExpdmUgTWlncmF0aW9uIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxlbWVudGF0aW9uIChvciBsYWNrIHRoZXJlb2YpIG9mIGBjYXBfbGl2ZV9taWdyYXRpb25gLiAgRmlyc3QsIEknbSBjaGVja2luZyBmb3IgaW1wbGVtZW50YXRpb25zIG9mIGBjYXBfbGl2ZV9taWdyYXRpb25gLCBgbWlncmF0ZV9jbWRgLCBgZXhwb3J0X21lbW9yeWAsIGBpbXBvcnRfbWVtb3J5YCwgYGV4cG9ydF92Y3B1YCwgYW5kIGBpbXBvcnRfdmNwdWAgd2l0aGluIHRoZSBrZXkgS1ZNIGFyY2ggZmlsZXMgbGlrZSBgdm14LmNgLCBgc3ZtLmNgLCBgdGR4LmNgLCBhbmQgYHNldi5jYC4gSSdtIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBhbnkgdmVuZG9yLXNwZWNpZmljIGltcGxlbWVudGF0aW9ucy5cblxuQSBicm9hZCBzZWFyY2ggdXNpbmcgYGdyZXBgIGFjcm9zcyB0aGUgY29kZWJhc2Ugc2hvdWxkIGJlIGRlZmluaXRpdmUuIFllcywgdGhlIGdyZXAgc2hvd2VkICphbGwqIG9jY3VycmVuY2VzIGFjcm9zcyB0aGUgKmVudGlyZSogY29kZWJhc2UsIHNvIHRoYXQgc2hvdWxkIGJlIHJlbGlhYmxlLiBOb3cgSSdtIHZlcmlmeWluZyB0aGUgZ3JlcCBwYXR0ZXJuIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIGl0J3MgY2F0Y2hpbmcgYWxsIHRoZSByZWxldmFudCBzeW1ib2xzLiBUaGUgcGF0dGVybiBgKGNhcF9saXZlX21pZ3JhdGlvbnxtaWdyYXRlX2NtZHxleHBvcnRfbWVtb3J5fGltcG9ydF9tZW1vcnl8ZXhwb3J0X3ZjcHV8aW1wb3J0X3ZjcHUpYCBzZWVtcyBjb3JyZWN0IGFuZCBpdCBvbmx5IHlpZWxkZWQgcmVmZXJlbmNlcyBpbiBkb2N1bWVudGF0aW9uLCB0aGUgaGVhZGVyIGZpbGVzIGFuZCB0aGUgeDg2IGFuZCB1YXBpIGZpbGVzLiBOb3RoaW5nIHZlbmRvci1zcGVjaWZpYy5cblxuTm93LCBhIGNydWNpYWwgcG9pbnQ6IHNpbmNlIGBjYXBfbGl2ZV9taWdyYXRpb25gIGlzIGRlZmluZWQgYXMgYEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMGAsIHRoZSByZXR1cm4gdmFsdWUgb2YgYGt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSlgIHdoZW4gbm8gdmVuZG9yIGltcGxlbWVudGF0aW9uIGlzIHByZXNlbnQgaXMgZXNzZW50aWFsbHkgMCAoZmFsc2UpIGJlY2F1c2UgaXQgZGVmYXVsdHMgdG8gTlVMTCBvciBhIHN0dWIgcmV0dXJuaW5nIDAuIFRoYXTigJlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGZsb3cuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoaXMgdmFsdWUgaXMgdXNlZC4gSW4gYGt2bV92Y3B1X2lvY3RsX3RyYW5zZmVyX3ZjcHVgLCBga3ZtX3ZtX2lvY3RsX3RyYW5zZmVyX21lbW9yeWAsIGFuZCBga3ZtX2FyY2hfdm1faW9jdGxgLCBpZiBgY2FwX2xpdmVfbWlncmF0aW9uYCBpcyB6ZXJvIChmYWxzZSksIG9yIHRoZSByZWxldmFudCBvcHMgYXJlIE5VTEwsIGl0IHJldHVybnMgLUVOT1RUWSBpbW1lZGlhdGVseS4gQW5kIHRoZSBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAganVzdCByZXR1cm5zIHRoZSB2YWx1ZSBvZiBgY2FwX2xpdmVfbWlncmF0aW9uYC4gU28gbm8gbGl2ZSBtaWdyYXRpb24gaXMgYWxsb3dlZC5cblxuV2FpdCwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBBcmUgdGhlcmUgYW55IG90aGVyIGFyY2hpdGVjdHVyZXMgYWRkaW5nIGFueXRoaW5nIGhlcmU/IExldCdzIGNoZWNrIGBhcm02NGAsIGBzMzkwYCwgb3IgYW55IG90aGVycyBmb3IgYW55IG1vZGlmaWNhdGlvbnMuXG5cbk9rYXksIHRoZSBwYXRjaCBvbmx5IHRvdWNoZXMgeDg2IHJlbGF0ZWQgZmlsZXMuIFNwZWNpZmljYWxseTogdGhlIGRvY3VtZW50YXRpb24sIHg4NiBoZWFkZXJzLCB4ODYgS1ZNIGNvZGUsIGFuZCB0aGUgVUFQSSBoZWFkZXIuXG5cbkZpbmFsbHksIGp1c3QgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUsIGxldOKAmXMgcnVuIGEgcXVpY2sgYGdpdCBsb2dgIGFuZCBgZ2l0IHN0YXR1c2AgY2hlY2sgdG8gcnVsZSBvdXQgYW55IHJlY2VudCBjb21taXRzIG9yIGxvY2FsIG1vZGlmaWNhdGlvbnMgdGhhdCBtaWdodCBub3QgYmUgcmVmbGVjdGVkIGluIHRoZSBzZWFyY2ggcmVzdWx0cy4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGlzIGhpZGluZyBpbiB0aGUgYnVzaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg2NywiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTo1Ny4yNzIzOTY1NDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTE0Nzc1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NTY1PUtWTV9TMzkwX0tFWU9QX1NTS0VcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTczLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NTc0OjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY1NzUtOkFyY2hpdGVjdHVyZXM6IHg4Nlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY1ODk9VGhlIHZlbmRvciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBoYW5kbGVzIGxvY2tpbmcgYW5kIGNoZWNrcyB0aGUgdmFsaWQgZmxhZ3NcXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjU5MDpiaXRzLiBJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpc1xcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NTkxLXJldHVybmVkLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY2MTQ9VGhlIGt2bV9taWdyYXRlX2NtZCBpczo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjYzMy1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjYzNDo6Q2FwYWJpbGl0eTogS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjM1LTpBcmNoaXRlY3R1cmVzOiB4ODZcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NjQ1PXRoZSBndWVzdC5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjY0Ni1cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3Q6NjY0NzpJZiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBWTSwgLUVOT1RUWSBpcyByZXR1cm5lZC5cXG5Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QtNjY0OC1cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02Njc1PUZvciBtZW1vcnkgaW1wb3J0LCBzZWUgYWxzbyA6cmVmOmBLVk1fSU1QT1JUX01FTU9SWSBcXHUwMDNjS1ZNX0lNUE9SVF9NRU1PUllcXHUwMDNlYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NjgyLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NjgzOjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY2ODQtOkFyY2hpdGVjdHVyZXM6IHg4Nlxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY2OTQ9dGhlIGd1ZXN0LlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02Njk1LVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2Njk2OklmIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlIFZNLCAtRU5PVFRZIGlzIHJldHVybmVkLlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02Njk3LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0PTY3MDU9Rm9yIHRoZSB0cmFuc2ZlciBidWZmZXIsIHNlZW8gOnJlZjpgS1ZNX01JR1JBVEVfQ01EIFxcdTAwM2NLVk1fTUlHUkFURV9DTURcXHUwMDNlYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NzEwLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NzExOjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY3MTItOkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODZcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD02NzM5PUZvciB2Q1BVIGltcG9ydCwgc2VlIGFsc28gOnJlZjpgS1ZNX0lNUE9SVF9WQ1BVIFxcdTAwM2NLVk1fSU1QT1JUX1ZDUFVcXHUwMDNlYC5cXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC02NzQ1LVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo2NzQ2OjpDYXBhYmlsaXR5OiBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OXFxuRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0LTY3NDctOkFyY2hpdGVjdHVyZXM6IGFybTY0LCB4ODZcXG4tLVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdD05Njg4PXN0YXJ0IGluIEVTQSBtb2RlLlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05Njg5LVxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdDo5NjkwOjguNDggS1ZNX0NBUF9MSVZFX01JR1JBVElPTlxcbkRvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdC05NjkxLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTQ3Njg9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy00OTc1LVxcdFxcdGJyZWFrO1xcbmFyY2gveDg2L2t2bS94ODYuYzo0OTc2OlxcdGNhc2UgS1ZNX0NBUF9MSVZFX01JR1JBVElPTjpcXG5hcmNoL3g4Ni9rdm0veDg2LmMtNDk3Ny1cXHRcXHRyID0ga3ZtID8ga3ZtX3g4Nl9jYWxsKGNhcF9saXZlX21pZ3JhdGlvbikoa3ZtKSA6IDA7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg9Njc0PXN0cnVjdCBrdm1fZW5hYmxlX2NhcCB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtOTk5LSNkZWZpbmUgS1ZNX0NBUF9TMzkwX0hQQUdFXzJHIDI0OVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaDoxMDAwOiNkZWZpbmUgS1ZNX0NBUF9MSVZFX01JR1JBVElPTiAyNTBcXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTAwMS1cXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9rdm0uaD0xNDQ1PXN0cnVjdCBrdm1fZW5jX3JlZ2lvbiB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgtMTQ5NS1cXG5pbmNsdWRlL3VhcGkvbGludXgva3ZtLmg6MTQ5NjovKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX0xJVkVfTUlHUkFUSU9OICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oLTE0OTctI2RlZmluZSBLVk1fRVhQT1JUX01FTU9SWVxcdCAgX0lPV1IoS1ZNSU8sIDB4ZTUsIHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzoyOTo1OC44MTE1NTI1OTlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDQwMTgxNDM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBLVk1fWDg2X09QX09QVElPTkFMX1JFVDBgIHRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3Igd2l0aGluIHRoZSBLVk0geDg2IGFyY2hpdGVjdHVyZS4gSSdsbCBzdGFydCBieSBkb2luZyBhIHF1aWNrIGdyZXAgd2l0aGluIHRoZSBgYXJjaC94ODYvYCBkaXJlY3RvcnkuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcgb2Ygd2hlcmUgdGhpcyBtYWNybyBpcyB1c2VkIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIEtWTSBpbXBsZW1lbnRhdGlvbi4gSG9wZWZ1bGx5LCB0aGUgcmVzdWx0cyB3aWxsIHBvaW50IG1lIHRvd2FyZHMgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMgYW5kIGFsbG93IG1lIHRvIHVucmF2ZWwgaXRzIGZ1bmN0aW9uIHdpdGhpbiB0aGUgeDg2IHZpcnR1YWxpemF0aW9uIGNvbnRleHQuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzQ4LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MzA6MDEuMjUxNzM2ODc3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNzI4ODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4NlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTMtICAgICFkZWZpbmVkKEtWTV9YODZfT1BfT1BUSU9OQUwpIHx8IFxcXFxcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjQ6ICAgICFkZWZpbmVkKEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMClcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTUtI2Vycm9yIE1pc3Npbmcgb25lIG9yIG1vcmUgS1ZNX1g4Nl9PUCAjZGVmaW5lc1xcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMi0gKiBLVk1fWDg2X09QX09QVElPTkFMKCkgY2FuIGJlIHVzZWQgZm9yIHRob3NlIGZ1bmN0aW9ucyB0aGF0IGNhbiBoYXZlXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxMzogKiBhIE5VTEwgZGVmaW5pdGlvbi4gIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMCgpIGNhbiBiZSB1c2VkIGxpa2V3aXNlXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xNC0gKiB0byBtYWtlIGEgZGVmaW5pdGlvbiBvcHRpb25hbCwgYnV0IGluIHRoaXMgY2FzZSB0aGUgZGVmYXVsdCB3aWxsXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oPTI1PUtWTV9YODZfT1BfT1BUSU9OQUwodm1fcHJlX2Rlc3Ryb3kpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoyNjpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodmNwdV9wcmVjcmVhdGUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0yNy1LVk1fWDg2X09QKHZjcHVfY3JlYXRlKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD03NT1LVk1fWDg2X09QKGluamVjdF9ubWkpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo3NjpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoaXNfdm5taV9wZW5kaW5nKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6Nzc6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF92bm1pX3BlbmRpbmcpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC03OC1LVk1fWDg2X09QKGluamVjdF9leGNlcHRpb24pXFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oPTkzPUtWTV9YODZfT1BfT1BUSU9OQUwoc3luY19waXJfdG9faXJyKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6OTQ6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHNldF90c3NfYWRkcilcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oOjk1OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChzZXRfaWRlbnRpdHlfbWFwX2FkZHIpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo5NjpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZ2V0X210X21hc2spXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo5NzpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAodGRwX2hhc19zbWVwKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtOTgtS1ZNX1g4Nl9PUChsb2FkX21tdV9wZ2QpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDo5OTpLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoc2V0X2V4dGVybmFsX3NwdGUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMDAtS1ZNX1g4Nl9PUF9PUFRJT05BTChmcmVlX2V4dGVybmFsX3NwdClcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg9MTE2PUtWTV9YODZfT1BfT1BUSU9OQUwoYXBpY3ZfcG9zdF9zdGF0ZV9yZXN0b3JlKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTE3OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChkeV9hcGljdl9oYXNfcGVuZGluZ19pbnRlcnJ1cHQpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xMTgtS1ZNX1g4Nl9PUF9PUFRJT05BTChwcm90ZWN0ZWRfYXBpY19oYXNfaW50ZXJydXB0KVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNDQ9S1ZNX1g4Nl9PUCh2Y3B1X2RlbGl2ZXJfc2lwaV92ZWN0b3IpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNDU6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKHZjcHVfZ2V0X2FwaWN2X2luaGliaXRfcmVhc29ucyk7XFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xNDYtS1ZNX1g4Nl9PUF9PUFRJT05BTChnZXRfdW50YWdnZWRfYWRkcilcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oPTE0Nz1LVk1fWDg2X09QX09QVElPTkFMKGFsbG9jX2FwaWNfYmFja2luZ19wYWdlKVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmg6MTQ4OktWTV9YODZfT1BfT1BUSU9OQUxfUkVUMChnbWVtX3ByZXBhcmUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNDk6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGdtZW1fbWF4X21hcHBpbmdfbGV2ZWwpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaC0xNTAtS1ZNX1g4Nl9PUF9PUFRJT05BTChnbWVtX2ludmFsaWRhdGUpXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNTE6S1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGNhcF9saXZlX21pZ3JhdGlvbilcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm0teDg2LW9wcy5oLTE1Mi1LVk1fWDg2X09QX09QVElPTkFMKG1pZ3JhdGVfY21kKVxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaD0xNTY9S1ZNX1g4Nl9PUF9PUFRJT05BTChpbXBvcnRfdmNwdSlcXG4tLVxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bS14ODYtb3BzLmgtMTYwLSN1bmRlZiBLVk1fWDg2X09QX09QVElPTkFMXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtLXg4Ni1vcHMuaDoxNjE6I3VuZGVmIEtWTV9YODZfT1BfT1BUSU9OQUxfUkVUMFxcbi0tXFxuYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaD0yMDY4PWV4dGVybiBzdHJ1Y3Qga3ZtX3g4Nl9vcHMga3ZtX3g4Nl9vcHM7XFxuLS1cXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oLTIwNzQtI2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMIEtWTV9YODZfT1BcXG5hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oOjIwNzU6I2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9PUFxcbmFyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgtMjA3Ni0jaW5jbHVkZSBcXHUwMDNjYXNtL2t2bS14ODYtb3BzLmhcXHUwMDNlXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9MTQzPXN0cnVjdCBrdm1feDg2X29wcyBrdm1feDg2X29wcyBfX3JlYWRfbW9zdGx5O1xcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTE0OC0jZGVmaW5lIEtWTV9YODZfT1BfT1BUSU9OQUwgS1ZNX1g4Nl9PUFxcbmFyY2gveDg2L2t2bS94ODYuYzoxNDk6I2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAgS1ZNX1g4Nl9PUFxcbmFyY2gveDg2L2t2bS94ODYuYy0xNTAtI2luY2x1ZGUgXFx1MDAzY2FzbS9rdm0teDg2LW9wcy5oXFx1MDAzZVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTEwMTE5PXN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fb3BzX3VwZGF0ZShzdHJ1Y3Qga3ZtX3g4Nl9pbml0X29wcyAqb3BzKVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTEwMTI3LSNkZWZpbmUgS1ZNX1g4Nl9PUF9PUFRJT05BTCBfX0tWTV9YODZfT1BcXG5hcmNoL3g4Ni9rdm0veDg2LmM6MTAxMjg6I2RlZmluZSBLVk1fWDg2X09QX09QVElPTkFMX1JFVDAoZnVuYykgXFxcXFxcbmFyY2gveDg2L2t2bS94ODYuYy0xMDEyOS1cXHRzdGF0aWNfY2FsbF91cGRhdGUoa3ZtX3g4Nl8jI2Z1bmMsICh2b2lkICopa3ZtX3g4Nl9vcHMuZnVuYyA/IDogXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzozMDowMS4zMTI0NjkzMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo5MzU2NDkyMTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtWTSBMaXZlIE1pZ3JhdGlvbiBJb2N0bCBQbHVtYmluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIGludHJvZHVjaW5nIHRoZSBwbHVtYmluZyBmb3IgbGl2ZSBtaWdyYXRpb24gaW9jdGxzLCBzcGVjaWZpY2FsbHkgZm9yIGNvbmZpZGVudGlhbCBjb21wdXRpbmcgZmVhdHVyZXMgbGlrZSBURFgvU0VWLVNOUCwgd2l0aGluIHRoZSBLVk0gWDg2IGZyYW1ld29yay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBvZiBgS1ZNX1g4Nl9PUF9PUFRJT05BTF9SRVQwKGNhcF9saXZlX21pZ3JhdGlvbilgLiAgV2Uga25vdywgZnJvbSB0aGUgY29kZSwgdGhhdCBga3ZtX3g4Nl9vcHMuY2FwX2xpdmVfbWlncmF0aW9uYCBpcyBjdXJyZW50bHkgTlVMTCwgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIHN0YXRlIGZvciBib3RoIEludGVsIGFuZCBBTUQgYXQgdGhpcyBzdGFnZSwgc2luY2UgbmVpdGhlciB2bXggbm9yIHN2bSBoYXZlIGltcGxlbWVudGVkIGl0LiBUaGlzIHJlc3VsdHMgaW4gYHN0YXRpY19jYWxsKGt2bV94ODZfY2FwX2xpdmVfbWlncmF0aW9uKWAgY2FsbGluZyBhIHN0dWIgdGhhdCByZXR1cm5zIDAuXG5cbk5vdywgbGV0J3Mgc2VlIHdoZXJlIHRoYXQgcmV0dXJuIHZhbHVlIG9mIDAgZnJvbSBgY2FwX2xpdmVfbWlncmF0aW9uKGt2bSlgIGxhbmRzLiBMb29raW5nIGF0IGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCwgd2UgaGF2ZSBhIGRpcmVjdCByZXR1cm4gb2YgMCwgd2hpY2ggaXMgc2ltcGxlIGVub3VnaC4gIGBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1YCwgYGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnlgLCBhbmQgYGt2bV9hcmNoX3ZtX2lvY3RsYCBhbGwgY29udGFpbiBjaGVja3MgbGlrZSBgIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSlgLCBhbmQgc2luY2UgYGNhcF9saXZlX21pZ3JhdGlvbmAgcmV0dXJucyAwLCB0aGUgY29kZSBpbW1lZGlhdGVseSByZXR1cm5zIGAtRU5PVFRZYCBpbiBhbGwgdGhlc2UgY2FzZXMuICBcblxuTXkgbmV4dCBzdGVwIGlzIHRvIHZlcmlmeSB0aGlzIHRob3JvdWdoIGEgZ3JlcCBvZiB0aGUgZW50aXJlIGNvZGViYXNlIGFuZCBlbnN1cmUgdGhlcmUgYXJlIG5vIG90aGVyIHBsYWNlcyB3aGVyZSBga3ZtX3g4Nl9vcHMubWlncmF0ZV9jbWRgLCBga3ZtX3g4Nl9vcHMuZXhwb3J0X21lbW9yeWAsIGBrdm1feDg2X29wcy5pbXBvcnRfbWVtb3J5YCwgYGt2bV94ODZfb3BzLmV4cG9ydF92Y3B1YCwgYGt2bV94ODZfb3BzLmltcG9ydF92Y3B1YCBvciBga3ZtX3g4Nl9vcHMuY2FwX2xpdmVfbWlncmF0aW9uYCBhcmUgKmFjdHVhbGx5KiBzZXQuIEFuZCB3ZSd2ZSBhbHJlYWR5IGRvbmUgdGhhdCwgY29uZmlybWluZyBubyBvdGhlciBvY2N1cnJlbmNlcy4gVGhpcywgYXMgSSBleHBlY3RlZCwgc3VnZ2VzdHMgdGhpcyBwYXRjaCBpcyAqb25seSogc2V0dGluZyB1cCB0aGUgaW50ZXJmYWNlLCB0aGUgaW9jdGwgZGVmaW5pdGlvbnMsIGFuZCB0aGUgaW5pdGlhbCBkaXNwYXRjaGVyIHN0cnVjdHVyZSBidXQgZG9lc24ndCBpbmNsdWRlIGFueSB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIHlldC5cblxuTm93LCBhIGtleSBxdWVzdGlvbjogY2FuICphbnkqIHVzZXItcHJvdmlkZWQgaW5wdXQgZXZlbiAqdG91Y2gqIGNvZGUgYmV5b25kIHRoYXQgaW5pdGlhbCBjaGVjaz8gIExvb2tpbmcgZGVlcGVyIGF0IGBrdm1fdmNwdV9pb2N0bF90cmFuc2Zlcl92Y3B1YCwgaXQncyBjbGVhciB0aGUgY2hlY2sgaXMgYXQgdGhlIHZlcnkgdG9wIG9mIHRoZSBmdW5jdGlvbiwgYmVmb3JlIGFueSBgY29weV9mcm9tX3VzZXJgIG9yIG90aGVyIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgY29kZS4gVGhlIHNhbWUgaG9sZHMgdHJ1ZSBmb3IgYGt2bV92bV9pb2N0bF90cmFuc2Zlcl9tZW1vcnlgIGFuZCBgS1ZNX01JR1JBVEVfQ01EYC4gIFRoZSBjcnVjaWFsIGNoZWNrIGhhcHBlbnMgaW1tZWRpYXRlbHksIGVuc3VyaW5nIGAtRU5PVFRZYCBpcyByZXR1cm5lZCBiZWZvcmUgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZy5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgZ3VpZGVsaW5lcyBmb3IgXCJXb3J0aEZ1enppbmdcIiB0byBjb25maXJtIG91ciBhc3N1bXB0aW9ucyBoZXJlLiBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzIGxpa2UgbG9nZ2luZywgY2hhbmdlcyB0byBjb25zdGFudHMgdGhhdCBkb24ndCBhbHRlciBleGVjdXRpb24sIG9yIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgYWxsIGdldCBhIFdvcnRoRnV6emluZz1mYWxzZS4gSGVyZSwgaXQgaXMgY2xlYXIgdGhhdCB0aGUgbmV3IGlvY3RscyBhcmUgc3R1YmJlZCBhbmQgdW5yZWFjaGFibGUgc2luY2UgYGNhcF9saXZlX21pZ3JhdGlvbmAgYW5kIG90aGVyIHZlbmRvciBob29rcyBhcmUgbm90IGltcGxlbWVudGVkLiBUaGUgY29kZSBpcyBzdHJ1Y3R1cmVkIGluIGEgd2F5IHRoYXQgcmV0dXJucyBiZWZvcmUgdGhlIGV4ZWN1dGlvbiBvZiBjb3JlIGxvZ2ljIG9yIGhhbmRsaW5nIG9mIHVzZXIgaW5wdXRzLlxuXG5Gb3IgYWRkZWQgYXNzdXJhbmNlLCBsZXQncyB2ZXJpZnkgd2l0aCBgcmVhZC1maWxlYCBvbiBgYXJjaC94ODYva3ZtL3g4Ni5jYCwgYXJvdW5kIHRob3NlIGZ1bmN0aW9ucywganVzdCB0byAxMDAlIGVuc3VyZSB3ZSBtaXNzZWQgbm90aGluZy5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGludHJvZHVjZXMgdW5yZWFjaGFibGUgaW9jdGxzIGFuZCBzdHVicyBmb3IgZnV0dXJlIGltcGxlbWVudGF0aW9uLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBcIldvcnRoRnV6emluZz1mYWxzZVwiIHNjZW5hcmlvLiBUaGlzIHBhdGNoIGRvZXNuJ3QgZXhwb3NlIGFueSBuZXcgYXR0YWNrIHN1cmZhY2VzIGFuZCB3aWxsIGxpa2VseSBiZSB3b3J0aCByZS1ldmFsdWF0aW5nIHdoZW4gdGhlIHZlbmRvci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgYXJlIGFkZGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE0OSwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MzA6MTAuNjY4OTYzNDc3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rdm0veDg2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjE5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjE5MDpcXHR9XFxuNjE5MTpcXHRcXG42MTkyOlxcdHN0YXRpYyBpbnQga3ZtX3ZjcHVfaW9jdGxfdHJhbnNmZXJfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGJvb2wgaW1wb3J0LFxcbjYxOTM6XFx0XFx0XFx0XFx0XFx0XFx0dm9pZCBfX3VzZXIgKmFyZ3ApXFxuNjE5NDpcXHR7XFxuNjE5NTpcXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHVfdHJhbnNmZXIgdmNwdV9zdGF0ZTtcXG42MTk2OlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtXFx1MDAzZWt2bTtcXG42MTk3OlxcdFxcdGludCByO1xcbjYxOTg6XFx0XFxuNjE5OTpcXHRcXHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcXG42MjAwOlxcdFxcdCAgICAoaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5pbXBvcnRfdmNwdSkgfHxcXG42MjAxOlxcdFxcdCAgICAoIWltcG9ydCBcXHUwMDI2XFx1MDAyNiAha3ZtX3g4Nl9vcHMuZXhwb3J0X3ZjcHUpKVxcbjYyMDI6XFx0XFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuNjIwMzpcXHRcXG42MjA0OlxcdFxcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2dmNwdV9zdGF0ZSwgYXJncCwgc2l6ZW9mKHZjcHVfc3RhdGUpKSlcXG42MjA1OlxcdFxcdFxcdHJldHVybiAtRUZBVUxUO1xcbjYyMDY6XFx0XFxuNjIwNzpcXHRcXHRpZiAodmNwdV9zdGF0ZS5yZXNlcnZlZCB8fCB2Y3B1X3N0YXRlLmJ1Zi5yZXNlcnZlZClcXG42MjA4OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjYyMDk6XFx0XFxuNjIxMDpcXHRcXHRpZiAoaW1wb3J0KVxcbjYyMTE6XFx0XFx0XFx0ciA9IGt2bV94ODZfY2FsbChpbXBvcnRfdmNwdSkodmNwdSwgXFx1MDAyNnZjcHVfc3RhdGUpO1xcbjYyMTI6XFx0XFx0ZWxzZVxcbjYyMTM6XFx0XFx0XFx0ciA9IGt2bV94ODZfY2FsbChleHBvcnRfdmNwdSkodmNwdSwgXFx1MDAyNnZjcHVfc3RhdGUpO1xcbjYyMTQ6XFx0XFx0aWYgKHIgXFx1MDAzZSAwKVxcbjYyMTU6XFx0XFx0XFx0ciA9IC1FSU87XFxuNjIxNjpcXHRcXG42MjE3OlxcdFxcdC8qIENvcHkgYmFjayBhbHNvIG9uIGFuIGVycm9yIHRvIHJlcG9ydCBhIHBhcnRpYWxseSBkb25lIHRyYW5zZmVyICovXFxuNjIxODpcXHRcXHRpZiAoY29weV90b191c2VyKGFyZ3AsIFxcdTAwMjZ2Y3B1X3N0YXRlLCBzaXplb2YodmNwdV9zdGF0ZSkpKVxcbjYyMTk6XFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuNjIyMDpcXHRcXG42MjIxOlxcdFxcdHJldHVybiByO1xcbjYyMjI6XFx0fVxcbjYyMjM6XFx0XFxuNjIyNDpcXHRsb25nIGt2bV9hcmNoX3ZjcHVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsXFxuNjIyNTpcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG42MjI2OlxcdHtcXG42MjI3OlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG42MjI4OlxcdFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbjYyMjk6XFx0XFx0aW50IHI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjMwOjEwLjY2OTY0ODc3N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Nzc1MzQ0MTYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBjb2RlIGxvY2F0aW9ucywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRleHQsIGFzIHRob3VnaCB0aGV5IHdlcmUgbXkgaW1tZWRpYXRlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBQb3RlbnRpYWwgS1ZNIHg4NiBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IEtWTSdzIHg4NiBjb2RlLCBhbmQgSSBuZWVkIHRvIGhvbmUgaW4gb24gYSBjb3VwbGUgb2Ygc3BlY2lmaWMgYXJlYXMuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgaW50ZXJlc3RpbmcgaGFwcGVuaW5nIGFyb3VuZCBsaW5lcyBgNzMwMC03MzQwYCBhbmQgdGhlbiBhbHNvIGA3NjkwLTc3MjBgIGluIGBhcmNoL3g4Ni9rdm0veDg2LmNgLiBJIGhhdmUgYSBmZWVsaW5nIHRob3NlIHNlY3Rpb25zIGFyZSBoYW5kbGluZyBhIGNydWNpYWwgcGFydCBvZiB0aGUgeDg2IGVtdWxhdGlvbiBvciBoYXJkd2FyZSBpbnRlcmFjdGlvbiwgYW5kIGFueSBzdWJ0bGUgZmxhd3MgaW4gdGhlIGxvZ2ljIHRoZXJlIGNvdWxkIGxlYWQgdG8gcG90ZW50aWFsIGV4cGxvaXRzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbiBpbiB0aG9zZSBjaHVua3Mgb2YgY29kZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiBhbmQgYW55IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTM1LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQwNzozMDoxNi40NDQ5OTQ5NTlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzI2NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS94ODYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MzAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3MzAwOlxcdFxcbjczMDE6XFx0c3RhdGljIGludCBrdm1fdm1faW9jdGxfdHJhbnNmZXJfbWVtb3J5KHN0cnVjdCBrdm0gKmt2bSwgYm9vbCBpbXBvcnQsXFxuNzMwMjpcXHRcXHRcXHRcXHRcXHRcXHR2b2lkIF9fdXNlciAqYXJncClcXG43MzAzOlxcdHtcXG43MzA0OlxcdFxcdHN0cnVjdCBrdm1fbWVtb3J5X3RyYW5zZmVyIG1lbTtcXG43MzA1OlxcdFxcdGludCByO1xcbjczMDY6XFx0XFxuNzMwNzpcXHRcXHRpZiAoIWt2bV94ODZfY2FsbChjYXBfbGl2ZV9taWdyYXRpb24pKGt2bSkgfHxcXG43MzA4OlxcdFxcdCAgICAoaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5pbXBvcnRfbWVtb3J5KSB8fFxcbjczMDk6XFx0XFx0ICAgICghaW1wb3J0IFxcdTAwMjZcXHUwMDI2ICFrdm1feDg2X29wcy5leHBvcnRfbWVtb3J5KSlcXG43MzEwOlxcdFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbjczMTE6XFx0XFxuNzMxMjpcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNm1lbSwgYXJncCwgc2l6ZW9mKG1lbSkpKVxcbjczMTM6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuNzMxNDpcXHRcXG43MzE1OlxcdFxcdGlmIChtZW0ucmVzZXJ2ZWQgfHwgbWVtLmJ1Zi5yZXNlcnZlZCB8fCAhbWVtLm5yX2dmbnMpXFxuNzMxNjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG43MzE3OlxcdFxcbjczMTg6XFx0XFx0aWYgKGltcG9ydClcXG43MzE5OlxcdFxcdFxcdHIgPSBrdm1feDg2X2NhbGwoaW1wb3J0X21lbW9yeSkoa3ZtLCBcXHUwMDI2bWVtKTtcXG43MzIwOlxcdFxcdGVsc2VcXG43MzIxOlxcdFxcdFxcdHIgPSBrdm1feDg2X2NhbGwoZXhwb3J0X21lbW9yeSkoa3ZtLCBcXHUwMDI2bWVtKTtcXG43MzIyOlxcdFxcdGlmIChyIFxcdTAwM2UgMClcXG43MzIzOlxcdFxcdFxcdHIgPSAtRUlPO1xcbjczMjQ6XFx0XFxuNzMyNTpcXHRcXHQvKiBDb3B5IGJhY2sgYWxzbyBvbiBhbiBlcnJvciB0byByZXBvcnQgYSBwYXJ0aWFsbHkgZG9uZSB0cmFuc2ZlciAqL1xcbjczMjY6XFx0XFx0aWYgKGNvcHlfdG9fdXNlcihhcmdwLCBcXHUwMDI2bWVtLCBzaXplb2YobWVtKSkpXFxuNzMyNzpcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG43MzI4OlxcdFxcbjczMjk6XFx0XFx0cmV0dXJuIHI7XFxuNzMzMDpcXHR9XFxuNzMzMTpcXHRcXG43MzMyOlxcdGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG43MzMzOlxcdHtcXG43MzM0OlxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG43MzM1OlxcdFxcdHZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnO1xcbjczMzY6XFx0XFx0aW50IHIgPSAtRU5PVFRZO1xcbjczMzc6XFx0XFxuNzMzODpcXHQjaWZkZWYgQ09ORklHX0tWTV9JT0FQSUNcXG43MzM5OlxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDA3OjMwOjE2LjQ0NTcyMzExOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTIyNDkwODkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEtWTSBMaXZlIE1pZ3JhdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaCByZWxhdGVkIHRvIEtWTSBsaXZlIG1pZ3JhdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgY29kZSAqaW50cm9kdWNlcyogdGhlIG5lY2Vzc2FyeSBmZWF0dXJlcywgc3BlY2lmaWNhbGx5IHRoZSBgS1ZNX0NBUF9MSVZFX01JR1JBVElPTmAgY2FwYWJpbGl0eSBhbmQgdGhlIGFzc29jaWF0ZWQgaW9jdGxzOiBgS1ZNX01JR1JBVEVfQ01EYCwgYEtWTV9FWFBPUlRfTUVNT1JZYCwgYEtWTV9JTVBPUlRfTUVNT1JZYCwgYEtWTV9FWFBPUlRfVkNQVWAsIGFuZCBgS1ZNX0lNUE9SVF9WQ1BVYC4gVGhhdCdzIHRoZSB0aGVvcnksIGFueXdheS5cblxuQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiBpdCwgKm5vKiB2ZW5kb3IgYmFja2VuZCwgYXQgbGVhc3Qgd2l0aGluIHRoZSBzY29wZSBvZiB0aGlzIHBhcnRpY3VsYXIgdHJlZSwgYWN0dWFsbHkgKmltcGxlbWVudHMqIGBjYXBfbGl2ZV9taWdyYXRpb25gIG9yIGFueSBvZiB0aGUgbWlncmF0aW9uIGNhbGxiYWNrcy4gTWVhbmluZywgY2hlY2tpbmcgZm9yIHRoYXQgY2FwYWJpbGl0eSwgb3IgZXZlbiB0cnlpbmcgdG8gY2FsbCB0aG9zZSBuZXcgaW9jdGxzLCB3aWxsIGltbWVkaWF0ZWx5IGJhaWwgb3V0LiBUaGUgcmVzdWx0IHdpbGwgZWl0aGVyIGJlIGEgYDBgIG9yIGFuIGAtRU5PVFRZYCBlcnJvci4gRnJvbSBhIGZ1bmN0aW9uYWwgcGVyc3BlY3RpdmUsIHRoaXMgdHJhbnNsYXRlcyB0byBhYnNvbHV0ZWx5ICpub3RoaW5nKiBpbiB0aGUgdW5kZXJseWluZyBsb2dpYyBiZWluZyByZWFjaGFibGUsIGxldCBhbG9uZSBleGVjdXRhYmxlLiBJdCdzIGEgZGVhZCBlbmQuXG5cblRoZXJlZm9yZSwgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIHRoaXMgcGF0Y2ggaXMgYSBub24tc3RhcnRlci4gVGhlcmUncyBubyB2YWx1ZSBpbiB0cnlpbmcgdG8gcG9rZSBhcm91bmQgdGhpcyBhcmVhIGFzLWlzLiBJdCdzIG5vdCB3b3J0aCB0aGUgZWZmb3J0LlxuXG5UaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwMzcsIk91dHB1dFRva2VucyI6MTY4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MzA6MTkuOTY4MjE2NjA5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBLVk0gbGl2ZSBtaWdyYXRpb24gaW9jdGxzIChLVk1fTUlHUkFURV9DTUQsIEtWTV9FWFBPUlRfTUVNT1JZLCBLVk1fSU1QT1JUX01FTU9SWSwgS1ZNX0VYUE9SVF9WQ1BVLCBLVk1fSU1QT1JUX1ZDUFUpIGFuZCBjYXBhYmlsaXR5IEtWTV9DQVBfTElWRV9NSUdSQVRJT04sIGFsb25nIHdpdGggZGlzcGF0Y2hlciBob29rcyBpbiBrdm1feDg2X29wcy4gSG93ZXZlciwgbm8gdmVuZG9yIGJhY2tlbmQgaW1wbGVtZW50cyBjYXBfbGl2ZV9taWdyYXRpb24gb3IgYW55IG9mIHRoZSBtaWdyYXRpb24gY2FsbGJhY2tzLiBBcyBhIHJlc3VsdCwgYWxsIG5ldyBpb2N0bHMgaW1tZWRpYXRlbHkgcmV0dXJuIC1FTk9UVFkgYW5kIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gY2hlY2tzIHJldHVybiAwLCBtYWtpbmcgdGhlIGhhbmRsZXIgbG9naWMgdW5yZWFjaGFibGUgYW5kIG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBLVk0gbGl2ZSBtaWdyYXRpb24gaW9jdGxzIChLVk1fTUlHUkFURV9DTUQsIEtWTV9FWFBPUlRfTUVNT1JZLCBLVk1fSU1QT1JUX01FTU9SWSwgS1ZNX0VYUE9SVF9WQ1BVLCBLVk1fSU1QT1JUX1ZDUFUpIGFuZCBjYXBhYmlsaXR5IEtWTV9DQVBfTElWRV9NSUdSQVRJT04sIGFsb25nIHdpdGggZGlzcGF0Y2hlciBob29rcyBpbiBrdm1feDg2X29wcy4gSG93ZXZlciwgbm8gdmVuZG9yIGJhY2tlbmQgaW1wbGVtZW50cyBjYXBfbGl2ZV9taWdyYXRpb24gb3IgYW55IG9mIHRoZSBtaWdyYXRpb24gY2FsbGJhY2tzLiBBcyBhIHJlc3VsdCwgYWxsIG5ldyBpb2N0bHMgaW1tZWRpYXRlbHkgcmV0dXJuIC1FTk9UVFkgYW5kIEtWTV9DQVBfTElWRV9NSUdSQVRJT04gY2hlY2tzIHJldHVybiAwLCBtYWtpbmcgdGhlIGhhbmRsZXIgbG9naWMgdW5yZWFjaGFibGUgYW5kIG5vdCB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMDc6MzA6MTkuOTY4MjQyNDc5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowb4wlr[1] Phase: Running StartedAt: 2026-08-31 07:30:31 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowb4wlr[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-31 07:30:31 +0000 UTC FinishedAt: 2026-08-31 07:30:36 +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,}