IyMjIHVWaXNpb24yIFByb2plY3QsIChDKSBLZWlsIFNvZnR3YXJlDQojIyMgRG8gbm90IG1vZGlmeSAhDQoNClRhcmdldCAoVGFyZ2V0IDEpLCAweDAwMDQgLy8gVG9vbHM6ICdBUk0tQURTJw0KDQpHcm91cCAoU3lzdGVtKQ0KR3JvdXAgKERlbW8gRmlsZXMpDQpHcm91cCAoRnJlZVJUT1MgZmlsZXMpDQoNCkZpbGUgMSwyLDwuXFNUTTMyRjEweC5zPjxTVE0zMkYxMHgucz4NCkZpbGUgMSwxLDwuLlxDb21tb25cZHJpdmVyc1xTVFxTVE0zMkYxMHhGV0xpYlxzcmNcbGNkLmM+PGxjZC5jPg0KRmlsZSAxLDIsPC4uXENvbW1vblxkcml2ZXJzXFNUXFNUTTMyRjEweEZXTGliXHNyY1xjb3J0ZXhtM19tYWNyb19ydmRzLnM+PGNvcnRleG0zX21hY3JvX3J2ZHMucz4NCkZpbGUgMSwxLDwuXFNUTTMyRjEweEZXTGliXHNyY1xzdG0zMmYxMHhfdXNhcnQuYz48c3RtMzJmMTB4X3VzYXJ0LmM+DQpGaWxlIDEsMSw8LlxTVE0zMkYxMHhGV0xpYlxzcmNcc3RtMzJmMTB4X2dwaW8uYz48c3RtMzJmMTB4X2dwaW8uYz4NCkZpbGUgMSwxLDwuXFNUTTMyRjEweEZXTGliXHNyY1xzdG0zMmYxMHhfbGliLmM+PHN0bTMyZjEweF9saWIuYz4NCkZpbGUgMSwxLDwuXFNUTTMyRjEweEZXTGliXHNyY1xzdG0zMmYxMHhfbnZpYy5jPjxzdG0zMmYxMHhfbnZpYy5jPg0KRmlsZSAxLDEsPC5cU1RNMzJGMTB4RldMaWJcc3JjXHN0bTMyZjEweF9yY2MuYz48c3RtMzJmMTB4X3JjYy5jPg0KRmlsZSAxLDEsPC5cU1RNMzJGMTB4RldMaWJcc3JjXHN0bTMyZjEweF9zcGkuYz48c3RtMzJmMTB4X3NwaS5jPg0KRmlsZSAxLDEsPC5cU1RNMzJGMTB4RldMaWJcc3JjXHN0bTMyZjEweF9zeXN0aWNrLmM+PHN0bTMyZjEweF9zeXN0aWNrLmM+DQpGaWxlIDEsMSw8LlxTVE0zMkYxMHhGV0xpYlxzcmNcc3RtMzJmMTB4X3RpbS5jPjxzdG0zMmYxMHhfdGltLmM+DQpGaWxlIDIsMSw8LlxQYXJUZXN0XFBhclRlc3QuYz48UGFyVGVzdC5jPg0KRmlsZSAyLDEsPC5cc2VyaWFsXHNlcmlhbC5jPjxzZXJpYWwuYz4NCkZpbGUgMiwxLDwuXHRpbWVydGVzdC5jPjx0aW1lcnRlc3QuYz4NCkZpbGUgMiwxLDwuXG1haW4uYz48bWFpbi5jPg0KRmlsZSAyLDEsPC5cc3BpX2ZsYXNoLmM+PHNwaV9mbGFzaC5jPg0KRmlsZSAyLDEsPC4uXENvbW1vblxNaW5pbWFsXHNlbXRlc3QuYz48c2VtdGVzdC5jPg0KRmlsZSAyLDEsPC4uXENvbW1vblxNaW5pbWFsXEJsb2NrUS5jPjxCbG9ja1EuYz4NCkZpbGUgMiwxLDwuLlxDb21tb25cTWluaW1hbFxibG9ja3RpbS5jPjxibG9ja3RpbS5jPg0KRmlsZSAyLDEsPC4uXENvbW1vblxNaW5pbWFsXGNvbXRlc3QuYz48Y29tdGVzdC5jPg0KRmlsZSAyLDEsPC4uXENvbW1vblxNaW5pbWFsXGRlYXRoLmM+PGRlYXRoLmM+DQpGaWxlIDIsMSw8Li5cQ29tbW9uXE1pbmltYWxcZmxhc2guYz48Zmxhc2guYz4NCkZpbGUgMiwxLDwuLlxDb21tb25cTWluaW1hbFxpbnRlZ2VyLmM+PGludGVnZXIuYz4NCkZpbGUgMiwxLDwuLlxDb21tb25cTWluaW1hbFxQb2xsUS5jPjxQb2xsUS5jPg0KRmlsZSAzLDEsPC4uXC4uXFNvdXJjZVx0YXNrcy5jPjx0YXNrcy5jPg0KRmlsZSAzLDEsPC4uXC4uXFNvdXJjZVxsaXN0LmM+PGxpc3QuYz4NCkZpbGUgMywxLDwuLlwuLlxTb3VyY2VccXVldWUuYz48cXVldWUuYz4NCkZpbGUgMywxLDwuLlwuLlxTb3VyY2VccG9ydGFibGVcUlZEU1xBUk1fQ00zXHBvcnQuYz48cG9ydC5jPg0KRmlsZSAzLDEsPC4uXC4uXFNvdXJjZVxwb3J0YWJsZVxNZW1NYW5nXGhlYXBfMi5jPjxoZWFwXzIuYz4NCg0KDQpPcHRpb25zIDEsMCwwICAvLyBUYXJnZXQgJ1RhcmdldCAxJw0KIERldmljZSAoU1RNMzJGMTAzVkIpDQogVmVuZG9yIChTVE1pY3JvZWxlY3Ryb25pY3MpDQogQ3B1IChJUkFNKDB4MjAwMDAwMDAtMHgyMDAwNEZGRikgSVJPTSgweDgwMDAwMDAtMHg4MDFGRkZGKSBDTE9DSyg4MDAwMDAwKSBDUFVUWVBFKCJDb3J0ZXgtTTMiKSkNCiBGbGFzaFV0ICgpDQogU3R1cEYgKCJTVEFSVFVQXFNUXFNUTTMyRjEweC5zIiAoIlNUTTMyIFN0YXJ0dXAgQ29kZSIpKQ0KIEZsYXNoRFIgKFVMMkNNMygtTzE0IC1TMCAtQzAgLU4wMCgiQVJNIENvcnRleC1NMyIpIC1EMDAoMUJBMDA0NzcpIC1MMDAoNCkgLUZPNyAtRkQyMDAwMDAwMCAtRkM4MDAgLUZOMSAtRkYwU1RNMzJGMTB4XzEyOCAtRlMwODAwMDAwMCAtRkwwMjAwMDApKQ0KIERldklEICg0MjIzKQ0KIFJnZiAoc3RtMzJmMTB4X2xpYi5oKQ0KIE1lbSAoKQ0KIEMgKCkNCiBBICgpDQogUkwgKCkNCiBPSCAoKQ0KIERCQ19JRlggKCkNCiBEQkNfQ01TICgpDQogREJDX0FNUyAoKQ0KIERCQ19MTVMgKCkNCiBVc2VFbnY9MA0KIEVudkJpbiAoKQ0KIEVudkluYyAoKQ0KIEVudkxpYiAoKQ0KIEVudlJlZyAo/1NUXFNUTTMyRjEweFwpDQogT3JnUmVnICj/U1RcU1RNMzJGMTB4XCkNCiBUZ1N0YXQ9MTYNCiBPdXREaXIgKC5cKQ0KIE91dE5hbWUgKFJUT1NEZW1vKQ0KIEdlbkFwcD0xDQogR2VuTGliPTANCiBHZW5IZXg9MA0KIERlYnVnPTENCiBCcm93c2U9MQ0KIExzdERpciAoLlwpDQogSGV4U2VsPTENCiBNRzMySz0wDQogVEdNT1JFPTANCiBSdW5Vc3IgMCAwIDw+DQogUnVuVXNyIDEgMCA8Pg0KIEJydW5Vc3IgMCAwIDw+DQogQnJ1blVzciAxIDAgPD4NCiBDcnVuVXNyIDAgMCA8Pg0KIENydW5Vc3IgMSAwIDw+DQogU1ZDU0lEIDw+DQogR0xGTEFHUz0xNzkwDQogQURTRkxHQSB7IDI0MywzMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogQUNQVVRZUCAoIkNvcnRleC1NMyIpDQogUlZERVYgKCkNCiBBRFNURkxHQSB7IDAsMTIsMCwxOCw5OSwwLDAsNjYsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIE9DTUFEU09DTSB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBPQ01BRFNJUkFNIHsgMCwwLDAsMCwzMiwwLDgwLDAsMCB9DQogT0NNQURTSVJPTSB7IDEsMCwwLDAsOCwwLDAsMiwwIH0NCiBPQ01BRFNYUkFNIHsgMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIE9DUl9SVkNUIHsgMSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw4LDAsMCwyLDAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwzMiwwLDgwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCB9DQogUlZfU1RBVkVDICgpDQogQURTQ0NGTEcgeyA1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIEFEU0NNSVNDICgpDQogQURTQ0RFRk4gKFJWRFNfQVJNQ00zX0xNM1MxMDIpDQogQURTQ1VERUYgKCkNCiBBRFNDSU5DRCAoLi5cQ09SVEVYX1NUTTMyRjEwM19LZWlsOy4uXENvbW1vblxpbmNsdWRlOy4uXC4uXFNvdXJjZVxpbmNsdWRlOy5cU1RNMzJGMTB4RldMaWJcaW5jKQ0KIEFEU0FTRkxHIHsgMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBBRFNBTUlTQyAoKQ0KIEFEU0FERUZOICgpDQogQURTQVVERUYgKCkNCiBBRFNBSU5DRCAoKQ0KIFByb3BGbGQgeyAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAgfQ0KIEluY0JsZD0xDQogQWx3YXlzQnVpbGQ9MA0KIEdlbkFzbT0wDQogQXNtQXNtPTANCiBQdWJsaWNzT25seT0wDQogU3RvcENvZGU9Mw0KIEN1c3RBcmdzICgpDQogTGliTW9kcyAoKQ0KIEFEU0xERkcgeyAxNywwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBBRFNMRFRBICgweDA4MDAwMDAwKQ0KIEFEU0xEREEgKDB4MjAwMDAwMDApDQogQURTTERTQyAoKQ0KIEFEU0xESUIgKCkNCiBBRFNMRElDICgpDQogQURTTERNQyAoKQ0KIEFEU0xESUYgKCkNCiBBRFNMRERXICgpDQogIE9QVERMIChTQVJNQ00zLkRMTCkoKShEQVJNU1RNLkRMTCkoLXBTVE0zMkYxMDNWQikoU0FSTUNNMy5ETEwpKCkoVEFSTVNUTS5ETEwpKC1wU1RNMzJGMTAzVkIpDQogIE9QVERCRyA0Mjk5OCwxLCgpKCkoKSgpKCkoKSgpKCkoKSgpIChCSU5cVUwyQ00zLkRMTCkoKSgpKCkNCiBGTEFTSDEgeyA5LDAsMCwwLDEsMCwwLDAsMSwxNiwwLDAsMCwwLDAsMCwwLDAsMCwwIH0NCiBGTEFTSDIgKEJJTlxVTDJDTTMuRExMKQ0KIEZMQVNIMyAoIiIgKCkpDQogRkxBU0g0ICgpDQpFbmRPcHQNCg0K