diff --git a/db.js b/db.js index 8cc0cdc..d3ab020 100644 --- a/db.js +++ b/db.js @@ -21,6 +21,7 @@ export function openDatabase(userID) { if (!db.objectStoreNames.contains(storeName)) { let store = db.createObjectStore(storeName, { keyPath: "id", autoIncrement: true }); store.createIndex("datetimeIndex", "post_timestamp", { unique: false }); + store.createIndex("postIDIndex", "data.post_id", { unique: true }); } }; request.onsuccess = (event) => { @@ -132,4 +133,4 @@ export async function getAllData(userID) { }; }); } -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkJBQTJCO0FBQzNCLGdCQUFnQjtBQUNoQixrQkFBa0I7QUFDbEIsbUJBQW1CO0FBQ25CLElBQUk7QUFFSixNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUM7QUFDOUIsTUFBTSxhQUFhLEdBQVcsT0FBTyxDQUFDO0FBQ3RDLElBQUksT0FBTyxHQUFHLHFCQUFxQixDQUFBO0FBQ25DLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQVliLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBYTtJQUN0QyxNQUFNLFNBQVMsR0FBRyxHQUFHLGFBQWEsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUUvQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25DLE1BQU0sT0FBTyxHQUFxQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU1RCxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDL0IsbUZBQW1GO1lBQ25GLE1BQU0sVUFBVSxHQUFHLEtBQXdCLENBQUM7WUFDNUMsTUFBTSxDQUFDLG1CQUFtQixVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQztRQUVGLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxLQUE0QixFQUFFLEVBQUU7WUFDdkQsTUFBTSxFQUFFLEdBQWlCLEtBQUssQ0FBQyxNQUEyQixDQUFDLE1BQU0sQ0FBQztZQUNsRSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVB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QUMsTUFBTSxDQUFDLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDakQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsMERBQTBEO2FBQ2pGO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsVUFBVSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ2xDLG1GQUFtRjtZQUNuRixNQUFNLFVBQVUsR0FBRyxLQUF3QixDQUFDO1lBQzVDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUM7UUFDOUUsQ0FBQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaW50ZXJmYWNlIE15SnNvbk9iamVjdCB7XG4vLyAgIGlkOiBzdHJpbmc7XG4vLyAgIG5hbWU6IHN0cmluZztcbi8vICAgZW1haWw6IHN0cmluZztcbi8vIH1cblxuY29uc3QgZGJOYW1lOiBzdHJpbmcgPSBcImRkbG5cIjtcbmNvbnN0IHN0b3JlTmFtZUJhc2U6IHN0cmluZyA9IFwicG9zdHNcIjtcbmxldCBrZXlCYXNlID0gXCJkYW5kZWxpb25fcG9zdHNfdjFfXCJcbmxldCBrZXkgPSBcIlwiO1xuXG5cbmludGVyZmFjZSBJREJSZXF1ZXN0RXZlbnQ8VCA9IGFueT4gZXh0ZW5kcyBFdmVudCB7XG4gICAgdGFyZ2V0OiBJREJSZXF1ZXN0PFQ+O1xufVxuXG4vLyBJbmRleGVkREIgdXNlcyBET01FeGNlcHRpb24sIHNvIGxldCdzIHVzZSBpdCBmb3IgZXJyb3IgdHlwaW5nXG50eXBlIERCRXJyb3IgPSBFdmVudCAmIHtcbiAgICB0YXJnZXQ6IHsgZXJyb3JDb2RlOiBET01FeGNlcHRpb24gfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBvcGVuRGF0YWJhc2UodXNlcklEOnN0cmluZyk6IFByb21pc2U8SURCRGF0YWJhc2U+IHtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgcmVxdWVzdDogSURCT3BlbkRCUmVxdWVzdCA9IGluZGV4ZWREQi5vcGVuKGRiTmFtZSwgMSk7XG5cbiAgICAgICAgcmVxdWVzdC5vbmVycm9yID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIGEgdHlwZSBhc3NlcnRpb24gdG8gYWNjZXNzIHRoZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9mIElEQlJlcXVlc3QgZXJyb3IgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGVycm9yRXZlbnQgPSBldmVudCBhcyBJREJSZXF1ZXN0RXZlbnQ7XG4gICAgICAgICAgICByZWplY3QoYERhdGFiYXNlIGVycm9yOiAke2Vycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlfWApO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gKGV2ZW50OiBJREJWZXJzaW9uQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRiOiBJREJEYXRhYmFzZSA9IChldmVudC50YXJnZXQgYXMgSURCT3BlbkRCUmVxdWVzdCkucmVzdWx0O1xuICAgICAgICAgICAgaWYgKCFkYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHN0b3JlTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShzdG9yZU5hbWUsIHsga2V5UGF0aDogXCJpZFwiLCBhdXRvSW5jcmVtZW50OiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIHN0b3JlLmNyZWF0ZUluZGV4KFwiZGF0ZXRpbWVJbmRleFwiLCBcInBvc3RfdGltZXN0YW1wXCIsIHsgdW5pcXVlOiBmYWxzZSB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGI6IElEQkRhdGFiYXNlID0gKGV2ZW50LnRhcmdldCBhcyBJREJPcGVuREJSZXF1ZXN0KS5yZXN1bHQ7XG4gICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGREYXRhKHVzZXJJRDogc3RyaW5nLCBkYXRhOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgICAgICBjb25zdCBkYiA9IGF3YWl0IG9wZW5EYXRhYmFzZSh1c2VySUQpO1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcblxuICAgICAgICBjb25zdCBhZGRSZXF1ZXN0ID0gc3RvcmUuYWRkKHtwb3N0X3RpbWVzdGFtcDogZGF0YS5wb3N0X3RpbWVzdGFtcCwgZGF0YTpkYXRhfSk7XG5cbiAgICAgICAgYWRkUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdEYXRhIGhhcyBiZWVuIGFkZGVkOicsIChlLnRhcmdldCBhcyBJREJSZXF1ZXN0KS5yZXN1bHQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGFkZFJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBhIHR5cGUgYXNzZXJ0aW9uIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgcHJvcGVydGllcyBvZiBJREJSZXF1ZXN0IGVycm9yIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gYWRkaW5nIGRhdGE6JywgZXJyb3JFdmVudC50YXJnZXQuZXJyb3I/Lm1lc3NhZ2UpO1xuICAgICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIG9wZW5pbmcgZGF0YWJhc2U6JywgZXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZERhdGFBcnJheSh1c2VySUQ6IHN0cmluZywgYXJyYXk6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gYCR7c3RvcmVOYW1lQmFzZX1fJHt1c2VySUR9YDtcbiAgICAgICAgY29uc3QgZGIgPSBhd2FpdCBvcGVuRGF0YWJhc2UodXNlcklEKTtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZHdyaXRlXCIpO1xuICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG5cbiAgICAgICAgbGV0IGNvdW50ID0gMDtcblxuICAgICAgICBhcnJheS5yZXZlcnNlKCk7XG5cbiAgICAgICAgZm9yIChsZXQgZGF0YSBvZiBhcnJheSkge1xuICAgICAgICAgICAgY29uc3QgYWRkUmVxdWVzdCA9IHN0b3JlLmFkZCh7cG9zdF90aW1lc3RhbXA6IGRhdGEucG9zdF90aW1lc3RhbXAsIGRhdGE6ZGF0YX0pO1xuICAgICAgICAgICAgYWRkUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRGF0YSBoYXMgYmVlbiBhZGRlZDonLCAoZS50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0KTtcbiAgICAgICAgICAgIH07XG4gICAgXG4gICAgICAgICAgICBhZGRSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIGEgdHlwZSBhc3NlcnRpb24gdG8gYWNjZXNzIHRoZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9mIElEQlJlcXVlc3QgZXJyb3IgZXZlbnRcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGFkZGluZyBkYXRhOicsIGVycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvdW50Kys7XG5cbiAgICAgICAgICAgIC8vIGlmIChjb3VudCAlIDEwMCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKGBBZGRlZCAke2NvdW50fSBwb3N0cy4uLmApO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG5cbiAgICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBvcGVuaW5nIGRhdGFiYXNlOicsIGVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREYXRhKHVzZXJJRDpzdHJpbmcsIGxvd2VySUQ6RGF0ZSwgdXBwZXJJRDpEYXRlKTogUHJvbWlzZTxhbnkgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgIGNvbnN0IGRiID0gYXdhaXQgb3BlbkRhdGFiYXNlKHVzZXJJRCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZG9ubHlcIik7XG4gICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qga2V5UmFuZ2VWYWx1ZSA9IElEQktleVJhbmdlLmJvdW5kKGxvd2VySUQsIHVwcGVySUQpO1xuXG4gICAgICAgIGNvbnN0IHJlY29yZHM6IGFueVtdID0gW107XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBzdG9yZS5pbmRleChcImRhdGV0aW1lSW5kZXhcIik7XG5cblxuICAgICAgICBjb25zdCBjdXJzb3JSZXF1ZXN0ID0gaW5kZXgub3BlbkN1cnNvcihrZXlSYW5nZVZhbHVlKTtcblxuICAgICAgICBjdXJzb3JSZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvciA9IChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0IGFzIElEQkN1cnNvcldpdGhWYWx1ZTtcbiAgICAgICAgICAgIGlmIChjdXJzb3IpIHtcbiAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2goY3Vyc29yLnZhbHVlLmRhdGEpOyAvLyBDb2xsZWN0IHRoZSByZWNvcmRcbiAgICAgICAgICAgICAgICBjdXJzb3IuY29udGludWUoKTsgLy8gTW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSByYW5nZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBObyBtb3JlIGVudHJpZXMgaW4gdGhlIHJhbmdlXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZWNvcmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjdXJzb3JSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgYSB0eXBlIGFzc2VydGlvbiB0byBhY2Nlc3MgdGhlIHNwZWNpZmljIHByb3BlcnRpZXMgb2YgSURCUmVxdWVzdCBlcnJvciBldmVudFxuICAgICAgICAgICAgY29uc3QgZXJyb3JFdmVudCA9IGV2ZW50IGFzIElEQlJlcXVlc3RFdmVudDtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyYW5zYWN0aW9uIGZhaWxlZDonLCBlcnJvckV2ZW50LnRhcmdldC5lcnJvcj8ubWVzc2FnZSk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3JFdmVudC50YXJnZXQuZXJyb3IpOyAvLyBSZWplY3QgdGhlIHByb21pc2UgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsRGF0YSh1c2VySUQ6c3RyaW5nKTogUHJvbWlzZTxhbnkgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgIGNvbnN0IGRiID0gYXdhaXQgb3BlbkRhdGFiYXNlKHVzZXJJRCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZG9ubHlcIik7XG4gICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZ2V0UmVxdWVzdCA9IHN0b3JlLmdldEFsbCgpO1xuXG4gICAgICAgIGdldFJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGdldFJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnUmV0cmlldmVkIGRhdGE6JywgZ2V0UmVxdWVzdC5yZXN1bHQuanNvbkRhdGEpO1xuICAgICAgICAgICAgICAgIC8vIHJlc29sdmUoZ2V0UmVxdWVzdC5yZXN1bHQuanNvbkRhdGEgYXMgYW55KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGdldFJlcXVlc3QucmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGRhdGEgcmVjb3JkIGZvdW5kIGZvciBrZXknLCBrZXkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTsgLy8gZXhwbGljaXRseSByZXNvbHZlIHdpdGggdW5kZWZpbmVkIHdoZW4gbm8gZGF0YSBpcyBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGdldFJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBhIHR5cGUgYXNzZXJ0aW9uIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgcHJvcGVydGllcyBvZiBJREJSZXF1ZXN0IGVycm9yIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVHJhbnNhY3Rpb24gZmFpbGVkOicsIGVycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlKTtcbiAgICAgICAgICAgIHJlamVjdChlcnJvckV2ZW50LnRhcmdldC5lcnJvcik7IC8vIHJlamVjdCB0aGUgcHJvbWlzZSBpZiB0aGVyZSdzIGFuIGVycm9yXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvZGIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkJBQTJCO0FBQzNCLGdCQUFnQjtBQUNoQixrQkFBa0I7QUFDbEIsbUJBQW1CO0FBQ25CLElBQUk7QUFFSixNQUFNLE1BQU0sR0FBVyxNQUFNLENBQUM7QUFDOUIsTUFBTSxhQUFhLEdBQVcsT0FBTyxDQUFDO0FBQ3RDLElBQUksT0FBTyxHQUFHLHFCQUFxQixDQUFBO0FBQ25DLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQVliLE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBYTtJQUN0QyxNQUFNLFNBQVMsR0FBRyxHQUFHLGFBQWEsSUFBSSxNQUFNLEVBQUUsQ0FBQztJQUUvQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25DLE1BQU0sT0FBTyxHQUFxQixTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU1RCxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDL0IsbUZBQW1GO1lBQ25GLE1BQU0sVUFBVSxHQUFHLEtBQXdCLENBQUM7WUFDNUMsTUFBTSxDQUFDLG1CQUFtQixVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQztRQUVGLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxLQUE0QixFQUFFLEVBQUU7WUFDdkQsTUFBTSxFQUFFLEdBQWlCLEtBQUssQ0FBQyxNQUEyQixDQUFDLE1BQU0sQ0FBQztZQUNsRSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVB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QUN4QixJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7Z0JBQ25CLGdFQUFnRTtnQkFDaEUsOENBQThDO2dCQUM5QyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQzlCO2lCQUFNO2dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ2pELE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLDBEQUEwRDthQUNqRjtRQUNMLENBQUMsQ0FBQztRQUVGLFVBQVUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUNsQyxtRkFBbUY7WUFDbkYsTUFBTSxVQUFVLEdBQUcsS0FBd0IsQ0FBQztZQUM1QyxPQUFPLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMseUNBQXlDO1FBQzlFLENBQUMsQ0FBQztJQUNOLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGludGVyZmFjZSBNeUpzb25PYmplY3Qge1xuLy8gICBpZDogc3RyaW5nO1xuLy8gICBuYW1lOiBzdHJpbmc7XG4vLyAgIGVtYWlsOiBzdHJpbmc7XG4vLyB9XG5cbmNvbnN0IGRiTmFtZTogc3RyaW5nID0gXCJkZGxuXCI7XG5jb25zdCBzdG9yZU5hbWVCYXNlOiBzdHJpbmcgPSBcInBvc3RzXCI7XG5sZXQga2V5QmFzZSA9IFwiZGFuZGVsaW9uX3Bvc3RzX3YxX1wiXG5sZXQga2V5ID0gXCJcIjtcblxuXG5pbnRlcmZhY2UgSURCUmVxdWVzdEV2ZW50PFQgPSBhbnk+IGV4dGVuZHMgRXZlbnQge1xuICAgIHRhcmdldDogSURCUmVxdWVzdDxUPjtcbn1cblxuLy8gSW5kZXhlZERCIHVzZXMgRE9NRXhjZXB0aW9uLCBzbyBsZXQncyB1c2UgaXQgZm9yIGVycm9yIHR5cGluZ1xudHlwZSBEQkVycm9yID0gRXZlbnQgJiB7XG4gICAgdGFyZ2V0OiB7IGVycm9yQ29kZTogRE9NRXhjZXB0aW9uIH07XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gb3BlbkRhdGFiYXNlKHVzZXJJRDpzdHJpbmcpOiBQcm9taXNlPElEQkRhdGFiYXNlPiB7XG4gICAgY29uc3Qgc3RvcmVOYW1lID0gYCR7c3RvcmVOYW1lQmFzZX1fJHt1c2VySUR9YDtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3Q6IElEQk9wZW5EQlJlcXVlc3QgPSBpbmRleGVkREIub3BlbihkYk5hbWUsIDEpO1xuXG4gICAgICAgIHJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBhIHR5cGUgYXNzZXJ0aW9uIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgcHJvcGVydGllcyBvZiBJREJSZXF1ZXN0IGVycm9yIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgcmVqZWN0KGBEYXRhYmFzZSBlcnJvcjogJHtlcnJvckV2ZW50LnRhcmdldC5lcnJvcj8ubWVzc2FnZX1gKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IChldmVudDogSURCVmVyc2lvbkNoYW5nZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYjogSURCRGF0YWJhc2UgPSAoZXZlbnQudGFyZ2V0IGFzIElEQk9wZW5EQlJlcXVlc3QpLnJlc3VsdDtcbiAgICAgICAgICAgIGlmICghZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhzdG9yZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoc3RvcmVOYW1lLCB7IGtleVBhdGg6IFwiaWRcIiwgYXV0b0luY3JlbWVudDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBzdG9yZS5jcmVhdGVJbmRleChcImRhdGV0aW1lSW5kZXhcIiwgXCJwb3N0X3RpbWVzdGFtcFwiLCB7IHVuaXF1ZTogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgc3RvcmUuY3JlYXRlSW5kZXgoXCJwb3N0SURJbmRleFwiLCBcImRhdGEucG9zdF9pZFwiLCB7IHVuaXF1ZTogdHJ1ZSB9KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGI6IElEQkRhdGFiYXNlID0gKGV2ZW50LnRhcmdldCBhcyBJREJPcGVuREJSZXF1ZXN0KS5yZXN1bHQ7XG4gICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cblxuXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGREYXRhKHVzZXJJRDogc3RyaW5nLCBkYXRhOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgICAgICBjb25zdCBkYiA9IGF3YWl0IG9wZW5EYXRhYmFzZSh1c2VySUQpO1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGRiLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgICAgIGNvbnN0IHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKTtcblxuICAgICAgICBjb25zdCBhZGRSZXF1ZXN0ID0gc3RvcmUuYWRkKHtwb3N0X3RpbWVzdGFtcDogZGF0YS5wb3N0X3RpbWVzdGFtcCwgZGF0YTpkYXRhfSk7XG5cbiAgICAgICAgYWRkUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdEYXRhIGhhcyBiZWVuIGFkZGVkOicsIChlLnRhcmdldCBhcyBJREJSZXF1ZXN0KS5yZXN1bHQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGFkZFJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBhIHR5cGUgYXNzZXJ0aW9uIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgcHJvcGVydGllcyBvZiBJREJSZXF1ZXN0IGVycm9yIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gYWRkaW5nIGRhdGE6JywgZXJyb3JFdmVudC50YXJnZXQuZXJyb3I/Lm1lc3NhZ2UpO1xuICAgICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIG9wZW5pbmcgZGF0YWJhc2U6JywgZXJyb3IpO1xuICAgIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZERhdGFBcnJheSh1c2VySUQ6IHN0cmluZywgYXJyYXk6IGFueVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gYCR7c3RvcmVOYW1lQmFzZX1fJHt1c2VySUR9YDtcbiAgICAgICAgY29uc3QgZGIgPSBhd2FpdCBvcGVuRGF0YWJhc2UodXNlcklEKTtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZHdyaXRlXCIpO1xuICAgICAgICBjb25zdCBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSk7XG5cbiAgICAgICAgbGV0IGNvdW50ID0gMDtcblxuICAgICAgICBhcnJheS5yZXZlcnNlKCk7XG5cbiAgICAgICAgZm9yIChsZXQgZGF0YSBvZiBhcnJheSkge1xuICAgICAgICAgICAgY29uc3QgYWRkUmVxdWVzdCA9IHN0b3JlLmFkZCh7cG9zdF90aW1lc3RhbXA6IGRhdGEucG9zdF90aW1lc3RhbXAsIGRhdGE6ZGF0YX0pO1xuICAgICAgICAgICAgYWRkUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRGF0YSBoYXMgYmVlbiBhZGRlZDonLCAoZS50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0KTtcbiAgICAgICAgICAgIH07XG4gICAgXG4gICAgICAgICAgICBhZGRSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIGEgdHlwZSBhc3NlcnRpb24gdG8gYWNjZXNzIHRoZSBzcGVjaWZpYyBwcm9wZXJ0aWVzIG9mIElEQlJlcXVlc3QgZXJyb3IgZXZlbnRcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIGFkZGluZyBkYXRhOicsIGVycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvdW50Kys7XG5cbiAgICAgICAgICAgIC8vIGlmIChjb3VudCAlIDEwMCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gICAgIGNvbnNvbGUubG9nKGBBZGRlZCAke2NvdW50fSBwb3N0cy4uLmApO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG5cbiAgICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBvcGVuaW5nIGRhdGFiYXNlOicsIGVycm9yKTtcbiAgICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXREYXRhKHVzZXJJRDpzdHJpbmcsIGxvd2VySUQ6RGF0ZSwgdXBwZXJJRDpEYXRlKTogUHJvbWlzZTxhbnkgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgIGNvbnN0IGRiID0gYXdhaXQgb3BlbkRhdGFiYXNlKHVzZXJJRCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZG9ubHlcIik7XG4gICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3Qga2V5UmFuZ2VWYWx1ZSA9IElEQktleVJhbmdlLmJvdW5kKGxvd2VySUQsIHVwcGVySUQpO1xuXG4gICAgICAgIGNvbnN0IHJlY29yZHM6IGFueVtdID0gW107XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSBzdG9yZS5pbmRleChcImRhdGV0aW1lSW5kZXhcIik7XG5cblxuICAgICAgICBjb25zdCBjdXJzb3JSZXF1ZXN0ID0gaW5kZXgub3BlbkN1cnNvcihrZXlSYW5nZVZhbHVlKTtcblxuICAgICAgICBjdXJzb3JSZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnNvciA9IChldmVudC50YXJnZXQgYXMgSURCUmVxdWVzdCkucmVzdWx0IGFzIElEQkN1cnNvcldpdGhWYWx1ZTtcbiAgICAgICAgICAgIGlmIChjdXJzb3IpIHtcbiAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2goY3Vyc29yLnZhbHVlLmRhdGEpOyAvLyBDb2xsZWN0IHRoZSByZWNvcmRcbiAgICAgICAgICAgICAgICBjdXJzb3IuY29udGludWUoKTsgLy8gTW92ZSB0byB0aGUgbmV4dCBpdGVtIGluIHRoZSByYW5nZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBObyBtb3JlIGVudHJpZXMgaW4gdGhlIHJhbmdlXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZWNvcmRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBjdXJzb3JSZXF1ZXN0Lm9uZXJyb3IgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgYSB0eXBlIGFzc2VydGlvbiB0byBhY2Nlc3MgdGhlIHNwZWNpZmljIHByb3BlcnRpZXMgb2YgSURCUmVxdWVzdCBlcnJvciBldmVudFxuICAgICAgICAgICAgY29uc3QgZXJyb3JFdmVudCA9IGV2ZW50IGFzIElEQlJlcXVlc3RFdmVudDtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RyYW5zYWN0aW9uIGZhaWxlZDonLCBlcnJvckV2ZW50LnRhcmdldC5lcnJvcj8ubWVzc2FnZSk7XG4gICAgICAgICAgICByZWplY3QoZXJyb3JFdmVudC50YXJnZXQuZXJyb3IpOyAvLyBSZWplY3QgdGhlIHByb21pc2UgaWYgdGhlcmUncyBhbiBlcnJvclxuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWxsRGF0YSh1c2VySUQ6c3RyaW5nKTogUHJvbWlzZTxhbnkgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSBgJHtzdG9yZU5hbWVCYXNlfV8ke3VzZXJJRH1gO1xuICAgIGNvbnN0IGRiID0gYXdhaXQgb3BlbkRhdGFiYXNlKHVzZXJJRCk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZG9ubHlcIik7XG4gICAgY29uc3Qgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzdG9yZU5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZ2V0UmVxdWVzdCA9IHN0b3JlLmdldEFsbCgpO1xuXG4gICAgICAgIGdldFJlcXVlc3Qub25zdWNjZXNzID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKGdldFJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnUmV0cmlldmVkIGRhdGE6JywgZ2V0UmVxdWVzdC5yZXN1bHQuanNvbkRhdGEpO1xuICAgICAgICAgICAgICAgIC8vIHJlc29sdmUoZ2V0UmVxdWVzdC5yZXN1bHQuanNvbkRhdGEgYXMgYW55KTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGdldFJlcXVlc3QucmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ05vIGRhdGEgcmVjb3JkIGZvdW5kIGZvciBrZXknLCBrZXkpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUodW5kZWZpbmVkKTsgLy8gZXhwbGljaXRseSByZXNvbHZlIHdpdGggdW5kZWZpbmVkIHdoZW4gbm8gZGF0YSBpcyBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGdldFJlcXVlc3Qub25lcnJvciA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSBhIHR5cGUgYXNzZXJ0aW9uIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWMgcHJvcGVydGllcyBvZiBJREJSZXF1ZXN0IGVycm9yIGV2ZW50XG4gICAgICAgICAgICBjb25zdCBlcnJvckV2ZW50ID0gZXZlbnQgYXMgSURCUmVxdWVzdEV2ZW50O1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignVHJhbnNhY3Rpb24gZmFpbGVkOicsIGVycm9yRXZlbnQudGFyZ2V0LmVycm9yPy5tZXNzYWdlKTtcbiAgICAgICAgICAgIHJlamVjdChlcnJvckV2ZW50LnRhcmdldC5lcnJvcik7IC8vIHJlamVjdCB0aGUgcHJvbWlzZSBpZiB0aGVyZSdzIGFuIGVycm9yXG4gICAgICAgIH07XG4gICAgfSk7XG59XG4iXX0= \ No newline at end of file diff --git a/main.js b/main.js index 7785720..7c652f6 100644 --- a/main.js +++ b/main.js @@ -13,6 +13,7 @@ import { getData, addData, addDataArray } from "./db.js"; class Post { constructor(author, author_id, text, post_timestamp, imageData = null, importedFrom = null, importSource = null) { this.post_timestamp = post_timestamp; + this.post_id = generateID(); this.author = author; this.author_id = author_id; this.text = text; @@ -329,4 +330,4 @@ function renderPost(post) { return containerDiv; } window.addEventListener("load", main); -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFHdEUsaUJBQWlCO0FBQ2pCLHNDQUFzQztBQUN0Qyx1QkFBdUI7QUFFdkIsNEJBQTRCO0FBQzVCLGtCQUFrQjtBQUNsQixtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCLGtCQUFrQjtBQUNsQixvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLElBQUk7QUFFSixNQUFNLElBQUk7SUFXUixZQUFZLE1BQWMsRUFBRSxTQUFpQixFQUFFLElBQVksRUFBRSxjQUFvQixFQUFFLFlBQWdDLElBQUksRUFBRSxlQUFpQyxJQUFJLEVBQUUsZUFBb0IsSUFBSTtRQUN0TCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUVyQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUU1QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFHRCxTQUFTLFlBQVk7SUFDbkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLElBQVMsRUFBRSxLQUFhLEVBQUUsSUFBWSxFQUFFLEVBQUU7UUFDekQsT0FBTyxZQUFZLElBQUksb0JBQW9CLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUks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QixZQUFZLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLFlBQVksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFdkMsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBvcGVuRGF0YWJhc2UsIGdldERhdGEsIGFkZERhdGEsIGFkZERhdGFBcnJheSB9IGZyb20gXCIuL2RiLmpzXCJcblxuZGVjbGFyZSBsZXQgbWFya2VkOiBhbnk7XG4vLyBsZXQgcG9zdHM6YW55O1xuLy8gbGV0IGtleUJhc2UgPSBcImRhbmRlbGlvbl9wb3N0c192MV9cIlxuLy8gbGV0IGtleTpzdHJpbmcgPSBcIlwiO1xuXG4vLyBpbnRlcmZhY2UgUG9zdFRpbWVzdGFtcCB7XG4vLyAgIHllYXI6IG51bWJlcixcbi8vICAgbW9udGg6IG51bWJlcixcbi8vICAgZGF5OiBudW1iZXIsXG4vLyAgIGhvdXI6IG51bWJlcixcbi8vICAgbWludXRlOiBudW1iZXIsXG4vLyAgIHNlY29uZDogbnVtYmVyLFxuLy8gfVxuXG5jbGFzcyBQb3N0IHtcbiAgcG9zdF90aW1lc3RhbXA6IERhdGU7XG4gIGF1dGhvcjogc3RyaW5nO1xuICBhdXRob3JfaWQ6IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICBpbWFnZV9kYXRhOiBBcnJheUJ1ZmZlciB8IG51bGw7XG5cblxuICBpbXBvcnRlZEZyb206IFwidHdpdHRlclwiIHwgbnVsbDtcbiAgaW1wb3J0U291cmNlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoYXV0aG9yOiBzdHJpbmcsIGF1dGhvcl9pZDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIHBvc3RfdGltZXN0YW1wOiBEYXRlLCBpbWFnZURhdGE6IEFycmF5QnVmZmVyIHwgbnVsbCA9IG51bGwsIGltcG9ydGVkRnJvbTogXCJ0d2l0dGVyXCIgfCBudWxsID0gbnVsbCwgaW1wb3J0U291cmNlOiBhbnkgPSBudWxsKSB7XG4gICAgdGhpcy5wb3N0X3RpbWVzdGFtcCA9IHBvc3RfdGltZXN0YW1wO1xuXG4gICAgdGhpcy5hdXRob3IgPSBhdXRob3I7XG4gICAgdGhpcy5hdXRob3JfaWQgPSBhdXRob3JfaWQ7XG4gICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICB0aGlzLmltYWdlX2RhdGEgPSBpbWFnZURhdGE7XG5cbiAgICB0aGlzLmltcG9ydGVkRnJvbSA9IGltcG9ydGVkRnJvbTtcbiAgICB0aGlzLmltcG9ydFNvdXJjZSA9IGltcG9ydFNvdXJjZTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGluaXRNYXJrZG93bigpIHtcbiAgY29uc3QgcmVuZGVyZXIgPSBuZXcgbWFya2VkLlJlbmRlcmVyKCk7XG4gIHJlbmRlcmVyLmxpbmsgPSAoaHJlZjogYW55LCB0aXRsZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gYDxhIGhyZWY9XCIke2hyZWZ9XCIgdGFyZ2V0PVwiX2JsYW5rXCIke3RpdGxlID8gYCB0aXRsZT1cIiR7dGl0bGV9XCJgIDogJyd9PiR7dGV4dH08L2E+YDtcbiAgfTtcbiAgbWFya2VkLnNldE9wdGlvbnMoeyByZW5kZXJlcjogcmVuZGVyZXIgfSk7XG59XG5cbmZ1bmN0aW9uIHdhaXRNcyhkdXJhdGlvbk1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkdXJhdGlvbk1zKSk7XG59XG5cbmZ1bmN0aW9uIHV1aWR2NCgpIHtcbiAgcmV0dXJuIFwiMTAwMDAwMDAtMTAwMC00MDAwLTgwMDAtMTAwMDAwMDAwMDAwXCIucmVwbGFjZSgvWzAxOF0vZywgKGM6IGFueSkgPT5cbiAgICAoYyBeIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMSkpWzBdICYgMTUgPj4gYyAvIDQpLnRvU3RyaW5nKDE2KVxuICApO1xufVxuXG5sZXQgbG9nTGluZXM6IHN0cmluZ1tdID0gW107XG5sZXQgbG9nTGVuZ3RoID0gMTA7XG5mdW5jdGlvbiBsb2cobWVzc2FnZTogc3RyaW5nKSB7XG4gIGxvZ0xpbmVzLnB1c2goYCR7bmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoKX06ICR7bWVzc2FnZX1gKTtcbiAgaWYgKGxvZ0xpbmVzLmxlbmd0aCA+IDEwKSB7XG4gICAgbG9nTGluZXMgPSBsb2dMaW5lcy5zbGljZShsb2dMaW5lcy5sZW5ndGggLSBsb2dMZW5ndGgpO1xuICB9XG4gIGxldCBsb2cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxvZ1wiKTtcbiAgaWYgKCFsb2cpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgfVxuICBsb2cuaW5uZXJUZXh0ID0gbG9nTGluZXMuam9pbihcIlxcblwiKTtcbn1cblxuZnVuY3Rpb24gYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0pO1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgY29uc3QgZGF0YVVybCA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgaWYgKCFkYXRhVXJsKSB7XG4gICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJhc2U2NCA9IGRhdGFVcmwuc3BsaXQoJywnKVsxXTtcbiAgICAgIHJlc29sdmUoYmFzZTY0KTtcbiAgICB9O1xuXG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfTtcblxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVzdERhdGEoKSB7XG4gIGxldCBwb3N0c1Rlc3REYXRhID0gYXdhaXQgKGF3YWl0IGZldGNoKFwiLi9wb3N0c1Rlc3REYXRhLmpzb25cIikpLmpzb24oKTtcblxuICByZXR1cm4gcG9zdHNUZXN0RGF0YTtcbn1cblxubGV0IHRpbWUgPSAwO1xuXG5mdW5jdGlvbiB0aW1lclN0YXJ0KCkge1xuICB0aW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG59XG5cbmZ1bmN0aW9uIHRpbWVyRGVsdGEoKSB7XG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKSAtIHRpbWU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEZpeGVkVHdlZXRUZXh0KGVudHJ5OiBhbnkpIHtcblxuXG4gIGxldCBmdWxsVGV4dCA9IGVudHJ5LnR3ZWV0LmZ1bGxfdGV4dDtcblxuICBsZXQgbGlua01hcmtkb3duID0gXCJcIjtcbiAgZm9yIChjb25zdCB1cmwgb2YgZW50cnkudHdlZXQuZW50aXRpZXMudXJscykge1xuICAgIGxpbmtNYXJrZG93biA9IGBbJHt1cmwuZGlzcGxheV91cmx9XSgke3VybC5leHBhbmRlZF91cmx9KWA7XG4gICAgZnVsbFRleHQgPSBmdWxsVGV4dC5yZXBsYWNlKHVybC51cmwsIGxpbmtNYXJrZG93bik7XG4gIH1cblxuICByZXR1cm4gZnVsbFRleHRcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVzdERhdGEyKHVzZXJJRDogc3RyaW5nKSB7XG4gIGxvZyhcIkltcG9ydGluZyB0d2VldCBhcmNoaXZlXCIpXG4gIGxldCBwb3N0c1Rlc3REYXRhOiBhbnlbXSA9IFtdO1xuXG4gIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFwiLi90d2VldHMuanNcIik7XG4gIGxldCB0d2VldHNUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICB0d2VldHNUZXh0ID0gdHdlZXRzVGV4dC5yZXBsYWNlKFwid2luZG93LllURC50d2VldHMucGFydDBcIiwgXCJ3aW5kb3cudHdlZXREYXRhXCIpO1xuXG4gIG5ldyBGdW5jdGlvbih0d2VldHNUZXh0KSgpO1xuXG5cbiAgLy8gbGV0IHR3ZWV0cyA9IEpTT04ucGFyc2UodHdlZXRKU09OKTtcbiAgbGV0IGNvdW50ID0gMDtcblxuICBmb3IgKGxldCBlbnRyeSBvZiAod2luZG93IGFzIGFueSkudHdlZXREYXRhKSB7XG4gICAgLy8gaWYgKGVudHJ5LnR3ZWV0Lmhhc093blByb3BlcnR5KFwiaW5fcmVwbHlfdG9fc2NyZWVuX25hbWVcIikgfHwgZW50cnkudHdlZXQucmV0d2VldGVkIHx8IGVudHJ5LnR3ZWV0LmZ1bGxfdGV4dC5zdGFydHNXaXRoKFwiUlRcIikpIHtcbiAgICAvLyAgIGNvbnRpbnVlO1xuICAgIC8vIH1cblxuICAgIGxldCBtZWRpYVVSTDogc3RyaW5nID0gZW50cnkudHdlZXQ/LmVudGl0aWVzPy5tZWRpYT8uWzBdPy5tZWRpYV91cmw7XG4gICAgbGV0IGlzSW1hZ2UgPSBmYWxzZTtcbiAgICBpZiAobWVkaWFVUkwpIHtcbiAgICAgIGlzSW1hZ2UgPSBtZWRpYVVSTC5pbmNsdWRlcygnanBnJyk7XG4gICAgfVxuXG4gICAgbGV0IGltYWdlRGF0YSA9IG51bGw7XG4gICAgaWYgKGlzSW1hZ2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKG1lZGlhVVJMKTtcbiAgICAgICAgYXdhaXQgd2FpdE1zKDEwMCk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgIGltYWdlRGF0YSA9IGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coaW1hZ2VEYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICBsZXQgdGltZVN0YW1wID0gbmV3IERhdGUoZW50cnkudHdlZXQuY3JlYXRlZF9hdCk7XG4gICAgbGV0IHR3ZWV0VGV4dCA9IGF3YWl0IGdldEZpeGVkVHdlZXRUZXh0KGVudHJ5KTtcbiAgICBsZXQgbmV3UG9zdCA9IG5ldyBQb3N0KCdib2JieWRpZ2l0YWxlcycsIHVzZXJJRCwgdHdlZXRUZXh0LCB0aW1lU3RhbXAsIGltYWdlRGF0YSwgJ3R3aXR0ZXInLCBlbnRyeSk7XG5cbiAgICBwb3N0c1Rlc3REYXRhLnB1c2gobmV3UG9zdCk7XG5cbiAgICBjb3VudCsrO1xuICAgIGlmIChjb3VudCAlIDEwMCA9PT0gMCkge1xuICAgICAgbG9nKGBJbXBvcnRlZCAke2NvdW50fSBwb3N0cy4uLmApO1xuICAgICAgLy8gcmVuZGVyKHBvc3RzVGVzdERhdGEpO1xuICAgIH1cblxuICAgIC8vIGlmIChjb3VudCA9PSAxMDAtMSkge1xuICAgIC8vICAgYnJlYWs7XG4gICAgLy8gfVxuXG4gIH1cbiAgcmV0dXJuIHBvc3RzVGVzdERhdGE7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlc3REYXRhMyh1c2VySUQ6IHN0cmluZykge1xuICBsZXQgcG9zdHMgPSBhd2FpdCAoYXdhaXQgKGZldGNoKCcuL3Bvc3RzLmpzb24nKSkpLmpzb24oKTtcblxuICByZXR1cm4gcG9zdHM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlZ2lzdGVyU2VydmljZVdvcmtlcigpIHtcbiAgaWYgKCEoXCJzZXJ2aWNlV29ya2VyXCIgaW4gbmF2aWdhdG9yKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCByZWdpc3RyYXRpb25zID0gYXdhaXQgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIuZ2V0UmVnaXN0cmF0aW9ucygpO1xuICBpZiAocmVnaXN0cmF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS5sb2coXCJTZXJ2aWNlIHdvcmtlciBhbHJlYWR5IHJlZ2lzdGVyZWQuXCIpO1xuICAgIHJldHVybiByZWdpc3RyYXRpb25zWzBdO1xuICB9XG5cbiAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXJcbiAgICAucmVnaXN0ZXIoXCIvc3cuanNcIilcbiAgICAudGhlbigocmVnaXN0cmF0aW9uKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcIlNlcnZpY2UgV29ya2VyIHJlZ2lzdGVyZWQgd2l0aCBzY29wZTpcIiwgcmVnaXN0cmF0aW9uLnNjb3BlKTtcbiAgICAgIHJldHVybiByZWdpc3RyYXRpb247XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiU2VydmljZSBXb3JrZXIgcmVnaXN0cmF0aW9uIGZhaWxlZDpcIiwgZXJyb3IpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRQb3N0KHVzZXJJRDogc3RyaW5nLCBwb3N0czogUG9zdFtdLCBwb3N0VGV4dDogc3RyaW5nKSB7XG4gIGlmICgodHlwZW9mIHBvc3RUZXh0ICE9PSBcInN0cmluZ1wiKSB8fCBwb3N0VGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBsb2coXCJOb3QgcG9zdGluZyBhbiBlbXB0eSBzdHJpbmcuLi5cIilcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zdCA9IG5ldyBQb3N0KGBib2JieWRpZ2l0YWxlc2AsIHVzZXJJRCwgcG9zdFRleHQsIG5ldyBEYXRlKCkpO1xuXG4gIHBvc3RzLnB1c2gocG9zdCk7XG4gIC8vIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocG9zdHMpKTtcbiAgYWRkRGF0YSh1c2VySUQsIHBvc3QpXG5cbiAgcmVuZGVyKHBvc3RzKTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVJRCgpIHtcbiAgaWYgKHNlbGYuY3J5cHRvLmhhc093blByb3BlcnR5KFwicmFuZG9tVVVJRFwiKSkge1xuICAgIHJldHVybiBzZWxmLmNyeXB0by5yYW5kb21VVUlEKCk7XG4gIH1cblxuICByZXR1cm4gdXVpZHY0KCk7XG59XG5cbmZ1bmN0aW9uIGdldFVzZXJJRCgpIHtcbiAgbGV0IGlkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJkYW5kZWxpb25faWRcIik7XG5cbiAgaWYgKCFpZCkge1xuICAgIGlkID0gZ2VuZXJhdGVJRCgpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiZGFuZGVsaW9uX2lkXCIsIGlkKTtcbiAgfVxuXG4gIHJldHVybiBpZDtcbn1cblxuZnVuY3Rpb24gY29ubmVjdFdlYnNvY2tldCh1c2VySUQ6IHN0cmluZykge1xuICBsZXQgd2Vic29ja2V0ID0gbmV3IFdlYlNvY2tldChgd3M6Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZX06JHt3aW5kb3cubG9jYXRpb24ucG9ydH0vd3NgKTtcblxuICB3ZWJzb2NrZXQub25vcGVuID0gZnVuY3Rpb24gKGV2dCkge1xuICAgIGxvZyhcIldlYnNvY2tldDogQ09OTkVDVEVEXCIpO1xuICAgIHdlYnNvY2tldC5zZW5kKGB7XCJtZXNzYWdlVHlwZVwiOlwiY29ubmVjdFwiLCBcImlkXCI6IFwiJHt1c2VySUR9XCJ9YCk7XG4gIH07XG5cbiAgd2Vic29ja2V0Lm9uY2xvc2UgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgbG9nKFwiV2Vic29ja2V0OiBESVNDT05ORUNURURcIik7XG4gIH07XG5cbiAgd2Vic29ja2V0Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICBsb2coJ1dlYnNvY2tldDogUkVTUE9OU0U6ICcgKyBldnQuZGF0YSk7XG4gIH07XG5cbiAgd2Vic29ja2V0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgbG9nKCdXZWJzb2NrZXQ6IEVSUk9SOiAnICsgZXZ0KTtcbiAgfTtcblxuICByZXR1cm4gd2Vic29ja2V0O1xufVxuXG5mdW5jdGlvbiBzZXRGb250KGZvbnROYW1lOiBzdHJpbmcpIHtcblxuICBkb2N1bWVudC5ib2R5LnN0eWxlLmZvbnRGYW1pbHkgPSBmb250TmFtZTtcbiAgbGV0IHRleHRBcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RleHRhcmVhX3Bvc3QnKTtcbiAgaWYgKCF0ZXh0QXJlYSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRleHRBcmVhLnN0eWxlLmZvbnRGYW1pbHkgPSBmb250TmFtZTtcbn1cblxuZnVuY3Rpb24gaW5pdE9mZmxpbmUoKSB7XG4gIC8vIEV2ZW50IGxpc3RlbmVyIGZvciBnb2luZyBvZmZsaW5lXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgKCkgPT4geyBsb2coXCJvZmZsaW5lXCIpIH0pO1xuXG4gIC8vIEV2ZW50IGxpc3RlbmVyIGZvciBnb2luZyBvbmxpbmVcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29ubGluZScsICgpID0+IHsgbG9nKFwib25saW5lXCIpIH0pO1xuXG4gIGxvZyhgT25saW5lIHN0YXR1czogJHtuYXZpZ2F0b3Iub25MaW5lID8gXCJvbmxpbmVcIiA6IFwib2ZmbGluZVwifWApXG5cbn1cblxuZnVuY3Rpb24gaW5pdEJ1dHRvbnModXNlcklEOiBzdHJpbmcsIHBvc3RzOiBQb3N0W10pIHtcbiAgbGV0IGZvbnQxQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidXR0b25fZm9udDFcIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gIGxldCBmb250MkJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYnV0dG9uX2ZvbnQyXCIpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xuXG4gIGZvbnQxQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4geyBzZXRGb250KCdCb29rZXJseScpOyB9KTtcbiAgZm9udDJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7IHNldEZvbnQoJ1ZpcmdpbCcpIH0pO1xuXG5cbiAgbGV0IHBvc3RCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ1dHRvbl9wb3N0XCIpIGFzIEhUTUxCdXR0b25FbGVtZW50O1xuICBsZXQgcG9zdFRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRleHRhcmVhX3Bvc3RcIikgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcblxuICBpZiAoIShwb3N0QnV0dG9uICYmIHBvc3RUZXh0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9XG5cbiAgcG9zdEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIGFkZFBvc3QodXNlcklELCBwb3N0cywgcG9zdFRleHQudmFsdWUpO1xuICAgIHBvc3RUZXh0LnZhbHVlID0gXCJcIjtcbiAgfSk7XG5cbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZFBvc3RzKHVzZXJJRDogc3RyaW5nKSB7XG5cbiAgdGltZXJTdGFydCgpO1xuICBsZXQgcG9zdHM6IGFueSA9IGF3YWl0IGdldERhdGEodXNlcklELCBuZXcgRGF0ZSgyMDIyLCA4KSwgbmV3IERhdGUoKSk7XG5cbiAgaWYgKHBvc3RzLmxlbmd0aCA+IDApIHtcbiAgICBsb2coYExvYWRlZCAke3Bvc3RzLmxlbmd0aH0gcG9zdHMgaW4gJHt0aW1lckRlbHRhKCkudG9GaXhlZCgyKX1tc2ApO1xuICAgIHJldHVybiBwb3N0cztcbiAgfVxuXG4gIHBvc3RzID0gYXdhaXQgY3JlYXRlVGVzdERhdGEyKHVzZXJJRCk7XG5cbiAgbG9nKFwiQWRkaW5nIHRlc3QgZGF0YS4uLlwiKTtcbiAgYWRkRGF0YUFycmF5KHVzZXJJRCwgcG9zdHMpO1xuICByZXR1cm4gYXdhaXQgZ2V0RGF0YSh1c2VySUQsIG5ldyBEYXRlKDIwMjIsIDgpLCBuZXcgRGF0ZSgpKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgbGV0IHBvc3RzOiBQb3N0W10gPSBbXTtcbiAgbGV0IHRpbWUgPSAwOyBgYFxuICBsZXQgZGVsdGEgPSAwO1xuXG4gIGxldCB1cmxQYXJhbXMgPSAobmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZikpLnNlYXJjaFBhcmFtcztcblxuICBpZiAodXJsUGFyYW1zLmdldChcInN3XCIpID09PSBcInRydWVcIikge1xuICAgIGxldCByZWdpc3RyYXRpb24gPSBhd2FpdCByZWdpc3RlclNlcnZpY2VXb3JrZXIoKTtcbiAgfVxuXG4gIGxldCB1c2VySUQgPSBnZXRVc2VySUQoKTtcbiAgbG9nKGBZb3VyIHVzZXIgSUQgaXM6ICR7dXNlcklEfWApO1xuXG4gIGlmIChuYXZpZ2F0b3Iuc3RvcmFnZSAmJiBuYXZpZ2F0b3Iuc3RvcmFnZS5wZXJzaXN0ICYmICFuYXZpZ2F0b3Iuc3RvcmFnZS5wZXJzaXN0ZWQpIHtcbiAgICBjb25zdCBpc1BlcnNpc3RlZCA9IGF3YWl0IG5hdmlnYXRvci5zdG9yYWdlLnBlcnNpc3QoKTtcbiAgICBsb2coYFBlcnNpc3RlZCBzdG9yYWdlIGdyYW50ZWQ6ICR7aXNQZXJzaXN0ZWR9YCk7XG4gIH1cblxuICBsb2coYFBlcnNpc3RlZDogJHsoYXdhaXQgbmF2aWdhdG9yLnN0b3JhZ2UucGVyc2lzdGVkKCkpLnRvU3RyaW5nKCl9YCk7XG5cbiAgaW5pdE1hcmtkb3duKCk7XG5cbiAgLy8gbGV0IG1haW4gPSBhd2FpdCBmZXRjaChcIi9tYWluLmpzXCIpO1xuICAvLyBsZXQgY29kZSA9IGF3YWl0IG1haW4udGV4dCgpO1xuICAvLyAgIGNvbnNvbGUubG9nKGNvZGUpO1xuICAvLyAgIHJlZ2lzdHJhdGlvbi5hY3RpdmUucG9zdE1lc3NhZ2Uoe3R5cGU6XCJ1cGRhdGVNYWluXCIsIGNvZGU6Y29kZX0pO1xuXG4gIHBvc3RzID0gYXdhaXQgbG9hZFBvc3RzKHVzZXJJRCk7XG5cbiAgbGV0IHdlYnNvY2tldCA9IGNvbm5lY3RXZWJzb2NrZXQodXNlcklEKTtcbiAgaW5pdE9mZmxpbmUoKTtcbiAgaW5pdEJ1dHRvbnModXNlcklELCBwb3N0cyk7XG4gIC8vIGRlYnVnZ2VyO1xuXG4gIHRpbWVyU3RhcnQoKTtcbiAgcmVuZGVyKHBvc3RzKTtcbiAgbGV0IHJlbmRlclRpbWUgPSB0aW1lckRlbHRhKCk7XG5cbiAgbG9nKGByZW5kZXIgdG9vazogJHtyZW5kZXJUaW1lLnRvRml4ZWQoMil9bXNgKTtcblxuICBsb2coYG1lbW9yeSB1c2VkOiAkeygocGVyZm9ybWFuY2UgYXMgYW55KS5tZW1vcnkudXNlZEpTSGVhcFNpemUgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgyKX1NYmApXG59XG5cbmZ1bmN0aW9uIHJlbmRlcihwb3N0czogUG9zdFtdKSB7XG4gIGNvbnN0IGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICBsZXQgY29udGVudERpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29udGVudFwiKTtcbiAgaWYgKCFjb250ZW50RGl2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gIH1cbiAgY29udGVudERpdi5pbm5lckhUTUwgPSBcIlwiO1xuICBsZXQgY291bnQgPSAwO1xuXG5cbiAgZm9yIChsZXQgaSA9IHBvc3RzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGV0IHBvc3REYXRhID0gcG9zdHNbaV07XG5cbiAgICBsZXQgcG9zdCA9IHJlbmRlclBvc3QocG9zdERhdGEpO1xuXG4gICAgaWYgKHBvc3QpIHtcbiAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHBvc3QpO1xuICAgICAgY291bnQrKztcbiAgICB9XG4gICAgaWYgKGNvdW50ID4gMTAwKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuXG4gIGlmICghY29udGVudERpdikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGdldCBjb250ZW50IGRpdiFcIik7XG4gIH1cblxuICBjb250ZW50RGl2LmFwcGVuZENoaWxkKGZyYWdtZW50KTtcblxufVxuXG5mdW5jdGlvbiByZW5kZXJQb3N0KHBvc3Q6IFBvc3QpIHtcbiAgaWYgKCEocG9zdC5oYXNPd25Qcm9wZXJ0eShcInRleHRcIikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUG9zdCBpcyBtYWxmb3JtZWQhXCIpO1xuICB9XG4gIGxldCBjb250YWluZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBsZXQgdGV4dERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGxldCB0aW1lc3RhbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBsZXQgaHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaHJcIik7XG5cblxuICB0ZXh0RGl2LmlubmVySFRNTCA9IG1hcmtlZC5wYXJzZShwb3N0LnRleHQpO1xuICAvLyB0ZXh0RGl2LmlubmVySFRNTCA9IERPTVB1cmlmeS5zYW5pdGl6ZShtYXJrZWQucGFyc2UocG9zdC50ZXh0KSk7XG5cbiAgdGltZXN0YW1wRGl2LmlubmVyVGV4dCA9IGAke3Bvc3QucG9zdF90aW1lc3RhbXAudG9EYXRlU3RyaW5nKCl9YDtcbiAgdGltZXN0YW1wRGl2LnRpdGxlID0gYCR7cG9zdC5wb3N0X3RpbWVzdGFtcC50b0xvY2FsZVRpbWVTdHJpbmcoKX0gwrcgJHtwb3N0LnBvc3RfdGltZXN0YW1wLnRvRGF0ZVN0cmluZygpfWBcbiAgY29udGFpbmVyRGl2LmFwcGVuZENoaWxkKGhyKTtcbiAgY29udGFpbmVyRGl2LmFwcGVuZENoaWxkKHRleHREaXYpO1xuXG4gIGlmICghKFwiaW1hZ2VfZGF0YVwiIGluIHBvc3QgJiYgcG9zdC5pbWFnZV9kYXRhKSkge1xuICAgIGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZCh0aW1lc3RhbXBEaXYpO1xuICAgIHJldHVybiBjb250YWluZXJEaXY7XG4gICAgLy8gcmV0dXJuIG51bGw7XG4gIH1cblxuICBsZXQgaW1hZ2UgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuICBjb25zdCBibG9iID0gbmV3IEJsb2IoW3Bvc3QuaW1hZ2VfZGF0YSBhcyBBcnJheUJ1ZmZlcl0sIHsgdHlwZTogJ2ltYWdlL2pwZycgfSk7XG4gIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gIGltYWdlLm9ubG9hZCA9ICgpID0+IHtcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gIH07XG5cblxuICBpbWFnZS5zcmMgPSB1cmw7XG4gIC8vIGltYWdlLnNyYyA9IGltYWdlLnNyYyA9IFwiZGF0YTppbWFnZS9wbmc7YmFzZTY0LFwiICsgcG9zdC5pbWFnZTtcbiAgaW1hZ2UuY2xhc3NOYW1lID0gXCJwb3N0SW1hZ2VcIjtcblxuICBjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQoaW1hZ2UpO1xuICBjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQodGltZXN0YW1wRGl2KTtcblxuICByZXR1cm4gY29udGFpbmVyRGl2O1xufVxuXG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRcIiwgbWFpbik7XG4iXX0= \ No newline at end of file +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFHdEUsaUJBQWlCO0FBQ2pCLHNDQUFzQztBQUN0Qyx1QkFBdUI7QUFFdkIsNEJBQTRCO0FBQzVCLGtCQUFrQjtBQUNsQixtQkFBbUI7QUFDbkIsaUJBQWlCO0FBQ2pCLGtCQUFrQjtBQUNsQixvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLElBQUk7QUFFSixNQUFNLElBQUk7SUFZUixZQUFZLE1BQWMsRUFBRSxTQUFpQixFQUFFLElBQVksRUFBRSxjQUFvQixFQUFFLFlBQWdDLElBQUksRUFBRSxlQUFpQyxJQUFJLEVBQUUsZUFBb0IsSUFBSTtRQUN0TCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBRTVCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBRTVCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQUdELFNBQVMsWUFBWTtJQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN2QyxRQUFRLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBUyxFQUFFLEtBQWEsRUFBRSxJQUFZLEVBQUUsRUFBRTtRQUN6RCxPQUFPLFlBQVksSUFBSSxvQkFBb0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxXQUFX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O0lBQ2pFLEtBQUssQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO0lBRTlCLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV2QyxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG9wZW5EYXRhYmFzZSwgZ2V0RGF0YSwgYWRkRGF0YSwgYWRkRGF0YUFycmF5IH0gZnJvbSBcIi4vZGIuanNcIlxuXG5kZWNsYXJlIGxldCBtYXJrZWQ6IGFueTtcbi8vIGxldCBwb3N0czphbnk7XG4vLyBsZXQga2V5QmFzZSA9IFwiZGFuZGVsaW9uX3Bvc3RzX3YxX1wiXG4vLyBsZXQga2V5OnN0cmluZyA9IFwiXCI7XG5cbi8vIGludGVyZmFjZSBQb3N0VGltZXN0YW1wIHtcbi8vICAgeWVhcjogbnVtYmVyLFxuLy8gICBtb250aDogbnVtYmVyLFxuLy8gICBkYXk6IG51bWJlcixcbi8vICAgaG91cjogbnVtYmVyLFxuLy8gICBtaW51dGU6IG51bWJlcixcbi8vICAgc2Vjb25kOiBudW1iZXIsXG4vLyB9XG5cbmNsYXNzIFBvc3Qge1xuICBwb3N0X3RpbWVzdGFtcDogRGF0ZTtcbiAgcG9zdF9pZDogc3RyaW5nO1xuICBhdXRob3I6IHN0cmluZztcbiAgYXV0aG9yX2lkOiBzdHJpbmc7XG4gIHRleHQ6IHN0cmluZztcbiAgaW1hZ2VfZGF0YTogQXJyYXlCdWZmZXIgfCBudWxsO1xuXG5cbiAgaW1wb3J0ZWRGcm9tOiBcInR3aXR0ZXJcIiB8IG51bGw7XG4gIGltcG9ydFNvdXJjZTogYW55O1xuXG4gIGNvbnN0cnVjdG9yKGF1dGhvcjogc3RyaW5nLCBhdXRob3JfaWQ6IHN0cmluZywgdGV4dDogc3RyaW5nLCBwb3N0X3RpbWVzdGFtcDogRGF0ZSwgaW1hZ2VEYXRhOiBBcnJheUJ1ZmZlciB8IG51bGwgPSBudWxsLCBpbXBvcnRlZEZyb206IFwidHdpdHRlclwiIHwgbnVsbCA9IG51bGwsIGltcG9ydFNvdXJjZTogYW55ID0gbnVsbCkge1xuICAgIHRoaXMucG9zdF90aW1lc3RhbXAgPSBwb3N0X3RpbWVzdGFtcDtcbiAgICB0aGlzLnBvc3RfaWQgPSBnZW5lcmF0ZUlEKCk7XG5cbiAgICB0aGlzLmF1dGhvciA9IGF1dGhvcjtcbiAgICB0aGlzLmF1dGhvcl9pZCA9IGF1dGhvcl9pZDtcbiAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgIHRoaXMuaW1hZ2VfZGF0YSA9IGltYWdlRGF0YTtcblxuICAgIHRoaXMuaW1wb3J0ZWRGcm9tID0gaW1wb3J0ZWRGcm9tO1xuICAgIHRoaXMuaW1wb3J0U291cmNlID0gaW1wb3J0U291cmNlO1xuICB9XG59XG5cblxuZnVuY3Rpb24gaW5pdE1hcmtkb3duKCkge1xuICBjb25zdCByZW5kZXJlciA9IG5ldyBtYXJrZWQuUmVuZGVyZXIoKTtcbiAgcmVuZGVyZXIubGluayA9IChocmVmOiBhbnksIHRpdGxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBgPGEgaHJlZj1cIiR7aHJlZn1cIiB0YXJnZXQ9XCJfYmxhbmtcIiR7dGl0bGUgPyBgIHRpdGxlPVwiJHt0aXRsZX1cImAgOiAnJ30+JHt0ZXh0fTwvYT5gO1xuICB9O1xuICBtYXJrZWQuc2V0T3B0aW9ucyh7IHJlbmRlcmVyOiByZW5kZXJlciB9KTtcbn1cblxuZnVuY3Rpb24gd2FpdE1zKGR1cmF0aW9uTXM6IG51bWJlcikge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGR1cmF0aW9uTXMpKTtcbn1cblxuZnVuY3Rpb24gdXVpZHY0KCkge1xuICByZXR1cm4gXCIxMDAwMDAwMC0xMDAwLTQwMDAtODAwMC0xMDAwMDAwMDAwMDBcIi5yZXBsYWNlKC9bMDE4XS9nLCAoYzogYW55KSA9PlxuICAgIChjIF4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxKSlbMF0gJiAxNSA+PiBjIC8gNCkudG9TdHJpbmcoMTYpXG4gICk7XG59XG5cbmxldCBsb2dMaW5lczogc3RyaW5nW10gPSBbXTtcbmxldCBsb2dMZW5ndGggPSAxMDtcbmZ1bmN0aW9uIGxvZyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgbG9nTGluZXMucHVzaChgJHtuZXcgRGF0ZSgpLnRvTG9jYWxlVGltZVN0cmluZygpfTogJHttZXNzYWdlfWApO1xuICBpZiAobG9nTGluZXMubGVuZ3RoID4gMTApIHtcbiAgICBsb2dMaW5lcyA9IGxvZ0xpbmVzLnNsaWNlKGxvZ0xpbmVzLmxlbmd0aCAtIGxvZ0xlbmd0aCk7XG4gIH1cbiAgbGV0IGxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibG9nXCIpO1xuICBpZiAoIWxvZykge1xuICAgIHRocm93IG5ldyBFcnJvcigpO1xuICB9XG4gIGxvZy5pbm5lclRleHQgPSBsb2dMaW5lcy5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfSk7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcblxuICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBkYXRhVXJsID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICBpZiAoIWRhdGFVcmwpIHtcbiAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYmFzZTY0ID0gZGF0YVVybC5zcGxpdCgnLCcpWzFdO1xuICAgICAgcmVzb2x2ZShiYXNlNjQpO1xuICAgIH07XG5cbiAgICByZWFkZXIub25lcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9O1xuXG4gICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVUZXN0RGF0YSgpIHtcbiAgbGV0IHBvc3RzVGVzdERhdGEgPSBhd2FpdCAoYXdhaXQgZmV0Y2goXCIuL3Bvc3RzVGVzdERhdGEuanNvblwiKSkuanNvbigpO1xuXG4gIHJldHVybiBwb3N0c1Rlc3REYXRhO1xufVxuXG5sZXQgdGltZSA9IDA7XG5cbmZ1bmN0aW9uIHRpbWVyU3RhcnQoKSB7XG4gIHRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbn1cblxuZnVuY3Rpb24gdGltZXJEZWx0YSgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpIC0gdGltZTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0Rml4ZWRUd2VldFRleHQoZW50cnk6IGFueSkge1xuXG5cbiAgbGV0IGZ1bGxUZXh0ID0gZW50cnkudHdlZXQuZnVsbF90ZXh0O1xuXG4gIGxldCBsaW5rTWFya2Rvd24gPSBcIlwiO1xuICBmb3IgKGNvbnN0IHVybCBvZiBlbnRyeS50d2VldC5lbnRpdGllcy51cmxzKSB7XG4gICAgbGlua01hcmtkb3duID0gYFske3VybC5kaXNwbGF5X3VybH1dKCR7dXJsLmV4cGFuZGVkX3VybH0pYDtcbiAgICBmdWxsVGV4dCA9IGZ1bGxUZXh0LnJlcGxhY2UodXJsLnVybCwgbGlua01hcmtkb3duKTtcbiAgfVxuXG4gIHJldHVybiBmdWxsVGV4dFxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVUZXN0RGF0YTIodXNlcklEOiBzdHJpbmcpIHtcbiAgbG9nKFwiSW1wb3J0aW5nIHR3ZWV0IGFyY2hpdmVcIilcbiAgbGV0IHBvc3RzVGVzdERhdGE6IGFueVtdID0gW107XG5cbiAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goXCIuL3R3ZWV0cy5qc1wiKTtcbiAgbGV0IHR3ZWV0c1RleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gIHR3ZWV0c1RleHQgPSB0d2VldHNUZXh0LnJlcGxhY2UoXCJ3aW5kb3cuWVRELnR3ZWV0cy5wYXJ0MFwiLCBcIndpbmRvdy50d2VldERhdGFcIik7XG5cbiAgbmV3IEZ1bmN0aW9uKHR3ZWV0c1RleHQpKCk7XG5cblxuICAvLyBsZXQgdHdlZXRzID0gSlNPTi5wYXJzZSh0d2VldEpTT04pO1xuICBsZXQgY291bnQgPSAwO1xuXG4gIGZvciAobGV0IGVudHJ5IG9mICh3aW5kb3cgYXMgYW55KS50d2VldERhdGEpIHtcbiAgICAvLyBpZiAoZW50cnkudHdlZXQuaGFzT3duUHJvcGVydHkoXCJpbl9yZXBseV90b19zY3JlZW5fbmFtZVwiKSB8fCBlbnRyeS50d2VldC5yZXR3ZWV0ZWQgfHwgZW50cnkudHdlZXQuZnVsbF90ZXh0LnN0YXJ0c1dpdGgoXCJSVFwiKSkge1xuICAgIC8vICAgY29udGludWU7XG4gICAgLy8gfVxuXG4gICAgbGV0IG1lZGlhVVJMOiBzdHJpbmcgPSBlbnRyeS50d2VldD8uZW50aXRpZXM/Lm1lZGlhPy5bMF0/Lm1lZGlhX3VybDtcbiAgICBsZXQgaXNJbWFnZSA9IGZhbHNlO1xuICAgIGlmIChtZWRpYVVSTCkge1xuICAgICAgaXNJbWFnZSA9IG1lZGlhVVJMLmluY2x1ZGVzKCdqcGcnKTtcbiAgICB9XG5cbiAgICBsZXQgaW1hZ2VEYXRhID0gbnVsbDtcbiAgICBpZiAoaXNJbWFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gobWVkaWFVUkwpO1xuICAgICAgICBhd2FpdCB3YWl0TXMoMTAwKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgaW1hZ2VEYXRhID0gYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhpbWFnZURhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGxldCB0aW1lU3RhbXAgPSBuZXcgRGF0ZShlbnRyeS50d2VldC5jcmVhdGVkX2F0KTtcbiAgICBsZXQgdHdlZXRUZXh0ID0gYXdhaXQgZ2V0Rml4ZWRUd2VldFRleHQoZW50cnkpO1xuICAgIGxldCBuZXdQb3N0ID0gbmV3IFBvc3QoJ2JvYmJ5ZGlnaXRhbGVzJywgdXNlcklELCB0d2VldFRleHQsIHRpbWVTdGFtcCwgaW1hZ2VEYXRhLCAndHdpdHRlcicsIGVudHJ5KTtcblxuICAgIHBvc3RzVGVzdERhdGEucHVzaChuZXdQb3N0KTtcblxuICAgIGNvdW50Kys7XG4gICAgaWYgKGNvdW50ICUgMTAwID09PSAwKSB7XG4gICAgICBsb2coYEltcG9ydGVkICR7Y291bnR9IHBvc3RzLi4uYCk7XG4gICAgICAvLyByZW5kZXIocG9zdHNUZXN0RGF0YSk7XG4gICAgfVxuXG4gICAgLy8gaWYgKGNvdW50ID09IDEwMC0xKSB7XG4gICAgLy8gICBicmVhaztcbiAgICAvLyB9XG5cbiAgfVxuICByZXR1cm4gcG9zdHNUZXN0RGF0YTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVzdERhdGEzKHVzZXJJRDogc3RyaW5nKSB7XG4gIGxldCBwb3N0cyA9IGF3YWl0IChhd2FpdCAoZmV0Y2goJy4vcG9zdHMuanNvbicpKSkuanNvbigpO1xuXG4gIHJldHVybiBwb3N0cztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVnaXN0ZXJTZXJ2aWNlV29ya2VyKCkge1xuICBpZiAoIShcInNlcnZpY2VXb3JrZXJcIiBpbiBuYXZpZ2F0b3IpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHJlZ2lzdHJhdGlvbnMgPSBhd2FpdCBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5nZXRSZWdpc3RyYXRpb25zKCk7XG4gIGlmIChyZWdpc3RyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhcIlNlcnZpY2Ugd29ya2VyIGFscmVhZHkgcmVnaXN0ZXJlZC5cIik7XG4gICAgcmV0dXJuIHJlZ2lzdHJhdGlvbnNbMF07XG4gIH1cblxuICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlclxuICAgIC5yZWdpc3RlcihcIi9zdy5qc1wiKVxuICAgIC50aGVuKChyZWdpc3RyYXRpb24pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwiU2VydmljZSBXb3JrZXIgcmVnaXN0ZXJlZCB3aXRoIHNjb3BlOlwiLCByZWdpc3RyYXRpb24uc2NvcGUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdHJhdGlvbjtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJTZXJ2aWNlIFdvcmtlciByZWdpc3RyYXRpb24gZmFpbGVkOlwiLCBlcnJvcik7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFBvc3QodXNlcklEOiBzdHJpbmcsIHBvc3RzOiBQb3N0W10sIHBvc3RUZXh0OiBzdHJpbmcpIHtcbiAgaWYgKCh0eXBlb2YgcG9zdFRleHQgIT09IFwic3RyaW5nXCIpIHx8IHBvc3RUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZyhcIk5vdCBwb3N0aW5nIGFuIGVtcHR5IHN0cmluZy4uLlwiKVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3N0ID0gbmV3IFBvc3QoYGJvYmJ5ZGlnaXRhbGVzYCwgdXNlcklELCBwb3N0VGV4dCwgbmV3IERhdGUoKSk7XG5cbiAgcG9zdHMucHVzaChwb3N0KTtcbiAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShwb3N0cykpO1xuICBhZGREYXRhKHVzZXJJRCwgcG9zdClcblxuICByZW5kZXIocG9zdHMpO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZUlEKCkge1xuICBpZiAoc2VsZi5jcnlwdG8uaGFzT3duUHJvcGVydHkoXCJyYW5kb21VVUlEXCIpKSB7XG4gICAgcmV0dXJuIHNlbGYuY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIHJldHVybiB1dWlkdjQoKTtcbn1cblxuZnVuY3Rpb24gZ2V0VXNlcklEKCkge1xuICBsZXQgaWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImRhbmRlbGlvbl9pZFwiKTtcblxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBnZW5lcmF0ZUlEKCk7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJkYW5kZWxpb25faWRcIiwgaWQpO1xuICB9XG5cbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiBjb25uZWN0V2Vic29ja2V0KHVzZXJJRDogc3RyaW5nKSB7XG4gIGxldCB3ZWJzb2NrZXQgPSBuZXcgV2ViU29ja2V0KGB3czovLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfToke3dpbmRvdy5sb2NhdGlvbi5wb3J0fS93c2ApO1xuXG4gIHdlYnNvY2tldC5vbm9wZW4gPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgbG9nKFwiV2Vic29ja2V0OiBDT05ORUNURURcIik7XG4gICAgd2Vic29ja2V0LnNlbmQoYHtcIm1lc3NhZ2VUeXBlXCI6XCJjb25uZWN0XCIsIFwiaWRcIjogXCIke3VzZXJJRH1cIn1gKTtcbiAgfTtcblxuICB3ZWJzb2NrZXQub25jbG9zZSA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICBsb2coXCJXZWJzb2NrZXQ6IERJU0NPTk5FQ1RFRFwiKTtcbiAgfTtcblxuICB3ZWJzb2NrZXQub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkge1xuICAgIGxvZygnV2Vic29ja2V0OiBSRVNQT05TRTogJyArIGV2dC5kYXRhKTtcbiAgfTtcblxuICB3ZWJzb2NrZXQub25lcnJvciA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICBsb2coJ1dlYnNvY2tldDogRVJST1I6ICcgKyBldnQpO1xuICB9O1xuXG4gIHJldHVybiB3ZWJzb2NrZXQ7XG59XG5cbmZ1bmN0aW9uIHNldEZvbnQoZm9udE5hbWU6IHN0cmluZykge1xuXG4gIGRvY3VtZW50LmJvZHkuc3R5bGUuZm9udEZhbWlseSA9IGZvbnROYW1lO1xuICBsZXQgdGV4dEFyZWEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dGFyZWFfcG9zdCcpO1xuICBpZiAoIXRleHRBcmVhKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdGV4dEFyZWEuc3R5bGUuZm9udEZhbWlseSA9IGZvbnROYW1lO1xufVxuXG5mdW5jdGlvbiBpbml0T2ZmbGluZSgpIHtcbiAgLy8gRXZlbnQgbGlzdGVuZXIgZm9yIGdvaW5nIG9mZmxpbmVcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCAoKSA9PiB7IGxvZyhcIm9mZmxpbmVcIikgfSk7XG5cbiAgLy8gRXZlbnQgbGlzdGVuZXIgZm9yIGdvaW5nIG9ubGluZVxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgKCkgPT4geyBsb2coXCJvbmxpbmVcIikgfSk7XG5cbiAgbG9nKGBPbmxpbmUgc3RhdHVzOiAke25hdmlnYXRvci5vbkxpbmUgPyBcIm9ubGluZVwiIDogXCJvZmZsaW5lXCJ9YClcblxufVxuXG5mdW5jdGlvbiBpbml0QnV0dG9ucyh1c2VySUQ6IHN0cmluZywgcG9zdHM6IFBvc3RbXSkge1xuICBsZXQgZm9udDFCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ1dHRvbl9mb250MVwiKSBhcyBIVE1MQnV0dG9uRWxlbWVudDtcbiAgbGV0IGZvbnQyQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidXR0b25fZm9udDJcIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XG5cbiAgZm9udDFCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7IHNldEZvbnQoJ0Jvb2tlcmx5Jyk7IH0pO1xuICBmb250MkJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHsgc2V0Rm9udCgnVmlyZ2lsJykgfSk7XG5cblxuICBsZXQgcG9zdEJ1dHRvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYnV0dG9uX3Bvc3RcIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gIGxldCBwb3N0VGV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidGV4dGFyZWFfcG9zdFwiKSBhcyBIVE1MVGV4dEFyZWFFbGVtZW50O1xuXG4gIGlmICghKHBvc3RCdXR0b24gJiYgcG9zdFRleHQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gIH1cblxuICBwb3N0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgYWRkUG9zdCh1c2VySUQsIHBvc3RzLCBwb3N0VGV4dC52YWx1ZSk7XG4gICAgcG9zdFRleHQudmFsdWUgPSBcIlwiO1xuICB9KTtcblxufVxuXG5hc3luYyBmdW5jdGlvbiBsb2FkUG9zdHModXNlcklEOiBzdHJpbmcpIHtcblxuICB0aW1lclN0YXJ0KCk7XG4gIGxldCBwb3N0czogYW55ID0gYXdhaXQgZ2V0RGF0YSh1c2VySUQsIG5ldyBEYXRlKDIwMjIsIDgpLCBuZXcgRGF0ZSgpKTtcblxuICBpZiAocG9zdHMubGVuZ3RoID4gMCkge1xuICAgIGxvZyhgTG9hZGVkICR7cG9zdHMubGVuZ3RofSBwb3N0cyBpbiAke3RpbWVyRGVsdGEoKS50b0ZpeGVkKDIpfW1zYCk7XG4gICAgcmV0dXJuIHBvc3RzO1xuICB9XG5cbiAgcG9zdHMgPSBhd2FpdCBjcmVhdGVUZXN0RGF0YTIodXNlcklEKTtcblxuICBsb2coXCJBZGRpbmcgdGVzdCBkYXRhLi4uXCIpO1xuICBhZGREYXRhQXJyYXkodXNlcklELCBwb3N0cyk7XG4gIHJldHVybiBhd2FpdCBnZXREYXRhKHVzZXJJRCwgbmV3IERhdGUoMjAyMiwgOCksIG5ldyBEYXRlKCkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBsZXQgcG9zdHM6IFBvc3RbXSA9IFtdO1xuICBsZXQgdGltZSA9IDA7IGBgXG4gIGxldCBkZWx0YSA9IDA7XG5cbiAgbGV0IHVybFBhcmFtcyA9IChuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSkuc2VhcmNoUGFyYW1zO1xuXG4gIGlmICh1cmxQYXJhbXMuZ2V0KFwic3dcIikgPT09IFwidHJ1ZVwiKSB7XG4gICAgbGV0IHJlZ2lzdHJhdGlvbiA9IGF3YWl0IHJlZ2lzdGVyU2VydmljZVdvcmtlcigpO1xuICB9XG5cbiAgbGV0IHVzZXJJRCA9IGdldFVzZXJJRCgpO1xuICBsb2coYFlvdXIgdXNlciBJRCBpczogJHt1c2VySUR9YCk7XG5cbiAgaWYgKG5hdmlnYXRvci5zdG9yYWdlICYmIG5hdmlnYXRvci5zdG9yYWdlLnBlcnNpc3QgJiYgIW5hdmlnYXRvci5zdG9yYWdlLnBlcnNpc3RlZCkge1xuICAgIGNvbnN0IGlzUGVyc2lzdGVkID0gYXdhaXQgbmF2aWdhdG9yLnN0b3JhZ2UucGVyc2lzdCgpO1xuICAgIGxvZyhgUGVyc2lzdGVkIHN0b3JhZ2UgZ3JhbnRlZDogJHtpc1BlcnNpc3RlZH1gKTtcbiAgfVxuXG4gIGxvZyhgUGVyc2lzdGVkOiAkeyhhd2FpdCBuYXZpZ2F0b3Iuc3RvcmFnZS5wZXJzaXN0ZWQoKSkudG9TdHJpbmcoKX1gKTtcblxuICBpbml0TWFya2Rvd24oKTtcblxuICAvLyBsZXQgbWFpbiA9IGF3YWl0IGZldGNoKFwiL21haW4uanNcIik7XG4gIC8vIGxldCBjb2RlID0gYXdhaXQgbWFpbi50ZXh0KCk7XG4gIC8vICAgY29uc29sZS5sb2coY29kZSk7XG4gIC8vICAgcmVnaXN0cmF0aW9uLmFjdGl2ZS5wb3N0TWVzc2FnZSh7dHlwZTpcInVwZGF0ZU1haW5cIiwgY29kZTpjb2RlfSk7XG5cbiAgcG9zdHMgPSBhd2FpdCBsb2FkUG9zdHModXNlcklEKTtcblxuICBsZXQgd2Vic29ja2V0ID0gY29ubmVjdFdlYnNvY2tldCh1c2VySUQpO1xuICBpbml0T2ZmbGluZSgpO1xuICBpbml0QnV0dG9ucyh1c2VySUQsIHBvc3RzKTtcbiAgLy8gZGVidWdnZXI7XG5cbiAgdGltZXJTdGFydCgpO1xuICByZW5kZXIocG9zdHMpO1xuICBsZXQgcmVuZGVyVGltZSA9IHRpbWVyRGVsdGEoKTtcblxuICBsb2coYHJlbmRlciB0b29rOiAke3JlbmRlclRpbWUudG9GaXhlZCgyKX1tc2ApO1xuXG4gIGxvZyhgbWVtb3J5IHVzZWQ6ICR7KChwZXJmb3JtYW5jZSBhcyBhbnkpLm1lbW9yeS51c2VkSlNIZWFwU2l6ZSAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDIpfU1iYClcbn1cblxuZnVuY3Rpb24gcmVuZGVyKHBvc3RzOiBQb3N0W10pIHtcbiAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIGxldCBjb250ZW50RGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb250ZW50XCIpO1xuICBpZiAoIWNvbnRlbnREaXYpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgfVxuICBjb250ZW50RGl2LmlubmVySFRNTCA9IFwiXCI7XG4gIGxldCBjb3VudCA9IDA7XG5cblxuICBmb3IgKGxldCBpID0gcG9zdHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBsZXQgcG9zdERhdGEgPSBwb3N0c1tpXTtcblxuICAgIGxldCBwb3N0ID0gcmVuZGVyUG9zdChwb3N0RGF0YSk7XG5cbiAgICBpZiAocG9zdCkge1xuICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQocG9zdCk7XG4gICAgICBjb3VudCsrO1xuICAgIH1cbiAgICBpZiAoY291bnQgPiAxMDApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG5cbiAgaWYgKCFjb250ZW50RGl2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZ2V0IGNvbnRlbnQgZGl2IVwiKTtcbiAgfVxuXG4gIGNvbnRlbnREaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpO1xuXG59XG5cbmZ1bmN0aW9uIHJlbmRlclBvc3QocG9zdDogUG9zdCkge1xuICBpZiAoIShwb3N0Lmhhc093blByb3BlcnR5KFwidGV4dFwiKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJQb3N0IGlzIG1hbGZvcm1lZCFcIik7XG4gIH1cbiAgbGV0IGNvbnRhaW5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGxldCB0ZXh0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgbGV0IHRpbWVzdGFtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGxldCBociA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoclwiKTtcblxuXG4gIHRleHREaXYuaW5uZXJIVE1MID0gbWFya2VkLnBhcnNlKHBvc3QudGV4dCk7XG4gIC8vIHRleHREaXYuaW5uZXJIVE1MID0gRE9NUHVyaWZ5LnNhbml0aXplKG1hcmtlZC5wYXJzZShwb3N0LnRleHQpKTtcblxuICB0aW1lc3RhbXBEaXYuaW5uZXJUZXh0ID0gYCR7cG9zdC5wb3N0X3RpbWVzdGFtcC50b0RhdGVTdHJpbmcoKX1gO1xuICB0aW1lc3RhbXBEaXYudGl0bGUgPSBgJHtwb3N0LnBvc3RfdGltZXN0YW1wLnRvTG9jYWxlVGltZVN0cmluZygpfSDCtyAke3Bvc3QucG9zdF90aW1lc3RhbXAudG9EYXRlU3RyaW5nKCl9YFxuICBjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQoaHIpO1xuICBjb250YWluZXJEaXYuYXBwZW5kQ2hpbGQodGV4dERpdik7XG5cbiAgaWYgKCEoXCJpbWFnZV9kYXRhXCIgaW4gcG9zdCAmJiBwb3N0LmltYWdlX2RhdGEpKSB7XG4gICAgY29udGFpbmVyRGl2LmFwcGVuZENoaWxkKHRpbWVzdGFtcERpdik7XG4gICAgcmV0dXJuIGNvbnRhaW5lckRpdjtcbiAgICAvLyByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxldCBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbcG9zdC5pbWFnZV9kYXRhIGFzIEFycmF5QnVmZmVyXSwgeyB0eXBlOiAnaW1hZ2UvanBnJyB9KTtcbiAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgfTtcblxuXG4gIGltYWdlLnNyYyA9IHVybDtcbiAgLy8gaW1hZ2Uuc3JjID0gaW1hZ2Uuc3JjID0gXCJkYXRhOmltYWdlL3BuZztiYXNlNjQsXCIgKyBwb3N0LmltYWdlO1xuICBpbWFnZS5jbGFzc05hbWUgPSBcInBvc3RJbWFnZVwiO1xuXG4gIGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZChpbWFnZSk7XG4gIGNvbnRhaW5lckRpdi5hcHBlbmRDaGlsZCh0aW1lc3RhbXBEaXYpO1xuXG4gIHJldHVybiBjb250YWluZXJEaXY7XG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCBtYWluKTtcbiJdfQ== \ No newline at end of file diff --git a/src/db.ts b/src/db.ts index 637bdb9..a2909a9 100644 --- a/src/db.ts +++ b/src/db.ts @@ -36,6 +36,7 @@ export function openDatabase(userID:string): Promise { if (!db.objectStoreNames.contains(storeName)) { let store = db.createObjectStore(storeName, { keyPath: "id", autoIncrement: true }); store.createIndex("datetimeIndex", "post_timestamp", { unique: false }); + store.createIndex("postIDIndex", "data.post_id", { unique: true }); } }; diff --git a/src/main.ts b/src/main.ts index 3983da0..020809c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -16,6 +16,7 @@ declare let marked: any; class Post { post_timestamp: Date; + post_id: string; author: string; author_id: string; text: string; @@ -27,6 +28,7 @@ class Post { constructor(author: string, author_id: string, text: string, post_timestamp: Date, imageData: ArrayBuffer | null = null, importedFrom: "twitter" | null = null, importSource: any = null) { this.post_timestamp = post_timestamp; + this.post_id = generateID(); this.author = author; this.author_id = author_id;