IyMjIHVWaXNpb24yIFByb2plY3QsIChDKSBLZWlsIFNvZnR3YXJlDQojIyMgRG8gbm90IG1vZGlmeSAhDQoNClRhcmdldCAoTE0zUzF4eCksIDB4MDAwNCAvLyBUb29sczogJ0FSTS1BRFMnDQoNCkdyb3VwIChTb3VyY2UpDQpHcm91cCAoRGVtbykNCg0KRmlsZSAxLDEsPC4uXC4uXFNvdXJjZVxjcm91dGluZS5jPjxjcm91dGluZS5jPg0KRmlsZSAxLDEsPC4uXC4uXFNvdXJjZVxsaXN0LmM+PGxpc3QuYz4NCkZpbGUgMSwxLDwuLlwuLlxTb3VyY2VccXVldWUuYz48cXVldWUuYz4NCkZpbGUgMSwxLDwuLlwuLlxTb3VyY2VcdGFza3MuYz48dGFza3MuYz4NCkZpbGUgMSwxLDwuLlwuLlxTb3VyY2VccG9ydGFibGVcTWVtTWFuZ1xoZWFwXzEuYz48aGVhcF8xLmM+DQpGaWxlIDEsMSw8Li5cLi5cU291cmNlXHBvcnRhYmxlXFJWRFNcQVJNX0NNM1xwb3J0LmM+PHBvcnQuYz4NCkZpbGUgMiwxLDwuXG1haW4uYz48bWFpbi5jPg0KRmlsZSAyLDIsPC5caW5pdFxTdGFydHVwLnM+PFN0YXJ0dXAucz4NCkZpbGUgMiwxLDwuLlxDb21tb25cTWluaW1hbFxjcmZsYXNoLmM+PGNyZmxhc2guYz4NCkZpbGUgMiwxLDwuXFBhclRlc3RcUGFyVGVzdC5jPjxQYXJUZXN0LmM+DQpGaWxlIDIsMSw8LlxpbmNsdWRlXHBkYy5jPjxwZGMuYz4NCkZpbGUgMiw0LDwuLlxDb21tb25cZHJpdmVyc1xMdW1pbmFyeU1pY3JvXEtlaWxcZHJpdmVybGliLmxpYj48ZHJpdmVybGliLmxpYj4NCg0KDQpPcHRpb25zIDEsMCwwICAvLyBUYXJnZXQgJ0xNM1MxeHgnDQogRGV2aWNlIChMTTNTMTAxKQ0KIFZlbmRvciAoTHVtaW5hcnkgTWljcm8pDQogQ3B1IChJUkFNKDB4MjAwMDAwMDAtMHgyMDAwMDdGRikgSVJPTSgwLTB4MUZGRikgQ0xPQ0soMjAwMDAwMDApIENQVVRZUEUoIkNvcnRleC1NMyIpKQ0KIEZsYXNoVXQgKCkNCiBTdHVwRiAoIlNUQVJUVVBcTHVtaW5hcnlcU3RhcnR1cC5zIiAoIkx1bWluYXJ5IFN0YXJ0dXAgQ29kZSIpKQ0KIEZsYXNoRFIgKFVMMkNNMygtVTQwMjk2NDIwIC1PNyAtUzAgLUMwIC1GTzcgLUZEMjAwMDAwMDAgLUZDODAwIC1GTjEgLUZGMExNM1NfOCAtRlMwMCAtRkwwMjAwMCkpDQogRGV2SUQgKDQwNzkpDQogUmdmIChMTTNTeHh4LkgpDQogTWVtICgpDQogQyAoKQ0KIEEgKCkNCiBSTCAoKQ0KIE9IICgpDQogREJDX0lGWCAoKQ0KIERCQ19DTVMgKCkNCiBEQkNfQU1TICgpDQogREJDX0xNUyAoKQ0KIFVzZUVudj0wDQogRW52QmluICgpDQogRW52SW5jICgpDQogRW52TGliICgpDQogRW52UmVnICj/THVtaW5hcnlcKQ0KIE9yZ1JlZyAo/0x1bWluYXJ5XCkNCiBUZ1N0YXQ9MTYNCiBPdXREaXIgKC5cdXZpc2lvblwpDQogT3V0TmFtZSAoUlRPU0RlbW8pDQogR2VuQXBwPTENCiBHZW5MaWI9MA0KIEdlbkhleD0wDQogRGVidWc9MQ0KIEJyb3dzZT0xDQogTHN0RGlyICguXHV2aXNpb25cKQ0KIEhleFNlbD0xDQogTUczMks9MA0KIFRHTU9SRT0wDQogUnVuVXNyIDAgMCA8Pg0KIFJ1blVzciAxIDAgPD4NCiBCcnVuVXNyIDAgMCA8Pg0KIEJydW5Vc3IgMSAwIDw+DQogQ3J1blVzciAwIDAgPD4NCiBDcnVuVXNyIDEgMCA8Pg0KIFNWQ1NJRCA8Pg0KIEdMRkxBR1M9MTc5MA0KIEFEU0ZMR0EgeyAyNDMsMzEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIEFDUFVUWVAgKCJDb3J0ZXgtTTMiKQ0KIFJWREVWICgpDQogQURTVEZMR0EgeyAwLDEyLDAsMiw5OSwwLDAsNjYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIE9DTUFEU09DTSB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBPQ01BRFNJUkFNIHsgMCwwLDAsMCwzMiwwLDgsMCwwIH0NCiBPQ01BRFNJUk9NIHsgMSwwLDAsMCwwLDAsMzIsMCwwIH0NCiBPQ01BRFNYUkFNIHsgMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIE9DUl9SVkNUIHsgMSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMzIsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMzIsMCw4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogUlZfU1RBVkVDICgpDQogQURTQ0NGTEcgeyA4LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIEFEU0NNSVNDICgpDQogQURTQ0RFRk4gKFJWRFNfQVJNQ00zX0xNM1MxMDIpDQogQURTQ1VERUYgKCkNCiBBRFNDSU5DRCAoQzpcS2VpbFxBUk1cUlYzMFxMSUJcTHVtaW5hcnk7Li5cQ09SVEVYX0xNM1MxMDJfS0VJTDsuLlwuLlxTb3VyY2VccG9ydGFibGVcUlZEU1xBUk1fQ00zOy4uXC4uXFNvdXJjZVxpbmNsdWRlOy4uXENvbW1vblxpbmNsdWRlOy5caW5jbHVkZSkNCiBBRFNBU0ZMRyB7IDY1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIEFEU0FNSVNDICgtLWRpYWdfc3VwcHJlc3MgMTU4MSkNCiBBRFNBREVGTiAoKQ0KIEFEU0FVREVGICgpDQogQURTQUlOQ0QgKCkNCiBQcm9wRmxkIHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBJbmNCbGQ9MQ0KIEFsd2F5c0J1aWxkPTANCiBHZW5Bc209MA0KIEFzbUFzbT0wDQogUHVibGljc09ubHk9MA0KIFN0b3BDb2RlPTMNCiBDdXN0QXJncyAoKQ0KIExpYk1vZHMgKCkNCiBBRFNMREZHIHsgMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogQURTTERUQSAoMHgwMDAwMDAwMCkNCiBBRFNMRERBICgweDIwMDAwMDAwKQ0KIEFEU0xEU0MgKCkNCiBBRFNMRElCICgpDQogQURTTERJQyAoKQ0KIEFEU0xETUMgKC0tZW50cnkgUmVzZXRfSGFuZGxlcikNCiBBRFNMRElGICgpDQogQURTTEREVyAoNjMwNikNCiAgT1BUREwgKFNBUk1DTTMuRExMKSgpKERMTS5ETEwpKC1wTE0zUzEwMSkoU0FSTUNNMy5ETEwpKCkoVExNLkRMTCkoLXBMTTNTMTAxKQ0KICBPUFREQkcgNDkxNTAsMSwoKSgpKCkoKSgpKCkoKSgpKCkoKSAoQklOXFVMMkNNMy5ETEwpKCkoKSgpDQogRkxBU0gxIHsgMSwwLDAsMCwxLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBGTEFTSDIgKEJJTlxVTDJDTTMuRExMKQ0KIEZMQVNIMyAoIiIgKCkpDQogRkxBU0g0ICgpDQpFbmRPcHQNCg0K