oidc-lib
Version:
A library for creating OIDC Service Providers
1 lines • 15.9 MB
JSON
{"issuer":"wallet","oidc_lib_version":"^2.8.0","code":{"oidc_config.json":"ew0KICAiY29uZmlnIjogew0KICAgICJjbGllbnQiOiAid2FsbGV0Ig0KICB9LA0KICAiY29sbGVjdGlvbnMiOiB7DQogICAgICJwd2EiOiB7DQogICAgICAgImtleVBhdGgiOiAiaWQiDQogICAgIH0NCiAgCX0sDQogICJjb25maWdfZmlsZXMiOiBbIA0KICAJICIvd2FsbGV0L29pZGNfY29uZmlnLmpzb24iDQogIF0NCn0","wallet.js":"bW9kdWxlLmV4cG9ydHMgPSB7DQoJcmVnaXN0ZXJFbmRwb2ludHM6IHJlZ2lzdGVyRW5kcG9pbnRzLA0KCXByb2Nlc3NQd2FTdGFydDogcHJvY2Vzc1B3YVN0YXJ0DQp9DQoNCmNvbnN0IGNvbnRlbnRNb2R1bGVOYW1lID0gJ3dhbGxldCc7DQp2YXIgY2xpZW50X2FwaV91cmwgPSAnLycgKyBjb250ZW50TW9kdWxlTmFtZTsNCg0KdmFyIHBrID0gbnVsbDsNCnZhciBkYkluZm87DQoNCmZ1bmN0aW9uIHJlZ2lzdGVyRW5kcG9pbnRzKHBrU291cmNlKSB7DQoJcGsgPSBwa1NvdXJjZTsNCglkYkluZm8gPSBway5kYnNbY29udGVudE1vZHVsZU5hbWVdOw0KDQoJdmFyIGVuZHBvaW50ID0gJy93YWxsZXQvd2FsbGV0Lmh0bWwnOw0KCXBrLmFwcC5vcHRpb25zKGVuZHBvaW50LCBway5jb3JzKCkpOw0KCXBrLmFwcC5nZXQoZW5kcG9pbnQsIHBrLnV0aWwuY29yc09wdGlvbnMoKSwgZnVuY3Rpb24ocmVxLCByZXMpew0KCQlwcm9jZXNzUHdhU3RhcnQocmVxLCByZXMpOw0KCX0pOw0KDQoJdmFyIGVuZHBvaW50ID0gJy93YWxsZXQvd2FsbGV0X2lkX3JlcXVlc3QnOw0KCXBrLmFwcC5vcHRpb25zKGVuZHBvaW50LCBway5jb3JzKCkpOw0KCXBrLmFwcC5wb3N0KGVuZHBvaW50LCBway51dGlsLmNvcnNPcHRpb25zKCksIGZ1bmN0aW9uKHJlcSwgcmVzKXsNCgkJcHJvY2Vzc193YWxsZXRfaWRfcmVxdWVzdChyZXEsIHJlcyk7DQoJfSk7DQoNCgl2YXIgZW5kcG9pbnQgPSAnL3dhbGxldC9yZWdpc3Rlcl9yZXF1ZXN0JzsNCglway5hcHAub3B0aW9ucyhlbmRwb2ludCwgcGsuY29ycygpKTsNCglway5hcHAucG9zdChlbmRwb2ludCwgcGsudXRpbC5jb3JzT3B0aW9ucygpLCBmdW5jdGlvbihyZXEsIHJlcyl7DQoJCXByb2Nlc3NfcmVnaXN0ZXJfcmVxdWVzdChyZXEsIHJlcyk7DQoJfSk7DQoNCgl2YXIgZW5kcG9pbnQgPSAnL3dhbGxldC9wdWJsaXNoX2RldmljZV93YWxsZXQnOw0KCXBrLmFwcC5vcHRpb25zKGVuZHBvaW50LCBway5jb3JzKCkpOw0KCXBrLmFwcC5wb3N0KGVuZHBvaW50LCBway51dGlsLmNvcnNPcHRpb25zKCksIGZ1bmN0aW9uKHJlcSwgcmVzKXsNCgkJcHJvY2Vzc19wdWJsaXNoX2RldmljZV93YWxsZXQocmVxLCByZXMpOw0KCX0pOw0KfQ0KDQphc3luYyBmdW5jdGlvbiBwcm9jZXNzX3dhbGxldF9pZF9yZXF1ZXN0KHJlcSwgcmVzKXsNCgl2YXIgd2FsbGV0X2lkID0gcmVxLmNvb2tpZXNbJ3dhbGxldF9pZCddOw0KCWlmICghd2FsbGV0X2lkKXsNCgkJcmVzLmpzb24oew0KCQkJc3RhdHVzOiAnRVJST1InLA0KCQkJZXJyb3I6ICdTZXJ2ZXIgc2VlcyBubyB3YWxsZXRfaWQgY29va2llJw0KCQl9KTsNCgkJcGsudXRpbC5sb2dfZGVidWcoIldhbGxldCBlcnJvcjogIGlkX3JlcXVlc3QgLSBubyB3YWxsZXQgY29va2llIikNCgkJcmV0dXJuOw0KCX0NCg0KCXBrLnV0aWwubG9nX2RlYnVnKCJXYWxsZXQgaWRfcmVxdWVzdDogIE9LIC0gIiArIHdhbGxldF9pZCk7DQoNCglyZXMuanNvbih7DQoJCXN0YXR1czogJ09LJywNCgkJd2FsbGV0X2lkOiB3YWxsZXRfaWQNCgl9KTsNCn0NCg0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc19yZWdpc3Rlcl9yZXF1ZXN0KHJlcSwgcmVzKXsNCgl2YXIgd2FsbGV0X2lkID0gcmVxLmNvb2tpZXNbJ3dhbGxldF9pZCddOw0KCWlmICghd2FsbGV0X2lkKXsNCgkJcmVzLmpzb24oew0KCQkJc3RhdHVzOiAnRVJST1InLA0KCQkJZXJyb3I6ICdTZXJ2ZXIgc2VlcyBubyB3YWxsZXRfaWQgY29va2llJw0KCQl9KTsNCgkJcGsudXRpbC5sb2dfZGVidWcoIldhbGxldCBlcnJvcjogIHJlZ2lzdGVyX3JlcXVlc3QgLSBubyB3YWxsZXQgY29va2llIikNCgkJcmV0dXJuOw0KCX0NCg0KCXRyeXsNCgkJcHdhSW5mbyA9IGF3YWl0IHBrLmRic1snd2FsbGV0J10ucHJvdmlkZXIuZ2V0RG9jdW1lbnQocGsuZGJzWyd3YWxsZXQnXSwgJ3B3YScsIHdhbGxldF9pZCk7DQoJfQ0KCWNhdGNoKGVycil7DQoJCXJlcy5qc29uKHsNCgkJCXN0YXR1czogJ0VSUk9SJywNCgkJCWVycm9yOiAnU2VydmVyIGhhcyBubyBwd2EgcmVjb3JkIGZvciAnICsgd2FsbGV0X2lkDQoJCX0pOw0KCQlway51dGlsLmxvZ19kZWJ1ZygiV2FsbGV0IGVycm9yOiAgcmVnaXN0ZXJfcmVxdWVzdCAtIHB3YSByZWNvcmQgbWlzc2luZyBmb3I6ICIgKyB3YWxsZXRfaWQpOw0KCQlyZXR1cm47DQoJfQ0KDQoJaWYgKCFwd2FJbmZvLndfaWQpew0KCQlway51dGlsLmxvZ19kZWJ1ZygiV2FsbGV0OiAgcmVnaXN0ZXJfcmVxdWVzdCAtIHdfaWQgbm90IHlldCBwcmVzZW50IikNCg0KCQlpZiAocmVxLmJvZHkud19pZCAmJiByZXEuYm9keS5jX3NlY3JldCl7DQoJCQlwd2FJbmZvLndfaWQgPSByZXEuYm9keS53X2lkOw0KCQkJcHdhSW5mby5jX3NlY3JldCA9IHJlcS5ib2R5LmNfc2VjcmV0Ow0KCQkJYXdhaXQgcGsuZGJzWyd3YWxsZXQnXS5wcm92aWRlci5jcmVhdGVPclVwZGF0ZURvY3VtZW50KHBrLmRic1snd2FsbGV0J10sICdwd2EnLCBwd2FJbmZvKTsNCgkJCXJlcy5qc29uKHsNCgkJCQlzdGF0dXM6ICdPSycNCgkJCX0pOw0KCQkJcGsudXRpbC5sb2dfZGVidWcoIldhbGxldDogIHJlZ2lzdGVyX3JlcXVlc3QgLSB3X2lkIGFkZGVkIHRvIHB3YSByZWNvcmQgZm9yICIgKyB3YWxsZXRfaWQpOw0KCQl9DQoJCWVsc2V7DQoJCQlyZXMuanNvbih7DQoJCQkJc3RhdHVzOiAnRVJST1InLA0KCQkJCWVycm9yOiAnbm8gd19pZCBpbiBzZXJ2aWNlIGJ1dCB3X2lkIGFuZCBjX3NlY3JldCBwYXJhbWV0ZXJzIG5vdCBwcmVzZW50Jw0KCQkJfSk7DQoJCQlway51dGlsLmxvZ19kZWJ1ZygiV2FsbGV0IGVycm9yOiAgcmVnaXN0ZXJfcmVxdWVzdCAtIG5vIHdfaWQgaW4gc2VydmljZSBidXQgd19pZCBhbmQgY19zZWNyZXQgcGFyYW1ldGVycyBub3QgcHJlc2VudCIpOw0KCQl9DQoJCXJldHVybjsNCgl9DQoNCglpZiAocmVxLmJvZHkud19pZCA9PSBwd2FJbmZvLndfaWQpew0KCQlpZiAocmVxLmJvZHkuY19zZWNyZXQpew0KCQkJaWYgKCFwd2FJbmZvLmRldmljZV93YWxsZXQpew0KCQkJCXBrLnV0aWwubG9nX2RlYnVnKCJXYWxsZXQ6ICByZWdpc3Rlcl9yZXF1ZXN0IFJFU1RPUkUgLSBidXQgbm8gZGV2aWNlIHdhbGxldCAiICsgd2FsbGV0X2lkKTsNCgkJCQlyZXMuanNvbih7DQoJCQkJCXN0YXR1czogJ0VSUk9SJywNCgkJCQkJZXJyb3I6ICdXYWxsZXQ6IHJlZ2lzdGVyX3JlcXVlc3QgUkVTVE9SRSAtIGJ1dCBubyBkZXZpY2Ugd2FsbGV0IGF0IG9wZXJhdG9yJw0KCQkJCX0pOw0KCQkJfQ0KCQkJZWxzZSB7CQkJDQoJCQkJcmVzLmpzb24oew0KCQkJCQlzdGF0dXM6ICdSRVNUT1JFJywNCgkJCQkJZGV2aWNlX3dhbGxldDogcHdhSW5mby5kZXZpY2Vfd2FsbGV0DQoJCQkJfSk7DQoJCQkJcGsudXRpbC5sb2dfZGVidWcoIldhbGxldDogIHJlZ2lzdGVyX3JlcXVlc3QgLSBzZW5kaW5nIHJlc3RvcmUgZm9yICIgKyB3YWxsZXRfaWQpOw0KCQkJfQ0KCQl9DQoJCWVsc2V7DQoJCQlyZXMuanNvbih7DQoJCQkJc3RhdHVzOiAnT0snDQoJCQl9KTsNCgkJCXBrLnV0aWwubG9nX2RlYnVnKCJXYWxsZXQ6ICByZWdpc3Rlcl9yZXF1ZXN0IC0gc3RhdHVzIE9LIGZvciAiICsgd2FsbGV0X2lkKTsNCgkJfQ0KCX0NCgllbHNlew0KCQlyZXMuanNvbih7DQoJCQlzdGF0dXM6ICdFUlJPUicsDQoJCQllcnJvcjogJ3dfaWQgaW4gcGFyYW1ldGVycyBkb2VzIG5vdCBtYXRjaCB3X2lkIGluIHNlcnZpY2UgcmVjb3JkJw0KCQl9KQ0KCQlway51dGlsLmxvZ19kZWJ1ZygiV2FsbGV0OiAgcmVnaXN0ZXJfcmVxdWVzdCAtIHdfaWQgaW4gcGFyYW1ldGVycyBkb2VzIG5vdCBtYXRjaCB3X2lkIGluIHNlcnZpY2UgcmVjb3JkIGZvciAiICsgd2FsbGV0X2lkKTsNCgl9DQp9DQoNCmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NfcHVibGlzaF9kZXZpY2Vfd2FsbGV0KHJlcSwgcmVzKXsNCgl2YXIgd2FsbGV0X2lkID0gcmVxLmNvb2tpZXNbJ3dhbGxldF9pZCddOw0KCWlmICghd2FsbGV0X2lkKXsNCgkJcmVzLmpzb24oew0KCQkJc3RhdHVzOiAnRVJST1InLA0KCQkJZXJyb3I6ICdTZXJ2ZXIgc2VlcyBubyB3YWxsZXRfaWQgY29va2llJw0KCQl9KTsNCgkJcGsudXRpbC5sb2dfZGVidWcoIldhbGxldCBlcnJvcjogIGV4Y2hhbmdlX3B1Ymxpc2hfcmVxdWVzdCAtIG5vIHdhbGxldCBjb29raWUiKQ0KCQlyZXR1cm47DQoJfQ0KDQoJdHJ5ew0KCQlwd2FJbmZvID0gYXdhaXQgcGsuZGJzWyd3YWxsZXQnXS5wcm92aWRlci5nZXREb2N1bWVudChway5kYnNbJ3dhbGxldCddLCAncHdhJywgd2FsbGV0X2lkKTsNCgl9DQoJY2F0Y2goZXJyKXsNCgkJcmVzLmpzb24oew0KCQkJc3RhdHVzOiAnRVJST1InLA0KCQkJZXJyb3I6ICdTZXJ2ZXIgaGFzIG5vIHB3YSByZWNvcmQgZm9yICcgKyB3YWxsZXRfaWQNCgkJfSk7DQoJCXBrLnV0aWwubG9nX2RlYnVnKCJXYWxsZXQgZXJyb3I6ICBleGNoYW5nZV9wdWJsaXNoX3JlcXVlc3QgLSBwd2EgcmVjb3JkIG1pc3NpbmcgZm9yOiAiICsgd2FsbGV0X2lkKTsNCgkJcmV0dXJuOw0KCX0NCg0KCWlmIChyZXEuYm9keS53X2lkICE9IHB3YUluZm8ud19pZCl7DQoJCXJlcy5qc29uKHsNCgkJCXN0YXR1czogJ0VSUk9SJywNCgkJCWVycm9yOiAnV2FsbGV0IGVycm9yOiAgZXhjaGFuZ2VfcHVibGlzaF9yZXF1ZXN0IC0gaW52YWxpZCB3X2lkOiAnICsgcmVxLmJvZHkud19pZA0KCQl9KTsNCgkJcGsudXRpbC5sb2dfZGVidWcoJ1dhbGxldCBlcnJvcjogIGV4Y2hhbmdlX3B1Ymxpc2hfcmVxdWVzdCAtIGludmFsaWQgd19pZDogJyArIHJlcS5ib2R5LndfaWQpOw0KCQlyZXR1cm47DQoJfQ0KDQoJaWYgKHJlcS5ib2R5LmRldmljZV93YWxsZXQpew0KCQlwd2FJbmZvLmRldmljZV93YWxsZXQgPSByZXEuYm9keS5kZXZpY2Vfd2FsbGV0Ow0KCQlhd2FpdCBway5kYnNbJ3dhbGxldCddLnByb3ZpZGVyLmNyZWF0ZU9yVXBkYXRlRG9jdW1lbnQocGsuZGJzWyd3YWxsZXQnXSwgJ3B3YScsIHB3YUluZm8pOw0KCQlyZXMuanNvbih7DQoJCQlzdGF0dXM6ICdPSycNCgkJfSk7DQoJCXBrLnV0aWwubG9nX2RlYnVnKCJXYWxsZXQ6ICBleGNoYW5nZV9wdWJsaXNoX3JlcXVlc3QgLSBzdGF0dXMgT0sgZm9yICIgKyB3YWxsZXRfaWQpOw0KCQlyZXR1cm47DQoJfQ0KDQoJcmVzLmpzb24oew0KCQlzdGF0dXM6ICdFUlJPUicsDQoJCWVycm9yOiAnV2FsbGV0IGVycm9yOiAgZXhjaGFuZ2VfcHVibGlzaF9yZXF1ZXN0IGZhaWxlZDogJyArIHdhbGxldF9pZA0KCX0pOw0KDQoJcGsudXRpbC5sb2dfZGVidWcoIldhbGxldCBlcnJvcjogIGV4Y2hhbmdlX3B1Ymxpc2hfcmVxdWVzdCBmYWlsZWQgdG8gc2F2ZSBkZXZpY2Vfd2FsbGV0OiAiICsgd2FsbGV0X2lkKTsNCglyZXR1cm47DQp9DQoNCmFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NQd2FTdGFydChyZXEsIHJlcyl7DQoJdmFyIHdhbGxldF9pZCA9IHJlcS5jb29raWVzWyd3YWxsZXRfaWQnXTsNCg0KCXZhcglzdGFydHVwX2h0bWxfcGF0aCA9IHBrLnBhdGguam9pbihfX2Rpcm5hbWUsICcuLi93ZWInLCBjb250ZW50TW9kdWxlTmFtZSwgJ3dhbGxldC52MCcpOwkNCgl2YXIJY29udGVudFN0cmluZyA9IHBrLmZzLnJlYWRGaWxlU3luYyhzdGFydHVwX2h0bWxfcGF0aCwgJ3V0ZjgnKTsNCgl2YXIgcHdhSW5mbzsNCg0KCWlmICghd2FsbGV0X2lkKXsNCgkJcGsudXRpbC5sb2dfZGVidWcoJ3dhbGxldDogcHdhX3N0YXJ0IC0gbm8gd2FsbGV0X2lkIGNvb2tpZVxyXG4nKTsNCgkJd2FsbGV0X2lkID0gYXdhaXQgcGsudXRpbC5yYW5kb21Ub1VSTigpOwkNCgkJcmVzLmNvb2tpZSgnd2FsbGV0X2lkJywgd2FsbGV0X2lkLCANCgkJCXsNCgkJCQkiaHR0cE9ubHkiOiB0cnVlLA0KCQkJCSJleHBpcmVzIjogbmV3IERhdGUoJ0RlY2VtYmVyIDMxLCAyMDUwIDAwOjAwOjAwJykNCgkJCX0pOw0KDQoJCXZhciBwd2FJbmZvID0gew0KCQkJaWQ6IHdhbGxldF9pZA0KCQl9DQoJCXBrLnV0aWwubG9nX2RlYnVnKCJ3YWxsZXQ6ICBwd2Ffc3RhcnQgLSBhc3NpZ25lZCBjb29raWUgLSBjcmVhdGVkIHB3YSByZWNvcmQgZm9yICIgKyB3YWxsZXRfaWQpOw0KCQlhd2FpdCBway5kYnNbJ3dhbGxldCddLnByb3ZpZGVyLmNyZWF0ZU9yVXBkYXRlRG9jdW1lbnQocGsuZGJzWyd3YWxsZXQnXSwgJ3B3YScsIHB3YUluZm8pOwkNCgl9DQoJZWxzZXsNCgkJcGsudXRpbC5sb2dfZGVidWcoIndhbGxldDogIHB3YV9zdGFydCAtIHdhbGxldCBwcmV2aW91c2x5IHJlZ2lzdGVyZWQiICsgd2FsbGV0X2lkKTsNCgl9DQoNCglyZXMuc2V0ICh7DQoJCSdDYWNoZS1Db250cm9sJzogJ25vLXN0b3JlJywNCgkJJ1ByYWdtYSc6ICduby1jYWNoZScsDQoJCSdDb250ZW50LVR5cGUnOiAndGV4dC9odG1sJywNCgkJJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICcqJw0KCX0pOw0KCXJlcy5zZW5kKGNvbnRlbnRTdHJpbmcpOwkJDQp9DQo"},"web/wallet":{"display_render.js":"KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitpKyInIik7dGhyb3cgYS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpKHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKdmFyIGRpc3BlbnYgPSByZXF1aXJlKCcuL2Rpc3BsYXlfcmVuZGVyX3NvdXJjZScpOw0KDQovLyBway5wdG9vbHMuZGlzcGxheV9yZW5kZXJfY2FsbGJhY2sgPSBkaXNwZW52LmRpc3BmdW5jOw0KDQp2YXIgcmVzdWx0ID0gZGlzcGVudi5kaXNwbGF5X2Z1bmN0aW9uKCdoZXJlIHdlIGdvIScpOw0KCn0seyIuL2Rpc3BsYXlfcmVuZGVyX3NvdXJjZSI6Mn1dLDI6W2Z1bmN0aW9uKHJlcXVpcmUsbW9kdWxlLGV4cG9ydHMpewptb2R1bGUuZXhwb3J0cyA9IHsNCiAgZGlzcGxheV9mdW5jdGlvbjogZGlzcGxheV9mdW5jdGlvbiwNCn0NCg0KZnVuY3Rpb24gZGlzcGxheV9mdW5jdGlvbihjb250ZW50KXsNCiAgY29uc29sZS5sb2coY29udGVudCk7DQogIHJldHVybiAnaGVyZSBpcyB0aGUgcmVzdWx0JzsNCn0KfSx7fV19LHt9LFsxXSkKLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUx5NHVMeTR1TDBGd2NFUmhkR0V2VW05aGJXbHVaeTl1Y0cwdmJtOWtaVjl0YjJSMWJHVnpMMkp5YjNkelpYSnBabmt2Ym05a1pWOXRiMlIxYkdWekwySnliM2R6WlhJdGNHRmpheTlmY0hKbGJIVmtaUzVxY3lJc0ltUnBjM0JzWVhsZmNtVnVaR1Z5WDJ4aGRXNWphR1Z5TG1weklpd2laR2x6Y0d4aGVWOXlaVzVrWlhKZmMyOTFjbU5sTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJPMEZEUVVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3p0QlEweEJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRWlMQ0ptYVd4bElqb2laMlZ1WlhKaGRHVmtMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSWlobWRXNWpkR2x2YmlncGUyWjFibU4wYVc5dUlISW9aU3h1TEhRcGUyWjFibU4wYVc5dUlHOG9hU3htS1h0cFppZ2hibHRwWFNsN2FXWW9JV1ZiYVYwcGUzWmhjaUJqUFZ3aVpuVnVZM1JwYjI1Y0lqMDlkSGx3Wlc5bUlISmxjWFZwY21VbUpuSmxjWFZwY21VN2FXWW9JV1ltSm1NcGNtVjBkWEp1SUdNb2FTd2hNQ2s3YVdZb2RTbHlaWFIxY200Z2RTaHBMQ0V3S1R0MllYSWdZVDF1WlhjZ1JYSnliM0lvWENKRFlXNXViM1FnWm1sdVpDQnRiMlIxYkdVZ0oxd2lLMmtyWENJblhDSXBPM1JvY205M0lHRXVZMjlrWlQxY0lrMVBSRlZNUlY5T1QxUmZSazlWVGtSY0lpeGhmWFpoY2lCd1BXNWJhVjA5ZTJWNGNHOXlkSE02ZTMxOU8yVmJhVjFiTUYwdVkyRnNiQ2h3TG1WNGNHOXlkSE1zWm5WdVkzUnBiMjRvY2lsN2RtRnlJRzQ5WlZ0cFhWc3hYVnR5WFR0eVpYUjFjbTRnYnlodWZIeHlLWDBzY0N4d0xtVjRjRzl5ZEhNc2NpeGxMRzRzZENsOWNtVjBkWEp1SUc1YmFWMHVaWGh3YjNKMGMzMW1iM0lvZG1GeUlIVTlYQ0ptZFc1amRHbHZibHdpUFQxMGVYQmxiMllnY21WeGRXbHlaU1ltY21WeGRXbHlaU3hwUFRBN2FUeDBMbXhsYm1kMGFEdHBLeXNwYnloMFcybGRLVHR5WlhSMWNtNGdiMzF5WlhSMWNtNGdjbjBwS0NraUxDSjJZWElnWkdsemNHVnVkaUE5SUhKbGNYVnBjbVVvSnk0dlpHbHpjR3hoZVY5eVpXNWtaWEpmYzI5MWNtTmxKeWs3WEhKY2JseHlYRzR2THlCd2F5NXdkRzl2YkhNdVpHbHpjR3hoZVY5eVpXNWtaWEpmWTJGc2JHSmhZMnNnUFNCa2FYTndaVzUyTG1ScGMzQm1kVzVqTzF4eVhHNWNjbHh1ZG1GeUlISmxjM1ZzZENBOUlHUnBjM0JsYm5ZdVpHbHpjR3hoZVY5bWRXNWpkR2x2YmlnbmFHVnlaU0IzWlNCbmJ5RW5LVHRjY2x4dUlpd2liVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQjdYSEpjYmlBZ1pHbHpjR3hoZVY5bWRXNWpkR2x2YmpvZ1pHbHpjR3hoZVY5bWRXNWpkR2x2Yml4Y2NseHVmVnh5WEc1Y2NseHVablZ1WTNScGIyNGdaR2x6Y0d4aGVWOW1kVzVqZEdsdmJpaGpiMjUwWlc1MEtYdGNjbHh1SUNCamIyNXpiMnhsTG14dlp5aGpiMjUwWlc1MEtUdGNjbHh1SUNCeVpYUjFjbTRnSjJobGNtVWdhWE1nZEdobElISmxjM1ZzZENjN1hISmNibjBpWFgwPQo","display_render_doc.txt":"VG8gY3JlYXRlIGEgY3JlZGVudGlhbCBkaXNwbGF5X3JlbmRlciBmdW5jdGlvbiwgY3JlYXRlIGEgZGlzcGxheV9yZW5kZXJfc291cmNlLmpzIGZpbGUgZGVmaW5pbmcgYSBtb2R1bGUuZXhwb3J0cyBvYmplY3Qgd2l0aCANCmEgJ2Rpc3BsYXlfZnVuY3Rpb24nIHByb3BlcnR5IGFzIGZvbGxvd3M6DQoNCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgRXhhbXBsZTogZGlzcGxheV9yZW5kZXJfc291cmNlLmpzDQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogIG1vZHVsZS5leHBvcnRzID0gew0KICAgIGRpc3BsYXlfZnVuY3Rpb246IGRpc3BsYXlfZnVuY3Rpb24sDQogIH0NCg0KICBmdW5jdGlvbiBkaXNwbGF5X2Z1bmN0aW9uKGNvbnRlbnQpew0KICAgIGNvbnNvbGUubG9nKGNvbnRlbnQpOw0KICAgIHJldHVybiAnaGVyZSBpcyB0aGUgcmVzdWx0JzsNCiAgfQ0KICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpMb2NhdGUgZGlzcGxheV9yZW5kZXJfbGF1bmNoZXIuanM6DQoNCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgV2FsbGV0IHNvdXJjZSBmaWxlOiBkaXNwbGF5X3JlbmRlcl9sYXVuY2hlci5qczoNCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgdmFyIGRpc3BlbnYgPSByZXF1aXJlKCcuL2Rpc3BsYXlfcmVuZGVyX3NvdXJjZScpOw0KDQogIHBrLnB0b29scy5kaXNwbGF5X3JlbmRlcl9jYWxsYmFjayA9IGRpc3BlbnYuZGlzcGxheV9mdW5jdGlvbjsNCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KUGxhY2UgZGlzcGxheV9yZW5kZXJfbGF1bmNoZXIuanMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIGRpc3BsYXlfcmVuZGVyLmpzIGFuZCBydW46DQoNCiAgYnJvd3NlcmlmeSBkaXNwbGF5X3JlbmRlcl9sYXVuY2hlci5qcyAtbyBkaXNwbGF5X3JlbmRlci5qcw0KDQpZb3UgY2FuIHVzZSBicm93c2VyaWZ5J3MgLS1kZWJ1ZyBhcmd1bWVudCB0byBmYWNpbGl0YXRlIGRlYnVnZ2luZyB0aGUgZGlzcGxheV9yZW5kZXIuanMgZmlsZQ0KDQpQbGFjZSBkaXNwbGF5X3JlbmRlci5qcyBpbiB0aGUgZGF0YSBkaXJlY3Rvcnkgb2YgdGhlIGlzc3VlciB1c2luZyB0aGUgZGlzcGxheV9yZW5kZXIgZmVhdHVyZQ0K","display_render_launcher.js":"dmFyIGRpc3BlbnYgPSByZXF1aXJlKCcuL2Rpc3BsYXlfcmVuZGVyX3NvdXJjZScpOw0KDQovLyBway5wdG9vbHMuZGlzcGxheV9yZW5kZXJfY2FsbGJhY2sgPSBkaXNwZW52LmRpc3BmdW5jOw0KDQp2YXIgcmVzdWx0ID0gZGlzcGVudi5kaXNwbGF5X2Z1bmN0aW9uKCdoZXJlIHdlIGdvIScpOw0K","display_render_source.js":"bW9kdWxlLmV4cG9ydHMgPSB7DQogIGRpc3BsYXlfZnVuY3Rpb246IGRpc3BsYXlfZnVuY3Rpb24sDQp9DQoNCmZ1bmN0aW9uIGRpc3BsYXlfZnVuY3Rpb24oY29udGVudCl7DQogIGNvbnNvbGUubG9nKGNvbnRlbnQpOw0KICByZXR1cm4gJ2hlcmUgaXMgdGhlIHJlc3VsdCc7DQp9","launch.html":"PGh0bWw-CjxoZWFkPgoJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3N0YWNrcGF0aC5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC80LjQuMS9jc3MvYm9vdHN0cmFwLm1pbi5jc3MiIGludGVncml0eT0ic2hhMzg0LVZrb284eDRDR3NPMytIaHh2OFQvUTVQYVh0a0t0dTZ1ZzVUT2VOVjZnQmlGZVdQR0ZOOU11aE9mMjNROUlmamgiIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiPgo8L2hlYWQ-Cjxib2R5PgoJPGRpdiBjbGFzcz0nY29udGFpbmVyIG1iLTMnPgoJCTxoMj5Db252ZXJnZW5jZSBEZW1vPC9oMj4KCQk8aDM-RXhhbXBsZXMgb2YgaG93IHRvIGFkZCBzbWFydCBoZWFsdGhjYXJkIGNyZWRlbnRpYWxzIHRvIHdhbGxldDwvaDM-CgkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIHN0eWxlPSJ3aWR0aDogMjAwcHg7IiBvbmNsaWNrPSJkb19waWNrdXAoKTsiPlB1bGwgdG8gV2FsbGV0PC9idXR0b24-CgkJPGJ1dHRvbiB0eXBlPSJidXR0b24iICBjbGFzcz0iYnRuIGJ0bi13YXJuaW5nIiBzdHlsZT0id2lkdGg6IDIwMHB4OyIgb25jbGljaz0iYWRkX2NyZWRlbnRpYWwoJ3NoY19hc19vYmonKTsiPlB1c2ggdG8gV2FsbGV0PC9idXR0b24-CgkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXdhcm5pbmciIHN0eWxlPSJ3aWR0aDogMjAwcHg7IiBvbmNsaWNrPSJhZGRfY3JlZGVudGlhbCgnc2hjX2FzX251bWVyaWMnKTsiPlFSIGNvZGUgdG8gV2FsbGV0PC9idXR0b24-Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9ImNvbnRhaW5lciBtYi0zJz4KCQk8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4KICAJCQk8bGFiZWwgZm9yPSJ0ZXh0YXJlYTEiPlBheWxvYWQgdGhhdCB3aWxsIGJlIHNlbnQ8L2xhYmVsPgogIAkJCTx0ZXh0YXJlYSBjbGFzcz0iZm9ybS1jb250cm9sIHJvdW5kZWQtMCIgIHN0eWxlPSJmb250LXNpemU6IC43NWVtOyIgaWQ9InRleHRhcmVhMSIgY29sdW1ucz0iNDAiIHJvd3M9IjEwIj48L3RleHRhcmVhPgoJCTwvZGl2PgoJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJwYXlsb2FkIj48L3BheWxvYWQ-Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJjb250YWluZXIgbXQtMyI-CgkJPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiIHN0eWxlPSJ3aWR0aDogMjAwcHg7IiBvbmNsaWNrPSJzdWJtaXQoKTsiPlNlbmQgcGF5bG9hZCB0byB3YWxsZXQ8L2J1dHRvbj4KCTwvZGl2PgoKCTxzY3JpcHQ-CgkJY29uc3QgV0FMTEVUX0VORFBPSU5UID0gJy93YWxsZXQvd2FsbGV0Lmh0bWwnOwoKCQlmdW5jdGlvbiBzZWxmSXNzdWVkSXNzdWVySWRlbnRpZmllcigpewoJCQlyZXR1cm4gd2luZG93LmxvY2F0aW9uLm9yaWdpbiArIFdBTExFVF9FTkRQT0lOVDsKCQl9CgoJCWZ1bmN0aW9uIGFkZF9jcmVkZW50aWFsKGtpbmQpewoJCQl2YXIgc2hjX2FzX251bWVyaWMgPSAnc2hjOi81Njc2MjkwOTUyNDMyMDYwMzQ2MDI5MjQzNzQwNDQ2MDMxMjIyOTU5NTMyNjU0NjAzNDYwMjkyNTQwNzcyODA0MzM2MDI4NzAyODY0NzE2NzQ1MjIyODA5Mjg2MjQ1NzA1NjQwMTI0MDU0MzkyNTY2NTU2MTQxMzUzNjYxNTU2ODM3NDI2NzMzMzIyNTY3MjU0NDQxMjE3MTM3NjIxMjc0NTMwNjYzMzY0MDIzNDUwNzU0MDUwODM3NTI2MjU0NzE0NTA2MjkyODUzMDQyNDYwNTczNjAxMTA0NTI5Mjk1MzEyNzA3NDI0Mjg0MzUwNjA2MTI2MTI1MjYwMjU2MzU2NTUzNDc1MTA1MjI0NzE3MjYwMjk2NzIzNzY2MzExNjYzMDY0NzU3NzQ0MzAzMTM2NDEyOTIyMDYyNDIzNTA3MzQwMzUyNTMyMzc2OTIwMzg0MzczNzA2NjQ0Mjg3MjY3MjY1MzU2MzUzMTA0NzMxMDYyMjIyNTIwMjAwNjcwNDQ3Nzc2MjQ2NzYwNzY2MzA5MTE0MTcxMDM0MjI5NTczNDIxNzIyNTQxMDUwOTM1MzY3MDU1MTIyODQwNDMyMzA5MDY2NzUyMTI2OTMwNjI1OTU4MDgxMjI2NTc0NDM4MzI2OTIyNTMzMTM5MzcxMTQzNzAwNDY4MzU2ODczNjQ1NTU0Mjc2OTU2MzY1MjEyNTkzNDQ0MzQwNzczMjYyMDAzMjc3NDUwMzg3NDU0NjE1NzIzNzczMTAwMzk1MjExNzIyMzUwNjIwOTQwMjEzODM5MTI1NDY3NDQ3NzY4Njk1NzY2Njg2NjY1MjcwNTA1NjIzMzc2Njk2MzY4MTI1ODY1NDQyNzAzMDUzMDMwMzMzODcyNjA2OTUzNzMzMjIzNDU0MDc2NDI3MTY1NzM2MzczMDkyNDM1Mzg1MjU2MjE3MjY0MjAyNTI5MTAwNDAzMDAxMDMwNzc2OTU0NDU0MDA3NzcyNjA3Nzc2MjcyMTEyNzcyMDYyMzA5NDAzMzA1MDA1OTA1MzYzOTY0NzEzODcyMDY1NjYwNTk1NTA0MDQ0NDY3NTc3MjMyNDUwNTYxMzI1OTYwNjAzMjIwNTYwOTY4MjU2MTI1NTQ3NzUzMzUyNjUzNTA2NDY4MDU0NDA5NTIwOTQ1NDE3MDUyNTk2NDMzMDQzNzI2NzM3Mzc2Mzc2NjYwMjUyMzY1NTU0NTU3NzM1MjUzNzY1OTEwMjQzMzY2MDczMDI3NzQ3NDQwNTA2NTc2NjIyNTA5NjI1MDM3MjIwNzM1MDYyODcwMjg2NjM5NDM2OTc0NDM3MTIzNzQzNzI5MjIwMDEwNjMzNzM1NjM2MDYxMDA2ODc0MDg1OTM1NDEyMDYwMjYwMzQxNjc3MzM3NDQ3NTY4NTcyMTQxNzc0MzI5NDI2MjM5NjI0NDU5NzI3NjYwMjM1MDA5MTE2MTEwNTYzNTY0NTUyMzU4MDUyODQwNzUyNzA2MzUzNjI2MjMyNDM3MTA0NDQyNDA3NjcyMjg2OTA0MDcwNzMwMDM2OTQzMzAxMDYyNTMzMTA3Mzc1ODYwNjQ3MTM1NTYyOTQ1Mzk0MjI2NDI3NDMxNDU1MzU2NzIyMzIzMzExMjY1Mzc3NjUzNTgyNzM0MDA2NDcxNDQ2OTc1NTk1MjM2NTczNTA4MDQ0MzEwNDI1NDMxMzk2NDYxNDUxMDY1NTg1MzI3MDk3NTU1MDkxMTQzNTk1NzM0MTAzMjcyMjQ3MzU4MDU2NzMxMDU1NTUwMDAyOTcwMjI0MjMyMzA3NjI3MjMyOTc2NDA2NTU3NTU2NjI5NTI1MzcwNjk2NzQzMjEzMjEyNzQ2NzM3NDU2MDA1NzQzMjQyMzU2NTU1NjQ1ODM5NzQ1OTU0NzczMzUwNTUwODIzMzYwNzA4NTU1NjA5NTgyNTExMDkzNjQyNzA0NDYxNzY2NDIxNDM2NDYwNjAwMzUzMjE2MDY0NTgyNjYzMzc3NzcwMjkzNzY3MzIwODM0Mjk3NjY2NjE2MTYzNzM1NDM3NzcwNjU2MjI2MzM4MjQ1NzY4NzExMTc2NTMzMzY2MzY2MDI1NjEzMjA5NjU1OTYzNTIyNTU4NzU1MjI5NTAwNTc3MjEwNTM0Mzk2NjEwMjAwNzY1Mjg0MzY5MjQzNDMyNjI2NTI3NzcwOTEyMjg1NDM5Njk2Nzc2NTk0MzUwNzY2NTUwNjQ0MzI4MDQ1NzA4Mjk3NjEyNDQxMjM3Njc2NTU0NDQ1NzU4MjQwMTI5NjgyNjU2Njg2MjY0NTc0MjExMjU2ODI3MjM2MjczNjg3MzU4NjYxMjM2NjczNzM1MzgyNTA0NzczODM5NjAyNzQwMTE2MTYzMDMzMzU0NjM2NDM0MjAwMzQ0MDMyNDExMjM0NDA1NTg2MzI3MjUzMDUyNjU0MzM1MjYyMjc3NjQxMDYwNDQ3MDY3Mjc0MTUzMzM2MDY3NzM0MDc2NzEzNTU4MjY1NDA3MzYnOwoJCQl2YXIgc2hjX2FzX3RleHQgPSAneyJ2ZXJpZmlhYmxlQ3JlZGVudGlhbCI6IFsiZXlKNmFYQWlPaUpFUlVZaUxDSmhiR2NpT2lKRlV6STFOaUlzSW10cFpDSTZJak5MWm1SbkxWaDNVQzAzWjFoNWVYZDBWV1pWUVVSM1FuVnRSRTlRUzAxUmVDMXBSVXhNTVRGWE9YTWlmUS4zWkpMYjlzd0VJVF9TckM5eXBLb09qR2tXNTBDZlJ5S0FrMTdDWHlncWJYRmdnLUJwSXk0Z2Y1N2Qya0hmU0RKS2Fmb3R1THc0OHlROTZCamhBNkdsTWJZVlZVY1VaWFJ5cEFHbENZTnBaS2hqeFhlU1RzYWpCV3BKd3hRZ052dW9CTlh6YklWN2ZLdEtLOHVDemdvNk80aEhVZUU3dllQOG5fYW05T3c0SUZJVC11MHRaUFR2MlRTM2owclZQNmdlOUhDcGdBVnNFZVh0RFRmcHUxUFZJa3Q3UVlkZm1DSXpPbGdXZGFsSUI3X1hVLXVOOGlhZ05GUFFlRk50Z19uaGVJY0I1UTNobWduSjNSQU9GSkdJa19HZkEtR0JBXzd1NW9FRDhNajRLOFVoX1p6aGRMaUNTS3ROc1NEZDQ0MEllWXo5dnFBam52ODdBZWUxeVZzWmdxNDFSVC12VXpNRXUybFdOUmkwZFF3ejhXamJzVHpiajc5VzNGTU1rMHh4LVg3VHNnWGRKQkthWWZYdnM4RTVYdnQ5dGw0UE1hRTl2eDg2R1lHc3lwOTJGZmNiQlYxWDZuREhRRlUzZ2xOdllKNU14Y3duaXZJZG5ZWTBMRzN2eHNra1ZkcUNubUp3OTVvZTBJME9YRE5zYWlxblEtV25pTjdrU3I1d01oZXg5SElYT2Y2LXVJRE9nelNYSHowY2RSSkdpcUtTalEtZlpuc2xyZENuVF94WklQTnEyeXdhVi02d1JVdnpQVDlCZy5FVW9HWDFoeE5EM2tHUGY1SHRfNUVBUXY3TFhjYTNVOVFrVFprRl9zRFZ6cU5nenIxTWVSa3p5MTcyTDdlbXFCVjQ4LWgyMG9HY0k0X3l4OENzcWNkZyJdfScKCQkJdmFyIHNoY19hc19vYmogPSBKU09OLnBhcnNlKHNoY19hc190ZXh0KTsKCgkJCXZhciBraW5kcyA9IHsKCQkJCSdzaGNfYXNfb2JqJzogc2hjX2FzX29iaiwKCQkJCSdzaGNfYXNfbnVtZXJpYyc6IHNoY19hc19udW1lcmljCgkJCX0KCgkJCXZhciBjbGFpbXNPYmogPSB7CgkJCQkiaWRfdG9rZW4iOnsKCQkJCQkic2hjIjp7CgkJCQkJCXZhbHVlOiBraW5kc1traW5kXQoJCQkJCX0gCgkJCQl9CgkJCX0KCQkJdmFyIGNsYWltc192ZXJib3NlID0gSlNPTi5zdHJpbmdpZnkoY2xhaW1zT2JqLCBudWxsLCAyKTsKCQkJdmFyIGNsYWltc19taW4gPSBKU09OLnN0cmluZ2lmeShjbGFpbXNPYmopOwoJCQl2YXIgd2FsbGV0X3VybCA9IHNlbGZJc3N1ZWRJc3N1ZXJJZGVudGlmaWVyKCk7CgkJCXZhciBpc3N1ZXIgPSAnaHR0cHM6Ly8nICsgd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgJzozMDAwL29oaXBfc21hcnRoZWFsdGhjYXJkJzsKCQkJdmFyIG5leHRfc3RlcCA9IHdhbGxldF91cmwgKyAnJTNGcGFnZSUzRHBlcnNvbmFzJzsKCgkJCXZhciB0ZXh0X2FyZWFfY29udGVudCA9IHdhbGxldF91cmwgKyAnXHJcbicKCQkJCSsgJz9yZXFfY3JlZD0nICsgaXNzdWVyICsgJ1xyXG4nCgkJCQkrICcmY2xhaW1zPScgKyBjbGFpbXNfdmVyYm9zZSArICdcclxuJwoJCQkJKyAnJm5leHRzdGVwPScgKyBuZXh0X3N0ZXA7CiAJCQkKCQkJdmFyIGFyZWFFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0YXJlYTEiKTsKCQkJYXJlYUVsLmlubmVySFRNTCA9IHRleHRfYXJlYV9jb250ZW50OwoKCQkJdmFyIHVybCA9IHdhbGxldF91cmwgKyAnP3JlcV9jcmVkPScgKyBpc3N1ZXIgKyAnJmNsYWltcz0nICsgY2xhaW1zX21pbiArICcmbmV4dF9zdGVwPScgKyBuZXh0X3N0ZXA7CgkJCXZhciBwYXlsb2FkRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGF5bG9hZCIpOwoJCQlwYXlsb2FkRWwudmFsdWUgPSB1cmw7CgkJfQoKCQlmdW5jdGlvbiBkb19waWNrdXAoKXsKCQkJdmFyIHNoY19hc191cmwgPSAnaHR0cHM6Ly9zcGVjLnNtYXJ0aGVhbHRoLmNhcmRzL2V4YW1wbGVzL2V4YW1wbGUtMDAtZS1maWxlLnNtYXJ0LWhlYWx0aC1jYXJkJzsJCgoJCQkvLyB2YXIgc2hjX2FzX3VybCA9ICdodHRwczovL2NvdmF4LmRldi5vbnRhcmlvaGVhbHRoLmNhOjE0NDMvdmMvaXNzdWVyL3NoYy9yZXRyaWV2ZT9yZWNlaXB0SWQ9MjJTMzZDRDI4R0E4REpEVyc7CgkJCS8vIGVuY29kaW5nVVJJQ29tcG9uZW50IGZpeGVzIHRoZSBwcm9ibGVtIHVudGlsIHRoZSBidWcgYXQgT0ggaXMgZml4ZWQKCQkJLy8gIHNoY19hc191cmwgPSBlbmNvZGVVUklDb21wb25lbnQoc2hjX2FzX3VybCk7CgoJCQl2YXIgd2FsbGV0X3VybCA9IHNlbGZJc3N1ZWRJc3N1ZXJJZGVudGlmaWVyKCk7CgkJCXZhciB0ZXh0X2FyZWFfY29udGVudCA9IHdhbGxldF91cmwgKyAnXHJcbicKCQkJCSsgJz9waWNrdXBfdXJpPScgKyBzaGNfYXNfdXJsOwogCQkJCgkJCXZhciBhcmVhRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGV4dGFyZWExIik7CgkJCWFyZWFFbC5pbm5lckhUTUwgPSB0ZXh0X2FyZWFfY29udGVudDsKCgkJCXZhciB1cmwgPSB3YWxsZXRfdXJsICsgJz9waWNrdXBfdXJpPScgKyBzaGNfYXNfdXJsOwoJCQl2YXIgcGF5bG9hZEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBheWxvYWQiKTsKCQkJcGF5bG9hZEVsLnZhbHVlID0gdXJsOwoJCX0KCgkJZnVuY3Rpb24gc3VibWl0KCl7CgkJCXZhciBwYXlsb2FkRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGF5bG9hZCIpOwoJCQl2YXIgdXJsID0gcGF5bG9hZEVsLnZhbHVlOwoJCQlpZiAoIXVybCl7CgkJCQlhbGVydCgnU2VsZWN0IFB1c2gsIFB1bGwgb3IgUVJDb2RlJyk7CgkJCQlyZXR1cm47CgkJCX0KCgkJCXdpbmRvdy5sb2NhdGlvbiA9IHVybDsKCQl9CQkJCgoJPC9zY3JpcHQ-Cgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTMuNC4xLnNsaW0ubWluLmpzIiBpbnRlZ3JpdHk9InNoYTM4NC1KNnFhNDg0OWJsRTIrcG9UNFdueUtodjV2WkY1U3JQbzBpRWp3QnZLVTdpbUdGQVYwd3dqMXlZZm9SU0pvWituIiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4KCTxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3BvcHBlci5qc0AxLjE2LjAvZGlzdC91bWQvcG9wcGVyLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEzODQtUTZFOVJIdmJJeVpGSm9mdCsybUpiSGFFV2xkbHZJOUlPWXk1bjN6Vjl6elR0bUkzVWtzZFFSVnZveE1mb29BbyIgY3Jvc3NvcmlnaW49ImFub255bW91cyI-PC9zY3JpcHQ-Cgk8c2NyaXB0IHNyYz0iaHR0cHM6Ly9zdGFja3BhdGguYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvNC40LjEvanMvYm9vdHN0cmFwLm1pbi5qcyIgaW50ZWdyaXR5PSJzaGEzODQtd2ZTREYyRTUwWTJEMXVVZGowTzN1TUJKbmp1VUQ0SWg3WXdhWWQxaXFma3RqMFVvZDhHQ0V4bDNPZzhpZndCNiIgY3Jvc3NvcmlnaW49ImFub255bW91cyI-PC9zY3JpcHQ-CjwvYm9keT4KPC9odG1sPg","manifest.json":"eyAgDQogICJuYW1lIjogIlRyeWJlIENyZWRlbnRpYWwgV2FsbGV0IiwgIA0KICAic2hvcnRfbmFtZSI6ICJDcmVkIFdhbGxldCIsICANCiAgImljb25zIjogWw0KICAgICAgeyAgDQogICAgICAgICJzcmMiOiAiaW1hZ2VzL2ljb25zL3NtaWxleS0xOTJ4MTkyLnBuZyIsICANCiAgICAgICAgInNpemVzIjogIjE5MngxOTIiLA0KICAgICAgICAidHlwZSI6ICJpbWFnZS9wbmciDQogICAgICB9LA0KICAgICAgeyAgDQogICAgICAgICJzcmMiOiAiaW1hZ2VzL2ljb25zL2JsdWUtNTEyeDUxMi5wbmciLCAgDQogICAgICAgICJzaXplcyI6ICI1MTJ4NTEyIiwNCiAgICAgICAgInR5cGUiOiAiaW1hZ2UvcG5nIg0KICAgICAgfQ0KICAgIF0sICANCiAgInNjb3BlIjogIi93YWxsZXQvIiwNCiAgInN0YXJ0X3VybCI6ICIuL3dhbGxldC5odG1sIiwgIA0KICAiZGlzcGxheSI6ICJzdGFuZGFsb25lIiwNCiAgImJhY2tncm91bmRfY29sb3IiOiAiIzMzNjJCNiIsDQogICJ0aGVtZV9jb2xvciI6ICIjMzM2MkI2IiwNCiAgImdjbV9zZW5kZXJfaWQiOiAiNjUzMzE3MjI2Nzk2Ig0KfQ","operator_profile.json":"ew0KCSJfY29tbWVudCI6ICJUaGlzIGZpbGUgb3JpZ2luYXRlZCBmcm9tIHdlYi93YWxsZXQgb2Ygb2lkYy1saWIiLA0KCSJ3YWxsZXRfYXBwX2dyb3VwIjogew0KCQkiYXBwX2xhdW5jaGVyIjogIjwtLUFQUF9MQVVOQ0hFUi0tPi9hcHBfbGF1bmNoZXIiLA0KCQkidWhuIjogIjwtLVVITi0tPi91aG4iLA0KCQkiZGVudGlzdCI6ICI8LS1ERU5USVNULS0-L2RlbnRpc3QiDQoJfSwNCgkid2FsbGV0X2lzc3Vlcl9ncm91cCI6IHsNCgkJIk9udGFyaW8gRGlnaXRhbCBIZWFsdGggQ2FyZCI6ICI8LS1JU1NVRVJfSE9TVC0tPi9vaGlwIiwNCgkJIk9udGFyaW8gQ09WSUQgQ2FyZCI6ICI8LS1JU1NVRVJfSE9TVC0tPi9vaGlwX2NvdmlkIg0KCX0sDQoJIndhbGxldF9jb25maWdfZ3JvdXAiOiB7DQoJCSJwZXJzb25hX2tleVR5cGUiOiB7DQoJCQkia3R5IjogIkVDIiwNCgkJCSJhbGciOiAiRUNEU0EiLA0KCQkJImNydiI6ICJQLTI1NiINCgkJfSwNCgkJIndhbGxldF9zdGFydHVwIjogew0KCQkJInBpbl9sZW5ndGgiOiA2LA0KCQkJInJlcXVpcmVfcGlpIjogZmFsc2UsDQoJCQkic2VydmljZV9jb21wb25lbnQiOiB0cnVlCQkJDQoJCX0sDQoJCSJkaWRfbWV0aG9kIjogInBlZXIiLA0KCQkiaW5pdGlhbF9vcHRpb25zIjogew0KCQkJImZpcnN0X3VzZSI6IHRydWUsDQoJCQkiZGVmYXVsdF9jYXJkIjogIiIsDQoJCQkic3RhcnR1cF9pZGVudGlmaWVyIjogIiIsDQoJCQkic3RhcnR1cF9waW4iOiAiIiwNCgkJCSJzaGFyZV9jb25zZW50ZWRfY2xhaW1zIjogZmFsc2UsDQoJCQkic2VsZl9hc3NlcnRlZF9wZXJzb25hcyI6IGZhbHNlLA0KCQkJImF1dG9fc3luYyI6IGZhbHNlLA0KCQkJImNoYXBpX3dhbGxldCI6IGZhbHNlDQoJCX0sDQoJCSJjcmVkZW50aWFsX3BpY2t1cCI6IHsNCgkJCSJodHRwczovL2NvdmF4LmRldi5vbnRhcmlvaGVhbHRoLmNhOjE0NDMvIjogIjwtLUlTU1VFUl9IT1NULS0-L29oaXBfc21hcnRoZWFsdGhjYXJkIiwNCgkJCSJodHRwczovL3NwZWMuc21hcnRoZWFsdGguY2FyZHMiOiAiPC0tSVNTVUVSX0hPU1QtLT4vb2hpcF9zbWFydGhlYWx0aGNhcmQiDQoJCX0NCgl9DQp9","operator_profile_EC.json":"ew0KCSJfY29tbWVudCI6ICJUaGlzIGZpbGUgaXMgbWFzdGVyZWQgaW4gd2ViL3dhbGxldCBvZiBvaWRjLWxpYiIsDQoJIndhbGxldF9hcHBfZ3JvdXAiOiB7DQoJCSJhcHBfbGF1bmNoZXIiOiAiPC0tQVBQX0xBVU5DSEVSLS0-L2FwcF9sYXVuY2hlciIsDQoJCSJ1aG4iOiAiPC0tVUhOLS0-L3VobiIsDQoJCSJhaXJjYW5hZGEiOiAiPC0tREVOVElTVC0tPi9haXJjYW5hZGEiDQoJfSwNCgkid2FsbGV0X2lzc3Vlcl9ncm91cCI6IHsNCgkJIk9udGFyaW8gRGlnaXRhbCBIZWFsdGggQ2FyZCI6ICI8LS1JU1NVRVJfSE9TVC0tPi9vaGlwIiwNCgkJIk9udGFyaW8gQ09WSUQgQ2FyZCI6ICI8LS1JU1NVRVJfSE9TVC0tPi9vaGlwX2NvdmlkIg0KCX0sDQoJIndhbGxldF9jb25maWdfZ3JvdXAiOiB7DQoJCSJwZXJzb25hX2tleVR5cGUiOiB7DQoJCQkia3R5IjogIkVDIiwNCgkJCSJhbGciOiAiRUNEU0EiLA0KCQkJImNydiI6ICJQLTI1NiINCgkJfSwNCgkJImRpZF9tZXRob2QiOiAicGVlciIsDQoJCSJpbml0aWFsX29wdGlvbnMiOiB7DQoJCQkiZmlyc3RfdXNlIjogdHJ1ZSwNCgkJCSJkZWZhdWx0X2NhcmQiOiAiIiwNCgkJCSJzdGFydHVwX2lkZW50aWZpZXIiOiAiIiwNCgkJCSJzdGFydHVwX3BpbiI6ICIiLA0KCQkJInNoYXJlX2NvbnNlbnRlZF9jbGFpbXMiOiBmYWxzZSwNCgkJCSJzZWxmX2Fzc2VydGVkX3BlcnNvbmFzIjogZmFsc2UsDQoJCQkiYXV0b19zeW5jIjogZmFsc2UsDQoJCQkiY2hhcGlfd2FsbGV0IjogZmFsc2UNCgkJfQ0KCX0NCn0","operator_profile_ED.json":"ew0KCSJfY29tbWVudCI6ICJUaGlzIGZpbGUgaXMgbWFzdGVyZWQgaW4gd2ViL3dhbGxldCBvZiBvaWRjLWxpYiIsDQoJIndhbGxldF9hcHBfZ3JvdXAiOiB7DQoJCSJhcHBfbGF1bmNoZXIiOiAiPC0tQVBQX0xBVU5DSEVSLS0-L2FwcF9sYXVuY2hlciIsDQoJCSJ1aG4iOiAiPC0tVUhOLS0-L3VobiIsDQoJCSJhaXJjYW5hZGEiOiAiPC0tREVOVElTVC0tPi9haXJjYW5hZGEiDQoJfSwNCgkid2FsbGV0X2lzc3Vlcl9ncm91cCI6IHsNCgkJIk9udGFyaW8gRGlnaXRhbCBIZWFsdGggQ2FyZCI6ICI8LS1JU1NVRVJfSE9TVC0tPi9vaGlwIiwNCgkJIk9udGFyaW8gQ09WSUQgQ2FyZCI6ICI8LS1JU1NVRVJfSE9TVC0tPi9vaGlwX2NvdmlkIg0KCX0sDQoJIndhbGxldF9jb25maWdfZ3JvdXAiOiB7DQoJCSJwZXJzb25hX2tleVR5cGUiOiB7DQoJCQkia3R5IjogIk9LUCIsDQoJCQkiYWxnIjogIkVkRFNBIiwNCgkJCSJjcnYiOiAiRWQyNTUxOSINCgkJfSwNCgkJImRpZF9tZXRob2QiOiAicGVlciIsDQoJCSJpbml0aWFsX29wdGlvbnMiOiB7DQoJCQkiZmlyc3RfdXNlIjogdHJ1ZSwNCgkJCSJkZWZhdWx0X2NhcmQiOiAiIiwNCgkJCSJzdGFydHVwX2lkZW50aWZpZXIiOiAiIiwNCgkJCSJzdGFydHVwX3BpbiI6ICIiLA0KCQkJInNoYXJlX2NvbnNlbnRlZF9jbGFpbXMiOiBmYWxzZSwNCgkJCSJzZWxmX2Fzc2VydGVkX3BlcnNvbmFzIjogZmFsc2UsDQoJCQkiYXV0b19zeW5jIjogZmFsc2UsDQoJCQkiY2hhcGlfd2FsbGV0IjogZmFsc2UNCgkJfQ0KCX0NCn0","REM - note on wallet.html.txt":"V2FsbGV0Lmh0bWwgaXMgc2VydmVkIHVwIHVwb24gY29ubmVjdGlvbiAtIHNlZSB0aGUgbGliJ3MgaW5kZXguanMgYW5kIA0KdGhlIHdhbGxldCBmZWF0dXJlX21vZHVsZSdzIHByb2Nlc3NQd2FTdGFydCgpIA0KVGhpcyBhbGxvd3MgY3JlYXRpb24gb2YgYSBwZXItd2FsbGV0IGtleSBtYWludGFpbmVkIGJ5IHRoZSBzZXJ2ZXINCnRoYXQgY2FuIGFsc28gYmUgdXNlZCBmb3IgcmVzdG9yZSBpbiBjYXNlIHdhbGxldCBpcyBudWtlZCBieSBhcHBsZSdzIG5vLXVzZXItaW5pdGlhdGVkLXN0b3JhZ2UgcnVsZXMNCg","remove_wallet.html":"PGh0bWw-DQo8aGVhZD4NCjwvaGVhZD4NCjxib2R5Pg0KPGgyPlVuaW5zdGFsbGluZyBQZXJzb25hbCBQV0E8L2gyPg0KDQo8c2NyaXB0IHNyYz0iL3dhbGxldC9qcy9way5qcyI-PC9zY3JpcHQ-DQo8c2NyaXB0IHNyYz0iL3dhbGxldC9qcy9jbGFpbWVyQ2xpZW50TGliLm1pbi5qcyI-PC9zY3JpcHQ-DQo8c2NyaXB0IHNyYz0iL3dhbGxldC9qcy9yZW1vdmVfcHdhLmpzIj48L3NjcmlwdD4NCjwvYm9keT4NCjwvaHRtbD4","service-worker.js":"KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitpKyInIik7dGhyb3cgYS5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpKHsxOltmdW5jdGlvbihyZXF1aXJlLG1vZHVsZSxleHBvcnRzKXsKJ3VzZSBzdHJpY3QnCgpleHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoCmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheQpleHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5Cgp2YXIgbG9va3VwID0gW10KdmFyIHJldkxvb2t1cCA9IFtdCnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXkKCnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nCmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7CiAgbG9va3VwW2ldID0gY29kZVtpXQogIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaQp9CgovLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuCi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnMKcmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyCnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2MwoKZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7CiAgdmFyIGxlbiA9IGI2NC5sZW5ndGgKCiAgaWYgKGxlbiAlIDQgPiAwKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKQogIH0KCiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kCiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyCiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKQogIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuCgogIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuCiAgICA_IDAKICAgIDogNCAtICh2YWxpZExlbiAlIDQpCgogIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl0KfQoKLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhCmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkgewogIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpCiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXQogIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdCiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuCn0KCmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHsKICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW4KfQoKZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkgewogIHZhciB0bXAKICB2YXIgbGVucyA9IGdldExlbnMoYjY0KQogIHZhciB2YWxpZExlbiA9IGxlbnNbMF0KICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXQoKICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKQoKICB2YXIgY3VyQnl0ZSA9IDAKCiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFycwogIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwCiAgICA_IHZhbGlkTGVuIC0gNAogICAgOiB2YWxpZExlbgoKICB2YXIgaQogIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkgewogICAgdG1wID0KICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTgpIHwKICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8CiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8CiAgICAgIHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMyldCiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRgogICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4-IDgpICYgMHhGRgogICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGCiAgfQoKICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAyKSB7CiAgICB0bXAgPQogICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8CiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA-PiA0KQogICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGCiAgfQoKICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7CiAgICB0bXAgPQogICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxMCkgfAogICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfAogICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMikKICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA-PiA4KSAmIDB4RkYKICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRgogIH0KCiAgcmV0dXJuIGFycgp9CgpmdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkgewogIHJldHVybiBsb29rdXBbbnVtID4-IDE4ICYgMHgzRl0gKwogICAgbG9va3VwW251bSA-PiAxMiAmIDB4M0ZdICsKICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICsKICAgIGxvb2t1cFtudW0gJiAweDNGXQp9CgpmdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHsKICB2YXIgdG1wCiAgdmFyIG91dHB1dCA9IFtdCiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHsKICAgIHRtcCA9CiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICsKICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICsKICAgICAgKHVpbnQ4W2kgKyAyXSAmIDB4RkYpCiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSkKICB9CiAgcmV0dXJuIG91dHB1dC5qb2luKCcnKQp9CgpmdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkgewogIHZhciB0bXAKICB2YXIgbGVuID0gdWludDgubGVuZ3RoCiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzCiAgdmFyIHBhcnRzID0gW10KICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDMKCiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlcgogIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHsKICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA_IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpCiAgfQoKICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzCiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHsKICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdCiAgICBwYXJ0cy5wdXNoKAogICAgICBsb29rdXBbdG1wID4-IDJdICsKICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArCiAgICAgICc9PScKICAgICkKICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHsKICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdCiAgICBwYXJ0cy5wdXNoKAogICAgICBsb29rdXBbdG1wID4-IDEwXSArCiAgICAgIGxvb2t1cFsodG1wID4-IDQpICYgMHgzRl0gKwogICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICsKICAgICAgJz0nCiAgICApCiAgfQoKICByZXR1cm4gcGFydHMuam9pbignJykKfQoKfSx7fV0sMjpbZnVuY3Rpb24ocmVxdWlyZSxtb2R1bGUsZXhwb3J0cyl7CihmdW5jdGlvbiAoQnVmZmVyKXsoZnVuY3Rpb24gKCl7Ci8qIQogKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci4KICoKICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi8KCid1c2Ugc3RyaWN0JwoKdmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpCnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpCgpleHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlcgpleHBvcnRzLlNsb3dCdWZmZXIgPSBTbG93QnVmZmVyCmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MAoKdmFyIEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmYKZXhwb3J0cy5rTWF4TGVuZ3RoID0gS19NQVhfTEVOR1RICgovKioKICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDoKICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdCkKICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0CiAqICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpCiAqCiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKywKICogT3BlcmEgMTEuNissIGlPUyA0LjIrLgogKgogKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGUKICogdXNpbmcgX19wcm90b19fLiBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YAogKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0CiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLgogKi8KQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpCgppZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJgogICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHsKICBjb25zb2xlLmVycm9yKAogICAgJ1RoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSAnICsKICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LicKICApCn0KCmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHsKICAvLyBDYW4gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWQ_CiAgdHJ5IHsKICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKQogICAgYXJyLl9fcHJvdG9fXyA9IHsgX19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9IH0KICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyCiAgfSBjYXRjaCAoZSkgewogICAgcmV0dXJuIGZhbHNlCiAgfQp9CgpPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSwgJ3BhcmVudCcsIHsKICBlbnVtZXJhYmxlOiB0cnVlLAogIGdldDogZnVuY3Rpb24gKCkgewogICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGhpcykpIHJldHVybiB1bmRlZmluZWQKICAgIHJldHVybiB0aGlzLmJ1ZmZlcgogIH0KfSkKCk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAnb2Zmc2V0JywgewogIGVudW1lcmFibGU6IHRydWUsCiAgZ2V0OiBmdW5jdGlvbiAoKSB7CiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZAogICAgcmV0dXJuIHRoaXMuYnl0ZU9mZnNldAogIH0KfSkKCmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAobGVuZ3RoKSB7CiAgaWYgKGxlbmd0aCA-IEtfTUFYX0xFTkdUSCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyArIGxlbmd0aCArICciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKQogIH0KICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZQogIHZhciBidWYgPSBuZXcgVWludDhBcnJheShsZW5ndGgpCiAgYnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGUKICByZXR1cm4gYnVmCn0KCi8qKgogKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXIKICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZgogKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzCiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0CiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuCiAqCiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC4KICovCgpmdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7CiAgLy8gQ29tbW9uIGNhc2UuCiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7CiAgICBpZiAodHlwZW9mIGVuY29kaW5nT3JPZmZzZXQgPT09ICdzdHJpbmcnKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicKICAgICAgKQogICAgfQogICAgcmV0dXJuIGFsbG9jVW5zYWZlKGFyZykKICB9CiAgcmV0dXJuIGZyb20oYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpCn0KCi8vIEZpeCBzdWJhcnJheSgpIGluIEVTMjAxNi4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9wdWxsLzk3CmlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAhPSBudWxsICYmCiAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywgewogICAgdmFsdWU6IG51bGwsCiAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgIHdyaXRhYmxlOiBmYWxzZQogIH0pCn0KCkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbgoKZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkgewogIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7CiAgICByZXR1cm4gZnJvbVN0cmluZyh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCkKICB9CgogIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUpKSB7CiAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh2YWx1ZSkKICB9CgogIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICB0aHJvdyBUeXBlRXJyb3IoCiAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICsKICAgICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKQogICAgKQogIH0KCiAgaWYgKGlzSW5zdGFuY2UodmFsdWUsIEFycmF5QnVmZmVyKSB8fAogICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIEFycmF5QnVmZmVyKSkpIHsKICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkKICB9CgogIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAnVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJwogICAgKQogIH0KCiAgdmFyIHZhbHVlT2YgPSB2YWx1ZS52YWx1ZU9mICYmIHZhbHVlLnZhbHVlT2YoKQogIGlmICh2YWx1ZU9mICE9IG51bGwgJiYgdmFsdWVPZiAhPT0gdmFsdWUpIHsKICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpCiAgfQoKICB2YXIgYiA9IGZyb21PYmplY3QodmFsdWUpCiAgaWYgKGIpIHJldHVybiBiCgogIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9QcmltaXRpdmUgIT0gbnVsbCAmJgogICAgICB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gJ2Z1bmN0aW9uJykgewogICAgcmV0dXJuIEJ1ZmZlci5mcm9tKAogICAgICB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoCiAgICApCiAgfQoKICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgJ1RoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksICcgKwogICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKQogICkKfQoKLyoqCiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yCiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLgogKiBCdWZmZXIuZnJvbShzdHJbLCBlbmNvZGluZ10pCiAqIEJ1ZmZlci5mcm9tKGFycmF5KQogKiBCdWZmZXIuZnJvbShidWZmZXIpCiAqIEJ1ZmZlci5mcm9tKGFycmF5QnVmZmVyWywgYnl0ZU9mZnNldFssIGxlbmd0aF1dKQogKiovCkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHsKICByZXR1cm4gZnJvbSh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKQp9CgovLyBOb3RlOiBDaGFuZ2UgcHJvdG90eXBlICphZnRlciogQnVmZmVyLmZyb20gaXMgZGVmaW5lZCB0byB3b3JrYXJvdW5kIENocm9tZSBidWc6Ci8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvMTQ4CkJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGUKQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkKCmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHsKICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpCiAgfSBlbHNlIGlmIChzaXplIDwgMCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJyArIHNpemUgKyAnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJykKICB9Cn0KCmZ1bmN0aW9uIGFsbG9jIChzaXplLCBmaWxsLCBlbmNvZGluZykgewogIGFzc2VydFNpemUoc2l6ZSkKICBpZiAoc2l6ZSA8PSAwKSB7CiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHNpemUpCiAgfQogIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHsKICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzCiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkCiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuCiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJwogICAgICA_IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwsIGVuY29kaW5nKQogICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpCiAgfQogIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSkKfQoKLyoqCiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS4KICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKQogKiovCkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykgewogIHJldHVybiBhbGxvYyhzaXplLCBmaWxsLCBlbmNvZGluZykKfQoKZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHNpemUpIHsKICBhc3NlcnRTaXplKHNpemUpCiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA_IDAgOiBjaGVja2VkKHNpemUpIHwgMCkKfQoKLyoqCiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuCiAqICovCkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7CiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpCn0KLyoqCiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLgogKi8KQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7CiAgcmV0dXJuIGFsbG9jVW5zYWZlKHNpemUpCn0KCmZ1bmN0aW9uIGZyb21TdHJpbmcgKHN0cmluZywgZW5jb2RpbmcpIHsKICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHsKICAgIGVuY29kaW5nID0gJ3V0ZjgnCiAgfQoKICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKQogIH0KCiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwCiAgdmFyIGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpCgogIHZhciBhY3R1YWwgPSBidWYud3JpdGUoc3RyaW5nLCBlbmNvZGluZykKCiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7CiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGwKICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuCiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJykKICAgIGJ1ZiA9IGJ1Zi5zbGljZSgwLCBhY3R1YWwpCiAgfQoKICByZXR1cm4gYnVmCn0KCmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKGFycmF5KSB7CiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA8IDAgPyAwIDogY2hlY2tlZChhcnJheS5sZW5ndGgpIHwgMAogIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKQogIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHsKICAgIGJ1ZltpXSA9IGFycmF5W2ldICYgMjU1CiAgfQogIHJldHVybiBidWYKfQoKZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyIChhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7CiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJykKICB9CgogIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKQogIH0KCiAgdmFyIGJ1ZgogIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHsKICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KQogIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHsKICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KQogIH0gZWxzZSB7CiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKQogIH0KCiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UKICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZQogIHJldHVybiBidWYKfQoKZnVuY3Rpb24gZnJvbU9iamVjdCAob2JqKSB7CiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7CiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDAKICAgIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuKQoKICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBidWYKICAgIH0KCiAgICBvYmouY29weShidWYsIDAsIDAsIGxlbikKICAgIHJldHVybiBidWYKICB9CgogIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHsKICAgIGlmICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gJ251bWJlcicgfHwgbnVtYmVySXNOYU4ob2JqLmxlbmd0aCkpIHsKICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKQogICAgfQogICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqKQogIH0KCiAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkgewogICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpCiAgfQp9CgpmdW5jdGlvbiBjaGVja2VkIChsZW5ndGgpIHsKICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW4KICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLikKICBpZiAobGVuZ3RoID49IEtfTUFYX0xFTkdUSCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArCiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsgS19NQVhfTEVOR1RILnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKQogIH0KICByZXR1cm4gbGVuZ3RoIHwgMAp9CgpmdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHsKICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXEKICAgIGxlbmd0aCA9IDAKICB9CiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKQp9CgpCdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikgewogIHJldHVybiBiICE9IG51bGwgJiYgYi5faXNCdWZmZXIgPT09IHRydWUgJiYKICAgIGIgIT09IEJ1ZmZlci5wcm90b3R5cGUgLy8gc28gQnVmZmVyLmlzQnVmZmVyKEJ1ZmZlci5wcm90b3R5cGUpIHdpbGwgYmUgZmFsc2UKfQoKQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7CiAgaWYgKGlzSW5zdGFuY2UoYSwgVWludDhBcnJheSkpIGEgPSBCdWZmZXIuZnJvbShhLCBhLm9mZnNldCwgYS5ieXRlTGVuZ3RoKQogIGlmIChpc0luc3RhbmNlKGIsIFVpbnQ4QXJyYXkpKSBiID0gQnVmZmVyLmZyb20oYiwgYi5vZmZzZXQsIGIuYnl0ZUxlbmd0aCkKICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihhKSB8fCAhQnVmZmVyLmlzQnVmZmVyKGIpKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAnVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5JwogICAgKQogIH0KCiAgaWYgKGEgPT09IGIpIHJldHVybiAwCgogIHZhciB4ID0gYS5sZW5ndGgKICB2YXIgeSA9IGIubGVuZ3RoCgogIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7CiAgICBpZiAoYVtpXSAhPT0gYltpXSkgewogICAgICB4ID0gYVtpXQogICAgICB5ID0gYltpXQogICAgICBicmVhawogICAgfQogIH0KCiAgaWYgKHggPCB5KSByZXR1cm4gLTEKICBpZiAoeSA8IHgpIHJldHVybiAxCiAgcmV0dXJuIDAKfQoKQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykgewogIHN3aXRjaCAoU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpKSB7CiAgICBjYXNlICdoZXgnOgogICAgY2FzZSAndXRmOCc6CiAgICBjYXNlICd1dGYtOCc6CiAgICBjYXNlICdhc2NpaSc6CiAgICBjYXNlICdsYXRpbjEnOgogICAgY2FzZSAnYmluYXJ5JzoKICAgIGNhc2UgJ2Jhc2U2NCc6CiAgICBjYXNlICd1Y3MyJzoKICAgIGNhc2UgJ3Vjcy0yJzoKICAgIGNhc2UgJ3V0ZjE2bGUnOgogICAgY2FzZSAndXRmLTE2bGUnOgogICAgICByZXR1cm4gdHJ1ZQogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIGZhbHNlCiAgfQp9CgpCdWZmZXIuY29uY2F0ID0gZnVuY3Rpb24gY29uY2F0IChsaXN0LCBsZW5ndGgpIHsKICBpZiAoIUFycmF5LmlzQXJyYXkobGlzdCkpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKQogIH0KCiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApCiAgfQoKICB2YXIgaQogIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkgewogICAgbGVuZ3RoID0gMAogICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgbGVuZ3RoICs9IGxpc3RbaV0ubGVuZ3RoCiAgICB9CiAgfQoKICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aCkKICB2YXIgcG9zID0gMAogIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7CiAgICB2YXIgYnVmID0gbGlzdFtpXQogICAgaWYgKGlzSW5zdGFuY2UoYnVmLCBVaW50OEFycmF5KSkgewogICAgICBidWYgPSBCdWZmZXIuZnJvbShidWYpCiAgICB9CiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKQogICAgfQogICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpCiAgICBwb3MgKz0gYnVmLmxlbmd0aAogIH0KICByZXR1cm4gYnVmZmVyCn0KCmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHsKICBpZiAoQnVmZmVyLmlzQnVmZmVyKHN0cmluZykpIHsKICAgIHJldHVybiBzdHJpbmcubGVuZ3RoCiAgfQogIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBpc0luc3RhbmNlKHN0cmluZywgQXJyYXlCdWZmZXIpKSB7CiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGgKICB9CiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAnVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiAnICsKICAgICAgJ1JlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBzdHJpbmcKICAgICkKICB9CgogIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoCiAgdmFyIG11c3RNYXRjaCA9IChhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gPT09IHRydWUpCiAgaWYgKCFtdXN0TWF0Y2ggJiYgbGVuID09PSAwKSByZXR1cm4gMAoKICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb24KICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZQogIGZvciAoOzspIHsKICAgIHN3aXRjaCAoZW5jb2Rpb