oidc-lib
Version:
A library for creating OIDC Service Providers
1 lines • 35 kB
JSON
{"issuer":"smart-credential","oidc_lib_version":"^2.7.4","code":{"oidc_config.json":"ew0KICAiY29uZmlnIjogew0KICAgICJjbGllbnQiOiAic21hcnQtY3JlZGVudGlhbCIsDQogICAgIm1xdHRfc2VydmVyIjogIndzOi8vaXRzb3Vyd2ViLmNvbTovODAwMCINCiAgfSwNCiAgImNvbmZpZ19maWxlcyI6IFsgDQogICAgIi9zbWFydC1jcmVkZW50aWFsL29pZGNfY29uZmlnLmpzb24iLA0KICAgICIvc21hcnQtY3JlZGVudGlhbC9jcmVkZW50aWFscy9Db3ZpZC1JbW11bml0eVRlc3QtUFY3Lmpzb24iLA0KICAgICIvc21hcnQtY3JlZGVudGlhbC9jcmVkZW50aWFscy9PbnRhcmlvLUhlYWx0aC1JbnN1cmFuY2UtUGxhbi5qc29uIiwNCiAgICAiL3NtYXJ0LWNyZWRlbnRpYWwvY3JlZGVudGlhbHMvT0gtU21hcnRIZWFsdGhDYXJkLVByb29mLmpzb24iDQogIF0NCn0","smart-credential.js":"bW9kdWxlLmV4cG9ydHMgPSB7DQoJcmVnaXN0ZXJFbmRwb2ludHM6IHJlZ2lzdGVyRW5kcG9pbnRzDQp9DQoNCmNvbnN0IGNvbnRlbnRfbW9kdWxlX25hbWUgPSAnc21hcnQtY3JlZGVudGlhbCc7DQoNCnZhciBwayA9IG51bGw7DQp2YXIgY3JlZGVudGlhbHM7DQp2YXIgdmlld1BhdGg7DQpjb25zdCBjb29raWVDb25maWcgPSB7DQogIHNlY3VyZTogdHJ1ZSwgLy8gdG8gZm9yY2UgaHR0cHMgKGlmIHlvdSB1c2UgaXQpDQogIG1heEFnZTogMTAwMDAwMCAvLyB0dGwgaW4gc2Vjb25kcyAocmVtb3ZlIHRoaXMgb3B0aW9uIGFuZCBjb29raWUgd2lsbCBkaWUgd2hlbiBicm93c2VyIGlzIGNsb3NlZCkNCn07DQoNCmZ1bmN0aW9uIHJlZ2lzdGVyRW5kcG9pbnRzKHBrU291cmNlKSB7DQoJcGsgPSBwa1NvdXJjZTsNCgl2aWV3UGF0aCA9IHBrLnBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBjb250ZW50X21vZHVsZV9uYW1lLCAndmlld3MnKTsgDQoNCg0KCS8vIGNyZWF0ZSB0aGUgY3JlZGVudGlhbHMgb2JqZWN0DQoJY3JlZGVudGlhbHMgPSBsb2FkQ3JlZGVudGlhbHMoKTsNCg0KCS8vIGxpc3RlbiBvbiB0aGUgd2VsbC1rbm93biB1cmkNCgl2YXIgZW5kcG9pbnQgPSAnLycgKyBjb250ZW50X21vZHVsZV9uYW1lICsgJy86Y3JlZGVudGlhbF90YWlsLy53ZWxsLWtub3duL3ZlcmlmaWFibGUtY3JlZGVudGlhbCc7DQoJcGsuYXBwLm9wdGlvbnMoZW5kcG9pbnQsIHBrLmNvcnMoKSk7DQoJcGsuYXBwLmdldChlbmRwb2ludCwgcGsudXRpbC5jb3JzT3B0aW9ucygpLCBmdW5jdGlvbihyZXEsIHJlcyl7DQoJCXZhciBjcmVkZW50aWFsX3RhaWwgPSByZXEucGFyYW1zLmNyZWRlbnRpYWxfdGFpbDsNCgkJcGsudXRpbC5sb2dfZGVidWcoJ1dFTEwtS05PV046ICBNZXRhZGF0YVJlcXVlc3Q6ICcgKyBjcmVkZW50aWFsX3RhaWwpOw0KCQlyZXMuc2V0ICh7DQoJCQknQ2FjaGUtQ29udHJvbCc6ICduby1zdG9yZScsDQoJCQknUHJhZ21hJzogJ25vLWNhY2hlJywNCgkJCSdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsDQoJCQknQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonDQoJCX0pOw0KDQoJCXJlcy5qc29uKG1ldGFkYXRhKHJlcSwgcmVzLCBjcmVkZW50aWFsX3RhaWwpKTsgICAgICAgIAkNCgl9KTsNCg0KCXZhciBlbmRwb2ludCA9ICcvJyArIGNvbnRlbnRfbW9kdWxlX25hbWUgKyAnLzpjcmVkZW50aWFsX3RhaWwvcmVnaXN0ZXInOw0KCXBrLmFwcC5vcHRpb25zKGVuZHBvaW50LCBway5jb3JzKCkpOw0KCXBrLmFwcC5nZXQoZW5kcG9pbnQsIHBrLnV0aWwuY29yc09wdGlvbnMoKSwgZnVuY3Rpb24ocmVxLCByZXMpew0KCQl2YXIgY3JlZGVudGlhbF90YWlsID0gcmVxLnBhcmFtcy5jcmVkZW50aWFsX3RhaWw7DQoJCXBrLnV0aWwubG9nX2RlYnVnKCdTTUFSVC1DUkVERU5USUFMIFJlZ2lzdGVyIFJlcXVlc3Q6ICcgKyBjcmVkZW50aWFsX3RhaWwpOw0KCQlwcm9jZXNzUmVnaXN0ZXIocmVxLCByZXMsIGNyZWRlbnRpYWxfdGFpbCk7DQoJfSk7DQoNCgl2YXIgZW5kcG9pbnQgPSAnLycgKyBjb250ZW50X21vZHVsZV9uYW1lICsgJy86Y3JlZGVudGlhbF90YWlsL3ZhbGlkYXRlJzsNCglway5hcHAub3B0aW9ucyhlbmRwb2ludCwgcGsuY29ycygpKTsNCglway5hcHAuZ2V0KGVuZHBvaW50LCBway51dGlsLmNvcnNPcHRpb25zKCksIGZ1bmN0aW9uKHJlcSwgcmVzKXsNCgkJdmFyIGNyZWRlbnRpYWxfdGFpbCA9IHJlcS5wYXJhbXMuY3JlZGVudGlhbF90YWlsOw0KCQlway51dGlsLmxvZ19kZWJ1ZygnU01BUlQtQ1JFREVOVElBTCBWYWxpZGF0ZSBSZXF1ZXN0OiAnICsgY3JlZGVudGlhbF90YWlsKTsNCgkJcHJvY2Vzc1ZhbGlkYXRlKHJlcSwgcmVzLCBjcmVkZW50aWFsX3RhaWwpOw0KCX0pOw0KDQoJdmFyIGVuZHBvaW50ID0gJy8nICsgY29udGVudF9tb2R1bGVfbmFtZSArICcvOmNyZWRlbnRpYWxfdGFpbC93YWxsZXQnOw0KCXBrLmFwcC5vcHRpb25zKGVuZHBvaW50LCBway5jb3JzKCkpOw0KCXBrLmFwcC5nZXQoZW5kcG9pbnQsIHBrLnV0aWwuY29yc09wdGlvbnMoKSwgZnVuY3Rpb24ocmVxLCByZXMpew0KCQl2YXIgY3JlZGVudGlhbF90YWlsID0gcmVxLnBhcmFtcy5jcmVkZW50aWFsX3RhaWw7DQoJCXBrLnV0aWwubG9nX2RlYnVnKCdTTUFSVC1DUkVERU5USUFMIFdhbGxldCBSZXF1ZXN0OiAnICsgY3JlZGVudGlhbF90YWlsKTsNCgkJcHJvY2Vzc1dhbGxldChyZXEsIHJlcywgY3JlZGVudGlhbF90YWlsKTsNCgl9KTsNCg0KCXZhciBlbmRwb2ludCA9ICcvJyArIGNvbnRlbnRfbW9kdWxlX25hbWUgKyAnL2Nvb2tpZXMnOw0KCXBrLmFwcC5vcHRpb25zKGVuZHBvaW50LCBway5jb3JzKCkpOw0KCXBrLmFwcC5nZXQoZW5kcG9pbnQsIHBrLnV0aWwuY29yc09wdGlvbnMoKSwgZnVuY3Rpb24ocmVxLCByZXMpew0KCQlway51dGlsLmxvZ19kZWJ1ZygnU01BUlQtQ1JFREVOVElBTCBDb29raWVzIFJlcXVlc3QnKTsNCgkJcHJvY2Vzc0Nvb2tpZXMocmVxLCByZXMpOw0KCX0pOw0KfQ0KDQpmdW5jdGlvbiBtZXRhZGF0YShyZXEsIHJlcywgY3JlZGVudGlhbF90YWlsKXsNCgl2YXIgcmVxdWVzdGVkQ3JlZGVudGlhbCA9IHNtYXJ0X2NyZWRlbnRpYWxfdXJsKHJlcywgY3JlZGVudGlhbF90YWlsKTsNCglpZiAoIXJlcXVlc3RlZENyZWRlbnRpYWwpew0KCQlyZXR1cm47DQoJfQ0KDQoJdmFyIG1ldGFkYXRhID0gew0KCQlyZWdpc3Rlcl9lbmRwb2ludDogcmVxdWVzdGVkQ3JlZGVudGlhbCArICcvcmVnaXN0ZXInLA0KCQl2YWxpZGF0ZV9lbmRwb2ludDogcmVxdWVzdGVkQ3JlZGVudGlhbCArICcvdmFsaWRhdGUnLA0KCQl3YWxsZXRfZW5kcG9pbnQ6IHJlcXVlc3RlZENyZWRlbnRpYWwgKyAnL3dhbGxldCcNCgl9DQoNCglyZXR1cm4gbWV0YWRhdGE7DQp9DQoNCg0KYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1JlZ2lzdGVyKHJlcSwgcmVzLCBjcmVkZW50aWFsX3RhaWwpew0KCXZhciByZXF1ZXN0ZWRDcmVkZW50aWFsID0gc21hcnRfY3JlZGVudGlhbF91cmwocmVzLCBjcmVkZW50aWFsX3RhaWwpOw0KCWlmICghcmVxdWVzdGVkQ3JlZGVudGlhbCl7DQoJCXJldHVybjsNCgl9DQoNCgl2YXIgc3RhdHVzID0gNDAwOw0KCXZhciBlcnJvck1zZyA9ICJVbmRlZmluZWQgRXJyb3IiOw0KCXRyeXsNCgkJdmFyIGNyZWRlbnRpYWxfaW5mbyA9IGNyZWRlbnRpYWxzW2NyZWRlbnRpYWxfdGFpbF07DQoJCWlmICghY3JlZGVudGlhbF9pbmZvKXsNCgkJCXRocm93ICd0aGVyZSBpcyBubyBjcmVkZW50aWFsX2luZm8gZm9yIHRoZSBjcmVkZW50aWFsIG5hbWUgKCcgKyBjcmVkZW50aWFsX3RhaWwgKyAnKSc7DQoJCX0NCg0KCQl2YXIgd2FsbGV0X3Byb29mID0gcmVxLnF1ZXJ5LndhbGxldF9wcm9vZjsNCgkJaWYgKCF3YWxsZXRfcHJvb2Ypew0KCQkJdGhyb3cgKCdNaXNzaW5nIHdhbGxldCBwcm9vZiBwYXJhbWV0ZXIuJykNCgkJfQ0KDQoJCXZhciBjb250ZW50T2JqZWN0ID0gew0KCQkJaWRfdG9rZW46IHdhbGxldF9wcm9vZg0KCQl9DQoNCgkJdmFyIHdhbGxldFByb29mVG9rZW4gPSBhd2FpdCBway50b2tlbi5wcm9jZXNzT1BUb2tlblJlc3VsdChjb250ZW50T2JqZWN0LCB7ZGlzYWJsZV90b2tlbl9leHBpcnk6IHRydWV9KTsNCg0KCQlpZiAod2FsbGV0UHJvb2ZUb2tlbi5hdWQgIT09IHJlcXVlc3RlZENyZWRlbnRpYWwpew0KCQkJdGhyb3cgJ3dhbGxldF9wcm9vZiBhdWQgKCcgKyB3YWxsZXRQcm9vZlRva2VuLmF1ZCArICcpIGRvZXMgbm90IHJlZmVyZW5jZSB0aGlzIHNtYXJ0IGNyZWRlbnRpYWwgKCcgKyByZXF1ZXN0ZWRDcmVkZW50aWFsICsgJyknOw0KCQl9DQoNCgkJaWYgKGNyZWRlbnRpYWxfaW5mby5pc3N1ZXJzLmluZGV4T2Yod2FsbGV0UHJvb2ZUb2tlbi5pc3MpIDwgMCl7DQoJCQl0aHJvdyAndGhlIGlzc3VlciBvZiB0aGUgcHJvb2YgKCcgKyB3YWxsZXRQcm9vZlRva2VuLmlzcyArICcpIGlzIG5vdCBhIHZhbGlkIGlzc3VlciBmb3IgdGhlIHNtYXJ0IGNyZWRlbnRpYWwnOw0KCQl9DQoNCgkJaWYgKCF3YWxsZXRQcm9vZlRva2VuLndhbGxldCl7DQoJCQl0aHJvdyAnbm8gd2FsbGV0IGlzIHNwZWNpZmllZCBpbiB0aGUgd2FsbGV0UHJvb2ZUb2tlbic7DQoJCX0NCg0KCQkvLyBUT0RPOiBjaGVjayB0aGF0IHRoZSBub25jZSBoYXMgbm90IGJlZW4gcmV1c2VkIHNpbmNlIGlhdCBub25jZTogIjkxMjgzMDMyMSINCg0KCQl2YXIgcmVkaXJlY3RfdXJsID0gcmVxLnF1ZXJ5LnJlZGlyZWN0Ow0KCSAgICByZXMucmVuZGVyKHBrLnBhdGguam9pbih2aWV3UGF0aCwgJ3JlZ2lzdGVyJyksIHsNCgkgICAgCWxheW91dDogJ21haW5fYm9vdHN0cmFwJywNCgkgICAgCWNyZWRlbnRpYWw6IHJlcXVlc3RlZENyZWRlbnRpYWwsDQoJICAgIAl3YWxsZXQ6ICB3YWxsZXRQcm9vZlRva2VuLndhbGxldCwNCgkgICAgCXJlZGlyZWN0X3VybDogcmVkaXJlY3RfdXJsDQoJICAgIH0pOw0KCX0NCgljYXRjaChlcnIpew0KCQl2YXIgbWVzc2FnZSA9IHsNCgkJCWVycm9yOiBlcnINCgkJfQ0KCQlyZXMuc3RhdHVzID0gc3RhdHVzOw0KCQlyZXMuanNvbihtZXNzYWdlKTsNCgkJcmVzLmVuZCgpOw0KCX0NCn0NCg0KLy9UT0RPOiBhbGxvdyBzcGVjaWZpY2F0aW9uIG9mIHBhcmFtZXRlcnMgdG8gY2hlY2sgKGUuZy4gd2FsbGV0LCBpc3N1ZXIsIGV0YykNCmZ1bmN0aW9uIHByb2Nlc3NWYWxpZGF0ZShyZXEsIHJlcywgY3JlZGVudGlhbF90YWlsKXsNCgl2YXIgcmVxdWVzdGVkQ3JlZGVudGlhbCA9IHNtYXJ0X2NyZWRlbnRpYWxfdXJsKHJlcywgY3JlZGVudGlhbF90YWlsKTsNCglpZiAoIXJlcXVlc3RlZENyZWRlbnRpYWwpew0KCQlyZXR1cm47DQoJfQ0KDQogICAgcmVzLnN0YXR1cyA9IDIwMDsNCgl2YXIgbWVzc2FnZSA9IHsNCgkJc3RhdHVzOiBjcmVkZW50aWFsc1tjcmVkZW50aWFsX3RhaWxdDQoJfQ0KCXJlcy5qc29uKG1lc3NhZ2UpOw0KICAgIHJlcy5lbmQoKTsJDQp9DQoNCmZ1bmN0aW9uIHByb2Nlc3NXYWxsZXQocmVxLCByZXMsIGNyZWRlbnRpYWxfdGFpbCl7DQoJdmFyIHJlcXVlc3RlZENyZWRlbnRpYWwgPSBzbWFydF9jcmVkZW50aWFsX3VybChyZXMsIGNyZWRlbnRpYWxfdGFpbCk7DQoJaWYgKCFyZXF1ZXN0ZWRDcmVkZW50aWFsKXsNCgkJcmV0dXJuOw0KCX0NCg0KCXJlcy5yZW5kZXIodmlld1BhdGggKyAnL2dldF93YWxsZXQnLCB7DQoJCXJlcXVlc3RlZENyZWRlbnRpYWw6IHJlcXVlc3RlZENyZWRlbnRpYWwNCgl9KTsNCn0NCg0KZnVuY3Rpb24gbG9hZENyZWRlbnRpYWxzKCl7DQoJdmFyIGNyZWRlbnRpYWxzID0ge307DQoJdHJ5ew0KCQl2YXIgY3JlZGVudGlhbHNEaXJOYW1lID0gcGsucGF0aC5qb2luKF9fZGlybmFtZSwgJ2NyZWRlbnRpYWxzJyk7DQoJCXZhciBkaXJlbnRzID0gcGsuZnMucmVhZGRpclN5bmMoY3JlZGVudGlhbHNEaXJOYW1lLCB7d2l0aEZpbGVUeXBlczogdHJ1ZX0pOw0KCQlmb3IgKHZhciBpPTA7IGk8ZGlyZW50cy5sZW5ndGg7IGkrKyl7DQoJCQl2YXIgZGlyZW50ID0gZGlyZW50c1tpXTsNCgkJCWlmIChkaXJlbnQuaXNGaWxlKCkpew0KCQkJCXZhciBzcmNQYXRoID0gcGsucGF0aC5qb2luKGNyZWRlbnRpYWxzRGlyTmFtZSwgZGlyZW50Lm5hbWUpOw0KCQkJCXZhciBjcmVkU3RyaW5nID0gcGsuZnMucmVhZEZpbGVTeW5jKHNyY1BhdGgsIHtlbmNvZGluZzogJ3V0ZjgnfSk7DQoJCQkJdmFyIGNyZWQgPSBKU09OLnBhcnNlKGNyZWRTdHJpbmcpOw0KCQkJCXZhciBkaXJlbnROb1R5cGUgPSBkaXJlbnQubmFtZS5zdWJzdHIoMCwgZGlyZW50Lm5hbWUuaW5kZXhPZignLicpKTsNCgkJCQl2YXIgc21hcnRDcmVkZW50aWFsID0gcGsudXRpbC5odHRwc1NlcnZlclVybHNbJ1NNQVJUX0NSRURFTlRJQUxfSE9TVCddLmhyZWYgKyBjb250ZW50X21vZHVsZV9uYW1lICsgJy8nICsgZGlyZW50Tm9UeXBlOw0KCQkJCWlmIChjcmVkLm5hbWUgIT09IHNtYXJ0Q3JlZGVudGlhbCl7DQoJCQkJCXRocm93ICgnY3JlZGVudGlhbCBmaWxlICcgKyBkaXJlbnQubmFtZSArICcgZG9lcyBub3QgZGVmaW5lIHNtYXJ0IGNyZWRlbnRpYWw6ICcgKyBzbWFydENyZWRlbnRpYWwpOw0KCQkJCX0NCgkJCQljcmVkZW50aWFsc1tkaXJlbnROb1R5cGVdID0gY3JlZDsNCgkJCX0gDQoJCX0NCg0KCQlyZXR1cm4gY3JlZGVudGlhbHM7DQoJfQ0KCWNhdGNoKGVycil7DQoJCXBrLnV0aWwubG9nX2Vycm9yKCdsb2FkQ3JlZGVudGlhbHMnLCBlcnIpOw0KCX0NCn0NCg0KZnVuY3Rpb24gc21hcnRfY3JlZGVudGlhbF91cmwocmVzLCBjcmVkZW50aWFsX3RhaWwpew0KCWlmICghY3JlZGVudGlhbHNbY3JlZGVudGlhbF90YWlsXSl7DQoJCXJlcy5zdGF0dXMgPSA0MDA7DQoJCXZhciBtZXNzYWdlID0gew0KCQkJZXJyb3I6ICdJbnZhbGlkIHNtYXJ0X2NyZWRlbnRpYWwgbmFtZTogJyArIGNyZWRlbnRpYWxfdGFpbA0KCQl9DQoJCXJlcy5qc29uKG1lc3NhZ2UpOw0KCQlyZXMuZW5kKCk7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCgl2YXIgdXJsID0gcGsudXRpbC5odHRwc1NlcnZlclVybHNbJ1NNQVJUX0NSRURFTlRJQUxfSE9TVCddLmhyZWYgKyBjb250ZW50X21vZHVsZV9uYW1lICsgJy8nICsgY3JlZGVudGlhbF90YWlsOw0KCXJldHVybiB1cmw7DQp9DQoNCmZ1bmN0aW9uIHByb2Nlc3NDb29raWVzKHJlcSwgcmVzKXsNCglyZXMucmVuZGVyKHZpZXdQYXRoICsgJy9nZXRfY29va2llcycsIHt9KTsNCn0","credentials":{"Covid-ImmunityTest-PV7.json":"ew0KCSJuYW1lIjogIjwtLVNNQVJUX0NSRURFTlRJQUxfSE9TVC0tPi9zbWFydC1jcmVkZW50aWFsL0NvdmlkLUltbXVuaXR5VGVzdC1QVjciLA0KCSJjb250ZXh0IjogInVuZGVmaW5lZC92MSIsDQoJImlzc3VlcnMiOiBbDQoJCSI8LS1JU1NVRVJfSE9TVC0tPi9vaGlwX2NvdmlkIiwNCgkJIjwtLUlTU1VFUl9IT1NULS0-L29oaXBfc21hcnRoZWFsdGhjYXJkIg0KCV0sDQoJIndhbGxldHMiOiBbDQoJCSI8LS1XQUxMRVQtLT4vd2FsbGV0L3dhbGxldC5odG1sIg0KCV0NCn0","OH-SmartHealthCard-Proof.json":"ew0KCSJuYW1lIjogIjwtLVNNQVJUX0NSRURFTlRJQUxfSE9TVC0tPi9zbWFydC1jcmVkZW50aWFsL09ILVNtYXJ0SGVhbHRoQ2FyZC1Qcm9vZiIsDQoJImNvbnRleHQiOiAidW5kZWZpbmVkL3YxIiwNCgkiaXNzdWVycyI6IFsNCgkJIjwtLUlTU1VFUl9IT1NULS0-L29oaXBfc21hcnRoZWFsdGhjYXJkIg0KCV0sDQoJIndhbGxldHMiOiBbDQoJCSI8LS1XQUxMRVQtLT4vd2FsbGV0L3dhbGxldC5odG1sIg0KCV0NCn0","Ontario-Health-Insurance-Plan.json":"ew0KCSJuYW1lIjogIjwtLVNNQVJUX0NSRURFTlRJQUxfSE9TVC0tPi9zbWFydC1jcmVkZW50aWFsL09udGFyaW8tSGVhbHRoLUluc3VyYW5jZS1QbGFuIiwNCgkiY29udGV4dCI6ICJ1bmRlZmluZWQvdjEiLA0KCSJpc3N1ZXJzIjogWw0KCQkiPC0tSVNTVUVSX0hPU1QtLT4vb2hpcCINCgldLA0KCSJ3YWxsZXRzIjogWw0KCQkiPC0tV0FMTEVULS0-L3dhbGxldC93YWxsZXQuaHRtbCINCgldDQp9"},"views":{"get_cookies.handlebars":"PHNjcmlwdD4NCnZhciBjb29raWVzID0gZ2V0Q29va2llcygpOw0Kd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZSgneyAiY29va2llcyI6ICInICsgSlNPTi5zdHJpbmdpZnkoY29va2llcykgKyAnIiB9JywgJyonKTsNCg0KZnVuY3Rpb24gZ2V0Q29va2llcygpIHsNCiAgICB2YXIgY29va2llcyA9IHt9Ow0KICAgIHZhciBjb29raWVBcnIgPSBkb2N1bWVudC5jb29raWUuc3BsaXQoIjsiKTsNCiAgICBmb3IodmFyIGkgPSAwOyBpIDwgY29va2llQXJyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBjb29raWVQYWlyID0gY29va2llQXJyW2ldLnNwbGl0KCI9Iik7DQogICAgICAgIGNvb2tpZXNbY29va2llUGFpclswXS50cmltKCkuc3Vic3RyKDcpXSA9IGNvb2tpZVBhaXJbMF0udHJpbSgpOw0KICAgIH0gICAgDQogICAgcmV0dXJuIGNvb2tpZXM7DQp9DQo8L3NjcmlwdD4NCg","get_wallet.handlebars":"PHNjcmlwdD4NCnZhciB3YWxsZXQgPSBnZXRDb29raWUoJ3dhbGxldF97e3JlcXVlc3RlZENyZWRlbnRpYWx9fScpOw0KaWYgKCF3YWxsZXQpew0KCXdhbGxldCA9ICduL2EnOw0KfQ0KdmFyIG1lc3NhZ2UgPSB7DQogICAgd2FsbGV0OiB3YWxsZXQNCn0NCg0Kd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeShtZXNzYWdlKSwgJyonKTsNCg0KZnVuY3Rpb24gZ2V0Q29va2llKG5hbWUpIHsNCiAgICAvLyBkZWJ1Z2dlcjsNCiAgICB2YXIgY29va2llQXJyID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCI7Iik7DQogICAgZm9yKHZhciBpID0gMDsgaSA8IGNvb2tpZUFyci5sZW5ndGg7IGkrKykgew0KICAgICAgICB2YXIgY29va2llUGFpciA9IGNvb2tpZUFycltpXS5zcGxpdCgiPSIpOw0KICAgICAgICBpZihuYW1lID09IGNvb2tpZVBhaXJbMF0udHJpbSgpKSB7DQogICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGNvb2tpZVBhaXJbMV0pOw0KICAgICAgICB9DQogICAgfSAgICANCiAgICByZXR1cm4gbnVsbDsNCn0NCjwvc2NyaXB0Pg0K","register.handlebars":"PHNjcmlwdD4NCgl3aW5kb3cub25sb2FkID0gZG9SZWdpc3RlcjsNCg0KCWZ1bmN0aW9uIGRvUmVnaXN0ZXIoKXsNCgkJdmFyIHdhbGxldFVybCA9ICd7e3dhbGxldH19JzsNCgkJaWYgKHdhbGxldFVybCA9PT0gJ2RlbGV0ZWQnKXsNCgkJCXdhbGxldFVybCA9ICcnOw0KCQl9DQoJCXZhciBjcmVkZW50aWFsID0gJ3t7Y3JlZGVudGlhbH19JzsNCgkgICAgc2lvcF9zZXRDb29raWUoJ3dhbGxldF8nICsgY3JlZGVudGlhbCwgd2FsbGV0VXJsLCAxMCwgJy8nKTsNCg0KCQl2YXIgcmVkaXJlY3RfdXJsID0gInt7e3JlZGlyZWN0X3VybH19fSI7DQoJICAgIGlmIChyZWRpcmVjdF91cmwpew0KCQkJd2luZG93LmxvY2F0aW9uID0gcmVkaXJlY3RfdXJsOw0KCSAgICB9DQoJICAgIGVsc2V7DQoJCQl3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKCd7ICJ3YWxsZXQiOiAiJyArIHdhbGxldFVybCArICciIH0nLCAnKicpOw0KCSAgICB9DQoJfQ0KDQoJZnVuY3Rpb24gc2lvcF9zZXRDb29raWUoY25hbWUsIGN2YWx1ZSwgZXhkYXlzLCBwYXRoKSB7DQoJCWlmICghcGF0aCl7DQoJCSAgcGF0aCA9ICcvJzsNCgkJfQ0KCQl2YXIgZCA9IG5ldyBEYXRlKCk7DQoJCWQuc2V0VGltZShkLmdldFRpbWUoKSArIChleGRheXMqMjQqNjAqNjAqMTAwMCkpOw0KCQl2YXIgZXhwaXJlcyA9ICdleHBpcmVzPScrIGQudG9VVENTdHJpbmcoKTsNCgkJZG9jdW1lbnQuY29va2llID0gY25hbWUgKyAnPScgKyBjdmFsdWUgKyAnOycgKyBleHBpcmVzICsgJztwYXRoPScgKyBwYXRoOw0KCX0NCg0KPC9zY3JpcHQ-DQo"}},"web/smart-credential":{},"views":{"layouts":{"doc.handlebars":"PCFET0NUWVBFIGh0bWw-DQo8aHRtbCBsYW5nPSJlbiI-DQogIDxoZWFkPg0KICAgIDwhLS0gUmVxdWlyZWQgbWV0YSB0YWdzIC0tPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm8iPg0KDQogICAgPCEtLSBCb290c3RyYXAgQ1NTIC0tPg0KICAgIDxsaW5rIGhyZWY9Ii9jc3MvYm9vdHN0cmFwLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4NCiAgICA8bGluayBocmVmPSIvY3NzL2Zvcm0tdmFsaWRhdGlvbi5jc3MiIHJlbD0ic3R5bGVzaGVldCI-DQogICAgPGxpbmsgaHJlZj0iL2Nzcy9ib290c3RyYXAtZm9ybWhlbHBlcnMuY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KICAgIDxsaW5rIGhyZWY9Ii9jc3MvcGVyc29uYWwuY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KICAgIDx0aXRsZT57e3RpdGxlfX08L3RpdGxlPg0KDQogIDwvaGVhZD4NCiAgPGJvZHkgY2xhc3M9ImJnLWxpZ2h0Ij4NCiAgICA8ZGl2IGNsYXNzPSJmbGV4LWNvbnRhaW5lciI-DQogICAgICAgIDxkaXYgY2xhc3M9ImNvbC1zbS04IG10LTMiPg0KICAgICAgICAgIHt7e2JvZHl9fX0NCiAgICAgICAgPC9kaXY-DQogICAgPC9kaXY-DQoNCiAgICA8c2NyaXB0IHNyYz0iL2pzL2NsYWltZXJkb2MuanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvanMvanF1ZXJ5LTMuMi4xLnNsaW0ubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL2pzL3BvcHBlci5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvanMvYm9vdHN0cmFwLm1pbi5qcyI-PC9zY3JpcHQ-DQogICAgPHNjcmlwdCBzcmM9Ii9qcy9ib290c3RyYXAtZm9ybWhlbHBlcnMuanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvanMvYm9vdHN0cmFwLWZvcm1oZWxwZXJzLXBob25lLmpzIj48L3NjcmlwdD4NCiAgPC9ib2R5Pg0KPC9odG1sPg","main.handlebars":"PCFET0NUWVBFIGh0bWw-DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgICA8dGl0bGU-e3t0aXRsZX19PC90aXRsZT4NCg0KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgPg0KDQoNCjwvaGVhZD4NCjxib2R5Pg0KDQogICAge3t7Ym9keX19fQ0KDQo8L2JvZHk-DQo8L2h0bWw-","main_bootstrap.handlebars":"PCFET0NUWVBFIGh0bWw-DQo8aHRtbCBsYW5nPSJlbiI-DQogIDxoZWFkPg0KICAgIDwhLS0gUmVxdWlyZWQgbWV0YSB0YWdzIC0tPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm8iPg0KDQogICAgPCEtLSBCb290c3RyYXAgQ1NTIC0tPg0KICAgIDxsaW5rIGhyZWY9Ii9jc3MvYm9vdHN0cmFwLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4NCiAgICA8bGluayBocmVmPSIvY3NzL2Zvcm0tdmFsaWRhdGlvbi5jc3MiIHJlbD0ic3R5bGVzaGVldCI-DQogICAgPGxpbmsgaHJlZj0iL2Nzcy9ib290c3RyYXAtZm9ybWhlbHBlcnMuY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KICAgIDxsaW5rIGhyZWY9Ii9jc3MvcGVyc29uYWwuY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KDQogICAgPGxpbmsgaHJlZj0iL2Nzcy9mb250YXdlc29tZS9jc3MvZm9udGF3ZXNvbWUuY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KICAgIDxsaW5rIGhyZWY9Ii9jc3MvZm9udGF3ZXNvbWUvY3NzL3JlZ3VsYXIuY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KICAgIDxsaW5rIGhyZWY9Ii9jc3MvZm9udGF3ZXNvbWUvY3NzL3NvbGlkLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4NCiAgICA8IS0tbGluayBocmVmPSIvL21heGNkbi5ib290c3RyYXBjZG4uY29tL2ZvbnQtYXdlc29tZS80LjcuMC9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCItLT4NCg0KICAgICA8dGl0bGU-e3t0aXRsZX19PC90aXRsZT4NCiAgPC9oZWFkPg0KICA8Ym9keSBjbGFzcz0iYmctbGlnaHQiPg0KICAgIDxzY3JpcHQgc3JjPSIvanMvanNvbnBhdGguanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvanMvcGFrby5qcyI-PC9zY3JpcHQ-DQogICAgPHNjcmlwdCBzcmM9Ii9qcy9xcmNvZGUuanMiPjwvc2NyaXB0Pg0KDQogICAge3t7Ym9keX19fQ0KDQogICAgPHNjcmlwdCBzcmM9Ii9qcy9qcXVlcnktMy4yLjEuc2xpbS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvanMvcG9wcGVyLm1pbi5qcyI-PC9zY3JpcHQ-DQogICAgPHNjcmlwdCBzcmM9Ii9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL2pzL2Jvb3RzdHJhcC1mb3JtaGVscGVycy5qcyI-PC9zY3JpcHQ-DQogIDwvYm9keT4NCjwvaHRtbD4","main_june.handlebars":"PCFET0NUWVBFIGh0bWw-DQo8aHRtbD4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgICA8dGl0bGU-e3t0aXRsZX19PC90aXRsZT4NCg0KICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgPg0KDQoNCjwvaGVhZD4NCjxib2R5Pg0KDQogICAge3t7Ym9keX19fQ0KDQo8L2JvZHk-DQo8L2h0bWw-","main_personal.handlebars":"PCFET0NUWVBFIGh0bWw-DQo8aHRtbCBsYW5nPSJlbiI-DQogIDxoZWFkPg0KICAgIDwhLS0gUmVxdWlyZWQgbWV0YSB0YWdzIC0tPg0KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIHNocmluay10by1maXQ9bm8iPg0KDQogICAgPCEtLSBCb290c3RyYXAgQ1NTIC0tPg0KICAgIDxsaW5rIGhyZWY9Ii9jc3MvYm9vdHN0cmFwLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4NCiAgICA8bGluayBocmVmPSIvY3NzL2Zvcm0tdmFsaWRhdGlvbi5jc3MiIHJlbD0ic3R5bGVzaGVldCI-DQogICAgPGxpbmsgaHJlZj0iL2Nzcy9ib290c3RyYXAtZm9ybWhlbHBlcnMuY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KICAgIDxsaW5rIGhyZWY9Ii9jc3MvcGVyc29uYWwuY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KICAgIDx0aXRsZT57e3RpdGxlfX08L3RpdGxlPg0KDQogIDwvaGVhZD4NCiAgPGJvZHkgY2xhc3M9ImJnLWxpZ2h0Ij4NCiAgICB7e3tib2R5fX19DQoNCiAgICA8c2NyaXB0IHNyYz0iL2pzL2pxdWVyeS0zLjIuMS5zbGltLm1pbi5qcyI-PC9zY3JpcHQ-DQogICAgPHNjcmlwdCBzcmM9Ii9qcy9wb3BwZXIubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL2pzL2Jvb3RzdHJhcC5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvanMvYm9vdHN0cmFwLWZvcm1oZWxwZXJzLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL2pzL2Jvb3RzdHJhcC1mb3JtaGVscGVycy1waG9uZS5qcyI-PC9zY3JpcHQ-DQogIDwvYm9keT4NCjwvaHRtbD4","testlab.handlebars":"DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImVuIj4NCiAgPGhlYWQ-DQogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSwgc2hyaW5rLXRvLWZpdD1ubyI-DQoJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIvY3NzL2tpY2tzdGFydC5jc3MiIG1lZGlhPSJhbGwiIC8-DQoNCiAgICA8dGl0bGU-e3t0aXRsZX19PC90aXRsZT4NCg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI-DQoJCS50ZXN0ZXJfb3Agew0KCQkJZmxvYXQ6IGxlZnQ7DQoJCX0NCgkJLnRlc3Rlcl9uYW1lIHsNCgkJCWZsb2F0OiByaWdodDsNCgkJCWNvbG9yOiBncmF5Ow0KCQl9DQoJCS50ZXN0ZXJfY29udGFpbmVyIHsNCgkJICBkaXNwbGF5OiBmbGV4Ow0KCQkgIGp1c3RpZnktY29udGVudDogY2VudGVyOw0KCQl9DQoJCS50ZXN0ZXJfY2VudGVyIHsNCgkJICB3aWR0aDogMTAwJTsNCgkJfQ0KCTwvc3R5bGU-DQoNCg0KCTxzY3JpcHQ-DQoJCWZ1bmN0aW9uIGxvYWRGb3JtVmFsdWVzKGZvcm1UZW1wbGF0ZSwgZm9ybVZhbHVlcyl7DQoJCQljbGVhcl9lcnJvcigpOw0KDQoJCQlmb3IgKHZhciBwYXJhbWV0ZXIgaW4gZm9ybVRlbXBsYXRlKXsNCgkJCQl2YXIgZGVmaW5pdGlvbiA9IGZvcm1UZW1wbGF0ZVtwYXJhbWV0ZXJdOw0KCQkJCXZhciB2YWx1ZSA9ICcnOw0KCQkJCXZhciBpZCA9ICcnOw0KCQkJCXZhciBlbDsNCg0KCQkJCWlmIChmb3JtVmFsdWVzW3BhcmFtZXRlcl0gPT09IHVuZGVmaW5lZCl7DQoJCQkJCWlmIChkZWZpbml0aW9uLmRlZmF1bHQgPT09ICdzdXBwcmVzcyEnKXsNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQl9DQoJCQkJCWlmIChkZWZpbml0aW9uLmRlZmF1bHQgIT09IHVuZGVmaW5lZCl7DQoJCQkJCQl2YWx1ZSA9IGRlZmluaXRpb24uZGVmYXVsdDsNCgkJCQkJfQ0KCQkJCX0NCgkJCQllbHNlew0KCQkJCQl2YWx1ZSA9IGZvcm1WYWx1ZXNbcGFyYW1ldGVyXTsNCgkJCQl9DQoNCgkJCQlpZiAodmFsdWUgPT09IHVuZGVmaW5lZCl7DQoJCQkJCWNvbnRpbnVlOw0KCQkJCX0NCg0KCQkJCXN3aXRjaCAoZGVmaW5pdGlvbi5pbnB1dCl7DQoJCQkJCWNhc2UgJ3RleHQnOg0KCQkJCQkJLy8gdGV4dCBtYXkgYmUgYSBzaW1wbGUgdGV4dCBwbGFjZWQgaW50byBhIHRleHQgYm94DQoJCQkJCQkvLyBvciBhbiBhcnJheSBvZiB0ZXh0IHBsYWNlZCBpbnRvIGEgdGV4dGFyZWENCgkJCQkJCS8vIG9yIGFuIGFycmF5IG9mIHRleHQgcGxhY2VkIGludG8gYSB0ZXh0IGJveC4uLiAoZS5nLiBzY29wZSkNCgkJCQkJCWVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocGFyYW1ldGVyKTsNCg0KCQkJCQkJaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpew0KCQkJCQkJCWVsLnZhbHVlID0gdmFsdWU7DQoJCQkJCQl9DQoJCQkJCQllbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSl7DQoJCQkJCQkJaWYgKHZhbHVlLmxlbmd0aCA9PT0gdW5kZWZpbmVkKXsNCgkJCQkJCQkJY29udGludWU7DQoJCQkJCQkJfQ0KDQoJCQkJCQkJdmFyIHZhbHVlU2VwYXJhdG9yID0gJyAnOw0KCQkJCQkJCWlmIChkZWZpbml0aW9uLnR5cGUgID09PSAnYXJyYXknKQ0KCQkJCQkJCQl2YWx1ZVNlcGFyYXRvciA9ICdcbic7DQoNCgkJCQkJCQl2YXIgY29udGVudCA9ICcnOw0KCQkJCQkJCXZhciBzZXBhcmF0b3IgPSAnJzsNCgkJCQkJCQlmb3IgKHZhciBpPTA7IGk8dmFsdWUubGVuZ3RoOyBpKyspew0KCQkJCQkJCQl2YXIgbGluZSA9IHZhbHVlW2ldLnRyaW0oKTsNCgkJCQkJCQkJaWYgKGxpbmUubGVuZ3RoID4gMCl7DQoJCQkJCQkJCQljb250ZW50ICs9IHNlcGFyYXRvciArIGxpbmU7DQoJCQkJCQkJCQlzZXBhcmF0b3IgPSB2YWx1ZVNlcGFyYXRvcjsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0JCQkJCQkJCQ0KCQkJCQkJCWVsLnZhbHVlID0gY29udGVudDsNCgkJCQkJCX0NCgkJCQkJCWVsc2Ugew0KCQkJCQkJCWVsLnZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpOw0KCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoNCgkJCQkJY2FzZSAnc2VsZWN0JzoNCgkJCQkJCWVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocGFyYW1ldGVyKTsNCgkJCQkJCWVsLnZhbHVlID0gdmFsdWU7DQoJCQkJCQlicmVhazsNCg0KCQkJCQljYXNlICdib29sZWFuJzoNCgkJCQkJY2FzZSAncmFkaW8nOg0KCQkJCQkJaWYgKHZhbHVlKXsNCgkJCQkJCQlpZCA9IHBhcmFtZXRlciArICdfJyArIHZhbHVlOw0KCQkJCQkJCWVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOw0KCQkJCQkJCWVsLmNoZWNrZWQgPSB0cnVlOwkJCQkJCQkNCgkJCQkJCX0NCgkJCQkJCWJyZWFrOw0KDQoJCQkJCWNhc2UgJ2NoZWNrYm94ZXMnOg0KCQkJCQkJaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCA-IDApew0KCQkJCQkJCWZvciAodmFyIGk9MDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKXsNCgkJCQkJCQkJaWQgPSBwYXJhbWV0ZXIgKyAnXycgKyB2YWx1ZVtpXTsNCgkJCQkJCQkJZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7DQoJCQkJCQkJCWVsLmNoZWNrZWQgPSB0cnVlOw0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJCWJyZWFrOw0KDQoJCQkJCWNhc2UgJ2NoZWNrYm94JzoNCgkJCQkJCWlmICh2YWx1ZSl7DQoJCQkJCQkJZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwYXJhbWV0ZXIpOw0KCQkJCQkJCWVsLmNoZWNrZWQgPSB0cnVlOw0KCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoNCgkJCQkJY2FzZSAnZmllbGRzZXQnOg0KCQkJCQkJbG9hZEZvcm1WYWx1ZXMoZGVmaW5pdGlvbi5jb250ZW50LCBmb3JtVmFsdWVzKTsNCgkJCQkJCWJyZWFrOw0KDQoJCQkJCWNhc2UgJ2hpZGRlbic6DQoJCQkJCQkJZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwYXJhbWV0ZXIpOw0KCQkJCQkJCWVsLnZhbHVlID0gdmFsdWU7DQoNCgkJCQkJZGVmYXVsdDoNCgkJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KDQoJCWZ1bmN0aW9uIGZsYXR0ZW5UZW1wbGF0ZXMocmVzdWx0LCB0ZW1wbGF0ZSkNCgkJew0KCQkJdmFyIGRlZmluaXRpb247DQoJCQlmb3IgKHZhciBwYXJhbWV0ZXIgaW4gdGVtcGxhdGUpew0KCQkJCWRlZmluaXRpb24gPSB0ZW1wbGF0ZVtwYXJhbWV0ZXJdOw0KCQkJCWlmIChkZWZpbml0aW9uLmlucHV0ID09PSAnZmllbGRzZXQnKXsNCgkJCQkJZmxhdHRlblRlbXBsYXRlcyhyZXN1bHQsIGRlZmluaXRpb24uY29udGVudCk7DQoJCQkJfQ0KCQkJCWVsc2V7DQoJCQkJCXJlc3VsdFtwYXJhbWV0ZXJdID0gZGVmaW5pdGlvbjsNCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQlmdW5jdGlvbiBmb3JtVG9Kc29uKGZvcm1JZCwgZm9ybVRlbXBsYXRlKXsNCgkJCXZhciBmbGF0VGVtcGxhdGUgPSB7fTsNCgkJCWZsYXR0ZW5UZW1wbGF0ZXMoZmxhdFRlbXBsYXRlLCBmb3JtVGVtcGxhdGUpOw0KCQkJdmFyIGZvcm1FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGZvcm1JZCk7DQoJCQl2YXIgZm9ybUlucHV0cyA9IGZvcm1FbC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaW5wdXQnKTsNCgkJCXZhciBmb3JtVGV4dEFyZWFzID0gZm9ybUVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd0ZXh0YXJlYScpOw0KCQkJdmFyIGZvcm1TZWxlY3RzID0gZm9ybUVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzZWxlY3QnKTsNCgkJCXZhciByZXN1bHQgPSB7fTsNCg0KCQkJZm9yICh2YXIgaT0wOyBpIDwgZm9ybUlucHV0cy5sZW5ndGg7IGkrKyl7DQoJCQkJdmFyIGlucHV0X2VsID0gZm9ybUlucHV0c1tpXTsNCgkJCQl2YXIgbmFtZSA9IGlucHV0X2VsLm5hbWU7DQoJCQkJdmFyIGRlZmluaXRpb24gPSBmbGF0VGVtcGxhdGVbbmFtZV07DQoJCQkJaWYgKGRlZmluaXRpb24gPT09IHVuZGVmaW5lZCkNCgkJCQkJY29udGludWU7DQoNCgkJCQlzd2l0Y2ggKGlucHV0X2VsLnR5cGUpew0KCQkJCQljYXNlICdoaWRkZW4nOg0KCQkJCQljYXNlICd0ZXh0JzoNCgkJCQkJY2FzZSAnc2VsZWN0JzoNCgkJCQkJCWlmIChpbnB1dF9lbC52YWx1ZS5sZW5ndGggIT09IDApDQoJCQkJCQkJcmVzdWx0W25hbWVdID0gaW5wdXRfZWwudmFsdWU7DQoJCQkJCQlicmVhazsNCg0KCQkJCQljYXNlICdib29sZWFuJzoNCgkJCQkJY2FzZSAncmFkaW8nOg0KCQkJCQkJaWYgKGlucHV0X2VsLmNoZWNrZWQpew0KCQkJCQkJCXZhciBwcmVmaXggPSBuYW1lICsgJ18nOw0KCQkJCQkJCXZhbHVlID0gaW5wdXRfZWwuaWQuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpOw0KCQkJCQkJCXJlc3VsdFtuYW1lXSA9IHZhbHVlOw0KCQkJCQkJfQkJCQkJCQkNCgkJCQkJCWJyZWFrOw0KDQoJCQkJCWNhc2UgJ2NoZWNrYm94JzoNCgkJCQkJCWlmIChpbnB1dF9lbC5jaGVja2VkKXsNCgkJCQkJCQl2YXIgcHJlZml4ID0gbmFtZSArICdfJzsNCgkJCQkJCQlpZiAoaW5wdXRfZWwuaWQuc3RhcnRzV2l0aChwcmVmaXgpKXsNCgkJCQkJCQkJaWYgKHJlc3VsdFtuYW1lXSA9PT0gdW5kZWZpbmVkKXsNCgkJCQkJCQkJCXJlc3VsdFtuYW1lXSA9IFtdOw0KCQkJCQkJCQl9DQoJCQkJCQkJCXZhbHVlID0gaW5wdXRfZWwuaWQuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpOw0KCQkJCQkJCQlyZXN1bHRbbmFtZV0ucHVzaCh2YWx1ZSk7DQoJCQkJCQkJfQ0KCQkJCQkJCWVsc2V7DQoJCQkJCQkJCXJlc3VsdFtuYW1lXSA9IHRydWU7DQoJCQkJCQkJfQkJCQkJCQkJDQoJCQkJCQl9DQoJCQkJCQlicmVhazsNCg0KCQkJCQlkZWZhdWx0Og0KCQkJCQkJYnJlYWs7DQoJCQkJfQ0KCQkJfQ0KDQoJCQlmb3IgKHZhciBpPTA7IGkgPCBmb3JtU2VsZWN0cy5sZW5ndGg7IGkrKyl7DQoJCQkJdmFyIHNlbGVjdF9lbCA9IGZvcm1TZWxlY3RzW2ldOw0KCQkJCXZhciBuYW1lID0gc2VsZWN0X2VsLm5hbWU7DQoJCQkJdmFyIGRlZmluaXRpb24gPSBmbGF0VGVtcGxhdGVbbmFtZV07DQoJCQkJaWYgKGRlZmluaXRpb24gPT09IHVuZGVmaW5lZCkNCgkJCQkJY29udGludWU7DQoNCgkJCQlpZiAoc2VsZWN0X2VsLnZhbHVlLmxlbmd0aCAhPT0gMCkNCgkJCQkJcmVzdWx0W25hbWVdID0gc2VsZWN0X2VsLnZhbHVlOw0KCQkJfQ0KDQoJCQlmb3IgKHZhciBpPTA7IGkgPCBmb3JtVGV4dEFyZWFzLmxlbmd0aDsgaSsrKXsNCgkJCQl2YXIgdGV4dEFyZWFfZWwgPSBmb3JtVGV4dEFyZWFzW2ldOw0KCQkJCXZhciBuYW1lID0gdGV4dEFyZWFfZWwubmFtZTsNCgkJCQl2YXIgZGVmaW5pdGlvbiA9IGZsYXRUZW1wbGF0ZVtuYW1lXTsNCgkJCQlpZiAoZGVmaW5pdGlvbiA9PT0gdW5kZWZpbmVkKQ0KCQkJCQljb250aW51ZTsNCg0KCQkJCWlmICh0ZXh0QXJlYV9lbC52YWx1ZS5sZW5ndGggIT09IDApew0KCQkJCQlpZiAoZGVmaW5pdGlvbi50eXBlID09PSAnYXJyYXknKXsNCgkJCQkJCXZhciB2YWx1ZUFycmF5ID0gW107DQoJCQkJCQl2YXIgdGV4dCA9IHRleHRBcmVhX2VsLnZhbHVlOw0KCQkJCQkJdmFyIHRleHRBcnJheSA9IHRleHQuc3BsaXQoJ1xuJyk7DQoJCQkJCQlmb3IgKHZhciBqPTA7IGo8dGV4dEFycmF5Lmxlbmd0aDsgaisrKXsNCgkJCQkJCQlpZiAodGV4dEFycmF5W2pdLmxlbmd0aCA9PT0gMCkNCgkJCQkJCQkJY29udGludWU7DQoJCQkJCQkJdmFsdWVBcnJheS5wdXNoKHRleHRBcnJheVtqXSk7DQoJCQkJCQl9DQoJCQkJCQlyZXN1bHRbbmFtZV0gPSB2YWx1ZUFycmF5Ow0KCQkJCQl9DQoJCQkJCWVsc2V7DQoJCQkJCQlyZXN1bHRbbmFtZV0gPSB0ZXh0QXJlYV9lbC52YWx1ZTsJCQkJCQkNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KDQoJCQlyZXR1cm4gcmVzdWx0Ow0KCQl9DQoNCgkJZnVuY3Rpb24gY3JlYXRlSW5wdXREaXYoZm9ybUlkLCBmb3JtVGVtcGxhdGUsIGZvcm1WYWx1ZXMpew0KCQkJdmFyIGZvcm1faHRtbCA9ICc8ZGl2PlxyXG4nOw0KCQkJZm9ybV9odG1sICs9IGdlbmVyYXRlSW5wdXRHcm91cGluZ0h0bWwoZm9ybVRlbXBsYXRlLCBmb3JtVmFsdWVzKTsNCgkJCWZvcm1faHRtbCArPSAnPC9kaXY-XHJcbic7DQoNCgkJCXZhciBmb3JtX2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZm9ybUlkKTsNCgkJCWZvcm1fZWwuaW5uZXJIVE1MID0gZm9ybV9odG1sOw0KCQl9DQoNCgkJZnVuY3Rpb24gZ2VuZXJhdGVJbnB1dEdyb3VwaW5nSHRtbChmb3JtVGVtcGxhdGUsIGZvcm1WYWx1ZXMpew0KCQkJdmFyIGxhYmVsLCBsZWdlbmQsIHZhbHVlLCBpZDsNCgkJCXZhciBncm91cGluZ19odG1sID0gJyc7DQoNCgkJCWZvciAodmFyIHBhcmFtZXRlciBpbiBmb3JtVGVtcGxhdGUpew0KCQkJCXZhciBwYXJhbV9odG1sID0gJyc7DQoJCQkJdmFyIGRlZmluaXRpb24gPSBmb3JtVGVtcGxhdGVbcGFyYW1ldGVyXTsNCgkJCQlpZiAoZm9ybVZhbHVlc1twYXJhbWV0ZXJdID09PSB1bmRlZmluZWQpew0KCQkJCQlpZiAoZGVmaW5pdGlvbi5kZWZhdWx0ID09PSAnc3VwcHJlc3MhJyl7DQoJCQkJCQljb250aW51ZTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCXN3aXRjaCAoZGVmaW5pdGlvbi5pbnB1dCl7DQoJCQkJCWNhc2UgJ3RleHQnOg0KCQkJCQkJbGFiZWwgPSBjcmVhdGVMYWJlbChkZWZpbml0aW9uLCBwYXJhbWV0ZXIpOw0KCQkJCQkJaWYgKGRlZmluaXRpb24udHlwZSA9PT0gdW5kZWZpbmVkIHx8IGRlZmluaXRpb24udHlwZSA9PT0gJ3N0cmluZycpew0KCQkJCQkJCXBhcmFtX2h0bWwgPSBsYWJlbCArICc8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IicgKyBwYXJhbWV0ZXIgKw0KCQkJCQkJCQknIiBuYW1lPSInICsgcGFyYW1ldGVyICsgJyIgLz5cclxuJzsJCQkJCQ0KCQkJCQkJfQ0KCQkJCQkJZWxzZXsNCgkJCQkJCQlwYXJhbV9odG1sID0gbGFiZWwgKyAnPHRleHRhcmVhIHJvd3M9IjIiIGNvbHM9IjYwIiB3cmFwPSJoYXJkIiBpZD0iJyArIHBhcmFtZXRlciArDQoJCQkJCQkJCSciIG5hbWU9IicgKyBwYXJhbWV0ZXIgKyAnIiBzdHlsZT0iaGVpZ2h0OiBhdXRvOyI-PC90ZXh0YXJlYT5cclxuJzsJCQkJCQkJDQoJCQkJCQl9DQoJCQkJCQlicmVhazsNCg0KCQkJCQljYXNlICdyYWRpbyc6DQoJCQkJCQljaGVja1ZhbHVlc0V4aXN0KHBhcmFtZXRlciwgZGVmaW5pdGlvbik7DQoJCQkJCQlsZWdlbmQgPSBjcmVhdGVMZWdlbmQoZGVmaW5pdGlvbiwgcGFyYW1ldGVyKTsNCgkJCQkJCXBhcmFtX2h0bWwgPSAnPGZpZWxkc2V0PlxyXG4nICsgbGVnZW5kOw0KCQkJCQkJZm9yICh2YXIgaT0wOyBpIDwgZGVmaW5pdGlvbi52YWx1ZXMubGVuZ3RoOyBpKyspew0KCQkJCQkJCXZhbHVlID0gZGVmaW5pdGlvbi52YWx1ZXNbaV07DQoJCQkJCQkJaWQgPSBwYXJhbWV0ZXIgKyAnXycgKyB2YWx1ZTsNCgkJCQkJCQlwYXJhbV9odG1sICs9ICc8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IicgKyBwYXJhbWV0ZXIgKw0KCQkJCQkJCQknIiBpZD0iJyArIGlkICsgJyIgLz5cclxuJyArDQoJCQkJCQkJCSc8bGFiZWwgZm9yPSInICsgaWQgKyAnIiBjbGFzcz0iaW5saW5lIj4nICsgdmFsdWUgKyAnPC9sYWJlbD48YnIvPlxyXG4nOw0KCQkJCQkJfQ0KCQkJCQkJcGFyYW1faHRtbCArPSAnPC9maWVsZHNldD4nDQoJCQkJCQlicmVhazsNCg0KCQkJCQljYXNlICdzZWxlY3QnOg0KCQkJCQkJY2hlY2tWYWx1ZXNFeGlzdChwYXJhbWV0ZXIsIGRlZmluaXRpb24pOw0KCQkJCQkJbGFiZWwgPSBjcmVhdGVMYWJlbChkZWZpbml0aW9uLCBwYXJhbWV0ZXIpOw0KCQkJCQkJcGFyYW1faHRtbCA9IGxhYmVsICsgJzxzZWxlY3QgaWQ9IicgKyBwYXJhbWV0ZXIgKyAnIiBuYW1lPSInICsgcGFyYW1ldGVyICsgJyIgPlxyXG4nOw0KCQkJCQkJZm9yICh2YXIgaT0wOyBpIDwgZGVmaW5pdGlvbi52YWx1ZXMubGVuZ3RoOyBpKyspew0KCQkJCQkJCXZhbHVlID0gZGVmaW5pdGlvbi52YWx1ZXNbaV07DQoJCQkJCQkJcGFyYW1faHRtbCArPSAnPG9wdGlvbiB2YWx1ZT0iJyArIHZhbHVlICsgJyI-JyArIHZhbHVlICsgJzwvb3B0aW9uPlxyXG4nOw0KCQkJCQkJfQ0KCQkJCQkJcGFyYW1faHRtbCArPSAiPC9zZWxlY3Q-XHJcbiI7DQoJCQkJCQlicmVhazsNCg0KCQkJCQljYXNlICdjaGVja2JveGVzJzoNCgkJCQkJCWNoZWNrVmFsdWVzRXhpc3QocGFyYW1ldGVyLCBkZWZpbml0aW9uKTsNCgkJCQkJCWxlZ2VuZCA9IGNyZWF0ZUxlZ2VuZChkZWZpbml0aW9uLCBwYXJhbWV0ZXIpOw0KCQkJCQkJcGFyYW1faHRtbCA9ICc8ZmllbGRzZXQ-XHJcbicgKyBsZWdlbmQ7DQoJCQkJCQlmb3IgKHZhciBpPTA7IGkgPCBkZWZpbml0aW9uLnZhbHVlcy5sZW5ndGg7IGkrKyl7DQoJCQkJCQkJdmFsdWUgPSBkZWZpbml0aW9uLnZhbHVlc1tpXTsNCgkJCQkJCQlpZCA9IHBhcmFtZXRlciArICdfJyArIHZhbHVlOw0KCQkJCQkJCXBhcmFtX2h0bWwgKz0gJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IicgKyBpZCArICciIG5hbWU9IicgKyBwYXJhbWV0ZXIgKyAnIiAvPlxyXG4nICsNCgkJCQkJCQkJJzxsYWJlbCBmb3I9IicgKyBpZCArICciIGNsYXNzPSJpbmxpbmUiPicgKyB2YWx1ZSArICc8L2xhYmVsPjxici8-XHJcbic7DQoJCQkJCQl9DQoJCQkJCQlwYXJhbV9odG1sICs9ICc8L2ZpZWxkc2V0PicNCgkJCQkJCWJyZWFrOw0KDQoJCQkJCWNhc2UgJ2NoZWNrYm94JzoNCgkJCQkJCWxhYmVsID0gY3JlYXRlTGFiZWwoZGVmaW5pdGlvbiwgcGFyYW1ldGVyKTsNCgkJCQkJCXBhcmFtX2h0bWwgPSAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iJyArIHBhcmFtZXRlciArIA0KCQkJCQkJCQknIiBuYW1lPSInICsgcGFyYW1ldGVyICsgJyIgLz4gJm5ic3A7Jm5ic3A7JyArIGxhYmVsICsgJzxici8-JzsNCgkJCQkJCWJyZWFrOw0KDQoJCQkJCWNhc2UgJ2Jvb2xlYW4nOg0KCQkJCQkJbGVnZW5kID0gY3JlYXRlTGVnZW5kKGRlZmluaXRpb24sIHBhcmFtZXRlcik7DQoJCQkJCQlwYXJhbV9odG1sID0gJzxmaWVsZHNldD5cclxuJyArIGxlZ2VuZDsNCgkJCQkJCXZhciBib29sX3ZhbHVlcyA9IFsndHJ1ZScsICdmYWxzZSddOw0KCQkJCQkJZm9yICh2YXIgaT0wOyBpIDwgYm9vbF92YWx1ZXMubGVuZ3RoOyBpKyspew0KCQkJCQkJCXZhbHVlID0gYm9vbF92YWx1ZXNbaV07DQoJCQkJCQkJaWQgPSBwYXJhbWV0ZXIgKyAnXycgKyB2YWx1ZTsNCgkJCQkJCQlwYXJhbV9odG1sICs9ICc8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IicgKyBwYXJhbWV0ZXIgKw0KCQkJCQkJCQknIiBpZD0iJyArIGlkICsgJyIgLz5cclxuJyArDQoJCQkJCQkJCSc8bGFiZWwgZm9yPSInICsgaWQgKyAnIiBjbGFzcz0iaW5saW5lIj4nICsgdmFsdWUgKyAnJm5ic3A7Jm5ic3A7PC9sYWJlbD5cclxuJzsNCgkJCQkJCX0NCgkJCQkJCXBhcmFtX2h0bWwgKz0gJzwvZmllbGRzZXQ-Jw0KCQkJCQkJYnJlYWs7DQoNCgkJCQkJY2FzZSAnZmllbGRzZXQnOg0KCQkJCQkJcGFyYW1faHRtbCA9IGdlbmVyYXRlSW5wdXRHcm91cGluZ0h0bWwoZGVmaW5pdGlvbi5jb250ZW50LCBmb3JtVmFsdWVzKTsNCgkJCQkJCWlmIChwYXJhbV9odG1sLmxlbmd0aCA-IDApew0KCQkJCQkJCWxlZ2VuZCA9IGNyZWF0ZUxlZ2VuZChkZWZpbml0aW9uLCBwYXJhbWV0ZXIpOw0KCQkJCQkJCXBhcmFtX2h0bWwgPSAnPGZpZWxkc2V0PlxyXG4nICsgbGVnZW5kICsgcGFyYW1faHRtbCArDQoJCQkJCQkJCSc8L2ZpZWxkc2V0PlxyXG4nOw0KCQkJCQkJfQ0KCQkJCQkJYnJlYWs7DQoNCgkJCQkJY2FzZSAnYnV0dG9uJzoNCgkJCQkJCWxhYmVsID0gJ1N1Ym1pdCc7DQoJCQkJCQlpZiAoZGVmaW5pdGlvbi5sYWJlbCAhPT0gdW5kZWZpbmVkKXsNCgkJCQkJCQlsYWJlbCA9IGRlZmluaXRpb24ubGFiZWw7DQoJCQkJCQl9DQoJCQkJCQlwYXJhbV9odG1sID0gJzxkaXYgY2xhc3M9ImNvbF8zIj48aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0ic3VibWl0X2J1dHRvbiIgdmFsdWU9IicgKyBsYWJlbCArIA0KCQkJCQkJCSciIG9uY2xpY2s9IicgKyBkZWZpbml0aW9uLm1ldGhvZCArICciIC8-PC9kaXY-XHJcbic7DQoNCgkJCQkJCWJyZWFrOw0KDQoJCQkJCWNhc2UgJ2hpZGRlbic6DQoJCQkJCQlwYXJhbV9odG1sID0gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSInICsgcGFyYW1ldGVyICsgJyIgbmFtZT0iJyArIHBhcmFtZXRlciArICciLz4nOw0KCQkJCQkJYnJlYWs7DQoNCgkJCQkJZGVmYXVsdDoNCgkJCQkJCS8vIHRocm93ICd1bmRlZmluZWQgaW5wdXQgdHlwZSBpbiByZWdfcGFyYW1ldGVyczogJyArIGRlZmluaXRpb24uaW5wdXQNCgkJCQkJCWJyZWFrOw0KCQkJCX0NCg0KCQkJCWdyb3VwaW5nX2h0bWwgKz0gcGFyYW1faHRtbDsNCgkJCX0NCg0KCQkJcmV0dXJuIGdyb3VwaW5nX2h0bWw7DQoJCX0NCg0KCQlmdW5jdGlvbiBjaGVja1ZhbHVlc0V4aXN0KHBhcmFtZXRlciwgZGVmaW5pdGlvbil7DQoJCQlpZiAoZGVmaW5pdGlvbi52YWx1ZXMgPT09IHVuZGVmaW5lZCl7DQoJCQkJYWxlcnQoJ2Zvcm1UZW1wbGF0ZSAnICsgZGVmaW5pdGlvbi5pbnB1dCArICcgInZhbHVlcyIgZm9yICInICsgcGFyYW1ldGVyICsgJyIgaXMgbm90IGRlZmluZWQnKTsNCgkJCQl0aHJvdyAnZXJyb3I6IHZhbHVlcyBtaXNzaW5nJzsNCgkJCX0NCgkJfQ0KDQoJCWZ1bmN0aW9uIGNyZWF0ZUxhYmVsKGRlZmluaXRpb24sIHBhcmFtZXRlcil7DQoJCQl2YXIgdGV4dCA9IHBhcmFtZXRlcjsNCgkJCWlmIChkZWZpbml0aW9uLmxhYmVsICE9PSB1bmRlZmluZWQpDQoJCQkJdGV4dCA9IGRlZmluaXRpb24ubGFiZWw7DQoJCQl2YXIgbGFiZWxfY2xhc3MgPSAnJzsNCgkJCWlmIChkZWZpbml0aW9uLmxhYmVsX2NsYXNzICE9PSB1bmRlZmluZWQpDQoJCQkJbGFiZWxfY2xhc3MgPSAnIGNsYXNzPSInICsgZGVmaW5pdGlvbi5sYWJlbF9jbGFzcyArICciJzsNCgkJCXJldHVybiAnPGxhYmVsIGZvcj0iJyArIHBhcmFtZXRlciArICciJyArIGxhYmVsX2NsYXNzICsgJz4nICsgdGV4dCArICc8L2xhYmVsPlxyXG4nOw0KCQl9DQoNCgkJZnVuY3Rpb24gY3JlYXRlTGVnZW5kKGRlZmluaXRpb24sIHBhcmFtZXRlcil7DQoJCQl2YXIgdGV4dCA9IHBhcmFtZXRlcjsNCgkJCWlmIChkZWZpbml0aW9uLmxlZ2VuZCAhPT0gdW5kZWZpbmVkKQ0KCQkJCXRleHQgPSBkZWZpbml0aW9uLmxlZ2VuZDsNCgkJCXJldHVybiAnPGxlZ2VuZD4nICsgIHRleHQgKyAnPC9sZWdlbmQ-XHJcbic7DQoJCX0NCg0KCQlmdW5jdGlvbiBwb3N0SnNvbkRhdGEob3B0aW9ucywganNvbkRhdGEsIGNhbGxiYWNrKXsNCgkJCXZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsNCgkJCXZhciB1cmwgPSBvcHRpb25zLnVybDsNCgkJCXhoci5vcGVuKG9wdGlvbnMubWV0aG9kLCBvcHRpb25zLnVybCwgdHJ1ZSk7DQoJCQlpZiAob3B0aW9ucy5oZWFkZXJzICE9PSB1bmRlZmluZWQpew0KCQkJCWZvciAodmFyIGk9MDsgaTxvcHRpb25zLmhlYWRlcnMubGVuZ3RoOyBpKyspew0KCQkJCQl2YXIgaGVhZGVyID0gb3B0aW9ucy5oZWFkZXJzW2ldOw0KCQkJCQl4aHIuc2V0UmVxdWVzdEhlYWRlcihoZWFkZXIubmFtZSwgaGVhZGVyLnZhbHVlKTsNCgkJCQl9DQoJCQl9DQoJCQl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkgew0KCQkJICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCAmJiB4aHIuc3RhdHVzID09PSAyMDApIHsNCgkJCSAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOw0KCQkJICAgICAgICBjYWxsYmFjayhqc29uKTsNCgkJCSAgICB9DQoJCQl9Ow0KDQoJCQl2YXIgZGF0YSA9IEpTT04uc3RyaW5naWZ5KGpzb25EYXRhKTsNCgkJCXhoci5zZW5kKGRhdGEpOwkJIAkNCgkJfQ0KDQoJCWZ1bmN0aW9uIGRpc3BsYXlfZXJyb3IoY29udGVudCl7DQoJCQl2YXIgd2FybmluZ190ZXh0X2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndhcm5pbmdfdGV4dCIpOw0KCQkJdmFyIHdhcm5pbmdfZGl2X2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndhcm5pbmdfZGl2Iik7DQoJCQlpZiAod2FybmluZ190ZXh0X2VsICE9PSB1bmRlZmluZWQpDQoJCQkJd2FybmluZ190ZXh0X2VsLmlubmVySFRNTCA9IGNvbnRlbnQ7DQoJCQlpZiAod2FybmluZ19kaXZfZWwgIT09IHVuZGVmaW5lZCl7DQoJCQkJd2FybmluZ19kaXZfZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsJDQoJCQkJd2luZG93LnNjcm9sbFRvKDAsIDApOw0KCQkJfQ0KCQl9DQoNCgkJZnVuY3Rpb24gY2xlYXJfZXJyb3IoY29udGVudCl7DQoJCQl2YXIgd2FybmluZ190ZXh0X2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndhcm5pbmdfdGV4dCIpOw0KCQkJdmFyIHdhcm5pbmdfZGl2X2VsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIndhcm5pbmdfZGl2Iik7DQoJCQlpZiAod2FybmluZ190ZXh0X2VsICE9PSB1bmRlZmluZWQpDQoJCQkJd2FybmluZ190ZXh0X2VsLmlubmVySFRNTCA9ICcnOw0KCQkJaWYgKHdhcm5pbmdfZGl2X2VsICE9PSB1bmRlZmluZWQpDQoJCQkJd2FybmluZ19kaXZfZWwuc3R5bGUudmlzaWJpbGl0eSA9ICJoaWRkZW4iOwkNCgkJfQ0KCQ0KCQlmdW5jdGlvbiBpc3NldChwYXJhbSl7DQoJCQlpZiAodHlwZW9mIHBhcmFtICE9PSAnb2JqZWN0Jyl7DQoJCQkJaWYgKHBhcmFtID09PSB1bmRlZmluZWQgfHwgcGFyYW0gPT09IG51bGwgfHwgcGFyYW0ubGVuZ3RoID09PSAwKQ0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCTwvc2NyaXB0Pg0KICA8L2hlYWQ-DQogIDxib2R5Pg0Ke3t7Ym9keX19fQ0KDQogICAgPHNjcmlwdCBzcmM9Ii9qcy9qcXVlcnktMy4yLjEuc2xpbS5taW4uanMiPjwvc2NyaXB0Pg0KICAgIDxzY3JpcHQgc3JjPSIvanMvcG9wcGVyLm1pbi5qcyI-PC9zY3JpcHQ-DQogICAgPHNjcmlwdCBzcmM9Ii9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iL2pzL2Jvb3RzdHJhcC1mb3JtaGVscGVycy5qcyI-PC9zY3JpcHQ-DQogICAgPHNjcmlwdCBzcmM9Ii9qcy9ib290c3RyYXAtZm9ybWhlbHBlcnMtcGhvbmUuanMiPjwvc2NyaXB0Pg0KDQogIDwvYm9keT4NCjwvaHRtbD4"}}}