IyMjIHVWaXNpb24yIFByb2plY3QsIChDKSBLZWlsIFNvZnR3YXJlDQojIyMgRG8gbm90IG1vZGlmeSAhDQoNClRhcmdldCAoUlRPU0RlbW9fQVJNKSwgMHgwMDA0IC8vIFRvb2xzOiAnQVJNLUFEUycNClRhcmdldCAoUlRPU0RlbW9fVEhVTUIpLCAweDAwMDQgLy8gVG9vbHM6ICdBUk0tQURTJw0KDQpHcm91cCAoT3RoZXIpDQpHcm91cCAoRnJlZVJUT1MpDQpHcm91cCAoU3RhZGFyZCBEZW1vKQ0KDQpGaWxlIDEsMiw8LlxTdGFydHVwLnM+PFN0YXJ0dXAucz4NCkZpbGUgMSwxLDwuXFBhclRlc3RcUGFyVGVzdC5jPjxQYXJUZXN0LmM+DQpGaWxlIDEsMSw8LlxtYWluLmM+PG1haW4uYz4NCkZpbGUgMSwxLDwuXHNlcmlhbFxzZXJpYWwuYz48c2VyaWFsLmM+DQpGaWxlIDEsMiw8LlxzZXJpYWxcc2VyaWFsSVNSLnM+PHNlcmlhbElTUi5zPg0KRmlsZSAyLDEsPC4uXC4uXFNvdXJjZVx0YXNrcy5jPjx0YXNrcy5jPg0KRmlsZSAyLDEsPC4uXC4uXFNvdXJjZVxsaXN0LmM+PGxpc3QuYz4NCkZpbGUgMiwxLDwuLlwuLlxTb3VyY2VccXVldWUuYz48cXVldWUuYz4NCkZpbGUgMiwxLDwuLlwuLlxTb3VyY2VccG9ydGFibGVcUlZEU1xBUk03X0xQQzIxeHhccG9ydC5jPjxwb3J0LmM+DQpGaWxlIDIsMSw8Li5cLi5cU291cmNlXHBvcnRhYmxlXE1lbU1hbmdcaGVhcF8yLmM+PGhlYXBfMi5jPg0KRmlsZSAyLDIsPC4uXC4uXFNvdXJjZVxwb3J0YWJsZVxSVkRTXEFSTTdfTFBDMjF4eFxwb3J0QVNNLnM+PHBvcnRBU00ucz4NCkZpbGUgMywxLDwuLlxDb21tb25cTWluaW1hbFxmbGFzaC5jPjxmbGFzaC5jPg0KRmlsZSAzLDEsPC4uXENvbW1vblxNaW5pbWFsXGNvbXRlc3QuYz48Y29tdGVzdC5jPg0KRmlsZSAzLDEsPC4uXENvbW1vblxNaW5pbWFsXEJsb2NrUS5jPjxCbG9ja1EuYz4NCkZpbGUgMywxLDwuLlxDb21tb25cTWluaW1hbFxkeW5hbWljLmM+PGR5bmFtaWMuYz4NCkZpbGUgMywxLDwuLlxDb21tb25cTWluaW1hbFxQb2xsUS5jPjxQb2xsUS5jPg0KRmlsZSAzLDEsPC4uXENvbW1vblxNaW5pbWFsXHNlbXRlc3QuYz48c2VtdGVzdC5jPg0KDQoNCk9wdGlvbnMgMSwwLDAgIC8vIFRhcmdldCAnUlRPU0RlbW9fQVJNJw0KIERldmljZSAoTFBDMjEyOSkNCiBWZW5kb3IgKE5YUCAoZm91bmRlZCBieSBQaGlsaXBzKSkNCiBDcHUgKElSQU0oMHg0MDAwMDAwMC0weDQwMDAzRkZGKSBJUk9NKDAtMHgzRkZGRikgQ0xPQ0soMTIwMDAwMDApIENQVVRZUEUoQVJNN1RETUkpKQ0KIEZsYXNoVXQgKExQQzIxMHhfSVNQLkVYRSAoIiNIIiBeWCAkRCBDT00xOiA5NjAwIDEpKQ0KIFN0dXBGICgiU1RBUlRVUFxQaGlsaXBzXFN0YXJ0dXAucyIgKCJQaGlsaXBzIExQQzIxMDAgU3RhcnR1cCBDb2RlIikpDQogRmxhc2hEUiAoVUwyQVJNKC1VNDAyOTY0MjAgLU83IC1DMCAtRk83IC1GRDQwMDAwMDAwIC1GQzgwMCAtRk4xIC1GRjBMUENfSUFQXzI1NiAtRlMwMCAtRkwwM0UwMDApKQ0KIERldklEICgzNjQ4KQ0KIFJnZiAoTFBDMjF4eC5IKQ0KIE1lbSAoKQ0KIEMgKCkNCiBBICgpDQogUkwgKCkNCiBPSCAoKQ0KIERCQ19JRlggKCkNCiBEQkNfQ01TICgpDQogREJDX0FNUyAoKQ0KIERCQ19MTVMgKCkNCiBVc2VFbnY9MA0KIEVudkJpbiAoKQ0KIEVudkluYyAoKQ0KIEVudkxpYiAoKQ0KIEVudlJlZyAo/1BoaWxpcHNcKQ0KIE9yZ1JlZyAo/1BoaWxpcHNcKQ0KIFRnU3RhdD0xNg0KIE91dERpciAoLlwpDQogT3V0TmFtZSAoUlRPU0RlbW8pDQogR2VuQXBwPTENCiBHZW5MaWI9MA0KIEdlbkhleD0wDQogRGVidWc9MQ0KIEJyb3dzZT0xDQogTHN0RGlyICguXCkNCiBIZXhTZWw9MQ0KIE1HMzJLPTANCiBUR01PUkU9MA0KIFJ1blVzciAwIDAgPD4NCiBSdW5Vc3IgMSAwIDw+DQogQnJ1blVzciAwIDAgPD4NCiBCcnVuVXNyIDEgMCA8Pg0KIENydW5Vc3IgMCAwIDw+DQogQ3J1blVzciAxIDAgPD4NCiBTVkNTSUQgPD4NCiBHTEZMQUdTPTE3OTANCiBBRFNGTEdBIHsgMjQzLDMxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBBQ1BVVFlQIChBUk03VERNSSkNCiBSVkRFViAoKQ0KIEFEU1RGTEdBIHsgMCwxMiwwLDIsOTksMCwwLDY2LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBPQ01BRFNPQ00geyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogT0NNQURTSVJBTSB7IDAsMCwwLDAsNjQsMCw2NCwwLDAgfQ0KIE9DTUFEU0lST00geyAxLDAsMCwwLDAsMCwwLDQsMCB9DQogT0NNQURTWFJBTSB7IDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBPQ1JfUlZDVCB7IDEsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMCwwLDAsNCwwLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNjQsMCw2NCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIFJWX1NUQVZFQyAoKQ0KIEFEU0NDRkxHIHsgNSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBBRFNDTUlTQyAoKQ0KIEFEU0NERUZOIChBUk03X0xQQzIxeHhfS0VJTF9SVkRTKQ0KIEFEU0NVREVGICgpDQogQURTQ0lOQ0QgKC47Li5cLi5cU291cmNlXHBvcnRhYmxlXFJWRFNcQVJNN19MUEMyMXh4Oy4uXENvbW1vblxpbmNsdWRlOy4uXC4uXFNvdXJjZVxpbmNsdWRlKQ0KIEFEU0FTRkxHIHsgMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBBRFNBTUlTQyAoKQ0KIEFEU0FERUZOICgpDQogQURTQVVERUYgKCkNCiBBRFNBSU5DRCAoLi5cLi5cU291cmNlXHBvcnRhYmxlXFJWRFNcQVJNN19MUEMyMXh4KQ0KIFByb3BGbGQgeyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIEluY0JsZD0xDQogQWx3YXlzQnVpbGQ9MA0KIEdlbkFzbT0wDQogQXNtQXNtPTANCiBQdWJsaWNzT25seT0wDQogU3RvcENvZGU9Mw0KIEN1c3RBcmdzICgpDQogTGliTW9kcyAoKQ0KIEFEU0xERkcgeyAxNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBBRFNMRFRBICgweDAwMDAwMDAwKQ0KIEFEU0xEREEgKDB4NDAwMDAwMDApDQogQURTTERTQyAoKQ0KIEFEU0xESUIgKCkNCiBBRFNMRElDICgpDQogQURTTERNQyAoKQ0KIEFEU0xESUYgKCkNCiBBRFNMRERXICgpDQogIE9QVERMIChTQVJNLkRMTCkoLWNMUEMyMTAwKShEQVJNUC5ETEwpKC1wTFBDMjF4OSkoU0FSTS5ETEwpKCkoVEFSTVAuRExMKSgtcExQQzIxeDkpDQogIE9QVERCRyA0OTE1MCwwLCgpKCkoKSgpKCkoKSgpKCkoKSgpIChCSU5cVUwyQVJNLkRMTCkoKSgpKCkNCiBGTEFTSDEgeyAxLDAsMCwwLDEsMCwwLDAsMCwxNiwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBGTEFTSDIgKEJJTlxVTDJBUk0uRExMKQ0KIEZMQVNIMyAoIkxQQzIxMHhfSVNQLkVYRSIgKCIjSCIgXlggJEQgQ09NMTogOTYwMCAxKSkNCiBGTEFTSDQgKCkNCkVuZE9wdA0KDQpPcHRpb25zIDIsMCwwICAvLyBUYXJnZXQgJ1JUT1NEZW1vX1RIVU1CJw0KIERldmljZSAoTFBDMjEyOSkNCiBWZW5kb3IgKE5YUCAoZm91bmRlZCBieSBQaGlsaXBzKSkNCiBDcHUgKElSQU0oMHg0MDAwMDAwMC0weDQwMDAzRkZGKSBJUk9NKDAtMHgzRkZGRikgQ0xPQ0soMTIwMDAwMDApIENQVVRZUEUoQVJNN1RETUkpKQ0KIEZsYXNoVXQgKExQQzIxMHhfSVNQLkVYRSAoIiNIIiBeWCAkRCBDT00xOiA5NjAwIDEpKQ0KIFN0dXBGICgiU1RBUlRVUFxQaGlsaXBzXFN0YXJ0dXAucyIgKCJQaGlsaXBzIExQQzIxMDAgU3RhcnR1cCBDb2RlIikpDQogRmxhc2hEUiAoVUwyQVJNKC1VNDAyOTY0MjAgLU83IC1DMCAtRk83IC1GRDQwMDAwMDAwIC1GQzgwMCAtRk4xIC1GRjBMUENfSUFQXzI1NiAtRlMwMCAtRkwwM0UwMDApKQ0KIERldklEICgzNjQ4KQ0KIFJnZiAoTFBDMjF4eC5IKQ0KIE1lbSAoKQ0KIEMgKCkNCiBBICgpDQogUkwgKCkNCiBPSCAoKQ0KIERCQ19JRlggKCkNCiBEQkNfQ01TICgpDQogREJDX0FNUyAoKQ0KIERCQ19MTVMgKCkNCiBVc2VFbnY9MA0KIEVudkJpbiAoKQ0KIEVudkluYyAoKQ0KIEVudkxpYiAoKQ0KIEVudlJlZyAo/1BoaWxpcHNcKQ0KIE9yZ1JlZyAo/1BoaWxpcHNcKQ0KIFRnU3RhdD0xNg0KIE91dERpciAoLlxiaW5cKQ0KIE91dE5hbWUgKFJUT1NEZW1vKQ0KIEdlbkFwcD0xDQogR2VuTGliPTANCiBHZW5IZXg9MQ0KIERlYnVnPTENCiBCcm93c2U9MQ0KIExzdERpciAoLlwpDQogSGV4U2VsPTENCiBNRzMySz0wDQogVEdNT1JFPTANCiBSdW5Vc3IgMCAwIDw+DQogUnVuVXNyIDEgMCA8Pg0KIEJydW5Vc3IgMCAwIDw+DQogQnJ1blVzciAxIDAgPD4NCiBDcnVuVXNyIDAgMCA8Pg0KIENydW5Vc3IgMSAwIDw+DQogU1ZDU0lEIDw+DQogR0xGTEFHUz0xNzkwDQogQURTRkxHQSB7IDI0MywzMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogQUNQVVRZUCAoQVJNN1RETUkpDQogUlZERVYgKCkNCiBBRFNURkxHQSB7IDAsMTIsMCwyLDk5LDQsMCw2NiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogT0NNQURTT0NNIHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIE9DTUFEU0lSQU0geyAwLDAsMCwwLDY0LDAsNjQsMCwwIH0NCiBPQ01BRFNJUk9NIHsgMSwwLDAsMCwwLDAsMCw0LDAgfQ0KIE9DTUFEU1hSQU0geyAwLDAsMCwwLDAsMCwwLDAsMCB9DQogT0NSX1JWQ1QgeyAxLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMCwwLDQsMCwxLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDY0LDAsNjQsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBSVl9TVEFWRUMgKCkNCiBBRFNDQ0ZMRyB7IDUsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogQURTQ01JU0MgKCkNCiBBRFNDREVGTiAoQVJNN19MUEMyMXh4X0tFSUxfUlZEUyBLRUlMX1RIVU1CX0lOVEVSV09SSykNCiBBRFNDVURFRiAoKQ0KIEFEU0NJTkNEICguOy4uXC4uXFNvdXJjZVxwb3J0YWJsZVxSVkRTXEFSTTdfTFBDMjF4eDsuLlxDb21tb25caW5jbHVkZTsuLlwuLlxTb3VyY2VcaW5jbHVkZSkNCiBBRFNBU0ZMRyB7IDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogQURTQU1JU0MgKCkNCiBBRFNBREVGTiAoKQ0KIEFEU0FVREVGICgpDQogQURTQUlOQ0QgKC4uXC4uXFNvdXJjZVxwb3J0YWJsZVxSVkRTXEFSTTdfTFBDMjF4eCkNCiBQcm9wRmxkIHsgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBJbmNCbGQ9MQ0KIEFsd2F5c0J1aWxkPTANCiBHZW5Bc209MA0KIEFzbUFzbT0wDQogUHVibGljc09ubHk9MA0KIFN0b3BDb2RlPTMNCiBDdXN0QXJncyAoKQ0KIExpYk1vZHMgKCkNCiBBRFNMREZHIHsgMTcsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogQURTTERUQSAoMHgwMDAwMDAwMCkNCiBBRFNMRERBICgweDQwMDAwMDAwKQ0KIEFEU0xEU0MgKCkNCiBBRFNMRElCICgpDQogQURTTERJQyAoKQ0KIEFEU0xETUMgKCkNCiBBRFNMRElGICgpDQogQURTTEREVyAoKQ0KICBPUFRETCAoU0FSTS5ETEwpKC1jTFBDMjEwMCkoREFSTVAuRExMKSgtcExQQzIxeDkpKFNBUk0uRExMKSgpKFRBUk1QLkRMTCkoLXBMUEMyMXg5KQ0KICBPUFREQkcgNDkxNTAsMCwoKSgpKCkoKSgpKCkoKSgpKCkoKSAoQklOXFVMMkFSTS5ETEwpKCkoKSgpDQogRkxBU0gxIHsgMSwwLDAsMCwxLDAsMCwwLDAsMTYsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogRkxBU0gyIChCSU5cVUwyQVJNLkRMTCkNCiBGTEFTSDMgKCJMUEMyMTB4X0lTUC5FWEUiICgiI0giIF5YICREIENPTTE6IDk2MDAgMSkpDQogRkxBU0g0ICgpDQpFbmRPcHQNCg0K