sonamu 0.8.9 → 0.8.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +37 -33
- package/dist/ui/api.js +5 -5
- package/package.json +1 -1
- package/src/migration/migrator.ts +42 -41
- package/src/shared/web.shared.ts.txt +5 -0
- package/src/ui/api.ts +5 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../src/migration/migrator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,EAAM,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMzD,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,gBAAgB,CAAC;AAMrE,OAAO,KAAK,EAA6B,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1E,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,EAAE,CAAC;AAEJ,qBAAa,QAAQ;YACL,iBAAiB;IAqB/B;;;;;;;;OAQG;IACG,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAiG3C;;;;;;;;;OASG;IACG,SAAS,CACb,MAAM,EAAE,OAAO,GAAG,UAAU,EAC5B,OAAO,EAAE,CAAC,MAAM,cAAc,CAAC,EAAE,GAChC,OAAO,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"migrator.d.ts","sourceRoot":"","sources":["../../src/migration/migrator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,EAAM,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMzD,OAAO,KAAK,EAAE,gBAAgB,EAAgB,MAAM,gBAAgB,CAAC;AAMrE,OAAO,KAAK,EAA6B,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1E,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,EAAE,CAAC;AAEJ,qBAAa,QAAQ;YACL,iBAAiB;IAqB/B;;;;;;;;OAQG;IACG,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAiG3C;;;;;;;;;OASG;IACG,SAAS,CACb,MAAM,EAAE,OAAO,GAAG,UAAU,EAC5B,OAAO,EAAE,CAAC,MAAM,cAAc,CAAC,EAAE,GAChC,OAAO,CAAC,eAAe,CAAC;IAmE3B;;;;;;OAMG;IACH,iBAAiB,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE;;;;IAWtE;;;;;;;OAOG;IACG,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAuBpD,OAAO,CAAC,UAAU;IAalB;;;;;;OAMG;IACG,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC;IAuBxC,iBAAiB,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAgErE;;;;;;OAMG;IACG,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC;CAkEhD"}
|
|
@@ -95,9 +95,11 @@ export class Migrator {
|
|
|
95
95
|
return [];
|
|
96
96
|
}
|
|
97
97
|
const compareDBconn = createKnexInstance(Sonamu.dbConfig[status0conn.connKey]);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
98
|
+
try {
|
|
99
|
+
return await this.compareMigrations(compareDBconn);
|
|
100
|
+
} finally{
|
|
101
|
+
await compareDBconn.destroy();
|
|
102
|
+
}
|
|
101
103
|
})();
|
|
102
104
|
Naite.t("migrator:getStatus:preparedCodes", preparedCodes);
|
|
103
105
|
return {
|
|
@@ -129,35 +131,37 @@ export class Migrator {
|
|
|
129
131
|
connKey: config.connKey,
|
|
130
132
|
knex: createKnexInstance(config.options)
|
|
131
133
|
})));
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
return
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
|
|
134
|
+
try {
|
|
135
|
+
// action
|
|
136
|
+
const result = await (async ()=>{
|
|
137
|
+
switch(action){
|
|
138
|
+
case "apply":
|
|
139
|
+
return Promise.all(conns.map(async ({ connKey, knex })=>{
|
|
140
|
+
const [batchNo, applied] = await knex.migrate.latest();
|
|
141
|
+
return {
|
|
142
|
+
connKey,
|
|
143
|
+
batchNo,
|
|
144
|
+
applied
|
|
145
|
+
};
|
|
146
|
+
}));
|
|
147
|
+
case "rollback":
|
|
148
|
+
return Promise.all(conns.map(async ({ connKey, knex })=>{
|
|
149
|
+
const [batchNo, applied] = await knex.migrate.rollback();
|
|
150
|
+
return {
|
|
151
|
+
connKey,
|
|
152
|
+
batchNo,
|
|
153
|
+
applied
|
|
154
|
+
};
|
|
155
|
+
}));
|
|
156
|
+
}
|
|
157
|
+
})();
|
|
158
|
+
Naite.t("migrator:runAction:result", result);
|
|
159
|
+
return result;
|
|
160
|
+
} finally{
|
|
161
|
+
await Promise.all(conns.map(({ knex })=>{
|
|
162
|
+
return knex.destroy();
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
161
165
|
}
|
|
162
166
|
/**
|
|
163
167
|
* 삭제 가능한 마이그레이션 코드 파일을 검증합니다.
|
|
@@ -340,4 +344,4 @@ export class Migrator {
|
|
|
340
344
|
}
|
|
341
345
|
}
|
|
342
346
|
|
|
343
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vbWlncmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciwgdW5saW5rLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZ3JvdXAsIHN1bSwgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IERCLCB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgdHlwZSB7IEdlbk1pZ3JhdGlvbkNvZGUsIE1pZ3JhdGlvblNldCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVBbHRlckNvZGUsIGdlbmVyYXRlQ3JlYXRlQ29kZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdGlvblwiO1xuaW1wb3J0IHsgZ2V0TWlncmF0aW9uU2V0RnJvbUVudGl0eSB9IGZyb20gXCIuL21pZ3JhdGlvbi1zZXRcIjtcbmltcG9ydCB7IFBvc3RncmVTUUxTY2hlbWFSZWFkZXIgfSBmcm9tIFwiLi9wb3N0Z3Jlc3FsLXNjaGVtYS1yZWFkZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29ublN0cmluZywgTWlncmF0aW9uQ29kZSwgTWlncmF0aW9uU3RhdHVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgTWlncmF0aW9uUmVzdWx0ID0ge1xuICBjb25uS2V5OiBzdHJpbmc7XG4gIGJhdGNoTm86IG51bWJlcjtcbiAgYXBwbGllZDogc3RyaW5nW107XG59W107XG5cbmV4cG9ydCBjbGFzcyBNaWdyYXRvciB7XG4gIHByaXZhdGUgYXN5bmMgZ2V0TWlncmF0aW9uQ29kZXMoKTogUHJvbWlzZTxNaWdyYXRpb25Db2RlW10+IHtcbiAgICBjb25zdCBzcmNNaWdyYXRpb25zRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJtaWdyYXRpb25zXCIpOyAvLyDsnbTqsbQg7ZmY6rK97JeQIOq0gOqzhOyXhuydtCDtla3sg4Egc3Jj7JeQ7IScIOywvuyVhOyVvCDtlbTsmpQuXG5cbiAgICBpZiAoIShhd2FpdCBleGlzdHMoc3JjTWlncmF0aW9uc0RpcikpKSB7XG4gICAgICBhd2FpdCBta2RpcihzcmNNaWdyYXRpb25zRGlyLCB7XG4gICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNvZGVzID0gKGF3YWl0IHJlYWRkaXIoc3JjTWlncmF0aW9uc0RpcikpXG4gICAgICAuZmlsdGVyKChmKSA9PiBmLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZikgPT4gKHtcbiAgICAgICAgbmFtZTogZi5yZXBsYWNlKFwiLnRzXCIsIFwiXCIpLFxuICAgICAgICBwYXRoOiBwYXRoLmpvaW4oc3JjTWlncmF0aW9uc0RpciwgZiksXG4gICAgICB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5uYW1lIDwgYi5uYW1lID8gMSA6IC0xKSk7IC8vIOydtOumhCDrgrTrprzssKjsiJwg7KCV66CsKOy1nOyLoOyInClcblxuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpnZXRNaWdyYXRpb25Db2RlczpyZXN1bHRzXCIsIGNvZGVzKTtcbiAgICByZXR1cm4gY29kZXM7XG4gIH1cblxuICAvKipcbiAgICog7YOA6rKf67OEIOuniOydtOq3uOugiOydtOyFmCDsg4Htg5zsmYAg7L2U65OcIOyDneyEsS/spIDruYQg7IOB7YOc66W8IOq1rO2VtOyYteuLiOuLpC5cbiAgICog7Iuk7KCc66GcIERC7JeQIOygkeq3vOuPhCDtlZjqs6Ag66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbzrj4Qg7ZmV7J247ZWY6rOgLFxuICAgKiDtlYTsmpTtlZjri6TrqbQg7KCB7Jqp7ZWgIOyImCDsnojripQg7L2U65Oc66W8IOyDneyEseq5jOyngCDtlbTsmLXri4jri6QuXG4gICAqXG4gICAqIENMSeyZgCBTb25hbXUgVUnsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8TWlncmF0aW9uU3RhdHVzPiB7XG4gICAgY29uc3QgY29kZXMgPSBhd2FpdCB0aGlzLmdldE1pZ3JhdGlvbkNvZGVzKCk7XG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOmdldFN0YXR1czpjb2Rlc1wiLCBjb2Rlcyk7XG5cbiAgICBjb25zdCBjb25uS2V5cyA9IE9iamVjdC5rZXlzKFNvbmFtdS5kYkNvbmZpZykuZmlsdGVyKFxuICAgICAgKGtleSkgPT4ga2V5LmVuZHNXaXRoKFwiX3NsYXZlXCIpID09PSBmYWxzZSxcbiAgICApIGFzIChrZXlvZiB0eXBlb2YgU29uYW11LmRiQ29uZmlnKVtdO1xuXG4gICAgbGV0IG1pZ3JhdGlvblN0YXR1c0Vycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBzdGF0dXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY29ubktleXMubWFwKGFzeW5jIChjb25uS2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGtuZXhPcHRpb25zID0gU29uYW11LmRiQ29uZmlnW2Nvbm5LZXldO1xuICAgICAgICBjb25zdCB0Q29ubiA9IGNyZWF0ZUtuZXhJbnN0YW5jZShrbmV4T3B0aW9ucyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRDb25uLm1pZ3JhdGUuc3RhdHVzKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICAgICAgICAgIGAke2Nvbm5LZXl97J2YIOuniOydtOq3uOugiOydtOyFmCDsg4Htg5zrpbwg6rCA7KC47Jik64qUIOuNsOyXkCDsi6TtjKjtlZjsmIDsirXri4jri6QuIOuNsOydtO2EsOuyoOydtOyKpOqwgCDsmKzrsJTrpbTqsowg6rWs7ISx65CY7KeAIOyViuydgCDqsoMg6rCZ7Iq164uI64ukLiDtmZXsnbjtlZjsi5zqs6Ag64uk7IucIOyLnOuPhO2VtOyjvOyEuOyalC5cXG7si5zrj4TtlZwg7Jew6rKwIOyEpOyglTpcXG4ke0pTT04uc3RyaW5naWZ5KGtuZXhPcHRpb25zLmNvbm5lY3Rpb24sIG51bGwsIDIpfVxcbuuwnOyDne2VnCDsl5Drn6w6XFxuJHtlcnJ9XFxuYCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBtaWdyYXRpb25TdGF0dXNFcnJvciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIGNvbnN0IHBlbmRpbmc6IHN0cmluZ1tdID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IFssIGZkTGlzdF0gPSBhd2FpdCB0Q29ubi5taWdyYXRlLmxpc3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZkTGlzdC5tYXAoKGZkOiB7IGZpbGU6IHN0cmluZyB9KSA9PiBmZC5maWxlLnJlcGxhY2UoXCIudHNcIiwgXCJcIikpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIG1pZ3JhdGlvblN0YXR1c0Vycm9yID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdENvbm4ubWlncmF0ZS5jdXJyZW50VmVyc2lvbigpO1xuICAgICAgICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICBtaWdyYXRpb25TdGF0dXNFcnJvciA9IF9lcnIgaW5zdGFuY2VvZiBFcnJvciA/IF9lcnIubWVzc2FnZSA6IFN0cmluZyhfZXJyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIE5haXRlLnQoXCJtaWdyYXRvcjpnZXRTdGF0dXM6c3RhdHVzXCIsIHN0YXR1cyk7XG5cbiAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0ga25leE9wdGlvbnMuY29ubmVjdGlvbiBhcyBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBjb25uS2V5LnJlcGxhY2UoXCJfbWFzdGVyXCIsIFwiXCIpLFxuICAgICAgICAgICAgY29ubktleSxcbiAgICAgICAgICAgIGNvbm5TdHJpbmc6IGBwZzovLyR7Y29ubmVjdGlvbi51c2VyID8/IFwiXCJ9QCR7Y29ubmVjdGlvbi5ob3N0fToke1xuICAgICAgICAgICAgICBjb25uZWN0aW9uLnBvcnRcbiAgICAgICAgICAgIH0vJHtjb25uZWN0aW9uLmRhdGFiYXNlfWAgYXMgQ29ublN0cmluZyxcbiAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uLFxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgYXMgbnVtYmVyIHwgXCJlcnJvclwiLFxuICAgICAgICAgICAgcGVuZGluZyxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IHRDb25uLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcblxuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpnZXRTdGF0dXM6Y29ubnNcIiwgc3RhdHVzZXMpO1xuXG4gICAgY29uc3QgcHJlcGFyZWRDb2RlczogR2VuTWlncmF0aW9uQ29kZVtdID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1czBjb25uID0gc3RhdHVzZXMuZmluZCgoc3RhdHVzKSA9PiBzdGF0dXMuc3RhdHVzID09PSAwKTtcbiAgICAgIGlmIChzdGF0dXMwY29ubiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgICBgV2hpbGUgdHJ5aW5nIHRvIHByZXBhcmUgbWlncmF0aW9uIGNvZGVzLCB3ZSBmb3VuZCB0aGF0IHRoZXJlIGlzIG5vIGRhdGFiYXNlIHRvIGNvbXBhcmUgbWlncmF0aW9ucy4gV2UgbmVlZCBhdCBsZWFzdCBvbmUgZGF0YWJhc2Ugd2hlcmUgZXZlcnkgbWlncmF0aW9uIGlzIGFwcGxpZWQoc3RhdHVzID09PSAwKS4gWW91IG1pZ2h0IHdhbnQgdG8gYXBwbHkgeW91ciBleGlzdGluZyBtaWdyYXRpb25zIHRvIG9uZSBvZiB0aGUgZGF0YWJhc2VzLmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21wYXJlREJjb25uID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZ1tzdGF0dXMwY29ubi5jb25uS2V5XSk7XG4gICAgICBjb25zdCBnZW5Db2RlcyA9IGF3YWl0IHRoaXMuY29tcGFyZU1pZ3JhdGlvbnMoY29tcGFyZURCY29ubik7XG5cbiAgICAgIGF3YWl0IGNvbXBhcmVEQmNvbm4uZGVzdHJveSgpO1xuXG4gICAgICByZXR1cm4gZ2VuQ29kZXM7XG4gICAgfSkoKTtcblxuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpnZXRTdGF0dXM6cHJlcGFyZWRDb2Rlc1wiLCBwcmVwYXJlZENvZGVzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjb25uczogc3RhdHVzZXMsXG4gICAgICBjb2RlcyxcbiAgICAgIHByZXBhcmVkQ29kZXMsXG4gICAgICBlcnJvcjogbWlncmF0aW9uU3RhdHVzRXJyb3IsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrp4jsnbTqt7jroIjsnbTshZjsnYQg7KCB7Jqp7ZWY6rGw64KYIOuhpOuwse2VqeuLiOuLpC5cbiAgICogU29uYW11IFVJ7JeQ7IScIOuniOydtOq3uOugiOydtOyFmCDsnpHsl4XsnYQg7IiY7ZaJ7ZWgIOuVjCDsgqzsmqnrkKnri4jri6QuXG4gICAqXG4gICAqIENMSeyZgCBTb25hbXUgVUnsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiBAcGFyYW0gYWN0aW9uIOyekeyXhSDsnKDtmJUgKGFwcGx5L3JvbGxiYWNrKVxuICAgKiBAcGFyYW0gdGFyZ2V0cyDsnpHsl4Ug64yA7IOBIERCIOyEpOyglSDtgqQgKGtleW9mIFNvbmFtdURCQ29uZmlnKVxuICAgKiBAcmV0dXJucyDsnpHsl4Ug6rKw6rO8XG4gICAqL1xuICBhc3luYyBydW5BY3Rpb24oXG4gICAgYWN0aW9uOiBcImFwcGx5XCIgfCBcInJvbGxiYWNrXCIsXG4gICAgdGFyZ2V0czogKGtleW9mIFNvbmFtdURCQ29uZmlnKVtdLFxuICApOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdD4ge1xuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpydW5BY3Rpb246YWN0aW9uXCIsIGFjdGlvbik7XG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOnJ1bkFjdGlvbjp0YXJnZXRzXCIsIHRhcmdldHMpO1xuXG4gICAgLy8gZ2V0IHVuaXEga25leCBjb25maWdzXG4gICAgY29uc3QgY29uZmlncyA9IHVuaXF1ZShcbiAgICAgIHRhcmdldHNcbiAgICAgICAgLm1hcCgodGFyZ2V0KSA9PiAoe1xuICAgICAgICAgIGNvbm5LZXk6IHRhcmdldCxcbiAgICAgICAgICBvcHRpb25zOiBTb25hbXUuZGJDb25maWdbdGFyZ2V0IGFzIGtleW9mIHR5cGVvZiBTb25hbXUuZGJDb25maWddLFxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcigoYykgPT4gYy5vcHRpb25zICE9PSB1bmRlZmluZWQpLFxuICAgICAgKHsgb3B0aW9ucyB9KSA9PlxuICAgICAgICBgJHsob3B0aW9ucy5jb25uZWN0aW9uIGFzIEtuZXguUGdDb25uZWN0aW9uQ29uZmlnKS5ob3N0fToke1xuICAgICAgICAgIChvcHRpb25zLmNvbm5lY3Rpb24gYXMgS25leC5QZ0Nvbm5lY3Rpb25Db25maWcpLnBvcnQgPz8gNTQzMlxuICAgICAgICB9LyR7KG9wdGlvbnMuY29ubmVjdGlvbiBhcyBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZykuZGF0YWJhc2V9YCxcbiAgICApO1xuXG4gICAgLy8gZ2V0IGNvbm5lY3Rpb25zXG4gICAgY29uc3QgY29ubnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNvbmZpZ3MubWFwKGFzeW5jIChjb25maWcpID0+ICh7XG4gICAgICAgIGNvbm5LZXk6IGNvbmZpZy5jb25uS2V5LFxuICAgICAgICBrbmV4OiBjcmVhdGVLbmV4SW5zdGFuY2UoY29uZmlnLm9wdGlvbnMpLFxuICAgICAgfSkpLFxuICAgICk7XG5cbiAgICAvLyBhY3Rpb25cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgY2FzZSBcImFwcGx5XCI6XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgY29ubnMubWFwKGFzeW5jICh7IGNvbm5LZXksIGtuZXggfSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBbYmF0Y2hObywgYXBwbGllZF0gPSBhd2FpdCBrbmV4Lm1pZ3JhdGUubGF0ZXN0KCk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29ubktleSxcbiAgICAgICAgICAgICAgICBiYXRjaE5vLFxuICAgICAgICAgICAgICAgIGFwcGxpZWQsIC8vIOydtOuyiCBsYXRlc3Qg7Zi47Lac66GcIOyduO2VtCBcInVwXCLsnbQg7KCB7Jqp65CcIOuniOydtOq3uOugiOydtOyFmCDsnbTrpoQoZS5nLiBcIjIwMjUxMTI0MjMzNTU3X2NyZWF0ZV9fY29tcGFuaWVzLnRzXCIp65Ok7J2YIOuwsOyXtOyeheuLiOuLpC4g7LC46rOgOiBodHRwczovL2dpdGh1Yi5jb20va25leC9rbmV4L2Jsb2IvMDFiMTc3YzQ4NWQ2OTZmMWI3Mjg1OGRlZTcyOGJhMTQzYzRmYWQ3Ni9saWIvbWlncmF0aW9ucy9taWdyYXRlL01pZ3JhdG9yLmpzI0w1NjBcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIGNhc2UgXCJyb2xsYmFja1wiOlxuICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIGNvbm5zLm1hcChhc3luYyAoeyBjb25uS2V5LCBrbmV4IH0pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgW2JhdGNoTm8sIGFwcGxpZWRdID0gYXdhaXQga25leC5taWdyYXRlLnJvbGxiYWNrKCk7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29ubktleSxcbiAgICAgICAgICAgICAgICBiYXRjaE5vLFxuICAgICAgICAgICAgICAgIGFwcGxpZWQsIC8vIOydtOuyiCByb2xsYmFjayDtmLjstpzroZwg7J247ZW0IFwiZG93blwi7J20IOyggeyaqeuQnCg966Gk67Cx65CcKSDrp4jsnbTqt7jroIjsnbTshZgg7J2066aEKGUuZy4gXCIyMDI1MTEyNDIzMzU1N19jcmVhdGVfX2NvbXBhbmllcy50c1wiKeuTpOydmCDrsLDsl7TsnoXri4jri6QuIOywuOqzoDogaHR0cHM6Ly9naXRodWIuY29tL2tuZXgva25leC9ibG9iLzAxYjE3N2M0ODVkNjk2ZjFiNzI4NThkZWU3MjhiYTE0M2M0ZmFkNzYvbGliL21pZ3JhdGlvbnMvbWlncmF0ZS9NaWdyYXRvci5qcyNMNjExXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICAvLyBkZXN0cm95XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjb25ucy5tYXAoKHsga25leCB9KSA9PiB7XG4gICAgICAgIHJldHVybiBrbmV4LmRlc3Ryb3koKTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBOYWl0ZS50KFwibWlncmF0b3I6cnVuQWN0aW9uOnJlc3VsdFwiLCByZXN1bHQpO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDsgq3soJwg6rCA64ql7ZWcIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5wg7YyM7J287J2EIOqygOymne2VqeuLiOuLpC5cbiAgICpcbiAgICogQHBhcmFtIGNvbm5zIOuniOydtOq3uOugiOydtOyFmCDsg4Htg5wg67Cw7Je0XG4gICAqIEBwYXJhbSBjb2RlTmFtZXMg7IKt7KCc7ZWgIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5wg7YyM7J28IOydtOumhCDrsLDsl7RcbiAgICogQHJldHVybnMg7IKt7KCcIOqwgOuKpSDsl6zrtoAg67CPIOyggeyaqeuQnCDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvCDsnbTrpoRcbiAgICovXG4gIHZhbGlkYXRlRGVsZXRhYmxlKGNvbm5zOiBNaWdyYXRpb25TdGF0dXNbXCJjb25uc1wiXSwgY29kZU5hbWVzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGFwcGxpZWRDb2RlcyA9IGNvZGVOYW1lcy5maWx0ZXIoKGNvZGVOYW1lKSA9PlxuICAgICAgY29ubnMuc29tZSgoY29ubikgPT4gY29ubi5wZW5kaW5nLmluY2x1ZGVzKGNvZGVOYW1lKSA9PT0gZmFsc2UpLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY2FuRGVsZXRlOiBhcHBsaWVkQ29kZXMubGVuZ3RoID09PSAwLFxuICAgICAgYXBwbGllZENvZGVzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbzsnYQg7IKt7KCc7ZWp64uI64ukLlxuICAgKlxuICAgKiBTb25hbXUgVUnsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiBAcGFyYW0gY29kZU5hbWVzIOyCreygnO2VoCDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvCDsnbTrpoQg67Cw7Je0XG4gICAqIEByZXR1cm5zIOyCreygnOuQnCDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvCDqsJzsiJhcbiAgICovXG4gIGFzeW5jIGRlbENvZGVzKGNvZGVOYW1lczogc3RyaW5nW10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHsgY29ubnMgfSA9IGF3YWl0IHRoaXMuZ2V0U3RhdHVzKCk7XG4gICAgY29uc3QgeyBjYW5EZWxldGUsIGFwcGxpZWRDb2RlcyB9ID0gdGhpcy52YWxpZGF0ZURlbGV0YWJsZShjb25ucywgY29kZU5hbWVzKTtcbiAgICBpZiAoIWNhbkRlbGV0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgWW91IGNhbm5vdCBkZWxldGUgYSBtaWdyYXRpb24gZmlsZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGFwcGxpZWQuIEFwcGxpZWQgY29kZXM6ICR7YXBwbGllZENvZGVzLmpvaW4oXCIsIFwiKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VtKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGNvZGVOYW1lcy5tYXAoYXN5bmMgKGNvZGVOYW1lKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBgJHtTb25hbXUuYXBpUm9vdFBhdGh9L3NyYy9taWdyYXRpb25zLyR7Y29kZU5hbWV9LnRzYDtcbiAgICAgICAgICBpZiAoYXdhaXQgZXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgYXdhaXQgdW5saW5rKGZpbGVQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdlbkRhdGVUYWcoaW5kZXg6IG51bWJlciwgYmFzZURhdGU6IERhdGUgPSBuZXcgRGF0ZSgpKTogc3RyaW5nIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoYmFzZURhdGUuZ2V0VGltZSgpICsgaW5kZXggKiAxMDAwKTtcbiAgICBjb25zdCBwYWQgPSAobnVtOiBudW1iZXIsIHNpemU6IG51bWJlciA9IDIpID0+IG51bS50b1N0cmluZygpLnBhZFN0YXJ0KHNpemUsIFwiMFwiKTtcbiAgICByZXR1cm4gKFxuICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkgK1xuICAgICAgcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpICtcbiAgICAgIHBhZChkYXRlLmdldERhdGUoKSkgK1xuICAgICAgcGFkKGRhdGUuZ2V0SG91cnMoKSkgK1xuICAgICAgcGFkKGRhdGUuZ2V0TWludXRlcygpKSArXG4gICAgICBwYWQoZGF0ZS5nZXRTZWNvbmRzKCkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvOydhCDsg53shLHtlanri4jri6QuXG4gICAqXG4gICAqIFNvbmFtdSBVSeyXkOyEnCDsgqzsmqnrkKnri4jri6QuXG4gICAqXG4gICAqIEByZXR1cm5zIOyDneyEseuQnCDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvCDqsJzsiJhcbiAgICovXG4gIGFzeW5jIGdlbmVyYXRlUHJlcGFyZWRDb2RlcygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHsgcHJlcGFyZWRDb2RlcyB9ID0gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2VuZXJhdGVQcmVwYXJlZENvZGVzOnByZXBhcmVkQ29kZXNcIiwgcHJlcGFyZWRDb2Rlcyk7XG4gICAgaWYgKHByZXBhcmVkQ29kZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihcIlxcbu2YhOyerCDrqqjrkZAg7Iux7YGs65CcIOyDge2DnOyeheuLiOuLpC5cIikpO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8g7Iuk7KCcIOy9lOuTnCDsg53shLFcbiAgICBjb25zdCBtaWdyYXRpb25zRGlyID0gYCR7U29uYW11LmFwaVJvb3RQYXRofS9zcmMvbWlncmF0aW9uc2A7XG5cbiAgICBmb3IgKGNvbnN0IFtpbmRleCwgcGNvZGVdIG9mIHByZXBhcmVkQ29kZXMuZW50cmllcygpKSB7XG4gICAgICBpZiAocGNvZGUuZm9ybWF0dGVkKSB7XG4gICAgICAgIGNvbnN0IGRhdGVUYWcgPSB0aGlzLmdlbkRhdGVUYWcoaW5kZXgpO1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGAke21pZ3JhdGlvbnNEaXJ9LyR7ZGF0ZVRhZ31fJHtwY29kZS50aXRsZX0udHNgO1xuICAgICAgICBhd2FpdCB3cml0ZUZpbGUoZmlsZVBhdGgsIHBjb2RlLmZvcm1hdHRlZCk7XG4gICAgICAgICFpc1Rlc3QoKSAmJiBjb25zb2xlLmxvZyhjaGFsay5ncmVlbihgTUlHUkFUSU9OIENSRUFURUQgJHtmaWxlUGF0aH1gKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXBhcmVkQ29kZXMubGVuZ3RoO1xuICB9XG5cbiAgYXN5bmMgY29tcGFyZU1pZ3JhdGlvbnMoY29tcGFyZURCOiBLbmV4KTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlW10+IHtcbiAgICAvLyBFbnRpdHkg7Iic7ZqM7ZWY7JesIOyLse2BrFxuICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICAvLyDsobDsnbjthYzsnbTruJQg7Y+s7ZWo7ZWY7JesIEVudGl0eeyXkOyEnCBNaWdyYXRpb25TZXQg7LaU7LacXG4gICAgY29uc3QgZW50aXR5U2V0c1dpdGhKb2luVGFibGUgPSBlbnRpdHlJZHNcbiAgICAgIC5maWx0ZXIoKGVudGl0eUlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMubGVuZ3RoID4gMClcbiAgICAgIC5tYXAoKGVudGl0eUlkKSA9PiBnZXRNaWdyYXRpb25TZXRGcm9tRW50aXR5KEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKSkpO1xuXG4gICAgLy8g7KGw7J247YWM7J2067iU66eMIOy2lOy2nFxuICAgIGNvbnN0IGpvaW5UYWJsZXNXaXRoRHVwID0gZW50aXR5U2V0c1dpdGhKb2luVGFibGUuZmxhdE1hcCgoZW50aXR5U2V0KSA9PiBlbnRpdHlTZXQuam9pblRhYmxlcyk7XG4gICAgLy8g7KSR67O1IOygnOqxsCAo7KSR67O17J24IOqyveyasCBpbmRleGVz66W8IOuzke2VqSlcbiAgICBjb25zdCBqb2luVGFibGVzID0gT2JqZWN0LnZhbHVlcyhncm91cChqb2luVGFibGVzV2l0aER1cCwgKGp0KSA9PiBqdC50YWJsZSkpLm1hcCgodGFibGVzKSA9PiB7XG4gICAgICBhc3NlcnQodGFibGVzICE9PSB1bmRlZmluZWQsIFwidGFibGVzIGlzIHVuZGVmaW5lZFwiKTtcbiAgICAgIGlmICh0YWJsZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB0YWJsZXNbMF07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50YWJsZXNbMF0sXG4gICAgICAgIGluZGV4ZXM6IHVuaXF1ZShcbiAgICAgICAgICB0YWJsZXMuZmxhdE1hcCgodCkgPT4gdC5pbmRleGVzKSxcbiAgICAgICAgICAoaW5kZXgpID0+IFtpbmRleC50eXBlLCAuLi5pbmRleC5jb2x1bW5zXS5qb2luKFwiLVwiKSxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICAvLyDsobDsnbjthYzsnbTruJQg7Y+s7ZWo7ZWY7JesIE1pZ3JhdGlvblNldCDrsLDsl7RcbiAgICBjb25zdCBlbnRpdHlTZXRzOiBNaWdyYXRpb25TZXRbXSA9IFsuLi5lbnRpdHlTZXRzV2l0aEpvaW5UYWJsZSwgLi4uam9pblRhYmxlc107XG5cbiAgICBjb25zdCBjb2RlczogR2VuTWlncmF0aW9uQ29kZVtdID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIGVudGl0eVNldHMubWFwKGFzeW5jIChlbnRpdHlTZXQpID0+IHtcbiAgICAgICAgICBjb25zdCBkYlNldCA9IGF3YWl0IFBvc3RncmVTUUxTY2hlbWFSZWFkZXIuZ2V0TWlncmF0aW9uU2V0RnJvbURCKFxuICAgICAgICAgICAgY29tcGFyZURCLFxuICAgICAgICAgICAgZW50aXR5U2V0LnRhYmxlLFxuICAgICAgICAgICk7XG4gICAgICAgICAgTmFpdGUudChgbWlncmF0b3I6Y29tcGFyZU1pZ3JhdGlvbnM6ZW50aXR5U2V0OiR7ZW50aXR5U2V0LnRhYmxlfWAsIGVudGl0eVNldCk7XG4gICAgICAgICAgTmFpdGUudChgbWlncmF0b3I6Y29tcGFyZU1pZ3JhdGlvbnM6ZGJTZXQ6JHtlbnRpdHlTZXQudGFibGV9YCwgZGJTZXQpO1xuXG4gICAgICAgICAgaWYgKGRiU2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyDquLDsobQg7YWM7J2067iUIOyXhuydjCwg7IOI66GcIO2FjOydtOu4lCDsg53shLFcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZUNyZWF0ZUNvZGUoZW50aXR5U2V0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g6riw7KG0IO2FjOydtOu4lCDsobTsnqztlZjripQg7LyA7J207IqkXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgZ2VuZXJhdGVBbHRlckNvZGUoZW50aXR5U2V0LCBkYlNldCwgY29tcGFyZURCKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICkuZmxhdCgpO1xuXG4gICAgLy8gbm9ybWFsIO2DgOyeheydtCDslZ7snLzroZwsIGZvcmVpZ27snbQg65Kk66GcXG4gICAgY29kZXMuc29ydCgoY29kZUEsIGNvZGVCKSA9PiB7XG4gICAgICBpZiAoY29kZUEudHlwZSA9PT0gXCJmb3JlaWduXCIgJiYgY29kZUIudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH0gZWxzZSBpZiAoY29kZUEudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBjb2RlQi50eXBlID09PSBcImZvcmVpZ25cIikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBjb2RlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGFkb3cgREIg7YWM7Iqk7Yq466W8IOynhO2Wie2VqeuLiOuLpC5cbiAgICpcbiAgICogU29uYW11IFVJ7JeQ7IScIOyCrOyaqeuQqeuLiOuLpC5cbiAgICpcbiAgICogQHJldHVybnMgU2hhZG93IERCIO2FjOyKpO2KuCDqsrDqs7xcbiAgICovXG4gIGFzeW5jIHJ1blNoYWRvd1Rlc3QoKTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHQ+IHtcbiAgICBjb25zdCB0ZGJDb25uID0gU29uYW11LmRiQ29uZmlnLnRlc3QuY29ubmVjdGlvbiBhcyBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcbiAgICBjb25zdCBzaGFkb3dEYXRhYmFzZSA9IGAke3RkYkNvbm4uZGF0YWJhc2V9X19taWdyYXRpb25fc2hhZG93YDtcblxuICAgIC8vIO2FjOyKpO2KuCDsg4Htmansl5DshJzripQg7Yq4656c7J6t7IWY7J2EIOy0iOq4sO2ZlO2VmOqzoCwg7IOIIOuNsOydtO2EsOuyoOydtOyKpCDsu6TrhKXshZjsnYQg6rCA7KC47JmA7JW8IO2VqFxuICAgIGlmIChpc1Rlc3QoKSkge1xuICAgICAgYXdhaXQgREIuY2xlYXJUZXN0VHJhbnNhY3Rpb24oKTtcbiAgICAgIC8vIOuzkeugrCDthYzsiqTtirgg66qo65Oc7JeQ7ISc64qUIHdvcmtlciBEQiDsl7DqsrAg7Jyg7KeAXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuU09OQU1VX1dPUktFUl9EQiAhPT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgYXdhaXQgREIuZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIOq4sOyhtCBTaGFkb3cgREIg7IKt7KCcIO2bhCBTaGFkb3cgREIg7IOd7ISxXG4gICAgY29uc3QgdGRiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy50ZXN0KTtcbiAgICAhaXNUZXN0KCkgJiYgY29uc29sZS5sb2coY2hhbGsubWFnZW50YShgJHtzaGFkb3dEYXRhYmFzZX0g7IKt7KCcYCkpO1xuICAgIGF3YWl0IHRkYi5yYXcoYERST1AgREFUQUJBU0UgSUYgRVhJU1RTICR7c2hhZG93RGF0YWJhc2V9YCk7XG4gICAgYXdhaXQgdGRiLnJhdyhgXG4gICAgICBTRUxFQ1QgcGdfdGVybWluYXRlX2JhY2tlbmQocGdfc3RhdF9hY3Rpdml0eS5waWQpXG4gICAgICBGUk9NIHBnX3N0YXRfYWN0aXZpdHlcbiAgICAgIFdIRVJFIGRhdG5hbWUgPSAnJHt0ZGJDb25uLmRhdGFiYXNlfSdcbiAgICAgICAgQU5EIHBpZCA8PiBwZ19iYWNrZW5kX3BpZCgpO1xuICAgIGApO1xuICAgIGF3YWl0IHRkYi5yYXcoYENSRUFURSBEQVRBQkFTRSAke3NoYWRvd0RhdGFiYXNlfSBURU1QTEFURSAke3RkYkNvbm4uZGF0YWJhc2V9YCk7XG5cbiAgICAvLyBTaGFkb3cgRELsl5Ag7Jew6rKwXG4gICAgY29uc3Qgc2RiID0gY3JlYXRlS25leEluc3RhbmNlKHtcbiAgICAgIC4uLlNvbmFtdS5kYkNvbmZpZy50ZXN0LFxuICAgICAgY29ubmVjdGlvbjoge1xuICAgICAgICAuLi50ZGJDb25uLFxuICAgICAgICBkYXRhYmFzZTogc2hhZG93RGF0YWJhc2UsXG4gICAgICAgIHBhc3N3b3JkOiB0ZGJDb25uLnBhc3N3b3JkLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIHNoYWRvdyBEQiDthYzsiqTtirgg7KeE7ZaJXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFtiYXRjaE5vLCBhcHBsaWVkXSA9IGF3YWl0IHNkYi5taWdyYXRlLmxhdGVzdCgpO1xuICAgICAgIWlzVGVzdCgpICYmXG4gICAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKFwiU2hhZG93IERCIO2FjOyKpO2KuOyXkCDshLHqs7XtlojsirXri4jri6QhXCIpLCB7XG4gICAgICAgICAgYmF0Y2hObyxcbiAgICAgICAgICBhcHBsaWVkLFxuICAgICAgICB9KTtcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIGNvbm5LZXk6IFwic2hhZG93XCIsXG4gICAgICAgICAgYmF0Y2hObyxcbiAgICAgICAgICBhcHBsaWVkLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgdGhyb3cgbmV3IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5zaGFkb3dEYlRlc3RGYWlsZWRcIikpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBTaGFkb3cgREIg7Jew6rKwIOyiheujjFxuICAgICAgYXdhaXQgc2RiLmRlc3Ryb3koKTtcblxuICAgICAgLy8gU2hhZG93IERCIOyCreygnFxuICAgICAgIWlzVGVzdCgpICYmIGNvbnNvbGUubG9nKGNoYWxrLm1hZ2VudGEoYCR7c2hhZG93RGF0YWJhc2V9IOyCreygnGApKTtcbiAgICAgIGF3YWl0IHRkYi5yYXcoYERST1AgREFUQUJBU0UgSUYgRVhJU1RTICR7c2hhZG93RGF0YWJhc2V9YCk7XG5cbiAgICAgIC8vIFRlc3QgREIg7Jew6rKwIOyiheujjFxuICAgICAgYXdhaXQgdGRiLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJhc3NlcnQiLCJjaGFsayIsIm1rZGlyIiwicmVhZGRpciIsInVubGluayIsIndyaXRlRmlsZSIsInBhdGgiLCJncm91cCIsInN1bSIsInVuaXF1ZSIsIlNvbmFtdSIsIkRCIiwiY3JlYXRlS25leEluc3RhbmNlIiwiU0QiLCJFbnRpdHlNYW5hZ2VyIiwiU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIiwiTmFpdGUiLCJpc1Rlc3QiLCJleGlzdHMiLCJnZW5lcmF0ZUFsdGVyQ29kZSIsImdlbmVyYXRlQ3JlYXRlQ29kZSIsImdldE1pZ3JhdGlvblNldEZyb21FbnRpdHkiLCJQb3N0Z3JlU1FMU2NoZW1hUmVhZGVyIiwiTWlncmF0b3IiLCJnZXRNaWdyYXRpb25Db2RlcyIsInNyY01pZ3JhdGlvbnNEaXIiLCJqb2luIiwiYXBpUm9vdFBhdGgiLCJyZWN1cnNpdmUiLCJjb2RlcyIsImZpbHRlciIsImYiLCJlbmRzV2l0aCIsIm1hcCIsIm5hbWUiLCJyZXBsYWNlIiwic29ydCIsImEiLCJiIiwidCIsImdldFN0YXR1cyIsImNvbm5LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImRiQ29uZmlnIiwia2V5IiwibWlncmF0aW9uU3RhdHVzRXJyb3IiLCJzdGF0dXNlcyIsIlByb21pc2UiLCJhbGwiLCJjb25uS2V5Iiwia25leE9wdGlvbnMiLCJ0Q29ubiIsInN0YXR1cyIsIm1pZ3JhdGUiLCJlcnIiLCJjb25zb2xlIiwid2FybiIsInllbGxvdyIsIkpTT04iLCJzdHJpbmdpZnkiLCJjb25uZWN0aW9uIiwiRXJyb3IiLCJtZXNzYWdlIiwiU3RyaW5nIiwicGVuZGluZyIsImZkTGlzdCIsImxpc3QiLCJmZCIsImZpbGUiLCJjdXJyZW50VmVyc2lvbiIsIl9lcnIiLCJjb25uU3RyaW5nIiwidXNlciIsImhvc3QiLCJwb3J0IiwiZGF0YWJhc2UiLCJkZXN0cm95IiwicHJlcGFyZWRDb2RlcyIsInN0YXR1czBjb25uIiwiZmluZCIsInVuZGVmaW5lZCIsImNvbXBhcmVEQmNvbm4iLCJnZW5Db2RlcyIsImNvbXBhcmVNaWdyYXRpb25zIiwiY29ubnMiLCJlcnJvciIsInJ1bkFjdGlvbiIsImFjdGlvbiIsInRhcmdldHMiLCJjb25maWdzIiwidGFyZ2V0Iiwib3B0aW9ucyIsImMiLCJjb25maWciLCJrbmV4IiwicmVzdWx0IiwiYmF0Y2hObyIsImFwcGxpZWQiLCJsYXRlc3QiLCJyb2xsYmFjayIsInZhbGlkYXRlRGVsZXRhYmxlIiwiY29kZU5hbWVzIiwiYXBwbGllZENvZGVzIiwiY29kZU5hbWUiLCJzb21lIiwiY29ubiIsImluY2x1ZGVzIiwiY2FuRGVsZXRlIiwibGVuZ3RoIiwiZGVsQ29kZXMiLCJmaWxlUGF0aCIsImdlbkRhdGVUYWciLCJpbmRleCIsImJhc2VEYXRlIiwiRGF0ZSIsImRhdGUiLCJnZXRUaW1lIiwicGFkIiwibnVtIiwic2l6ZSIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZW5lcmF0ZVByZXBhcmVkQ29kZXMiLCJsb2ciLCJncmVlbiIsIm1pZ3JhdGlvbnNEaXIiLCJwY29kZSIsImVudHJpZXMiLCJmb3JtYXR0ZWQiLCJkYXRlVGFnIiwidGl0bGUiLCJjb21wYXJlREIiLCJlbnRpdHlJZHMiLCJnZXRBbGxJZHMiLCJlbnRpdHlTZXRzV2l0aEpvaW5UYWJsZSIsImVudGl0eUlkIiwiZ2V0IiwicHJvcHMiLCJqb2luVGFibGVzV2l0aER1cCIsImZsYXRNYXAiLCJlbnRpdHlTZXQiLCJqb2luVGFibGVzIiwidmFsdWVzIiwianQiLCJ0YWJsZSIsInRhYmxlcyIsImluZGV4ZXMiLCJ0eXBlIiwiY29sdW1ucyIsImVudGl0eVNldHMiLCJkYlNldCIsImdldE1pZ3JhdGlvblNldEZyb21EQiIsImZsYXQiLCJjb2RlQSIsImNvZGVCIiwicnVuU2hhZG93VGVzdCIsInRkYkNvbm4iLCJ0ZXN0Iiwic2hhZG93RGF0YWJhc2UiLCJjbGVhclRlc3RUcmFuc2FjdGlvbiIsInByb2Nlc3MiLCJlbnYiLCJTT05BTVVfV09SS0VSX0RCIiwidGRiIiwibWFnZW50YSIsInJhdyIsInNkYiIsInBhc3N3b3JkIiwiZSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixTQUFTQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxTQUFTLFFBQVEsbUJBQWM7QUFFaEUsT0FBT0MsVUFBVSxPQUFPO0FBQ3hCLFNBQVNDLEtBQUssRUFBRUMsR0FBRyxFQUFFQyxNQUFNLFFBQVEsVUFBVTtBQUM3QyxTQUFTQyxNQUFNLFFBQVEsa0JBQVM7QUFDaEMsU0FBU0MsRUFBRSxRQUE2QixvQkFBaUI7QUFDekQsU0FBU0Msa0JBQWtCLFFBQVEsc0JBQW1CO0FBQ3RE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
|
|
347
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vbWlncmF0b3IudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5pbXBvcnQgY2hhbGsgZnJvbSBcImNoYWxrXCI7XG5pbXBvcnQgeyBta2RpciwgcmVhZGRpciwgdW5saW5rLCB3cml0ZUZpbGUgfSBmcm9tIFwiZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB0eXBlIHsgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZ3JvdXAsIHN1bSwgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi9hcGlcIjtcbmltcG9ydCB7IERCLCB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IE5haXRlIH0gZnJvbSBcIi4uL25haXRlL25haXRlXCI7XG5pbXBvcnQgdHlwZSB7IEdlbk1pZ3JhdGlvbkNvZGUsIE1pZ3JhdGlvblNldCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgaXNUZXN0IH0gZnJvbSBcIi4uL3V0aWxzL2NvbnRyb2xsZXJcIjtcbmltcG9ydCB7IGV4aXN0cyB9IGZyb20gXCIuLi91dGlscy9mcy11dGlsc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVBbHRlckNvZGUsIGdlbmVyYXRlQ3JlYXRlQ29kZSB9IGZyb20gXCIuL2NvZGUtZ2VuZXJhdGlvblwiO1xuaW1wb3J0IHsgZ2V0TWlncmF0aW9uU2V0RnJvbUVudGl0eSB9IGZyb20gXCIuL21pZ3JhdGlvbi1zZXRcIjtcbmltcG9ydCB7IFBvc3RncmVTUUxTY2hlbWFSZWFkZXIgfSBmcm9tIFwiLi9wb3N0Z3Jlc3FsLXNjaGVtYS1yZWFkZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29ublN0cmluZywgTWlncmF0aW9uQ29kZSwgTWlncmF0aW9uU3RhdHVzIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuZXhwb3J0IHR5cGUgTWlncmF0aW9uUmVzdWx0ID0ge1xuICBjb25uS2V5OiBzdHJpbmc7XG4gIGJhdGNoTm86IG51bWJlcjtcbiAgYXBwbGllZDogc3RyaW5nW107XG59W107XG5cbmV4cG9ydCBjbGFzcyBNaWdyYXRvciB7XG4gIHByaXZhdGUgYXN5bmMgZ2V0TWlncmF0aW9uQ29kZXMoKTogUHJvbWlzZTxNaWdyYXRpb25Db2RlW10+IHtcbiAgICBjb25zdCBzcmNNaWdyYXRpb25zRGlyID0gcGF0aC5qb2luKFNvbmFtdS5hcGlSb290UGF0aCwgXCJzcmNcIiwgXCJtaWdyYXRpb25zXCIpOyAvLyDsnbTqsbQg7ZmY6rK97JeQIOq0gOqzhOyXhuydtCDtla3sg4Egc3Jj7JeQ7IScIOywvuyVhOyVvCDtlbTsmpQuXG5cbiAgICBpZiAoIShhd2FpdCBleGlzdHMoc3JjTWlncmF0aW9uc0RpcikpKSB7XG4gICAgICBhd2FpdCBta2RpcihzcmNNaWdyYXRpb25zRGlyLCB7XG4gICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNvZGVzID0gKGF3YWl0IHJlYWRkaXIoc3JjTWlncmF0aW9uc0RpcikpXG4gICAgICAuZmlsdGVyKChmKSA9PiBmLmVuZHNXaXRoKFwiLnRzXCIpKVxuICAgICAgLm1hcCgoZikgPT4gKHtcbiAgICAgICAgbmFtZTogZi5yZXBsYWNlKFwiLnRzXCIsIFwiXCIpLFxuICAgICAgICBwYXRoOiBwYXRoLmpvaW4oc3JjTWlncmF0aW9uc0RpciwgZiksXG4gICAgICB9KSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiAoYS5uYW1lIDwgYi5uYW1lID8gMSA6IC0xKSk7IC8vIOydtOumhCDrgrTrprzssKjsiJwg7KCV66CsKOy1nOyLoOyInClcblxuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpnZXRNaWdyYXRpb25Db2RlczpyZXN1bHRzXCIsIGNvZGVzKTtcbiAgICByZXR1cm4gY29kZXM7XG4gIH1cblxuICAvKipcbiAgICog7YOA6rKf67OEIOuniOydtOq3uOugiOydtOyFmCDsg4Htg5zsmYAg7L2U65OcIOyDneyEsS/spIDruYQg7IOB7YOc66W8IOq1rO2VtOyYteuLiOuLpC5cbiAgICog7Iuk7KCc66GcIERC7JeQIOygkeq3vOuPhCDtlZjqs6Ag66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbzrj4Qg7ZmV7J247ZWY6rOgLFxuICAgKiDtlYTsmpTtlZjri6TrqbQg7KCB7Jqp7ZWgIOyImCDsnojripQg7L2U65Oc66W8IOyDneyEseq5jOyngCDtlbTsmLXri4jri6QuXG4gICAqXG4gICAqIENMSeyZgCBTb25hbXUgVUnsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYXN5bmMgZ2V0U3RhdHVzKCk6IFByb21pc2U8TWlncmF0aW9uU3RhdHVzPiB7XG4gICAgY29uc3QgY29kZXMgPSBhd2FpdCB0aGlzLmdldE1pZ3JhdGlvbkNvZGVzKCk7XG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOmdldFN0YXR1czpjb2Rlc1wiLCBjb2Rlcyk7XG5cbiAgICBjb25zdCBjb25uS2V5cyA9IE9iamVjdC5rZXlzKFNvbmFtdS5kYkNvbmZpZykuZmlsdGVyKFxuICAgICAgKGtleSkgPT4ga2V5LmVuZHNXaXRoKFwiX3NsYXZlXCIpID09PSBmYWxzZSxcbiAgICApIGFzIChrZXlvZiB0eXBlb2YgU29uYW11LmRiQ29uZmlnKVtdO1xuXG4gICAgbGV0IG1pZ3JhdGlvblN0YXR1c0Vycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBzdGF0dXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgY29ubktleXMubWFwKGFzeW5jIChjb25uS2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGtuZXhPcHRpb25zID0gU29uYW11LmRiQ29uZmlnW2Nvbm5LZXldO1xuICAgICAgICBjb25zdCB0Q29ubiA9IGNyZWF0ZUtuZXhJbnN0YW5jZShrbmV4T3B0aW9ucyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRDb25uLm1pZ3JhdGUuc3RhdHVzKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIGNoYWxrLnllbGxvdyhcbiAgICAgICAgICAgICAgICAgIGAke2Nvbm5LZXl97J2YIOuniOydtOq3uOugiOydtOyFmCDsg4Htg5zrpbwg6rCA7KC47Jik64qUIOuNsOyXkCDsi6TtjKjtlZjsmIDsirXri4jri6QuIOuNsOydtO2EsOuyoOydtOyKpOqwgCDsmKzrsJTrpbTqsowg6rWs7ISx65CY7KeAIOyViuydgCDqsoMg6rCZ7Iq164uI64ukLiDtmZXsnbjtlZjsi5zqs6Ag64uk7IucIOyLnOuPhO2VtOyjvOyEuOyalC5cXG7si5zrj4TtlZwg7Jew6rKwIOyEpOyglTpcXG4ke0pTT04uc3RyaW5naWZ5KGtuZXhPcHRpb25zLmNvbm5lY3Rpb24sIG51bGwsIDIpfVxcbuuwnOyDne2VnCDsl5Drn6w6XFxuJHtlcnJ9XFxuYCxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBtaWdyYXRpb25TdGF0dXNFcnJvciA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIGNvbnN0IHBlbmRpbmc6IHN0cmluZ1tdID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IFssIGZkTGlzdF0gPSBhd2FpdCB0Q29ubi5taWdyYXRlLmxpc3QoKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZkTGlzdC5tYXAoKGZkOiB7IGZpbGU6IHN0cmluZyB9KSA9PiBmZC5maWxlLnJlcGxhY2UoXCIudHNcIiwgXCJcIikpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgIG1pZ3JhdGlvblN0YXR1c0Vycm9yID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IFN0cmluZyhlcnIpO1xuICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgICBjb25zdCBjdXJyZW50VmVyc2lvbiA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdENvbm4ubWlncmF0ZS5jdXJyZW50VmVyc2lvbigpO1xuICAgICAgICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICBtaWdyYXRpb25TdGF0dXNFcnJvciA9IF9lcnIgaW5zdGFuY2VvZiBFcnJvciA/IF9lcnIubWVzc2FnZSA6IFN0cmluZyhfZXJyKTtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiZXJyb3JcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSgpO1xuICAgICAgICAgIE5haXRlLnQoXCJtaWdyYXRvcjpnZXRTdGF0dXM6c3RhdHVzXCIsIHN0YXR1cyk7XG5cbiAgICAgICAgICBjb25zdCBjb25uZWN0aW9uID0ga25leE9wdGlvbnMuY29ubmVjdGlvbiBhcyBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZztcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBjb25uS2V5LnJlcGxhY2UoXCJfbWFzdGVyXCIsIFwiXCIpLFxuICAgICAgICAgICAgY29ubktleSxcbiAgICAgICAgICAgIGNvbm5TdHJpbmc6IGBwZzovLyR7Y29ubmVjdGlvbi51c2VyID8/IFwiXCJ9QCR7Y29ubmVjdGlvbi5ob3N0fToke1xuICAgICAgICAgICAgICBjb25uZWN0aW9uLnBvcnRcbiAgICAgICAgICAgIH0vJHtjb25uZWN0aW9uLmRhdGFiYXNlfWAgYXMgQ29ublN0cmluZyxcbiAgICAgICAgICAgIGN1cnJlbnRWZXJzaW9uLFxuICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXMgYXMgbnVtYmVyIHwgXCJlcnJvclwiLFxuICAgICAgICAgICAgcGVuZGluZyxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IHRDb25uLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgKTtcblxuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpnZXRTdGF0dXM6Y29ubnNcIiwgc3RhdHVzZXMpO1xuXG4gICAgY29uc3QgcHJlcGFyZWRDb2RlczogR2VuTWlncmF0aW9uQ29kZVtdID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHN0YXR1czBjb25uID0gc3RhdHVzZXMuZmluZCgoc3RhdHVzKSA9PiBzdGF0dXMuc3RhdHVzID09PSAwKTtcbiAgICAgIGlmIChzdGF0dXMwY29ubiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBjaGFsay55ZWxsb3coXG4gICAgICAgICAgICBgV2hpbGUgdHJ5aW5nIHRvIHByZXBhcmUgbWlncmF0aW9uIGNvZGVzLCB3ZSBmb3VuZCB0aGF0IHRoZXJlIGlzIG5vIGRhdGFiYXNlIHRvIGNvbXBhcmUgbWlncmF0aW9ucy4gV2UgbmVlZCBhdCBsZWFzdCBvbmUgZGF0YWJhc2Ugd2hlcmUgZXZlcnkgbWlncmF0aW9uIGlzIGFwcGxpZWQoc3RhdHVzID09PSAwKS4gWW91IG1pZ2h0IHdhbnQgdG8gYXBwbHkgeW91ciBleGlzdGluZyBtaWdyYXRpb25zIHRvIG9uZSBvZiB0aGUgZGF0YWJhc2VzLmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb21wYXJlREJjb25uID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZ1tzdGF0dXMwY29ubi5jb25uS2V5XSk7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jb21wYXJlTWlncmF0aW9ucyhjb21wYXJlREJjb25uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IGNvbXBhcmVEQmNvbm4uZGVzdHJveSgpO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2V0U3RhdHVzOnByZXBhcmVkQ29kZXNcIiwgcHJlcGFyZWRDb2Rlcyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29ubnM6IHN0YXR1c2VzLFxuICAgICAgY29kZXMsXG4gICAgICBwcmVwYXJlZENvZGVzLFxuICAgICAgZXJyb3I6IG1pZ3JhdGlvblN0YXR1c0Vycm9yLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICog66eI7J206re466CI7J207IWY7J2EIOyggeyaqe2VmOqxsOuCmCDroaTrsLHtlanri4jri6QuXG4gICAqIFNvbmFtdSBVSeyXkOyEnCDrp4jsnbTqt7jroIjsnbTshZgg7J6R7JeF7J2EIOyImO2Wie2VoCDrlYwg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiBDTEnsmYAgU29uYW11IFVJ7JeQ7IScIOyCrOyaqeuQqeuLiOuLpC5cbiAgICpcbiAgICogQHBhcmFtIGFjdGlvbiDsnpHsl4Ug7Jyg7ZiVIChhcHBseS9yb2xsYmFjaylcbiAgICogQHBhcmFtIHRhcmdldHMg7J6R7JeFIOuMgOyDgSBEQiDshKTsoJUg7YKkIChrZXlvZiBTb25hbXVEQkNvbmZpZylcbiAgICogQHJldHVybnMg7J6R7JeFIOqysOqzvFxuICAgKi9cbiAgYXN5bmMgcnVuQWN0aW9uKFxuICAgIGFjdGlvbjogXCJhcHBseVwiIHwgXCJyb2xsYmFja1wiLFxuICAgIHRhcmdldHM6IChrZXlvZiBTb25hbXVEQkNvbmZpZylbXSxcbiAgKTogUHJvbWlzZTxNaWdyYXRpb25SZXN1bHQ+IHtcbiAgICBOYWl0ZS50KFwibWlncmF0b3I6cnVuQWN0aW9uOmFjdGlvblwiLCBhY3Rpb24pO1xuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpydW5BY3Rpb246dGFyZ2V0c1wiLCB0YXJnZXRzKTtcblxuICAgIC8vIGdldCB1bmlxIGtuZXggY29uZmlnc1xuICAgIGNvbnN0IGNvbmZpZ3MgPSB1bmlxdWUoXG4gICAgICB0YXJnZXRzXG4gICAgICAgIC5tYXAoKHRhcmdldCkgPT4gKHtcbiAgICAgICAgICBjb25uS2V5OiB0YXJnZXQsXG4gICAgICAgICAgb3B0aW9uczogU29uYW11LmRiQ29uZmlnW3RhcmdldCBhcyBrZXlvZiB0eXBlb2YgU29uYW11LmRiQ29uZmlnXSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKGMpID0+IGMub3B0aW9ucyAhPT0gdW5kZWZpbmVkKSxcbiAgICAgICh7IG9wdGlvbnMgfSkgPT5cbiAgICAgICAgYCR7KG9wdGlvbnMuY29ubmVjdGlvbiBhcyBLbmV4LlBnQ29ubmVjdGlvbkNvbmZpZykuaG9zdH06JHtcbiAgICAgICAgICAob3B0aW9ucy5jb25uZWN0aW9uIGFzIEtuZXguUGdDb25uZWN0aW9uQ29uZmlnKS5wb3J0ID8/IDU0MzJcbiAgICAgICAgfS8keyhvcHRpb25zLmNvbm5lY3Rpb24gYXMgS25leC5QZ0Nvbm5lY3Rpb25Db25maWcpLmRhdGFiYXNlfWAsXG4gICAgKTtcblxuICAgIC8vIGdldCBjb25uZWN0aW9uc1xuICAgIGNvbnN0IGNvbm5zID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjb25maWdzLm1hcChhc3luYyAoY29uZmlnKSA9PiAoe1xuICAgICAgICBjb25uS2V5OiBjb25maWcuY29ubktleSxcbiAgICAgICAga25leDogY3JlYXRlS25leEluc3RhbmNlKGNvbmZpZy5vcHRpb25zKSxcbiAgICAgIH0pKSxcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIGFjdGlvblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICBjYXNlIFwiYXBwbHlcIjpcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgY29ubnMubWFwKGFzeW5jICh7IGNvbm5LZXksIGtuZXggfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtiYXRjaE5vLCBhcHBsaWVkXSA9IGF3YWl0IGtuZXgubWlncmF0ZS5sYXRlc3QoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgY29ubktleSxcbiAgICAgICAgICAgICAgICAgIGJhdGNoTm8sXG4gICAgICAgICAgICAgICAgICBhcHBsaWVkLCAvLyDsnbTrsoggbGF0ZXN0IO2YuOy2nOuhnCDsnbjtlbQgXCJ1cFwi7J20IOyggeyaqeuQnCDrp4jsnbTqt7jroIjsnbTshZgg7J2066aEKGUuZy4gXCIyMDI1MTEyNDIzMzU1N19jcmVhdGVfX2NvbXBhbmllcy50c1wiKeuTpOydmCDrsLDsl7TsnoXri4jri6QuIOywuOqzoDogaHR0cHM6Ly9naXRodWIuY29tL2tuZXgva25leC9ibG9iLzAxYjE3N2M0ODVkNjk2ZjFiNzI4NThkZWU3MjhiYTE0M2M0ZmFkNzYvbGliL21pZ3JhdGlvbnMvbWlncmF0ZS9NaWdyYXRvci5qcyNMNTYwXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgXCJyb2xsYmFja1wiOlxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICBjb25ucy5tYXAoYXN5bmMgKHsgY29ubktleSwga25leCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgW2JhdGNoTm8sIGFwcGxpZWRdID0gYXdhaXQga25leC5taWdyYXRlLnJvbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGNvbm5LZXksXG4gICAgICAgICAgICAgICAgICBiYXRjaE5vLFxuICAgICAgICAgICAgICAgICAgYXBwbGllZCwgLy8g7J2067KIIHJvbGxiYWNrIO2YuOy2nOuhnCDsnbjtlbQgXCJkb3duXCLsnbQg7KCB7Jqp65CcKD3roaTrsLHrkJwpIOuniOydtOq3uOugiOydtOyFmCDsnbTrpoQoZS5nLiBcIjIwMjUxMTI0MjMzNTU3X2NyZWF0ZV9fY29tcGFuaWVzLnRzXCIp65Ok7J2YIOuwsOyXtOyeheuLiOuLpC4g7LC46rOgOiBodHRwczovL2dpdGh1Yi5jb20va25leC9rbmV4L2Jsb2IvMDFiMTc3YzQ4NWQ2OTZmMWI3Mjg1OGRlZTcyOGJhMTQzYzRmYWQ3Ni9saWIvbWlncmF0aW9ucy9taWdyYXRlL01pZ3JhdG9yLmpzI0w2MTFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pKCk7XG5cbiAgICAgIE5haXRlLnQoXCJtaWdyYXRvcjpydW5BY3Rpb246cmVzdWx0XCIsIHJlc3VsdCk7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBjb25ucy5tYXAoKHsga25leCB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGtuZXguZGVzdHJveSgpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOyCreygnCDqsIDriqXtlZwg66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbzsnYQg6rKA7Kad7ZWp64uI64ukLlxuICAgKlxuICAgKiBAcGFyYW0gY29ubnMg66eI7J206re466CI7J207IWYIOyDge2DnCDrsLDsl7RcbiAgICogQHBhcmFtIGNvZGVOYW1lcyDsgq3soJztlaAg66eI7J206re466CI7J207IWYIOy9lOuTnCDtjIzsnbwg7J2066aEIOuwsOyXtFxuICAgKiBAcmV0dXJucyDsgq3soJwg6rCA64qlIOyXrOu2gCDrsI8g7KCB7Jqp65CcIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5wg7YyM7J28IOydtOumhFxuICAgKi9cbiAgdmFsaWRhdGVEZWxldGFibGUoY29ubnM6IE1pZ3JhdGlvblN0YXR1c1tcImNvbm5zXCJdLCBjb2RlTmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgYXBwbGllZENvZGVzID0gY29kZU5hbWVzLmZpbHRlcigoY29kZU5hbWUpID0+XG4gICAgICBjb25ucy5zb21lKChjb25uKSA9PiBjb25uLnBlbmRpbmcuaW5jbHVkZXMoY29kZU5hbWUpID09PSBmYWxzZSksXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBjYW5EZWxldGU6IGFwcGxpZWRDb2Rlcy5sZW5ndGggPT09IDAsXG4gICAgICBhcHBsaWVkQ29kZXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcIO2MjOydvOydhCDsgq3soJztlanri4jri6QuXG4gICAqXG4gICAqIFNvbmFtdSBVSeyXkOyEnCDsgqzsmqnrkKnri4jri6QuXG4gICAqXG4gICAqIEBwYXJhbSBjb2RlTmFtZXMg7IKt7KCc7ZWgIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5wg7YyM7J28IOydtOumhCDrsLDsl7RcbiAgICogQHJldHVybnMg7IKt7KCc65CcIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5wg7YyM7J28IOqwnOyImFxuICAgKi9cbiAgYXN5bmMgZGVsQ29kZXMoY29kZU5hbWVzOiBzdHJpbmdbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgeyBjb25ucyB9ID0gYXdhaXQgdGhpcy5nZXRTdGF0dXMoKTtcbiAgICBjb25zdCB7IGNhbkRlbGV0ZSwgYXBwbGllZENvZGVzIH0gPSB0aGlzLnZhbGlkYXRlRGVsZXRhYmxlKGNvbm5zLCBjb2RlTmFtZXMpO1xuICAgIGlmICghY2FuRGVsZXRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBZb3UgY2Fubm90IGRlbGV0ZSBhIG1pZ3JhdGlvbiBmaWxlIGlmIHRoZXJlIGlzIGFscmVhZHkgYXBwbGllZC4gQXBwbGllZCBjb2RlczogJHthcHBsaWVkQ29kZXMuam9pbihcIiwgXCIpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBzdW0oXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgY29kZU5hbWVzLm1hcChhc3luYyAoY29kZU5hbWUpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGAke1NvbmFtdS5hcGlSb290UGF0aH0vc3JjL21pZ3JhdGlvbnMvJHtjb2RlTmFtZX0udHNgO1xuICAgICAgICAgIGlmIChhd2FpdCBleGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICBhd2FpdCB1bmxpbmsoZmlsZVBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuRGF0ZVRhZyhpbmRleDogbnVtYmVyLCBiYXNlRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShiYXNlRGF0ZS5nZXRUaW1lKCkgKyBpbmRleCAqIDEwMDApO1xuICAgIGNvbnN0IHBhZCA9IChudW06IG51bWJlciwgc2l6ZTogbnVtYmVyID0gMikgPT4gbnVtLnRvU3RyaW5nKCkucGFkU3RhcnQoc2l6ZSwgXCIwXCIpO1xuICAgIHJldHVybiAoXG4gICAgICBkYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSArXG4gICAgICBwYWQoZGF0ZS5nZXRNb250aCgpICsgMSkgK1xuICAgICAgcGFkKGRhdGUuZ2V0RGF0ZSgpKSArXG4gICAgICBwYWQoZGF0ZS5nZXRIb3VycygpKSArXG4gICAgICBwYWQoZGF0ZS5nZXRNaW51dGVzKCkpICtcbiAgICAgIHBhZChkYXRlLmdldFNlY29uZHMoKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5wg7YyM7J287J2EIOyDneyEse2VqeuLiOuLpC5cbiAgICpcbiAgICogU29uYW11IFVJ7JeQ7IScIOyCrOyaqeuQqeuLiOuLpC5cbiAgICpcbiAgICogQHJldHVybnMg7IOd7ISx65CcIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5wg7YyM7J28IOqwnOyImFxuICAgKi9cbiAgYXN5bmMgZ2VuZXJhdGVQcmVwYXJlZENvZGVzKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgeyBwcmVwYXJlZENvZGVzIH0gPSBhd2FpdCB0aGlzLmdldFN0YXR1cygpO1xuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpnZW5lcmF0ZVByZXBhcmVkQ29kZXM6cHJlcGFyZWRDb2Rlc1wiLCBwcmVwYXJlZENvZGVzKTtcbiAgICBpZiAocHJlcGFyZWRDb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKFwiXFxu7ZiE7J6sIOuqqOuRkCDsi7HtgazrkJwg7IOB7YOc7J6F64uI64ukLlwiKSk7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyDsi6TsoJwg7L2U65OcIOyDneyEsVxuICAgIGNvbnN0IG1pZ3JhdGlvbnNEaXIgPSBgJHtTb25hbXUuYXBpUm9vdFBhdGh9L3NyYy9taWdyYXRpb25zYDtcblxuICAgIGZvciAoY29uc3QgW2luZGV4LCBwY29kZV0gb2YgcHJlcGFyZWRDb2Rlcy5lbnRyaWVzKCkpIHtcbiAgICAgIGlmIChwY29kZS5mb3JtYXR0ZWQpIHtcbiAgICAgICAgY29uc3QgZGF0ZVRhZyA9IHRoaXMuZ2VuRGF0ZVRhZyhpbmRleCk7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gYCR7bWlncmF0aW9uc0Rpcn0vJHtkYXRlVGFnfV8ke3Bjb2RlLnRpdGxlfS50c2A7XG4gICAgICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlUGF0aCwgcGNvZGUuZm9ybWF0dGVkKTtcbiAgICAgICAgIWlzVGVzdCgpICYmIGNvbnNvbGUubG9nKGNoYWxrLmdyZWVuKGBNSUdSQVRJT04gQ1JFQVRFRCAke2ZpbGVQYXRofWApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJlcGFyZWRDb2Rlcy5sZW5ndGg7XG4gIH1cblxuICBhc3luYyBjb21wYXJlTWlncmF0aW9ucyhjb21wYXJlREI6IEtuZXgpOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICAgIC8vIEVudGl0eSDsiJztmoztlZjsl6wg7Iux7YGsXG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcblxuICAgIC8vIOyhsOyduO2FjOydtOu4lCDtj6ztlajtlZjsl6wgRW50aXR57JeQ7IScIE1pZ3JhdGlvblNldCDstpTstpxcbiAgICBjb25zdCBlbnRpdHlTZXRzV2l0aEpvaW5UYWJsZSA9IGVudGl0eUlkc1xuICAgICAgLmZpbHRlcigoZW50aXR5SWQpID0+IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKS5wcm9wcy5sZW5ndGggPiAwKVxuICAgICAgLm1hcCgoZW50aXR5SWQpID0+IGdldE1pZ3JhdGlvblNldEZyb21FbnRpdHkoRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpKSk7XG5cbiAgICAvLyDsobDsnbjthYzsnbTruJTrp4wg7LaU7LacXG4gICAgY29uc3Qgam9pblRhYmxlc1dpdGhEdXAgPSBlbnRpdHlTZXRzV2l0aEpvaW5UYWJsZS5mbGF0TWFwKChlbnRpdHlTZXQpID0+IGVudGl0eVNldC5qb2luVGFibGVzKTtcbiAgICAvLyDspJHrs7Ug7KCc6rGwICjspJHrs7Xsnbgg6rK97JqwIGluZGV4ZXPrpbwg67OR7ZWpKVxuICAgIGNvbnN0IGpvaW5UYWJsZXMgPSBPYmplY3QudmFsdWVzKGdyb3VwKGpvaW5UYWJsZXNXaXRoRHVwLCAoanQpID0+IGp0LnRhYmxlKSkubWFwKCh0YWJsZXMpID0+IHtcbiAgICAgIGFzc2VydCh0YWJsZXMgIT09IHVuZGVmaW5lZCwgXCJ0YWJsZXMgaXMgdW5kZWZpbmVkXCIpO1xuICAgICAgaWYgKHRhYmxlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIHRhYmxlc1swXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRhYmxlc1swXSxcbiAgICAgICAgaW5kZXhlczogdW5pcXVlKFxuICAgICAgICAgIHRhYmxlcy5mbGF0TWFwKCh0KSA9PiB0LmluZGV4ZXMpLFxuICAgICAgICAgIChpbmRleCkgPT4gW2luZGV4LnR5cGUsIC4uLmluZGV4LmNvbHVtbnNdLmpvaW4oXCItXCIpLFxuICAgICAgICApLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIC8vIOyhsOyduO2FjOydtOu4lCDtj6ztlajtlZjsl6wgTWlncmF0aW9uU2V0IOuwsOyXtFxuICAgIGNvbnN0IGVudGl0eVNldHM6IE1pZ3JhdGlvblNldFtdID0gWy4uLmVudGl0eVNldHNXaXRoSm9pblRhYmxlLCAuLi5qb2luVGFibGVzXTtcblxuICAgIGNvbnN0IGNvZGVzOiBHZW5NaWdyYXRpb25Db2RlW10gPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgZW50aXR5U2V0cy5tYXAoYXN5bmMgKGVudGl0eVNldCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGRiU2V0ID0gYXdhaXQgUG9zdGdyZVNRTFNjaGVtYVJlYWRlci5nZXRNaWdyYXRpb25TZXRGcm9tREIoXG4gICAgICAgICAgICBjb21wYXJlREIsXG4gICAgICAgICAgICBlbnRpdHlTZXQudGFibGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBOYWl0ZS50KGBtaWdyYXRvcjpjb21wYXJlTWlncmF0aW9uczplbnRpdHlTZXQ6JHtlbnRpdHlTZXQudGFibGV9YCwgZW50aXR5U2V0KTtcbiAgICAgICAgICBOYWl0ZS50KGBtaWdyYXRvcjpjb21wYXJlTWlncmF0aW9uczpkYlNldDoke2VudGl0eVNldC50YWJsZX1gLCBkYlNldCk7XG5cbiAgICAgICAgICBpZiAoZGJTZXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIOq4sOyhtCDthYzsnbTruJQg7JeG7J2MLCDsg4jroZwg7YWM7J2067iUIOyDneyEsVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGdlbmVyYXRlQ3JlYXRlQ29kZShlbnRpdHlTZXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDquLDsobQg7YWM7J2067iUIOyhtOyerO2VmOuKlCDsvIDsnbTsiqRcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZUFsdGVyQ29kZShlbnRpdHlTZXQsIGRiU2V0LCBjb21wYXJlREIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgKS5mbGF0KCk7XG5cbiAgICAvLyBub3JtYWwg7YOA7J6F7J20IOyVnuycvOuhnCwgZm9yZWlnbuydtCDrkqTroZxcbiAgICBjb2Rlcy5zb3J0KChjb2RlQSwgY29kZUIpID0+IHtcbiAgICAgIGlmIChjb2RlQS50eXBlID09PSBcImZvcmVpZ25cIiAmJiBjb2RlQi50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChjb2RlQS50eXBlID09PSBcIm5vcm1hbFwiICYmIGNvZGVCLnR5cGUgPT09IFwiZm9yZWlnblwiKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGNvZGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNoYWRvdyBEQiDthYzsiqTtirjrpbwg7KeE7ZaJ7ZWp64uI64ukLlxuICAgKlxuICAgKiBTb25hbXUgVUnsl5DshJwg7IKs7Jqp65Cp64uI64ukLlxuICAgKlxuICAgKiBAcmV0dXJucyBTaGFkb3cgREIg7YWM7Iqk7Yq4IOqysOqzvFxuICAgKi9cbiAgYXN5bmMgcnVuU2hhZG93VGVzdCgpOiBQcm9taXNlPE1pZ3JhdGlvblJlc3VsdD4ge1xuICAgIGNvbnN0IHRkYkNvbm4gPSBTb25hbXUuZGJDb25maWcudGVzdC5jb25uZWN0aW9uIGFzIEtuZXguUGdDb25uZWN0aW9uQ29uZmlnO1xuICAgIGNvbnN0IHNoYWRvd0RhdGFiYXNlID0gYCR7dGRiQ29ubi5kYXRhYmFzZX1fX21pZ3JhdGlvbl9zaGFkb3dgO1xuXG4gICAgLy8g7YWM7Iqk7Yq4IOyDge2ZqeyXkOyEnOuKlCDtirjrnpzsnq3shZjsnYQg7LSI6riw7ZmU7ZWY6rOgLCDsg4gg642w7J207YSw67Kg7J207IqkIOy7pOuEpeyFmOydhCDqsIDsoLjsmYDslbwg7ZWoXG4gICAgaWYgKGlzVGVzdCgpKSB7XG4gICAgICBhd2FpdCBEQi5jbGVhclRlc3RUcmFuc2FjdGlvbigpO1xuICAgICAgLy8g67OR66CsIO2FjOyKpO2KuCDrqqjrk5zsl5DshJzripQgd29ya2VyIERCIOyXsOqysCDsnKDsp4BcbiAgICAgIGlmIChwcm9jZXNzLmVudi5TT05BTVVfV09SS0VSX0RCICE9PSBcInRydWVcIikge1xuICAgICAgICBhd2FpdCBEQi5kZXN0cm95KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8g6riw7KG0IFNoYWRvdyBEQiDsgq3soJwg7ZuEIFNoYWRvdyBEQiDsg53shLFcbiAgICBjb25zdCB0ZGIgPSBjcmVhdGVLbmV4SW5zdGFuY2UoU29uYW11LmRiQ29uZmlnLnRlc3QpO1xuICAgICFpc1Rlc3QoKSAmJiBjb25zb2xlLmxvZyhjaGFsay5tYWdlbnRhKGAke3NoYWRvd0RhdGFiYXNlfSDsgq3soJxgKSk7XG4gICAgYXdhaXQgdGRiLnJhdyhgRFJPUCBEQVRBQkFTRSBJRiBFWElTVFMgJHtzaGFkb3dEYXRhYmFzZX1gKTtcbiAgICBhd2FpdCB0ZGIucmF3KGBcbiAgICAgIFNFTEVDVCBwZ190ZXJtaW5hdGVfYmFja2VuZChwZ19zdGF0X2FjdGl2aXR5LnBpZClcbiAgICAgIEZST00gcGdfc3RhdF9hY3Rpdml0eVxuICAgICAgV0hFUkUgZGF0bmFtZSA9ICcke3RkYkNvbm4uZGF0YWJhc2V9J1xuICAgICAgICBBTkQgcGlkIDw+IHBnX2JhY2tlbmRfcGlkKCk7XG4gICAgYCk7XG4gICAgYXdhaXQgdGRiLnJhdyhgQ1JFQVRFIERBVEFCQVNFICR7c2hhZG93RGF0YWJhc2V9IFRFTVBMQVRFICR7dGRiQ29ubi5kYXRhYmFzZX1gKTtcblxuICAgIC8vIFNoYWRvdyBEQuyXkCDsl7DqsrBcbiAgICBjb25zdCBzZGIgPSBjcmVhdGVLbmV4SW5zdGFuY2Uoe1xuICAgICAgLi4uU29uYW11LmRiQ29uZmlnLnRlc3QsXG4gICAgICBjb25uZWN0aW9uOiB7XG4gICAgICAgIC4uLnRkYkNvbm4sXG4gICAgICAgIGRhdGFiYXNlOiBzaGFkb3dEYXRhYmFzZSxcbiAgICAgICAgcGFzc3dvcmQ6IHRkYkNvbm4ucGFzc3dvcmQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gc2hhZG93IERCIO2FjOyKpO2KuCDsp4TtlolcbiAgICB0cnkge1xuICAgICAgY29uc3QgW2JhdGNoTm8sIGFwcGxpZWRdID0gYXdhaXQgc2RiLm1pZ3JhdGUubGF0ZXN0KCk7XG4gICAgICAhaXNUZXN0KCkgJiZcbiAgICAgICAgY29uc29sZS5sb2coY2hhbGsuZ3JlZW4oXCJTaGFkb3cgREIg7YWM7Iqk7Yq47JeQIOyEseqzte2WiOyKteuLiOuLpCFcIiksIHtcbiAgICAgICAgICBiYXRjaE5vLFxuICAgICAgICAgIGFwcGxpZWQsXG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgY29ubktleTogXCJzaGFkb3dcIixcbiAgICAgICAgICBiYXRjaE5vLFxuICAgICAgICAgIGFwcGxpZWQsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICB0aHJvdyBuZXcgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLnNoYWRvd0RiVGVzdEZhaWxlZFwiKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIFNoYWRvdyBEQiDsl7DqsrAg7KKF66OMXG4gICAgICBhd2FpdCBzZGIuZGVzdHJveSgpO1xuXG4gICAgICAvLyBTaGFkb3cgREIg7IKt7KCcXG4gICAgICAhaXNUZXN0KCkgJiYgY29uc29sZS5sb2coY2hhbGsubWFnZW50YShgJHtzaGFkb3dEYXRhYmFzZX0g7IKt7KCcYCkpO1xuICAgICAgYXdhaXQgdGRiLnJhdyhgRFJPUCBEQVRBQkFTRSBJRiBFWElTVFMgJHtzaGFkb3dEYXRhYmFzZX1gKTtcblxuICAgICAgLy8gVGVzdCBEQiDsl7DqsrAg7KKF66OMXG4gICAgICBhd2FpdCB0ZGIuZGVzdHJveSgpO1xuICAgIH1cbiAgfVxufVxuIl0sIm5hbWVzIjpbImFzc2VydCIsImNoYWxrIiwibWtkaXIiLCJyZWFkZGlyIiwidW5saW5rIiwid3JpdGVGaWxlIiwicGF0aCIsImdyb3VwIiwic3VtIiwidW5pcXVlIiwiU29uYW11IiwiREIiLCJjcmVhdGVLbmV4SW5zdGFuY2UiLCJTRCIsIkVudGl0eU1hbmFnZXIiLCJTZXJ2aWNlVW5hdmFpbGFibGVFeGNlcHRpb24iLCJOYWl0ZSIsImlzVGVzdCIsImV4aXN0cyIsImdlbmVyYXRlQWx0ZXJDb2RlIiwiZ2VuZXJhdGVDcmVhdGVDb2RlIiwiZ2V0TWlncmF0aW9uU2V0RnJvbUVudGl0eSIsIlBvc3RncmVTUUxTY2hlbWFSZWFkZXIiLCJNaWdyYXRvciIsImdldE1pZ3JhdGlvbkNvZGVzIiwic3JjTWlncmF0aW9uc0RpciIsImpvaW4iLCJhcGlSb290UGF0aCIsInJlY3Vyc2l2ZSIsImNvZGVzIiwiZmlsdGVyIiwiZiIsImVuZHNXaXRoIiwibWFwIiwibmFtZSIsInJlcGxhY2UiLCJzb3J0IiwiYSIsImIiLCJ0IiwiZ2V0U3RhdHVzIiwiY29ubktleXMiLCJPYmplY3QiLCJrZXlzIiwiZGJDb25maWciLCJrZXkiLCJtaWdyYXRpb25TdGF0dXNFcnJvciIsInN0YXR1c2VzIiwiUHJvbWlzZSIsImFsbCIsImNvbm5LZXkiLCJrbmV4T3B0aW9ucyIsInRDb25uIiwic3RhdHVzIiwibWlncmF0ZSIsImVyciIsImNvbnNvbGUiLCJ3YXJuIiwieWVsbG93IiwiSlNPTiIsInN0cmluZ2lmeSIsImNvbm5lY3Rpb24iLCJFcnJvciIsIm1lc3NhZ2UiLCJTdHJpbmciLCJwZW5kaW5nIiwiZmRMaXN0IiwibGlzdCIsImZkIiwiZmlsZSIsImN1cnJlbnRWZXJzaW9uIiwiX2VyciIsImNvbm5TdHJpbmciLCJ1c2VyIiwiaG9zdCIsInBvcnQiLCJkYXRhYmFzZSIsImRlc3Ryb3kiLCJwcmVwYXJlZENvZGVzIiwic3RhdHVzMGNvbm4iLCJmaW5kIiwidW5kZWZpbmVkIiwiY29tcGFyZURCY29ubiIsImNvbXBhcmVNaWdyYXRpb25zIiwiY29ubnMiLCJlcnJvciIsInJ1bkFjdGlvbiIsImFjdGlvbiIsInRhcmdldHMiLCJjb25maWdzIiwidGFyZ2V0Iiwib3B0aW9ucyIsImMiLCJjb25maWciLCJrbmV4IiwicmVzdWx0IiwiYmF0Y2hObyIsImFwcGxpZWQiLCJsYXRlc3QiLCJyb2xsYmFjayIsInZhbGlkYXRlRGVsZXRhYmxlIiwiY29kZU5hbWVzIiwiYXBwbGllZENvZGVzIiwiY29kZU5hbWUiLCJzb21lIiwiY29ubiIsImluY2x1ZGVzIiwiY2FuRGVsZXRlIiwibGVuZ3RoIiwiZGVsQ29kZXMiLCJmaWxlUGF0aCIsImdlbkRhdGVUYWciLCJpbmRleCIsImJhc2VEYXRlIiwiRGF0ZSIsImRhdGUiLCJnZXRUaW1lIiwicGFkIiwibnVtIiwic2l6ZSIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZW5lcmF0ZVByZXBhcmVkQ29kZXMiLCJsb2ciLCJncmVlbiIsIm1pZ3JhdGlvbnNEaXIiLCJwY29kZSIsImVudHJpZXMiLCJmb3JtYXR0ZWQiLCJkYXRlVGFnIiwidGl0bGUiLCJjb21wYXJlREIiLCJlbnRpdHlJZHMiLCJnZXRBbGxJZHMiLCJlbnRpdHlTZXRzV2l0aEpvaW5UYWJsZSIsImVudGl0eUlkIiwiZ2V0IiwicHJvcHMiLCJqb2luVGFibGVzV2l0aER1cCIsImZsYXRNYXAiLCJlbnRpdHlTZXQiLCJqb2luVGFibGVzIiwidmFsdWVzIiwianQiLCJ0YWJsZSIsInRhYmxlcyIsImluZGV4ZXMiLCJ0eXBlIiwiY29sdW1ucyIsImVudGl0eVNldHMiLCJkYlNldCIsImdldE1pZ3JhdGlvblNldEZyb21EQiIsImZsYXQiLCJjb2RlQSIsImNvZGVCIiwicnVuU2hhZG93VGVzdCIsInRkYkNvbm4iLCJ0ZXN0Iiwic2hhZG93RGF0YWJhc2UiLCJjbGVhclRlc3RUcmFuc2FjdGlvbiIsInByb2Nlc3MiLCJlbnYiLCJTT05BTVVfV09SS0VSX0RCIiwidGRiIiwibWFnZW50YSIsInJhdyIsInNkYiIsInBhc3N3b3JkIiwiZSJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsWUFBWSxTQUFTO0FBQzVCLE9BQU9DLFdBQVcsUUFBUTtBQUMxQixTQUFTQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxTQUFTLFFBQVEsbUJBQWM7QUFFaEUsT0FBT0MsVUFBVSxPQUFPO0FBQ3hCLFNBQVNDLEtBQUssRUFBRUMsR0FBRyxFQUFFQyxNQUFNLFFBQVEsVUFBVTtBQUM3QyxTQUFTQyxN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
|
package/dist/ui/api.js
CHANGED
|
@@ -26,14 +26,14 @@ export async function sonamuUIApiPlugin(fastify) {
|
|
|
26
26
|
// waitForHMRCompleted
|
|
27
27
|
async function waitForHMRCompleted(fn) {
|
|
28
28
|
const waitPromise = new Promise((resolve)=>{
|
|
29
|
-
const timeout = setTimeout(()=>{
|
|
30
|
-
resolve();
|
|
31
|
-
}, 1500);
|
|
32
29
|
const handler = ()=>{
|
|
33
30
|
clearTimeout(timeout);
|
|
34
|
-
Sonamu.syncer.eventEmitter.off("onHMRCompleted", handler);
|
|
35
31
|
resolve();
|
|
36
32
|
};
|
|
33
|
+
const timeout = setTimeout(()=>{
|
|
34
|
+
Sonamu.syncer.eventEmitter.off("onHMRCompleted", handler);
|
|
35
|
+
resolve();
|
|
36
|
+
}, 1500);
|
|
37
37
|
Sonamu.syncer.eventEmitter.once("onHMRCompleted", handler);
|
|
38
38
|
});
|
|
39
39
|
const result = await fn();
|
|
@@ -1111,4 +1111,4 @@ export async function sonamuUIApiPlugin(fastify) {
|
|
|
1111
1111
|
});
|
|
1112
1112
|
}
|
|
1113
1113
|
|
|
1114
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQWRkcmVzc0luZm8gfSBmcm9tIFwibmV0XCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcmFuZ2UgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERCLCB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgc29uYW11RGljdGlvbmFyeSB9IGZyb20gXCIuLi9kaWN0L3NvbmFtdS1kaWN0aW9uYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eSB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgaXNTb0V4Y2VwdGlvbixcbiAgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uLFxufSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIE1pZ3JhdGlvblJlc3VsdCwgTWlncmF0b3IgfSBmcm9tIFwiLi4vbWlncmF0aW9uL21pZ3JhdG9yXCI7XG5pbXBvcnQgeyBTbGFja0NvbmZpcm0sIHR5cGUgU2xhY2tDb25maXJtUGVuZGluZ1Jlc3VsdCB9IGZyb20gXCIuLi9taWdyYXRpb24vc2xhY2stY29uZmlybVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlLW1hbmFnZXJcIjtcbmltcG9ydCB7IERhdGFFeHBsb3JlciB9IGZyb20gXCIuLi90ZXN0aW5nL2RhdGEtZXhwbG9yZXJcIjtcbmltcG9ydCB7IEZpeHR1cmVHZW5lcmF0b3IgfSBmcm9tIFwiLi4vdGVzdGluZy9maXh0dXJlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgdHlwZSBEdXBsaWNhdGVDaGVja09wdGlvbnMsIEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgdHlwZSBDb25lLFxuICB0eXBlIEVudGl0eUluZGV4LFxuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgRW50aXR5U3Vic2V0Um93LFxuICB0eXBlIEZpeHR1cmVSZWNvcmQsXG4gIHR5cGUgRml4dHVyZVNlYXJjaE9wdGlvbnMsXG4gIHR5cGUgRmxhdHRlblN1YnNldFJvdyxcbiAgdHlwZSBQYXRoQW5kQ29kZSxcbiAgVGVtcGxhdGVLZXksXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IHNldEFpQXBpIH0gZnJvbSBcIi4vYWktYXBpXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzb25hbXVVSUFwaVBsdWdpbihmYXN0aWZ5OiBGYXN0aWZ5SW5zdGFuY2UpIHtcbiAgZmFzdGlmeS5yZWdpc3RlcihcbiAgICBhc3luYyAoc2VydmVyKSA9PiB7XG4gICAgICAvLyBtaWdyYXRvclxuICAgICAgY29uc3QgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcblxuICAgICAgLy8gd2FpdEZvckhNUkNvbXBsZXRlZFxuICAgICAgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckhNUkNvbXBsZXRlZDxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCB3YWl0UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sIDE1MDApO1xuXG4gICAgICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIFNvbmFtdS5zeW5jZXIuZXZlbnRFbWl0dGVyLm9mZihcIm9uSE1SQ29tcGxldGVkXCIsIGhhbmRsZXIpO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICBTb25hbXUuc3luY2VyLmV2ZW50RW1pdHRlci5vbmNlKFwib25ITVJDb21wbGV0ZWRcIiwgaGFuZGxlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgICAgIGF3YWl0IHdhaXRQcm9taXNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBzZXRBaUFwaShzZXJ2ZXIpO1xuXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9zb25hbXUvY29uZmlnXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgcmV0dXJuIFNvbmFtdS5jb25maWc7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgZW50aXR5SWQ/OiBzdHJpbmc7XG4gICAgICAgICAgcHJlc2V0PzogXCJ0eXBlc1wiIHwgXCJlbnRpdHkuanNvblwiIHwgXCJnZW5lcmF0ZWRcIjtcbiAgICAgICAgICBhYnNQYXRoPzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3Rvb2xzL29wZW5Wc2NvZGVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgcHJlc2V0LCBhYnNQYXRoIH0gPSByZXF1ZXN0LnF1ZXJ5O1xuXG4gICAgICAgIGNvbnN0IHRhcmdldFBhdGggPSAoKCkgPT4ge1xuICAgICAgICAgIGlmIChlbnRpdHlJZCAmJiBwcmVzZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZXMgfSA9IGVudGl0eTtcblxuICAgICAgICAgICAgY29uc3QgeyBhcGlSb290UGF0aCB9ID0gU29uYW11O1xuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSAoKCkgPT4ge1xuICAgICAgICAgICAgICBzd2l0Y2ggKHByZXNldCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0eXBlc1wiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWVzLmZzfS50eXBlcy50c2A7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudGl0eS5qc29uXCI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZXMuZnN9LmVudGl0eS5qc29uYDtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZ2VuZXJhdGVkXCI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZXMuZnN9LmdlbmVyYXRlZC50c2A7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICByZXR1cm4gYCR7YXBpUm9vdFBhdGh9L3NyYy9hcHBsaWNhdGlvbi8ke2VudGl0eS5uYW1lcy5wYXJlbnRGc30vJHtmaWxlbmFtZX1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWFic1BhdGgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IucHJlc2V0T3JBYnNQYXRoUmVxdWlyZWRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFic1BhdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICBleGVjU3luYyhgY29kZSAke3RhcmdldFBhdGh9YCk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgb3JpZ2luOiBzdHJpbmc7XG4gICAgICAgICAgZW50aXR5SWQ/OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvdG9vbHMvZ2V0U3VnZ2VzdGlvblwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IG9yaWdpbiwgZW50aXR5SWQgfSA9IHJlcXVlc3QucXVlcnk7XG5cbiAgICAgICAgLy8g7LmY7ZmYIOyaqeyWtOynkVxuICAgICAgICBjb25zdCBnbG9zc2FyeSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcbiAgICAgICAgICBbXCJzdGF0dXNcIiwgXCLsg4Htg5xcIl0sXG4gICAgICAgICAgW1widHlwZVwiLCBcIu2DgOyehVwiXSxcbiAgICAgICAgICBbXCJpbWFnZVwiLCBcIuydtOuvuOyngFwiXSxcbiAgICAgICAgICBbXCJpbWFnZXNcIiwgXCLsnbTrr7jsp4DrpqzsiqTtirhcIl0sXG4gICAgICAgICAgW1widXJsXCIsIFwiVVJMXCJdLFxuICAgICAgICAgIFtcImlkXCIsIFwiSURcIl0sXG4gICAgICAgICAgW1wibmFtZVwiLCBge0VudGl0eUlEfeuqhWBdLFxuICAgICAgICAgIFtcInRpdGxlXCIsIFwie0VudGl0eUlEfeuqhVwiXSxcbiAgICAgICAgICBbXCJwYXJlbnRcIiwgXCLsg4HsnIR7RW50aXR5SUR9XCJdLFxuICAgICAgICAgIFtcImRlc2NcIiwgXCLshKTrqoVcIl0sXG4gICAgICAgICAgW1wiYXRcIiwgXCLsnbzsi5xcIl0sXG4gICAgICAgICAgW1wiY3JlYXRlZFwiLCBcIuuTseuhnVwiXSxcbiAgICAgICAgICBbXCJ1cGRhdGVkXCIsIFwi7IiY7KCVXCJdLFxuICAgICAgICAgIFtcImRlbGV0ZWRcIiwgXCLsgq3soJxcIl0sXG4gICAgICAgICAgW1wiYnlcIiwgXCLsnKDsoIBcIl0sXG4gICAgICAgICAgW1wiZGF0ZVwiLCBcIuydvOyekFwiXSxcbiAgICAgICAgICBbXCJ0aW1lXCIsIFwi7Iuc6rCEXCJdLFxuICAgICAgICAgIFtcImtvXCIsIFwiKO2VnOq4gClcIl0sXG4gICAgICAgICAgW1wiZW5cIiwgXCIo7JiB66y4KVwiXSxcbiAgICAgICAgICBbXCJrcndcIiwgXCIo7JuQKVwiXSxcbiAgICAgICAgICBbXCJ1c2RcIiwgXCIoVVNEKVwiXSxcbiAgICAgICAgICBbXCJjb2xvclwiLCBcIuy7rOufrFwiXSxcbiAgICAgICAgICBbXCJjb2RlXCIsIFwi7L2U65OcXCJdLFxuICAgICAgICAgIFtcInhcIiwgXCJY7KKM7ZGcXCJdLFxuICAgICAgICAgIFtcInlcIiwgXCJZ7KKM7ZGcXCJdLFxuICAgICAgICAgIFtcImN1cnJlbnRcIiwgXCLtmITsnqxcIl0sXG4gICAgICAgICAgW1wic3RvY2tcIiwgXCLsnqzqs6BcIl0sXG4gICAgICAgICAgW1widG90YWxcIiwgXCLstJ1cIl0sXG4gICAgICAgICAgW1wiYWRtaW5cIiwgXCLqtIDrpqzsnpBcIl0sXG4gICAgICAgICAgW1wiZ3JvdXBcIiwgXCLqt7jro7lcIl0sXG4gICAgICAgICAgW1wiaXRlbVwiLCBcIuyVhOydtO2FnFwiXSxcbiAgICAgICAgICBbXCJjbnRcIiwgXCLsiJjrn4lcIl0sXG4gICAgICAgICAgW1wicHJpY2VcIiwgXCLqsIDqsqlcIl0sXG4gICAgICAgICAgW1wicHJlc2V0XCIsIFwi7ZSE66as7IWLXCJdLFxuICAgICAgICAgIFtcImFjY3RcIiwgXCLqs4TsooxcIl0sXG4gICAgICAgICAgW1widGVsXCIsIFwi7KCE7ZmU67KI7Zi4XCJdLFxuICAgICAgICAgIFtcIm5vXCIsIFwi67KI7Zi4XCJdLFxuICAgICAgICAgIFtcImJvZHlcIiwgXCLrgrTsmqlcIl0sXG4gICAgICAgICAgW1wiY29udGVudFwiLCBcIuuCtOyaqVwiXSxcbiAgICAgICAgICBbXCJvcmRlcm5vXCIsIFwi7KCV66Cs7Iic7IScXCJdLFxuICAgICAgICAgIFtcInByaW9yaXR5XCIsIFwi7Jqw7ISg7Iic7JyEXCJdLFxuICAgICAgICAgIFtcInRleHRcIiwgXCLthY3siqTtirhcIl0sXG4gICAgICAgICAgW1wia2V5XCIsIFwi7YKkXCJdLFxuICAgICAgICAgIFtcInN1bVwiLCBcIu2VqeyCsFwiXSxcbiAgICAgICAgICBbXCJleHBlY3RlZFwiLCBcIuyYiOyDgVwiXSxcbiAgICAgICAgICBbXCJhY3R1YWxcIiwgXCLsi6TsoJxcIl0sXG4gICAgICAgIF0pO1xuICAgICAgICAvLyDsoITssrQg7JeU7Yuw7YuwIOyInO2ajO2VmOupsCwg7JeU7Yuw7YuwIO2DgOydtO2LgOqzvCDtlITroa0g7ISk66qF7J2EIOy5mO2ZmCDsmqnslrTsp5Hsl5Ag7LaU6rCAXG4gICAgICAgIGZvciAoY29uc3QgZW50aXR5SWQgb2YgRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKSkge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBpZiAoKGVudGl0eS50aXRsZSA/PyBcIlwiKSAhPT0gXCJcIikge1xuICAgICAgICAgICAgZ2xvc3Nhcnkuc2V0KGluZmxlY3Rpb24udW5kZXJzY29yZShlbnRpdHkuaWQpLCBlbnRpdHkudGl0bGUpO1xuICAgICAgICAgICAgZ2xvc3Nhcnkuc2V0KFxuICAgICAgICAgICAgICBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5LmlkKSksXG4gICAgICAgICAgICAgIGAke2VudGl0eS50aXRsZX3rpqzsiqTtirhgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbnRpdHkucHJvcHMuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGdsb3NzYXJ5Lmhhcyhwcm9wLm5hbWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wLmRlc2MpIHtcbiAgICAgICAgICAgICAgZ2xvc3Nhcnkuc2V0KHByb3AubmFtZSwgcHJvcC5kZXNjLnJlcGxhY2UoZW50aXR5LnRpdGxlID8/IFwiXCIsIFwie0VudGl0eUlEfVwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWdnZXN0ZWQgPSAoKCkgPT4ge1xuICAgICAgICAgIC8vIOuLqOyWtCDrtoTrpqwsIOqwgOuKpe2VnCDsobDtlakg7IOd7ISxXG4gICAgICAgICAgY29uc3Qgd29yZHMgPSBvcmlnaW4uc3BsaXQoXCJfXCIpO1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmF0aW9ucyA9IFsuLi5yYW5nZSh3b3Jkcy5sZW5ndGgsIDAsIC0xKV0uZmxhdE1hcCgobGVuKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAuLi5yYW5nZSgwLCB3b3Jkcy5sZW5ndGggLSBsZW4gKyAxLCAoaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGxlbixcbiAgICAgICAgICAgICAgICAgIHc6IHdvcmRzLnNsaWNlKGlkeCwgaWR4ICsgbGVuKS5qb2luKFwiX1wiKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyDsobDtlansnYQg7Iic7ZqM7ZWY66mwLCDsuZjtmZgg7Jqp7Ja07KeR7JeQIOyeiOuKlCDri6jslrTqsIAg7Y+s7ZWo65CcIOqyveyasCwg7LmY7ZmYIOyaqeyWtOuhnCDsuZjtmZhcbiAgICAgICAgICBjb25zdCBSRVBMQUNFRF9QUkVGSVggPSBcIiNSRVBMQUNFRC8vXCI7IC8vIOy5mO2ZmOuQnCDri6jslrTrpbwgam9pbiDsnbTtm4Tsl5Drj4Qg7Iud67OE7ZWY6riwIOychO2VtCBwcmVmaXgg7LaU6rCAXG4gICAgICAgICAgbGV0IHJlbWFpbkFycjogc3RyaW5nW10gPSBbLi4ud29yZHNdO1xuICAgICAgICAgIGZvciAoY29uc3QgY29tYiBvZiBjb21iaW5hdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpblN0ciA9IHJlbWFpbkFyci5qb2luKFwiX1wiKTtcbiAgICAgICAgICAgIGlmIChyZW1haW5TdHIuaW5jbHVkZXMoY29tYi53KSAmJiBnbG9zc2FyeS5oYXMoY29tYi53KSkge1xuICAgICAgICAgICAgICByZW1haW5BcnIgPSByZW1haW5TdHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZShjb21iLncsIFJFUExBQ0VEX1BSRUZJWCArIGdsb3NzYXJ5LmdldChjb21iLncpKVxuICAgICAgICAgICAgICAgIC5zcGxpdChcIl9cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlbWFpbkFyclxuICAgICAgICAgICAgLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICBpZiAoci5zdGFydHNXaXRoKFJFUExBQ0VEX1BSRUZJWCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gci5yZXBsYWNlKFJFUExBQ0VEX1BSRUZJWCwgXCJcIik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgve0VudGl0eUlEfS9nLCBlbnRpdHlJZCA/IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKS50aXRsZSA6IFwiXCIpO1xuICAgICAgICB9KSgpO1xuXG4gICAgICAgIHJldHVybiB7IHN1Z2dlc3RlZCB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL2VudGl0eS9maW5kTWFueVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZmxhdHRlblN1YnNldFJvd3Moc3Vic2V0Um93czogRW50aXR5U3Vic2V0Um93W10pOiBGbGF0dGVuU3Vic2V0Um93W10ge1xuICAgICAgICAgIHJldHVybiBzdWJzZXRSb3dzLmZsYXRNYXAoKHN1YnNldFJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiwgLi4uc1JvdyB9ID0gc3Vic2V0Um93O1xuICAgICAgICAgICAgcmV0dXJuIFtzUm93LCAuLi5mbGF0dGVuU3Vic2V0Um93cyhjaGlsZHJlbildO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW50aXRpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBlbnRpdHlJZHMubWFwKChlbnRpdHlJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgY29uc3Qgc3Vic2V0Um93cyA9IGVudGl0eS5nZXRTdWJzZXRSb3dzKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmVudGl0eSxcbiAgICAgICAgICAgICAgZmxhdHRlblN1YnNldFJvd3M6IGZsYXR0ZW5TdWJzZXRSb3dzKHN1YnNldFJvd3MpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBlbnRpdGllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgYUlkID0gYS5wYXJlbnRJZCA/PyBhLmlkO1xuICAgICAgICAgIGNvbnN0IGJJZCA9IGIucGFyZW50SWQgPz8gYi5pZDtcbiAgICAgICAgICBpZiAoYUlkIDwgYklkKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYgKGFJZCA+IGJJZCkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGFJZCA9PT0gYklkKSB7XG4gICAgICAgICAgICBpZiAoYS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTE7XG4gICAgICAgICAgICBpZiAoYi5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IGVudGl0aWVzIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgZmlsdGVyPzogXCJlbnVtc1wiIHwgXCJ0eXBlc1wiO1xuICAgICAgICAgIHJlbG9hZD86IFwiMVwiO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS90eXBlSWRzXCIsIGFzeW5jIChyZXF1ZXN0KTogUHJvbWlzZTx7IHR5cGVJZHM6IHN0cmluZ1tdIH0+ID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXIsIHJlbG9hZCB9ID0gcmVxdWVzdC5xdWVyeTtcblxuICAgICAgICBpZiAocmVsb2FkID09PSBcIjFcIikge1xuICAgICAgICAgIGF3YWl0IFNvbmFtdS5zeW5jZXIuYXV0b2xvYWRUeXBlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZUlkcyA9ICgoKSA9PiB7XG4gICAgICAgICAgLy8g7ZSE66Gc7KCd7Yq47JeQ7IScIOygleydmO2VnCDtg4DsnoXrk6RcbiAgICAgICAgICBjb25zdCBwcm9qZWN0VHlwZUlkcyA9IE9iamVjdC5lbnRyaWVzKFNvbmFtdS5zeW5jZXIudHlwZXMpXG4gICAgICAgICAgICAuZmlsdGVyKChbX3R5cGVJZCwgem9kVHlwZV0pID0+ICh6b2RUeXBlLl96b2QuZGVmLnR5cGUgYXMgc3RyaW5nKSAhPT0gXCJlbnVtXCIpXG4gICAgICAgICAgICAubWFwKChbdHlwZUlkLCBfem9kVHlwZV0pID0+IHR5cGVJZCk7XG5cbiAgICAgICAgICAvLyDrgrTsnqUg7YOA7J6F65OkIChzb25hbXUg7L2U7Ja07JeQ7IScIOygnOqztSlcbiAgICAgICAgICBjb25zdCBidWlsdEluVHlwZUlkcyA9IFsuLi5CVUlMVF9JTl9UWVBFX0lEU107XG5cbiAgICAgICAgICAvLyDrqqjrk6Ag7YOA7J6FIOuzke2VqVxuICAgICAgICAgIGNvbnN0IGFsbFR5cGVJZHMgPSBbLi4uYnVpbHRJblR5cGVJZHMsIC4uLnByb2plY3RUeXBlSWRzXTtcblxuICAgICAgICAgIGlmIChmaWx0ZXIgPT09IFwidHlwZXNcIikge1xuICAgICAgICAgICAgcmV0dXJuIGFsbFR5cGVJZHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZW51bUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkuZmxhdE1hcCgoZW50aXR5SWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnRpdHkuZW51bUxhYmVscyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoZmlsdGVyID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnVtSWRzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbFR5cGVJZHMsIC4uLmVudW1JZHNdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGVJZHMsXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZm9ybToge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgICAgICB0YWJsZTogc3RyaW5nO1xuICAgICAgICAgICAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvY3JlYXRlXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGZvcm0gfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBhd2FpdCBTb25hbXUuc3luY2VyLmNyZWF0ZUVudGl0eSh7IC4uLmZvcm0sIGVudGl0eUlkOiBmb3JtLmlkIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2RlbFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIHJldHVybiBhd2FpdCBTb25hbXUuc3luY2VyLmRlbEVudGl0eShlbnRpdHlJZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgbmV3VmFsdWVzOiB7XG4gICAgICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICAgICAgdGFibGU6IHN0cmluZztcbiAgICAgICAgICAgIHBhcmVudElkPzogc3RyaW5nO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeUVudGl0eUJhc2VcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIG5ld1ZhbHVlcyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkudGl0bGUgPSBuZXdWYWx1ZXMudGl0bGU7XG4gICAgICAgICAgZW50aXR5LnRhYmxlID0gbmV3VmFsdWVzLnRhYmxlO1xuICAgICAgICAgIGVudGl0eS5wYXJlbnRJZCA9IG5ld1ZhbHVlcy5wYXJlbnRJZDtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgc3Vic2V0S2V5OiBzdHJpbmc7XG4gICAgICAgICAgZmllbGRzOiBzdHJpbmdbXTtcbiAgICAgICAgICBmaWVsZHNJbnRlcm5hbD86IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb2RpZnlTdWJzZXRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIHN1YnNldEtleSwgZmllbGRzLCBmaWVsZHNJbnRlcm5hbCB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldID0gZmllbGRzO1xuICAgICAgICAgIGlmIChmaWVsZHNJbnRlcm5hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZmllbGRzSW50ZXJuYWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldEtleV0gPSBmaWVsZHNJbnRlcm5hbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldEtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICByZXR1cm4geyB1cGRhdGVkOiBmaWVsZHMsIHVwZGF0ZWRJbnRlcm5hbDogZmllbGRzSW50ZXJuYWwgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBzdWJzZXRLZXk6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvZGVsU3Vic2V0XCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBzdWJzZXRLZXkgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZGVsZXRlIGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV07XG4gICAgICAgICAgZGVsZXRlIGVudGl0eS5zdWJzZXRzSW50ZXJuYWxbc3Vic2V0S2V5XTtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgbmV3UHJvcDogRW50aXR5UHJvcDtcbiAgICAgICAgICBhdD86IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvY3JlYXRlUHJvcFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgYXQsIG5ld1Byb3AgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgYXdhaXQgZW50aXR5LmNyZWF0ZVByb3AobmV3UHJvcCwgYXQpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIG5ld1Byb3A6IEVudGl0eVByb3A7XG4gICAgICAgICAgYXQ6IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5UHJvcFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgYXQsIG5ld1Byb3AgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkubW9kaWZ5UHJvcChuZXdQcm9wLCBhdCk7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBhdDogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9kZWxQcm9wXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBhdCB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5kZWxQcm9wKGF0KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBhdDogbnVtYmVyO1xuICAgICAgICAgIHRvOiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vdmVQcm9wXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBhdCwgdG8gfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkubW92ZVByb3AoYXQsIHRvKTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIGluZGV4ZXM6IEVudGl0eUluZGV4W107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeUluZGV4ZXNcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGluZGV4ZXMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LmluZGV4ZXMgPSBpbmRleGVzO1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICByZXR1cm4geyB1cGRhdGVkOiBpbmRleGVzIH07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgZW51bUxhYmVsczogRW50aXR5W1wiZW51bUxhYmVsc1wiXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5RW51bUxhYmVsc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgZW51bUxhYmVscyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkuZW51bUxhYmVscyA9IGVudW1MYWJlbHM7XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiB7IHVwZGF0ZWQ6IGVudW1MYWJlbHMgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBuZXdFbnVtSWQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvY3JlYXRlRW51bUlkXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBuZXdFbnVtSWQgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAgICAgICBpZiAoZW50aXR5LmVudW1MYWJlbHNbbmV3RW51bUlkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnbTrr7gg7KG07J6s7ZWY64qUIGVudW1JZOyeheuLiOuLpDogJHtuZXdFbnVtSWR9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW50aXR5LmVudW1MYWJlbHNbbmV3RW51bUlkXSA9IHtcbiAgICAgICAgICAgIC4uLihuZXdFbnVtSWQuZW5kc1dpdGgoXCJTdGF0dXNcIilcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBhY3RpdmU6IFwi64W47LacXCIsXG4gICAgICAgICAgICAgICAgICBoaWRkZW46IFwi7Iio6rmAXCIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIFwiXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgZW51bUlkOiB7XG4gICAgICAgICAgICBiZWZvcmU6IHN0cmluZztcbiAgICAgICAgICAgIGFmdGVyOiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5RW51bUlkXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBlbnVtSWQgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgICAgIGNvbnN0IGlzRXhpc3RzID0gZW50aXR5SWRzLnNvbWUoKGVudGl0eUlkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmluY2x1ZGVzKGVudW1JZC5hZnRlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGlzRXhpc3RzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOydtOuvuCDsobTsnqztlZjripQgRW51bUlk7J6F64uI64ukOiAke2VudW1JZC5hZnRlcn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LmVudW1MYWJlbHNbZW51bUlkLmFmdGVyXSA9IGVudGl0eS5lbnVtTGFiZWxzW2VudW1JZC5iZWZvcmVdO1xuICAgICAgICAgIGRlbGV0ZSBlbnRpdHkuZW51bUxhYmVsc1tlbnVtSWQuYmVmb3JlXTtcblxuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIGVudGl0eUlkcykge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGVudGl0eS5wcm9wcykge1xuICAgICAgICAgICAgICBpZiAocHJvcC50eXBlID09PSBcImVudW1cIiAmJiBwcm9wLmlkID09PSBlbnVtSWQuYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgcHJvcC5pZCA9IGVudW1JZC5hZnRlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgZW51bUlkOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2RlbGV0ZUVudW1JZFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgZW51bUlkIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgICAgIGNvbnN0IGlzUmVmZXJlbmNlZCA9IGVudGl0eUlkc1xuICAgICAgICAgICAgLmZsYXRNYXAoKGVudGl0eUlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMpXG4gICAgICAgICAgICAuc29tZSgocHJvcCkgPT4gcHJvcC50eXBlID09PSBcImVudW1cIiAmJiBwcm9wLmlkID09PSBlbnVtSWQpO1xuICAgICAgICAgIGlmIChpc1JlZmVyZW5jZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnVtSWR966W8IOywuOyhsO2VmOuKlCDtlITroZztjbzti7DqsIAg7KG07J6s7ZWp64uI64ukLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBkZWxldGUgZW50aXR5LmVudW1MYWJlbHNbZW51bUlkXTtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIHRhcmdldDogXCJlbnRpdHlcIiB8IFwicHJvcFwiIHwgXCJlbnVtXCIgfCBcInN1YnNldFwiO1xuICAgICAgICAgIHByb3BOYW1lPzogc3RyaW5nO1xuICAgICAgICAgIGVudW1JZD86IHN0cmluZztcbiAgICAgICAgICBzdWJzZXRLZXk/OiBzdHJpbmc7XG4gICAgICAgICAgY29uZTogQ29uZTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvdXBkYXRlQ29uZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgdGFyZ2V0LCBwcm9wTmFtZSwgZW51bUlkLCBzdWJzZXRLZXksIGNvbmUgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAgICAgICBpZiAodGFyZ2V0ID09PSBcImVudGl0eVwiKSB7XG4gICAgICAgICAgICBlbnRpdHkuY29uZSA9IGNvbmU7XG4gICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwicHJvcFwiICYmIHByb3BOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gZW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gcHJvcE5hbWUpO1xuICAgICAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICAgICAgKHByb3AgYXMgeyBjb25lPzogQ29uZSB9KS5jb25lID0gY29uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJlbnVtXCIgJiYgZW51bUlkKSB7XG4gICAgICAgICAgICBlbnRpdHkuZW51bUNvbmVzW2VudW1JZF0gPSBjb25lO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcInN1YnNldFwiICYmIHN1YnNldEtleSkge1xuICAgICAgICAgICAgZW50aXR5LnN1YnNldENvbmVzW3N1YnNldEtleV0gPSBjb25lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgcHJlc2VydmVFeGlzdGluZz86IGJvb2xlYW47XG4gICAgICAgICAgb25seUVtcHR5PzogYm9vbGVhbjtcbiAgICAgICAgICBsb2NhbGU/OiBcImtvXCIgfCBcImVuXCIgfCBcImphXCI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2dlbmVyYXRlQ29uZXNcIiwgYXN5bmMgKHJlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBwcmVzZXJ2ZUV4aXN0aW5nLCBvbmx5RW1wdHksIGxvY2FsZSB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEVudGl0eSDsobTsnqwg7Jes67aAIO2ZleyduFxuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAgICAgICAvLyBsb2NhbGUg6riw67O46rCSOiBTb25hbXUuY29uZmlnLmkxOG4uZGVmYXVsdExvY2FsZSDsgqzsmqlcbiAgICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZUxvY2FsZSA9XG4gICAgICAgICAgICAgIGxvY2FsZSA/PyAoU29uYW11LmNvbmZpZy5pMThuLmRlZmF1bHRMb2NhbGUgYXMgXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiKTtcblxuICAgICAgICAgICAgLy8gQ29uZSDsg53shLFcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgICAgICAgICAgcHJlc2VydmVFeGlzdGluZzogcHJlc2VydmVFeGlzdGluZyA/PyB0cnVlLFxuICAgICAgICAgICAgICBvbmx5RW1wdHk6IG9ubHlFbXB0eSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgbG9jYWxlOiBlZmZlY3RpdmVMb2NhbGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblxuICAgICAgICAgICAgLy8gRW50aXR5IG5vdCBmb3VuZFxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoXCLsobTsnqztlZjsp4Ag7JWK64qUIEVudGl0eVwiKSkge1xuICAgICAgICAgICAgICByZXBseS5zdGF0dXMoNDA0KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogYEVudGl0eSBub3QgZm91bmQ6ICR7ZW50aXR5SWR9YCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQVBJIO2CpCDsl4bsnYxcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFwiQU5USFJPUElDX0FQSV9LRVkgbm90IGZvdW5kXCIpKSB7XG4gICAgICAgICAgICAgIHJlcGx5LnN0YXR1cyg1MDApO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVycm9yOiBcIkFQSSBrZXkgbm90IGNvbmZpZ3VyZWRcIixcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmF0ZSBsaW1pdFxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoXCJSYXRlIGxpbWl0IGV4Y2VlZGVkXCIpKSB7XG4gICAgICAgICAgICAgIHJlcGx5LnN0YXR1cyg0MjkpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVycm9yOiBcIlJhdGUgbGltaXQgZXhjZWVkZWQuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuXCIsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOq4sO2DgCDsl5Drn6xcbiAgICAgICAgICAgIHJlcGx5LnN0YXR1cyg1MDApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgQ29uZSBnZW5lcmF0aW9uIGZhaWxlZDogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvZ2V0VGFibGVDb2x1bW5zXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZW50aXR5SWQgfSA9IHJlcXVlc3QucXVlcnk7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGVudGl0eS5nZXRUYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgcmV0dXJuIHsgY29sdW1ucyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL21pZ3JhdGlvbnMvc3RhdHVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgbWlncmF0b3IuZ2V0U3RhdHVzKCk7XG5cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgYWN0aW9uOiBcImFwcGx5XCIgfCBcInJvbGxiYWNrXCIgfCBcInNoYWRvd1wiO1xuICAgICAgICAgIHRhcmdldHM6IChrZXlvZiBTb25hbXVEQkNvbmZpZylbXTtcbiAgICAgICAgICBmb3JjZT86IGJvb2xlYW47XG4gICAgICAgICAgZm9yY2VSZWFzb24/OiBzdHJpbmc7XG4gICAgICAgICAgcmVxdWVzdG9yPzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXG4gICAgICAgIFwiL2FwaS9taWdyYXRpb25zL3J1bkFjdGlvblwiLFxuICAgICAgICBhc3luYyAocmVxdWVzdCk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0IHwgU2xhY2tDb25maXJtUGVuZGluZ1Jlc3VsdD4gPT4ge1xuICAgICAgICAgIGNvbnN0IHsgYWN0aW9uLCB0YXJnZXRzLCBmb3JjZSwgZm9yY2VSZWFzb24sIHJlcXVlc3RvciB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJzaGFkb3dcIikge1xuICAgICAgICAgICAgcmV0dXJuIG1pZ3JhdG9yLnJ1blNoYWRvd1Rlc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTbGFjayDsirnsnbgg7LK07YGsIChhcHBseSDsi5zsl5Drp4wpXG4gICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJhcHBseVwiKSB7XG4gICAgICAgICAgICBjb25zdCBzbGFja0NvbmZpcm0gPSBuZXcgU2xhY2tDb25maXJtKCk7XG4gICAgICAgICAgICBjb25zdCByZXF1aXJlc0FwcHJvdmFsID0gdGFyZ2V0cy5zb21lKCh0KSA9PiBzbGFja0NvbmZpcm0uaXNUYXJnZXRSZXF1aXJlc0FwcHJvdmFsKHQpKTtcblxuICAgICAgICAgICAgLy8g66Gc7LusIERC7J24IOqyveyasCDsirnsnbgg7Iqk7YK1XG4gICAgICAgICAgICBjb25zdCBsb2NhbEhvc3RzID0gW1wibG9jYWxob3N0XCIsIFwiMTI3LjAuMC4xXCIsIFwiMC4wLjAuMFwiLCBcIjo6MVwiXTtcbiAgICAgICAgICAgIGNvbnN0IGlzTG9jYWxUYXJnZXQgPSB0YXJnZXRzLmV2ZXJ5KCh0YXJnZXQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q29uZmlnID0gU29uYW11LmRiQ29uZmlnW3RhcmdldF07XG4gICAgICAgICAgICAgIGNvbnN0IGhvc3QgPSAodGFyZ2V0Q29uZmlnPy5jb25uZWN0aW9uIGFzIHsgaG9zdD86IHN0cmluZyB9KT8uaG9zdCA/PyBcImxvY2FsaG9zdFwiO1xuICAgICAgICAgICAgICByZXR1cm4gbG9jYWxIb3N0cy5pbmNsdWRlcyhob3N0LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChyZXF1aXJlc0FwcHJvdmFsICYmIHNsYWNrQ29uZmlybS5pc0NvbmZpZ3VyZWQoKSAmJiAhaXNMb2NhbFRhcmdldCkge1xuICAgICAgICAgICAgICBjb25zdCB7IGNvbm5zIH0gPSBhd2FpdCBtaWdyYXRvci5nZXRTdGF0dXMoKTtcblxuICAgICAgICAgICAgICAvLyDrqqjrk6Ag7YOA6rKfIERC7JeQ7IScIHBlbmRpbmfsnbgg66eI7J206re466CI7J207IWY7J2YIO2Vqeynke2VqeydhCDqtaztlanri4jri6QuXG4gICAgICAgICAgICAgIGNvbnN0IHBlbmRpbmdNaWdyYXRpb25zID0gW1xuICAgICAgICAgICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgICAgICAgICBjb25uc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChjb25uKSA9PiB0YXJnZXRzLmluY2x1ZGVzKGNvbm4uY29ubktleSBhcyBrZXlvZiBTb25hbXVEQkNvbmZpZykpXG4gICAgICAgICAgICAgICAgICAgIC5mbGF0TWFwKChjb25uKSA9PiBjb25uLnBlbmRpbmcpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgaWYgKHBlbmRpbmdNaWdyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyDquLDsobQg7Iq57J24IOyalOyyrSDtmZXsnbhcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHNsYWNrQ29uZmlybS5nZXRFeGlzdGluZ1JlcXVlc3QocGVuZGluZ01pZ3JhdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAvLyDquLDsobQg7JqU7LKt7J20IOyeiOycvOuptCDsirnsnbgg7IOB7YOcIO2ZleyduFxuICAgICAgICAgICAgICAgICAgY29uc3QgeyBhcHByb3ZlZCwgcmVqZWN0ZWQgfSA9IGF3YWl0IHNsYWNrQ29uZmlybS5jaGVja0FwcHJvdmFsKFxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5jaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy50cyxcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChhcHByb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyDsirnsnbjrkKgg4oaSIOyLpO2WiVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oYWN0aW9uLCB0YXJnZXRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2xhY2tDb25maXJtLmxvZ0V4ZWN1dGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmNoYW5uZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RvcixcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLm1pZ3JhdGlvblJlamVjdGVkXCIpKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2Ug7KeE7ZaJXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNsYWNrQ29uZmlybS5mb3JjZUFwcHJvdmFsKFxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmNoYW5uZWwsXG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcudHMsXG4gICAgICAgICAgICAgICAgICAgICAgZm9yY2VSZWFzb24gPz8gXCLsgqzsnKAg7JeG7J2MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdG9yLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oYWN0aW9uLCB0YXJnZXRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2xhY2tDb25maXJtLmxvZ0V4ZWN1dGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmNoYW5uZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RvcixcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyDrjIDquLDspJFcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInBlbmRpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiBleGlzdGluZy5jaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICAgIHRzOiBleGlzdGluZy50cyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8g7IOIIOyKueyduCDsmpTssq0g67Cc7IahXG4gICAgICAgICAgICAgICAgICBjb25zdCB7IGNoYW5uZWwsIHRzIH0gPSBhd2FpdCBzbGFja0NvbmZpcm0ucG9zdEFwcHJvdmFsUmVxdWVzdChcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ01pZ3JhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHMsXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RvcixcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBzbGFja0NvbmZpcm0uc2F2ZVJlcXVlc3QocGVuZGluZ01pZ3JhdGlvbnMsIGNoYW5uZWwsIHRzKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWwsXG4gICAgICAgICAgICAgICAgICAgIHRzLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWlncmF0b3IucnVuQWN0aW9uKGFjdGlvbiwgdGFyZ2V0cyk7XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBjaGFubmVsOiBzdHJpbmc7XG4gICAgICAgICAgdHM6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9taWdyYXRpb25zL2NoZWNrQXBwcm92YWxcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBjaGFubmVsLCB0cyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICBjb25zdCBzbGFja0NvbmZpcm0gPSBuZXcgU2xhY2tDb25maXJtKCk7XG5cbiAgICAgICAgaWYgKCFzbGFja0NvbmZpcm0uaXNDb25maWd1cmVkKCkpIHtcbiAgICAgICAgICByZXR1cm4geyBhcHByb3ZlZDogdHJ1ZSwgcmVqZWN0ZWQ6IGZhbHNlIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2xhY2tDb25maXJtLmNoZWNrQXBwcm92YWwoY2hhbm5lbCwgdHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGNoYW5uZWw6IHN0cmluZztcbiAgICAgICAgICB0czogc3RyaW5nO1xuICAgICAgICAgIHJlYXNvbjogc3RyaW5nO1xuICAgICAgICAgIHJlcXVlc3Rvcj86IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9taWdyYXRpb25zL2ZvcmNlQXBwcm92YWxcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBjaGFubmVsLCB0cywgcmVhc29uLCByZXF1ZXN0b3IgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgY29uc3Qgc2xhY2tDb25maXJtID0gbmV3IFNsYWNrQ29uZmlybSgpO1xuXG4gICAgICAgIGlmICghc2xhY2tDb25maXJtLmlzQ29uZmlndXJlZCgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3Iuc2xhY2tDb25maXJtTm90Q29uZmlndXJlZFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBzbGFja0NvbmZpcm0uZm9yY2VBcHByb3ZhbChjaGFubmVsLCB0cywgcmVhc29uLCByZXF1ZXN0b3IpO1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgY29kZU5hbWVzOiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9taWdyYXRpb25zL2RlbENvZGVzXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29kZU5hbWVzIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIHJldHVybiBhd2FpdCBtaWdyYXRvci5kZWxDb2Rlcyhjb2RlTmFtZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0KFwiL2FwaS9taWdyYXRpb25zL2dlbmVyYXRlUHJlcGFyZWRDb2Rlc1wiLCBhc3luYyAoX3JlcXVlc3R0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBtaWdyYXRvci5nZW5lcmF0ZVByZXBhcmVkQ29kZXMoKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZHM6IHN0cmluZ1tdO1xuICAgICAgICAgIHRlbXBsYXRlS2V5czogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvc2NhZmZvbGRpbmcvZ2V0U3RhdHVzXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZW50aXR5SWRzLCB0ZW1wbGF0ZUtleXM6IF90ZW1wbGF0ZUtleXMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgaWYgKChlbnRpdHlJZHMgPz8gW10pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLmVudGl0eUlkc1JlcXVpcmVkXCIpKTtcbiAgICAgICAgfSBlbHNlIGlmICgoX3RlbXBsYXRlS2V5cyA/PyBbXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IudGVtcGxhdGVLZXlzUmVxdWlyZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc29ydGluZ1xuICAgICAgICBlbnRpdHlJZHMuc29ydCgoYSwgYikgPT4gKGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwKSk7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlS2V5cyA9IFRlbXBsYXRlS2V5Lm9wdGlvbnMuZmlsdGVyKCh0aykgPT4gX3RlbXBsYXRlS2V5cy5pbmNsdWRlcyh0aykpO1xuXG4gICAgICAgIGNvbnN0IGNvbWJpbmF0aW9ucyA9IGVudGl0eUlkcy5mbGF0TWFwKChlbnRpdHlJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZUtleXMubWFwKCh0ZW1wbGF0ZUtleSkgPT4gW2VudGl0eUlkLCB0ZW1wbGF0ZUtleV0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdGF0dXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGNvbWJpbmF0aW9ucy5tYXAoYXN5bmMgKFtlbnRpdHlJZCwgdGVtcGxhdGVLZXldKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHN1YlBhdGgsIGZ1bGxQYXRoLCBpc0V4aXN0cyB9ID0gYXdhaXQgU29uYW11LnN5bmNlci5jaGVja0V4aXN0c0dlbkNvZGUoXG4gICAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZUtleSBhcyBUZW1wbGF0ZUtleSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICAgICAgdGVtcGxhdGVLZXksXG4gICAgICAgICAgICAgIHN1YlBhdGgsXG4gICAgICAgICAgICAgIGZ1bGxQYXRoLFxuICAgICAgICAgICAgICBpc0V4aXN0cyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7IHN0YXR1c2VzIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgIHRlbXBsYXRlS2V5OiBzdHJpbmc7XG4gICAgICAgICAgICBlbnVtSWQ/OiBzdHJpbmc7XG4gICAgICAgICAgICBvdmVyd3JpdGU/OiBib29sZWFuO1xuICAgICAgICAgIH1bXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zY2FmZm9sZGluZy9nZW5lcmF0ZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3Iub3B0aW9uc1JlcXVpcmVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDEuIOuqqOuToCDthZztlIzrpr/sl5DshJwg7ZWE7JqU7ZWcIGRpY3Qg7YKk66W8IOyImOynkVxuICAgICAgICBjb25zdCBrZXlzID0gb3B0aW9ucy5mbGF0TWFwKCh7IHRlbXBsYXRlS2V5IH0pID0+IHtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlTWFuYWdlci5nZXQodGVtcGxhdGVLZXkpO1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5nZXRSZXF1aXJlZERpY3RLZXlzKCkgPz8gW107XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIDIuIHRhcmdldOuzhOuhnCBlbnN1cmVEaWN0S2V5cyDtmLjstpwgKOyInOywqCDsspjrpqwpXG4gICAgICAgIGF3YWl0IHNvbmFtdURpY3Rpb25hcnkuZW5zdXJlRGljdEtleXMoWy4uLm5ldyBTZXQoa2V5cyldKTtcblxuICAgICAgICAvLyAzLiDthZztlIzrpr8g7IOd7ISxICjrs5HroKwg7LKY66asKVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBvcHRpb25zLm1hcChhc3luYyAoeyBlbnRpdHlJZCwgdGVtcGxhdGVLZXksIGVudW1JZCwgb3ZlcndyaXRlIH0pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVLZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICAgICAgICBlbnVtSWQsXG4gICAgICAgICAgICAgICAgfSBhcyB7XG4gICAgICAgICAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgZW51bUlkPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgb3ZlcndyaXRlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGlmIChpc1NvRXhjZXB0aW9uKGUpICYmIGUuc3RhdHVzQ29kZSA9PT0gNTQxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5maWx0ZXIobm9uTnVsbGFibGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlVW5hdmFpbGFibGVFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuYWxsRmlsZXNHZW5lcmF0ZWRcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgb3B0aW9uOiB7XG4gICAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgICAgdGVtcGxhdGVLZXk6IHN0cmluZztcbiAgICAgICAgICAgIGVudW1JZD86IHN0cmluZztcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3NjYWZmb2xkaW5nL3ByZXZpZXdcIiwgYXN5bmMgKHJlcXVlc3QpOiBQcm9taXNlPHsgcGF0aEFuZENvZGVzOiBQYXRoQW5kQ29kZVtdIH0+ID0+IHtcbiAgICAgICAgY29uc3QgeyBvcHRpb24gfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgdGVtcGxhdGVLZXksIC4uLnRlbXBsYXRlT3B0aW9ucyB9ID0gb3B0aW9uO1xuICAgICAgICAgIGNvbnN0IHBhdGhBbmRDb2RlcyA9IGF3YWl0IFNvbmFtdS5zeW5jZXIucmVuZGVyVGVtcGxhdGUoXG4gICAgICAgICAgICB0ZW1wbGF0ZUtleSBhcyBUZW1wbGF0ZUtleSxcbiAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9ucyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHsgcGF0aEFuZENvZGVzIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdChcIi9hcGkvZml4dHVyZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IHNvdXJjZURCLCB0YXJnZXREQiwgc2VhcmNoLCBkdXBsaWNhdGVDaGVjayB9ID0gcmVxdWVzdC5ib2R5IGFzIHtcbiAgICAgICAgICBzb3VyY2VEQjoga2V5b2YgU29uYW11REJDb25maWc7XG4gICAgICAgICAgdGFyZ2V0REI6IGtleW9mIFNvbmFtdURCQ29uZmlnO1xuICAgICAgICAgIHNlYXJjaDogRml4dHVyZVNlYXJjaE9wdGlvbnM7XG4gICAgICAgICAgZHVwbGljYXRlQ2hlY2s/OiBEdXBsaWNhdGVDaGVja09wdGlvbnM7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIEZpeHR1cmVNYW5hZ2VyLmdldEZpeHR1cmVzKHNvdXJjZURCLCB0YXJnZXREQiwgc2VhcmNoLCBkdXBsaWNhdGVDaGVjayk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3QoXCIvYXBpL2ZpeHR1cmUvaW1wb3J0XCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZGIsIGZpeHR1cmVzIH0gPSByZXF1ZXN0LmJvZHkgYXMge1xuICAgICAgICAgIGRiOiBrZXlvZiBTb25hbXVEQkNvbmZpZztcbiAgICAgICAgICBmaXh0dXJlczogRml4dHVyZVJlY29yZFtdO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBGaXh0dXJlTWFuYWdlci5pbnNlcnRGaXh0dXJlcyhkYiwgZml4dHVyZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0KFwiL2FwaS9maXh0dXJlL2FkZEZpeHR1cmVMb2FkZXJcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb2RlIH0gPSByZXF1ZXN0LmJvZHkgYXMgeyBjb2RlOiBzdHJpbmcgfTtcblxuICAgICAgICByZXR1cm4gRml4dHVyZU1hbmFnZXIuYWRkRml4dHVyZUxvYWRlcihjb2RlKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9pMThuL2RpY3Rpb25hcnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXR1cm4gc29uYW11RGljdGlvbmFyeS5nZXREaWN0aW9uYXJ5KCk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldChcIi9hcGkvaTE4bi9leHBvcnRcIiwgYXN5bmMgKF9yZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICBjb25zdCB7IGZpbGVuYW1lLCBidWZmZXIgfSA9IGF3YWl0IHNvbmFtdURpY3Rpb25hcnkuZXhwb3J0VG9FeGNlbCgpO1xuICAgICAgICByZXBseVxuICAgICAgICAgIC5oZWFkZXIoXG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICAgICAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiLFxuICAgICAgICAgIClcbiAgICAgICAgICAuaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvblwiLCBgYXR0YWNobWVudDsgZmlsZW5hbWU9XCIke2ZpbGVuYW1lfVwiYClcbiAgICAgICAgICAuc2VuZChidWZmZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0KFwiL2FwaS9pMThuL2ltcG9ydFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVxdWVzdC5maWxlKCk7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLmZpbGVOb3RVcGxvYWRlZFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgZGF0YS50b0J1ZmZlcigpO1xuICAgICAgICByZXR1cm4gc29uYW11RGljdGlvbmFyeS5pbXBvcnRGcm9tRXhjZWwoYnVmZmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBvbGRLZXk6IHN0cmluZztcbiAgICAgICAgICBuZXdLZXk6IHN0cmluZztcbiAgICAgICAgICBzb3VyY2U6IFwiZW50aXR5XCIgfCBcInByb2plY3RcIiB8IFwic29uYW11XCI7XG4gICAgICAgICAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2kxOG4vdXBkYXRlXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGF3YWl0IHNvbmFtdURpY3Rpb25hcnkudXBkYXRlRW50cnkocmVxdWVzdC5ib2R5KTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICAgIHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9pMThuL2NyZWF0ZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBhd2FpdCBzb25hbXVEaWN0aW9uYXJ5LmNyZWF0ZUVudHJ5KHJlcXVlc3QuYm9keSk7XG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9pMThuL2RlbGV0ZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBhd2FpdCBzb25hbXVEaWN0aW9uYXJ5LmRlbGV0ZUVudHJ5KHJlcXVlc3QuYm9keS5rZXkpO1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8eyBCb2R5OiB7IGtleXM6IHN0cmluZ1tdIH0gfT4oXCIvYXBpL2kxOG4vY2hlY2tVc2FnZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gc29uYW11RGljdGlvbmFyeS5jaGVja1VzYWdlKHJlcXVlc3QuYm9keS5rZXlzKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUYXNrcyBBUElcbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL3Rhc2tzL3N0YXR1c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgU29uYW11LndvcmtmbG93cztcbiAgICAgICAgICByZXR1cm4geyBhY3RpdmU6IHRydWUgfTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldChcIi9hcGkvdGFza3Mvd29ya2Zsb3dEZWZpbml0aW9uc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb25zID0gU29uYW11LndvcmtmbG93cy53b3JrZmxvd0RlZmluaXRpb25zO1xuICAgICAgICByZXR1cm4geyBkZWZpbml0aW9ucyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIGxpbWl0Pzogc3RyaW5nO1xuICAgICAgICAgIGFmdGVyPzogc3RyaW5nO1xuICAgICAgICAgIGJlZm9yZT86IHN0cmluZztcbiAgICAgICAgICBvcmRlcj86IFwiYXNjXCIgfCBcImRlc2NcIjtcbiAgICAgICAgICBzdGF0dXM/OiBzdHJpbmc7XG4gICAgICAgICAgd29ya2Zsb3dOYW1lPzogc3RyaW5nO1xuICAgICAgICAgIGNyZWF0ZWRBZnRlcj86IHN0cmluZztcbiAgICAgICAgICBjcmVhdGVkQmVmb3JlPzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3Rhc2tzL3dvcmtmbG93UnVuc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWNrZW5kID0gU29uYW11LndvcmtmbG93cy5iYWNrZW5kO1xuICAgICAgICBjb25zdCB7IGxpbWl0LCBhZnRlciwgYmVmb3JlLCBvcmRlciwgc3RhdHVzLCB3b3JrZmxvd05hbWUsIGNyZWF0ZWRBZnRlciwgY3JlYXRlZEJlZm9yZSB9ID1cbiAgICAgICAgICByZXF1ZXN0LnF1ZXJ5O1xuICAgICAgICByZXR1cm4gYmFja2VuZC5saXN0V29ya2Zsb3dSdW5zKHtcbiAgICAgICAgICBsaW1pdDogbGltaXQgPyBOdW1iZXIucGFyc2VJbnQobGltaXQsIDEwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhZnRlcixcbiAgICAgICAgICBiZWZvcmUsXG4gICAgICAgICAgb3JkZXIsXG4gICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPyBzdGF0dXMuc3BsaXQoXCIsXCIpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdvcmtmbG93TmFtZTogd29ya2Zsb3dOYW1lIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBjcmVhdGVkQWZ0ZXI6IGNyZWF0ZWRBZnRlciA/IG5ldyBEYXRlKGNyZWF0ZWRBZnRlcikgOiB1bmRlZmluZWQsXG4gICAgICAgICAgY3JlYXRlZEJlZm9yZTogY3JlYXRlZEJlZm9yZSA/IG5ldyBEYXRlKGNyZWF0ZWRCZWZvcmUpIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0PHtcbiAgICAgICAgUGFyYW1zOiB7IGlkOiBzdHJpbmcgfTtcbiAgICAgIH0+KFwiL2FwaS90YXNrcy93b3JrZmxvd1J1bnMvOmlkXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmQgPSBTb25hbXUud29ya2Zsb3dzLmJhY2tlbmQ7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93UnVuID0gYXdhaXQgYmFja2VuZC5nZXRXb3JrZmxvd1J1bih7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZDogcmVxdWVzdC5wYXJhbXMuaWQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXdvcmtmbG93UnVuKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXb3JrZmxvdyBydW4gbm90IGZvdW5kOiAke3JlcXVlc3QucGFyYW1zLmlkfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3b3JrZmxvd1J1bjtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIFBhcmFtczogeyBpZDogc3RyaW5nIH07XG4gICAgICB9PihcIi9hcGkvdGFza3Mvd29ya2Zsb3dSdW5zLzppZC9jYW5jZWxcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFja2VuZCA9IFNvbmFtdS53b3JrZmxvd3MuYmFja2VuZDtcbiAgICAgICAgcmV0dXJuIGJhY2tlbmQuY2FuY2VsV29ya2Zsb3dSdW4oe1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQ6IHJlcXVlc3QucGFyYW1zLmlkLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIFBhcmFtczogeyBpZDogc3RyaW5nIH07XG4gICAgICB9PihcIi9hcGkvdGFza3Mvd29ya2Zsb3dSdW5zLzppZC9wYXVzZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWNrZW5kID0gU29uYW11LndvcmtmbG93cy5iYWNrZW5kO1xuICAgICAgICByZXR1cm4gYmFja2VuZC5wYXVzZVdvcmtmbG93UnVuKHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkOiByZXF1ZXN0LnBhcmFtcy5pZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBQYXJhbXM6IHsgaWQ6IHN0cmluZyB9O1xuICAgICAgfT4oXCIvYXBpL3Rhc2tzL3dvcmtmbG93UnVucy86aWQvcmVzdW1lXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmQgPSBTb25hbXUud29ya2Zsb3dzLmJhY2tlbmQ7XG4gICAgICAgIHJldHVybiBiYWNrZW5kLnJlc3VtZVdvcmtmbG93UnVuKHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkOiByZXF1ZXN0LnBhcmFtcy5pZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFBhcmFtczogeyBpZDogc3RyaW5nIH07XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgbGltaXQ/OiBzdHJpbmc7XG4gICAgICAgICAgYWZ0ZXI/OiBzdHJpbmc7XG4gICAgICAgICAgYmVmb3JlPzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3Rhc2tzL3dvcmtmbG93UnVucy86aWQvc3RlcHNcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFja2VuZCA9IFNvbmFtdS53b3JrZmxvd3MuYmFja2VuZDtcbiAgICAgICAgY29uc3QgeyBsaW1pdCwgYWZ0ZXIsIGJlZm9yZSB9ID0gcmVxdWVzdC5xdWVyeTtcbiAgICAgICAgcmV0dXJuIGJhY2tlbmQubGlzdFN0ZXBBdHRlbXB0cyh7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZDogcmVxdWVzdC5wYXJhbXMuaWQsXG4gICAgICAgICAgbGltaXQ6IGxpbWl0ID8gTnVtYmVyLnBhcnNlSW50KGxpbWl0LCAxMCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYWZ0ZXIsXG4gICAgICAgICAgYmVmb3JlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIEhlYWx0aCBDaGVjayBBUElcbiAgICAgICAqIE1DUCDrj4TqtazqsIAgU29uYW11IOyEnOuyhOulvCDsnpDrj5kg6rCQ7KeA7ZWY6riwIOychO2VnCDsl5Trk5ztj6zsnbjtirhcbiAgICAgICAqL1xuICAgICAgc2VydmVyLmdldChcIi9hcGkvc29uYW11L2hlYWx0aFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gcmVxdWVzdC5zZXJ2ZXIuc2VydmVyLmFkZHJlc3MoKTtcbiAgICAgICAgY29uc3QgcG9ydCA9IGFkZHJlc3MgJiYgdHlwZW9mIGFkZHJlc3MgPT09IFwib2JqZWN0XCIgPyAoYWRkcmVzcyBhcyBBZGRyZXNzSW5mbykucG9ydCA6IDA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgICBwcm9qZWN0OiBwcm9jZXNzLmN3ZCgpLnNwbGl0KFwiL1wiKS5wb3AoKSB8fCBcInVua25vd25cIixcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogRml4dHVyZSDsg53shLEgQVBJXG4gICAgICAgKi9cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eTogc3RyaW5nO1xuICAgICAgICAgIGNvdW50PzogbnVtYmVyO1xuICAgICAgICAgIG92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgIHRhcmdldERiPzogXCJmaXh0dXJlXCIgfCBcInRlc3RcIjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zb25hbXUvZml4dHVyZS9nZW5lcmF0ZVwiLCBhc3luYyAocmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgY29uc3QgeyBlbnRpdHksIGNvdW50ID0gMSwgb3ZlcnJpZGVzLCB0YXJnZXREYiA9IFwiZml4dHVyZVwiIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgLy8g7YOA6rKfIERCIOyEpOyglSDqsIDsoLjsmKTquLBcbiAgICAgICAgY29uc3QgZGJDb25maWcgPSB0YXJnZXREYiA9PT0gXCJmaXh0dXJlXCIgPyBTb25hbXUuZGJDb25maWcuZml4dHVyZSA6IFNvbmFtdS5kYkNvbmZpZy50ZXN0O1xuXG4gICAgICAgIC8vIEtuZXgg7J247Iqk7YS07IqkIOyDneyEsVxuICAgICAgICBjb25zdCBkYiA9IGNyZWF0ZUtuZXhJbnN0YW5jZShkYkNvbmZpZyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBGaXh0dXJlR2VuZXJhdG9yIOyDneyEsVxuICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBGaXh0dXJlR2VuZXJhdG9yKGRiLCBkYiwgdGFyZ2V0RGIsIEVudGl0eU1hbmFnZXIpO1xuXG4gICAgICAgICAgLy8g64uo7J28IEVudGl0eSDrsLDsuZgg7IOd7ISxXG4gICAgICAgICAgY29uc3QgZml4dHVyZXMgPSBhd2FpdCBnZW5lcmF0b3IuZ2VuZXJhdGVCYXRjaChbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgY291bnQsXG4gICAgICAgICAgICAgIG92ZXJyaWRlczogb3ZlcnJpZGVzID8/IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgY291bnQ6IGZpeHR1cmVzLmxlbmd0aCxcbiAgICAgICAgICAgIGZpeHR1cmVzLFxuICAgICAgICAgICAgdGFyZ2V0RGIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXBseS5zdGF0dXMoNDAwKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyoqXG4gICAgICAgKiBGaXh0dXJlIOuNsOydtO2EsCDtg5Dsg4kgQVBJXG4gICAgICAgKi9cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eTogc3RyaW5nO1xuICAgICAgICAgIHN0cmF0ZWd5OiBcInNhbXBsZVwiIHwgXCJyZWNlbnRcIiB8IFwicmFuZG9tXCIgfCBcInF1ZXJ5XCI7XG4gICAgICAgICAgbGltaXQ/OiBudW1iZXI7XG4gICAgICAgICAgd2hlcmU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zb25hbXUvZml4dHVyZS9leHBsb3JlXCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0eSwgc3RyYXRlZ3ksIGxpbWl0ID0gMTAsIHdoZXJlIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgLy8gRml4dHVyZSBEQiDshKTsoJUg6rCA7KC47Jik6riwXG4gICAgICAgIGNvbnN0IGZpeHR1cmVEYkNvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlO1xuXG4gICAgICAgIC8vIEtuZXgg7J247Iqk7YS07IqkIOyDneyEsVxuICAgICAgICBjb25zdCBmaXh0dXJlRGIgPSBjcmVhdGVLbmV4SW5zdGFuY2UoZml4dHVyZURiQ29uZmlnKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIERhdGFFeHBsb3JlciDsg53shLFcbiAgICAgICAgICBjb25zdCBleHBsb3JlciA9IG5ldyBEYXRhRXhwbG9yZXIoZml4dHVyZURiLCBFbnRpdHlNYW5hZ2VyKTtcblxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBleHBsb3Jlci5leHBsb3JlKGVudGl0eSwge1xuICAgICAgICAgICAgc3RyYXRlZ3ksXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgIHdoZXJlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICBzdHJhdGVneSxcbiAgICAgICAgICAgIGNvdW50OiBkYXRhLmxlbmd0aCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXBseS5zdGF0dXMoNDAwKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgYXdhaXQgZml4dHVyZURiLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogRml4dHVyZSDrjbDsnbTthLAg6rCA7KC47Jik6riwIChmZXRjaCkgQVBJXG4gICAgICAgKiBwcm9kdWN0aW9uL2RldmVsb3BtZW50IERC7JeQ7IScIOyLpOygnCDrjbDsnbTthLDrpbwgZml4dHVyZSBEQuuhnCBpbXBvcnRcbiAgICAgICAqL1xuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5OiBzdHJpbmc7XG4gICAgICAgICAgc3RyYXRlZ3k/OiBcInNhbXBsZVwiIHwgXCJyZWNlbnRcIiB8IFwicmFuZG9tXCIgfCBcInF1ZXJ5XCI7XG4gICAgICAgICAgbGltaXQ/OiBudW1iZXI7XG4gICAgICAgICAgaW5jbHVkZVJlbGF0aW9ucz86IGJvb2xlYW47XG4gICAgICAgICAgbWF4RGVwdGg/OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvc29uYW11L2ZpeHR1cmUvZmV0Y2hcIiwgYXN5bmMgKHJlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgc3RyYXRlZ3kgPSBcInJlY2VudFwiLFxuICAgICAgICAgIGxpbWl0ID0gMTAsXG4gICAgICAgICAgaW5jbHVkZVJlbGF0aW9ucyA9IHRydWUsXG4gICAgICAgICAgbWF4RGVwdGggPSAyLFxuICAgICAgICB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgIC8vIFNvdXJjZSBEQiAocHJvZHVjdGlvbi9kZXZlbG9wbWVudCkgLSDsnb3quLAg7KCE7JqpXG4gICAgICAgIGNvbnN0IHNvdXJjZURiID0gREIuZ2V0REIoXCJyXCIpO1xuXG4gICAgICAgIC8vIFRhcmdldCBEQiAoZml4dHVyZSlcbiAgICAgICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEZpeHR1cmVHZW5lcmF0b3Ig7IOd7ISxXG4gICAgICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IEZpeHR1cmVHZW5lcmF0b3Ioc291cmNlRGIsIGZpeHR1cmVEYiwgXCJmaXh0dXJlXCIsIEVudGl0eU1hbmFnZXIpO1xuXG4gICAgICAgICAgLy8gcHJvZHVjdGlvbiDrjbDsnbTthLDrpbwgZml4dHVyZSBEQuuhnCBpbXBvcnRcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgZ2VuZXJhdG9yLmltcG9ydEZyb21Tb3VyY2UoZW50aXR5LCB7XG4gICAgICAgICAgICBzdHJhdGVneSxcbiAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgaW5jbHVkZVJlbGF0aW9ucyxcbiAgICAgICAgICAgIG1heERlcHRoLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICBzdHJhdGVneSxcbiAgICAgICAgICAgIGNvdW50OiByZXN1bHRzLmxlbmd0aCxcbiAgICAgICAgICAgIGltcG9ydGVkOiByZXN1bHRzLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVwbHkuc3RhdHVzKDQwMCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIHNvdXJjZURi64qUIFNvbmFtdeqwgCDqtIDrpqztlZjrr4DroZwgZGVzdHJvee2VmOyngCDslYrsnYxcbiAgICAgICAgICBhd2FpdCBmaXh0dXJlRGIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyoqXG4gICAgICAgKiBGaXh0dXJlIOuNsOydtO2EsCDsgq3soJwgKGNsZWFuKSBBUElcbiAgICAgICAqIEZLIOyInOyEnOulvCDqs6DroKTtlZjsl6wg7JWI7KCE7ZWY6rKMIOyCreygnFxuICAgICAgICovXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdGllcz86IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3NvbmFtdS9maXh0dXJlL2NsZWFuXCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0aWVzIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgLy8gRml4dHVyZSBEQiDsl7DqsrBcbiAgICAgICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIOyCreygnO2VoCBFbnRpdHkg66qp66GdIOqysOyglVxuICAgICAgICAgIGNvbnN0IHRhcmdldEVudGl0aWVzID1cbiAgICAgICAgICAgIGVudGl0aWVzICYmIGVudGl0aWVzLmxlbmd0aCA+IDAgPyBlbnRpdGllcyA6IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICAgICAgICAvLyBFbnRpdHkgSUTrpbwg7YWM7J2067iU66qF7Jy866GcIOuzgO2ZmCAoc25ha2VfY2FzZSDrs7XsiJjtmJUpXG4gICAgICAgICAgY29uc3QgdGFibGVOYW1lcyA9IHRhcmdldEVudGl0aWVzLm1hcCgoZW50aXR5SWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICAgIHJldHVybiBlbnRpdHkudGFibGU7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBQb3N0Z3JlU1FMOiBUUlVOQ0FURSBDQVNDQURF66GcIEZLIOyInOyEnCDrrLTqtIDtlZjqsowg7JWI7KCE7ZWY6rKMIOyCreygnFxuICAgICAgICAgIC8vIENBU0NBREUg7Ji17IWY7Jy866GcIOydmOyhtOyEsSDsnojripQg642w7J207YSw64+EIO2VqOq7mCDsgq3soJxcbiAgICAgICAgICBhd2FpdCBmaXh0dXJlRGIucmF3KFxuICAgICAgICAgICAgYFRSVU5DQVRFIFRBQkxFICR7dGFibGVOYW1lcy5tYXAoKHQpID0+IGBcIiR7dH1cImApLmpvaW4oXCIsIFwiKX0gUkVTVEFSVCBJREVOVElUWSBDQVNDQURFYCxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBjbGVhbmVkOiB0YWJsZU5hbWVzLFxuICAgICAgICAgICAgY291bnQ6IHRhYmxlTmFtZXMubGVuZ3RoLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVwbHkuc3RhdHVzKDQwMCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGZpeHR1cmVEYi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyB1aS13ZWIg67mM65OcIO2MjOydvCDshJzruZlcbiAgICAgIGNvbnN0IHVpRGlzdFBhdGggPSBwYXRoLnJlc29sdmUoaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLi91aS13ZWJcIik7XG5cbiAgICAgIC8vIOygleyggSDtjIzsnbwg7ISc67mZOiDro6jtirgg7Y+0642UIOyghOyytCAoYXNzZXRzLCBzZXR0aW5nLnN2ZyDrk7EpXG4gICAgICBzZXJ2ZXIucmVnaXN0ZXIoYXdhaXQgaW1wb3J0KFwiQGZhc3RpZnkvc3RhdGljXCIpLCB7XG4gICAgICAgIHJvb3Q6IHVpRGlzdFBhdGgsXG4gICAgICAgIHByZWZpeDogXCIvXCIsXG4gICAgICAgIGRlY29yYXRlUmVwbHk6IGZhbHNlLFxuICAgICAgICB3aWxkY2FyZDogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgLy8gU1BBIGZhbGxiYWNrIC0g7KCV7KCBIO2MjOydvOydtCDsl4bripQg66qo65OgIOqyveuhnOuKlCBpbmRleC5odG1s66GcXG4gICAgICBzZXJ2ZXIuZ2V0KFwiKlwiLCBhc3luYyAoX3JlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIHJlcGx5LmhlYWRlcnMoeyBcIkNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0pLnNlbmQoXG4gICAgICAgICAgZnNcbiAgICAgICAgICAgIC5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKHVpRGlzdFBhdGgsIFwiaW5kZXguaHRtbFwiKSlcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAucmVwbGFjZShcInt7cHJvamVjdE5hbWV9fVwiLCBTb25hbXUuY29uZmlnLnByb2plY3ROYW1lID8/IFwiVW5rbm93blNvbmFtdVByb2plY3RcIiksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHsgcHJlZml4OiBcIi9zb25hbXUtdWlcIiB9LFxuICApO1xufVxuIl0sIm5hbWVzIjpbImV4ZWNTeW5jIiwiZnMiLCJpbmZsZWN0aW9uIiwicGF0aCIsInJhbmdlIiwiU29uYW11IiwiREIiLCJjcmVhdGVLbmV4SW5zdGFuY2UiLCJTRCIsInNvbmFtdURpY3Rpb25hcnkiLCJFbnRpdHlNYW5hZ2VyIiwiQmFkUmVxdWVzdEV4Y2VwdGlvbiIsImlzU29FeGNlcHRpb24iLCJTZXJ2aWNlVW5hdmFpbGFibGVFeGNlcHRpb24iLCJNaWdyYXRvciIsIlNsYWNrQ29uZmlybSIsIlRlbXBsYXRlTWFuYWdlciIsIkRhdGFFeHBsb3JlciIsIkZpeHR1cmVHZW5lcmF0b3IiLCJGaXh0dXJlTWFuYWdlciIsIkJVSUxUX0lOX1RZUEVfSURTIiwiVGVtcGxhdGVLZXkiLCJub25OdWxsYWJsZSIsInNldEFpQXBpIiwic29uYW11VUlBcGlQbHVnaW4iLCJmYXN0aWZ5IiwicmVnaXN0ZXIiLCJzZXJ2ZXIiLCJtaWdyYXRvciIsIndhaXRGb3JITVJDb21wbGV0ZWQiLCJmbiIsIndhaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsImhhbmRsZXIiLCJjbGVhclRpbWVvdXQiLCJzeW5jZXIiLCJldmVudEVtaXR0ZXIiLCJvZmYiLCJvbmNlIiwicmVzdWx0IiwiZ2V0IiwiY29uZmlnIiwicmVxdWVzdCIsImVudGl0eUlkIiwicHJlc2V0IiwiYWJzUGF0aCIsInF1ZXJ5IiwidGFyZ2V0UGF0aCIsImVudGl0eSIsIm5hbWVzIiwiYXBpUm9vdFBhdGgiLCJmaWxlbmFtZSIsInBhcmVudEZzIiwib3JpZ2luIiwiZ2xvc3NhcnkiLCJNYXAiLCJnZXRBbGxJZHMiLCJ0aXRsZSIsInNldCIsInVuZGVyc2NvcmUiLCJpZCIsInBsdXJhbGl6ZSIsInByb3BzIiwiZm9yRWFjaCIsInByb3AiLCJoYXMiLCJuYW1lIiwiZGVzYyIsInJlcGxhY2UiLCJzdWdnZXN0ZWQiLCJ3b3JkcyIsInNwbGl0IiwiY29tYmluYXRpb25zIiwibGVuZ3RoIiwiZmxhdE1hcCIsImxlbiIsImlkeCIsInciLCJzbGljZSIsImpvaW4iLCJSRVBMQUNFRF9QUkVGSVgiLCJyZW1haW5BcnIiLCJjb21iIiwicmVtYWluU3RyIiwiaW5jbHVkZXMiLCJtYXAiLCJyIiwic3RhcnRzV2l0aCIsInRvVXBwZXJDYXNlIiwiZW50aXR5SWRzIiwiZmxhdHRlblN1YnNldFJvd3MiLCJzdWJzZXRSb3dzIiwic3Vic2V0Um93IiwiY2hpbGRyZW4iLCJzUm93IiwiZW50aXRpZXMiLCJhbGwiLCJnZXRTdWJzZXRSb3dzIiwic29ydCIsImEiLCJiIiwiYUlkIiwicGFyZW50SWQiLCJiSWQiLCJ1bmRlZmluZWQiLCJmaWx0ZXIiLCJyZWxvYWQiLCJhdXRvbG9hZFR5cGVzIiwidHlwZUlkcyIsInByb2plY3RUeXBlSWRzIiwiT2JqZWN0IiwiZW50cmllcyIsInR5cGVzIiwiX3R5cGVJZCIsInpvZFR5cGUiLCJfem9kIiwiZGVmIiwidHlwZSIsInR5cGVJZCIsIl96b2RUeXBlIiwiYnVpbHRJblR5cGVJZHMiLCJhbGxUeXBlSWRzIiwiZW51bUlkcyIsImtleXMiLCJlbnVtTGFiZWxzIiwicG9zdCIsImZvcm0iLCJib2R5IiwiY3JlYXRlRW50aXR5IiwiZGVsRW50aXR5IiwibmV3VmFsdWVzIiwidGFibGUiLCJzYXZlIiwic3Vic2V0S2V5IiwiZmllbGRzIiwiZmllbGRzSW50ZXJuYWwiLCJzdWJzZXRzIiwic3Vic2V0c0ludGVybmFsIiwidXBkYXRlZCIsInVwZGF0ZWRJbnRlcm5hbCIsImF0IiwibmV3UHJvcCIsImNyZWF0ZVByb3AiLCJtb2RpZnlQcm9wIiwiZGVsUHJvcCIsInRvIiwibW92ZVByb3AiLCJpbmRleGVzIiwibmV3RW51bUlkIiwiRXJyb3IiLCJlbmRzV2l0aCIsImFjdGl2ZSIsImhpZGRlbiIsImVudW1JZCIsImlzRXhpc3RzIiwic29tZSIsImFmdGVyIiwiYmVmb3JlIiwiaXNSZWZlcmVuY2VkIiwidGFyZ2V0IiwicHJvcE5hbWUiLCJjb25lIiwiZmluZCIsInAiLCJlbnVtQ29uZXMiLCJzdWJzZXRDb25lcyIsInJlcGx5IiwicHJlc2VydmVFeGlzdGluZyIsIm9ubHlFbXB0eSIsImxvY2FsZSIsImVmZmVjdGl2ZUxvY2FsZSIsImkxOG4iLCJkZWZhdWx0TG9jYWxlIiwiZ2VuZXJhdGVDb25lcyIsImVycm9yIiwibWVzc2FnZSIsIlN0cmluZyIsInN0YXR1cyIsInN1Y2Nlc3MiLCJjb2x1bW5zIiwiZ2V0VGFibGVDb2x1bW5zIiwiZ2V0U3RhdHVzIiwiYWN0aW9uIiwidGFyZ2V0cyIsImZvcmNlIiwiZm9yY2VSZWFzb24iLCJyZXF1ZXN0b3IiLCJydW5TaGFkb3dUZXN0Iiwic2xhY2tDb25maXJtIiwicmVxdWlyZXNBcHByb3ZhbCIsInQiLCJpc1RhcmdldFJlcXVpcmVzQXBwcm92YWwiLCJsb2NhbEhvc3RzIiwiaXNMb2NhbFRhcmdldCIsImV2ZXJ5IiwidGFyZ2V0Q29uZmlnIiwiZGJDb25maWciLCJob3N0IiwiY29ubmVjdGlvbiIsInRvTG93ZXJDYXNlIiwiaXNDb25maWd1cmVkIiwiY29ubnMiLCJwZW5kaW5nTWlncmF0aW9ucyIsIlNldCIsImNvbm4iLCJjb25uS2V5IiwicGVuZGluZyIsImV4aXN0aW5nIiwiZ2V0RXhpc3RpbmdSZXF1ZXN0IiwiYXBwcm92ZWQiLCJyZWplY3RlZCIsImNoZWNrQXBwcm92YWwiLCJjaGFubmVsIiwidHMiLCJydW5BY3Rpb24iLCJsb2dFeGVjdXRpb24iLCJmb3JjZUFwcHJvdmFsIiwicG9zdEFwcHJvdmFsUmVxdWVzdCIsInNhdmVSZXF1ZXN0IiwicmVhc29uIiwiY29kZU5hbWVzIiwiZGVsQ29kZXMiLCJfcmVxdWVzdHQiLCJnZW5lcmF0ZVByZXBhcmVkQ29kZXMiLCJ0ZW1wbGF0ZUtleXMiLCJfdGVtcGxhdGVLZXlzIiwib3B0aW9ucyIsInRrIiwidGVtcGxhdGVLZXkiLCJzdGF0dXNlcyIsInN1YlBhdGgiLCJmdWxsUGF0aCIsImNoZWNrRXhpc3RzR2VuQ29kZSIsInRlbXBsYXRlIiwiZ2V0UmVxdWlyZWREaWN0S2V5cyIsImVuc3VyZURpY3RLZXlzIiwib3ZlcndyaXRlIiwiZ2VuZXJhdGVUZW1wbGF0ZSIsImUiLCJzdGF0dXNDb2RlIiwiY29uc29sZSIsIm9wdGlvbiIsInRlbXBsYXRlT3B0aW9ucyIsInBhdGhBbmRDb2RlcyIsInJlbmRlclRlbXBsYXRlIiwic291cmNlREIiLCJ0YXJnZXREQiIsInNlYXJjaCIsImR1cGxpY2F0ZUNoZWNrIiwiZ2V0Rml4dHVyZXMiLCJkYiIsImZpeHR1cmVzIiwiaW5zZXJ0Rml4dHVyZXMiLCJjb2RlIiwiYWRkRml4dHVyZUxvYWRlciIsImdldERpY3Rpb25hcnkiLCJfcmVxdWVzdCIsImJ1ZmZlciIsImV4cG9ydFRvRXhjZWwiLCJoZWFkZXIiLCJzZW5kIiwiZGF0YSIsImZpbGUiLCJ0b0J1ZmZlciIsImltcG9ydEZyb21FeGNlbCIsInVwZGF0ZUVudHJ5IiwiY3JlYXRlRW50cnkiLCJkZWxldGVFbnRyeSIsImtleSIsImNoZWNrVXNhZ2UiLCJ3b3JrZmxvd3MiLCJkZWZpbml0aW9ucyIsIndvcmtmbG93RGVmaW5pdGlvbnMiLCJiYWNrZW5kIiwibGltaXQiLCJvcmRlciIsIndvcmtmbG93TmFtZSIsImNyZWF0ZWRBZnRlciIsImNyZWF0ZWRCZWZvcmUiLCJsaXN0V29ya2Zsb3dSdW5zIiwiTnVtYmVyIiwicGFyc2VJbnQiLCJEYXRlIiwid29ya2Zsb3dSdW4iLCJnZXRXb3JrZmxvd1J1biIsIndvcmtmbG93UnVuSWQiLCJwYXJhbXMiLCJjYW5jZWxXb3JrZmxvd1J1biIsInBhdXNlV29ya2Zsb3dSdW4iLCJyZXN1bWVXb3JrZmxvd1J1biIsImxpc3RTdGVwQXR0ZW1wdHMiLCJhZGRyZXNzIiwicG9ydCIsIm9rIiwicHJvamVjdCIsInByb2Nlc3MiLCJjd2QiLCJwb3AiLCJ0aW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImNvdW50Iiwib3ZlcnJpZGVzIiwidGFyZ2V0RGIiLCJmaXh0dXJlIiwidGVzdCIsImdlbmVyYXRvciIsImdlbmVyYXRlQmF0Y2giLCJkZXN0cm95Iiwic3RyYXRlZ3kiLCJ3aGVyZSIsImZpeHR1cmVEYkNvbmZpZyIsImZpeHR1cmVEYiIsImV4cGxvcmVyIiwiZXhwbG9yZSIsImluY2x1ZGVSZWxhdGlvbnMiLCJtYXhEZXB0aCIsInNvdXJjZURiIiwiZ2V0REIiLCJyZXN1bHRzIiwiaW1wb3J0RnJvbVNvdXJjZSIsImltcG9ydGVkIiwidGFyZ2V0RW50aXRpZXMiLCJ0YWJsZU5hbWVzIiwicmF3IiwiY2xlYW5lZCIsInVpRGlzdFBhdGgiLCJkaXJuYW1lIiwicm9vdCIsInByZWZpeCIsImRlY29yYXRlUmVwbHkiLCJ3aWxkY2FyZCIsImhlYWRlcnMiLCJyZWFkRmlsZVN5bmMiLCJ0b1N0cmluZyIsInByb2plY3ROYW1lIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxRQUFRLFFBQVEsZ0JBQWdCO0FBRXpDLE9BQU9DLFFBQVEsS0FBSztBQUNwQixPQUFPQyxnQkFBZ0IsYUFBYTtBQUVwQyxPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsS0FBSyxRQUFRLFVBQVU7QUFDaEMsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQUN2QyxTQUFTQyxFQUFFLFFBQTZCLG9CQUFpQjtBQUN6RCxTQUFTQyxrQkFBa0IsUUFBUSxzQkFBbUI7QUFDdEQsU0FBU0MsRUFBRSxRQUFRLGdCQUFhO0FBQ2hDLFNBQVNDLGdCQUFnQixRQUFRLCtCQUE0QjtBQUU3RCxTQUFTQyxhQUFhLFFBQVEsOEJBQTJCO0FBQ3pELFNBQ0VDLG1CQUFtQixFQUNuQkMsYUFBYSxFQUNiQywyQkFBMkIsUUFDdEIsaUNBQThCO0FBQ3JDLFNBQStCQyxRQUFR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
|
|
1114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91aS9hcGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHR5cGUgeyBGYXN0aWZ5SW5zdGFuY2UgfSBmcm9tIFwiZmFzdGlmeVwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCB0eXBlIHsgQWRkcmVzc0luZm8gfSBmcm9tIFwibmV0XCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcmFuZ2UgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERCLCB0eXBlIFNvbmFtdURCQ29uZmlnIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBjcmVhdGVLbmV4SW5zdGFuY2UgfSBmcm9tIFwiLi4vZGF0YWJhc2Uva25leFwiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgc29uYW11RGljdGlvbmFyeSB9IGZyb20gXCIuLi9kaWN0L3NvbmFtdS1kaWN0aW9uYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eSB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgaXNTb0V4Y2VwdGlvbixcbiAgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uLFxufSBmcm9tIFwiLi4vZXhjZXB0aW9ucy9zby1leGNlcHRpb25zXCI7XG5pbXBvcnQgeyB0eXBlIE1pZ3JhdGlvblJlc3VsdCwgTWlncmF0b3IgfSBmcm9tIFwiLi4vbWlncmF0aW9uL21pZ3JhdG9yXCI7XG5pbXBvcnQgeyBTbGFja0NvbmZpcm0sIHR5cGUgU2xhY2tDb25maXJtUGVuZGluZ1Jlc3VsdCB9IGZyb20gXCIuLi9taWdyYXRpb24vc2xhY2stY29uZmlybVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSBcIi4uL3RlbXBsYXRlL3RlbXBsYXRlLW1hbmFnZXJcIjtcbmltcG9ydCB7IERhdGFFeHBsb3JlciB9IGZyb20gXCIuLi90ZXN0aW5nL2RhdGEtZXhwbG9yZXJcIjtcbmltcG9ydCB7IEZpeHR1cmVHZW5lcmF0b3IgfSBmcm9tIFwiLi4vdGVzdGluZy9maXh0dXJlLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgdHlwZSBEdXBsaWNhdGVDaGVja09wdGlvbnMsIEZpeHR1cmVNYW5hZ2VyIH0gZnJvbSBcIi4uL3Rlc3RpbmcvZml4dHVyZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgdHlwZSBDb25lLFxuICB0eXBlIEVudGl0eUluZGV4LFxuICB0eXBlIEVudGl0eVByb3AsXG4gIHR5cGUgRW50aXR5U3Vic2V0Um93LFxuICB0eXBlIEZpeHR1cmVSZWNvcmQsXG4gIHR5cGUgRml4dHVyZVNlYXJjaE9wdGlvbnMsXG4gIHR5cGUgRmxhdHRlblN1YnNldFJvdyxcbiAgdHlwZSBQYXRoQW5kQ29kZSxcbiAgVGVtcGxhdGVLZXksXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IHNldEFpQXBpIH0gZnJvbSBcIi4vYWktYXBpXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzb25hbXVVSUFwaVBsdWdpbihmYXN0aWZ5OiBGYXN0aWZ5SW5zdGFuY2UpIHtcbiAgZmFzdGlmeS5yZWdpc3RlcihcbiAgICBhc3luYyAoc2VydmVyKSA9PiB7XG4gICAgICAvLyBtaWdyYXRvclxuICAgICAgY29uc3QgbWlncmF0b3IgPSBuZXcgTWlncmF0b3IoKTtcblxuICAgICAgLy8gd2FpdEZvckhNUkNvbXBsZXRlZFxuICAgICAgYXN5bmMgZnVuY3Rpb24gd2FpdEZvckhNUkNvbXBsZXRlZDxUPihmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICAgICAgICBjb25zdCB3YWl0UHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgU29uYW11LnN5bmNlci5ldmVudEVtaXR0ZXIub2ZmKFwib25ITVJDb21wbGV0ZWRcIiwgaGFuZGxlcik7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfSwgMTUwMCk7XG5cbiAgICAgICAgICBTb25hbXUuc3luY2VyLmV2ZW50RW1pdHRlci5vbmNlKFwib25ITVJDb21wbGV0ZWRcIiwgaGFuZGxlcik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZuKCk7XG4gICAgICAgIGF3YWl0IHdhaXRQcm9taXNlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBzZXRBaUFwaShzZXJ2ZXIpO1xuXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9zb25hbXUvY29uZmlnXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgcmV0dXJuIFNvbmFtdS5jb25maWc7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgZW50aXR5SWQ/OiBzdHJpbmc7XG4gICAgICAgICAgcHJlc2V0PzogXCJ0eXBlc1wiIHwgXCJlbnRpdHkuanNvblwiIHwgXCJnZW5lcmF0ZWRcIjtcbiAgICAgICAgICBhYnNQYXRoPzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3Rvb2xzL29wZW5Wc2NvZGVcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgcHJlc2V0LCBhYnNQYXRoIH0gPSByZXF1ZXN0LnF1ZXJ5O1xuXG4gICAgICAgIGNvbnN0IHRhcmdldFBhdGggPSAoKCkgPT4ge1xuICAgICAgICAgIGlmIChlbnRpdHlJZCAmJiBwcmVzZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZXMgfSA9IGVudGl0eTtcblxuICAgICAgICAgICAgY29uc3QgeyBhcGlSb290UGF0aCB9ID0gU29uYW11O1xuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSAoKCkgPT4ge1xuICAgICAgICAgICAgICBzd2l0Y2ggKHByZXNldCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0eXBlc1wiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke25hbWVzLmZzfS50eXBlcy50c2A7XG4gICAgICAgICAgICAgICAgY2FzZSBcImVudGl0eS5qc29uXCI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZXMuZnN9LmVudGl0eS5qc29uYDtcbiAgICAgICAgICAgICAgICBjYXNlIFwiZ2VuZXJhdGVkXCI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYCR7bmFtZXMuZnN9LmdlbmVyYXRlZC50c2A7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICByZXR1cm4gYCR7YXBpUm9vdFBhdGh9L3NyYy9hcHBsaWNhdGlvbi8ke2VudGl0eS5uYW1lcy5wYXJlbnRGc30vJHtmaWxlbmFtZX1gO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWFic1BhdGgpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IucHJlc2V0T3JBYnNQYXRoUmVxdWlyZWRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFic1BhdGg7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgICBleGVjU3luYyhgY29kZSAke3RhcmdldFBhdGh9YCk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgb3JpZ2luOiBzdHJpbmc7XG4gICAgICAgICAgZW50aXR5SWQ/OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvdG9vbHMvZ2V0U3VnZ2VzdGlvblwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IG9yaWdpbiwgZW50aXR5SWQgfSA9IHJlcXVlc3QucXVlcnk7XG5cbiAgICAgICAgLy8g7LmY7ZmYIOyaqeyWtOynkVxuICAgICAgICBjb25zdCBnbG9zc2FyeSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcbiAgICAgICAgICBbXCJzdGF0dXNcIiwgXCLsg4Htg5xcIl0sXG4gICAgICAgICAgW1widHlwZVwiLCBcIu2DgOyehVwiXSxcbiAgICAgICAgICBbXCJpbWFnZVwiLCBcIuydtOuvuOyngFwiXSxcbiAgICAgICAgICBbXCJpbWFnZXNcIiwgXCLsnbTrr7jsp4DrpqzsiqTtirhcIl0sXG4gICAgICAgICAgW1widXJsXCIsIFwiVVJMXCJdLFxuICAgICAgICAgIFtcImlkXCIsIFwiSURcIl0sXG4gICAgICAgICAgW1wibmFtZVwiLCBge0VudGl0eUlEfeuqhWBdLFxuICAgICAgICAgIFtcInRpdGxlXCIsIFwie0VudGl0eUlEfeuqhVwiXSxcbiAgICAgICAgICBbXCJwYXJlbnRcIiwgXCLsg4HsnIR7RW50aXR5SUR9XCJdLFxuICAgICAgICAgIFtcImRlc2NcIiwgXCLshKTrqoVcIl0sXG4gICAgICAgICAgW1wiYXRcIiwgXCLsnbzsi5xcIl0sXG4gICAgICAgICAgW1wiY3JlYXRlZFwiLCBcIuuTseuhnVwiXSxcbiAgICAgICAgICBbXCJ1cGRhdGVkXCIsIFwi7IiY7KCVXCJdLFxuICAgICAgICAgIFtcImRlbGV0ZWRcIiwgXCLsgq3soJxcIl0sXG4gICAgICAgICAgW1wiYnlcIiwgXCLsnKDsoIBcIl0sXG4gICAgICAgICAgW1wiZGF0ZVwiLCBcIuydvOyekFwiXSxcbiAgICAgICAgICBbXCJ0aW1lXCIsIFwi7Iuc6rCEXCJdLFxuICAgICAgICAgIFtcImtvXCIsIFwiKO2VnOq4gClcIl0sXG4gICAgICAgICAgW1wiZW5cIiwgXCIo7JiB66y4KVwiXSxcbiAgICAgICAgICBbXCJrcndcIiwgXCIo7JuQKVwiXSxcbiAgICAgICAgICBbXCJ1c2RcIiwgXCIoVVNEKVwiXSxcbiAgICAgICAgICBbXCJjb2xvclwiLCBcIuy7rOufrFwiXSxcbiAgICAgICAgICBbXCJjb2RlXCIsIFwi7L2U65OcXCJdLFxuICAgICAgICAgIFtcInhcIiwgXCJY7KKM7ZGcXCJdLFxuICAgICAgICAgIFtcInlcIiwgXCJZ7KKM7ZGcXCJdLFxuICAgICAgICAgIFtcImN1cnJlbnRcIiwgXCLtmITsnqxcIl0sXG4gICAgICAgICAgW1wic3RvY2tcIiwgXCLsnqzqs6BcIl0sXG4gICAgICAgICAgW1widG90YWxcIiwgXCLstJ1cIl0sXG4gICAgICAgICAgW1wiYWRtaW5cIiwgXCLqtIDrpqzsnpBcIl0sXG4gICAgICAgICAgW1wiZ3JvdXBcIiwgXCLqt7jro7lcIl0sXG4gICAgICAgICAgW1wiaXRlbVwiLCBcIuyVhOydtO2FnFwiXSxcbiAgICAgICAgICBbXCJjbnRcIiwgXCLsiJjrn4lcIl0sXG4gICAgICAgICAgW1wicHJpY2VcIiwgXCLqsIDqsqlcIl0sXG4gICAgICAgICAgW1wicHJlc2V0XCIsIFwi7ZSE66as7IWLXCJdLFxuICAgICAgICAgIFtcImFjY3RcIiwgXCLqs4TsooxcIl0sXG4gICAgICAgICAgW1widGVsXCIsIFwi7KCE7ZmU67KI7Zi4XCJdLFxuICAgICAgICAgIFtcIm5vXCIsIFwi67KI7Zi4XCJdLFxuICAgICAgICAgIFtcImJvZHlcIiwgXCLrgrTsmqlcIl0sXG4gICAgICAgICAgW1wiY29udGVudFwiLCBcIuuCtOyaqVwiXSxcbiAgICAgICAgICBbXCJvcmRlcm5vXCIsIFwi7KCV66Cs7Iic7IScXCJdLFxuICAgICAgICAgIFtcInByaW9yaXR5XCIsIFwi7Jqw7ISg7Iic7JyEXCJdLFxuICAgICAgICAgIFtcInRleHRcIiwgXCLthY3siqTtirhcIl0sXG4gICAgICAgICAgW1wia2V5XCIsIFwi7YKkXCJdLFxuICAgICAgICAgIFtcInN1bVwiLCBcIu2VqeyCsFwiXSxcbiAgICAgICAgICBbXCJleHBlY3RlZFwiLCBcIuyYiOyDgVwiXSxcbiAgICAgICAgICBbXCJhY3R1YWxcIiwgXCLsi6TsoJxcIl0sXG4gICAgICAgIF0pO1xuICAgICAgICAvLyDsoITssrQg7JeU7Yuw7YuwIOyInO2ajO2VmOupsCwg7JeU7Yuw7YuwIO2DgOydtO2LgOqzvCDtlITroa0g7ISk66qF7J2EIOy5mO2ZmCDsmqnslrTsp5Hsl5Ag7LaU6rCAXG4gICAgICAgIGZvciAoY29uc3QgZW50aXR5SWQgb2YgRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKSkge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBpZiAoKGVudGl0eS50aXRsZSA/PyBcIlwiKSAhPT0gXCJcIikge1xuICAgICAgICAgICAgZ2xvc3Nhcnkuc2V0KGluZmxlY3Rpb24udW5kZXJzY29yZShlbnRpdHkuaWQpLCBlbnRpdHkudGl0bGUpO1xuICAgICAgICAgICAgZ2xvc3Nhcnkuc2V0KFxuICAgICAgICAgICAgICBpbmZsZWN0aW9uLnVuZGVyc2NvcmUoaW5mbGVjdGlvbi5wbHVyYWxpemUoZW50aXR5LmlkKSksXG4gICAgICAgICAgICAgIGAke2VudGl0eS50aXRsZX3rpqzsiqTtirhgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlbnRpdHkucHJvcHMuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgaWYgKGdsb3NzYXJ5Lmhhcyhwcm9wLm5hbWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9wLmRlc2MpIHtcbiAgICAgICAgICAgICAgZ2xvc3Nhcnkuc2V0KHByb3AubmFtZSwgcHJvcC5kZXNjLnJlcGxhY2UoZW50aXR5LnRpdGxlID8/IFwiXCIsIFwie0VudGl0eUlEfVwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWdnZXN0ZWQgPSAoKCkgPT4ge1xuICAgICAgICAgIC8vIOuLqOyWtCDrtoTrpqwsIOqwgOuKpe2VnCDsobDtlakg7IOd7ISxXG4gICAgICAgICAgY29uc3Qgd29yZHMgPSBvcmlnaW4uc3BsaXQoXCJfXCIpO1xuICAgICAgICAgIGNvbnN0IGNvbWJpbmF0aW9ucyA9IFsuLi5yYW5nZSh3b3Jkcy5sZW5ndGgsIDAsIC0xKV0uZmxhdE1hcCgobGVuKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAuLi5yYW5nZSgwLCB3b3Jkcy5sZW5ndGggLSBsZW4gKyAxLCAoaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGxlbixcbiAgICAgICAgICAgICAgICAgIHc6IHdvcmRzLnNsaWNlKGlkeCwgaWR4ICsgbGVuKS5qb2luKFwiX1wiKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyDsobDtlansnYQg7Iic7ZqM7ZWY66mwLCDsuZjtmZgg7Jqp7Ja07KeR7JeQIOyeiOuKlCDri6jslrTqsIAg7Y+s7ZWo65CcIOqyveyasCwg7LmY7ZmYIOyaqeyWtOuhnCDsuZjtmZhcbiAgICAgICAgICBjb25zdCBSRVBMQUNFRF9QUkVGSVggPSBcIiNSRVBMQUNFRC8vXCI7IC8vIOy5mO2ZmOuQnCDri6jslrTrpbwgam9pbiDsnbTtm4Tsl5Drj4Qg7Iud67OE7ZWY6riwIOychO2VtCBwcmVmaXgg7LaU6rCAXG4gICAgICAgICAgbGV0IHJlbWFpbkFycjogc3RyaW5nW10gPSBbLi4ud29yZHNdO1xuICAgICAgICAgIGZvciAoY29uc3QgY29tYiBvZiBjb21iaW5hdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpblN0ciA9IHJlbWFpbkFyci5qb2luKFwiX1wiKTtcbiAgICAgICAgICAgIGlmIChyZW1haW5TdHIuaW5jbHVkZXMoY29tYi53KSAmJiBnbG9zc2FyeS5oYXMoY29tYi53KSkge1xuICAgICAgICAgICAgICByZW1haW5BcnIgPSByZW1haW5TdHJcbiAgICAgICAgICAgICAgICAucmVwbGFjZShjb21iLncsIFJFUExBQ0VEX1BSRUZJWCArIGdsb3NzYXJ5LmdldChjb21iLncpKVxuICAgICAgICAgICAgICAgIC5zcGxpdChcIl9cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlbWFpbkFyclxuICAgICAgICAgICAgLm1hcCgocikgPT4ge1xuICAgICAgICAgICAgICBpZiAoci5zdGFydHNXaXRoKFJFUExBQ0VEX1BSRUZJWCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gci5yZXBsYWNlKFJFUExBQ0VEX1BSRUZJWCwgXCJcIik7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgve0VudGl0eUlEfS9nLCBlbnRpdHlJZCA/IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKS50aXRsZSA6IFwiXCIpO1xuICAgICAgICB9KSgpO1xuXG4gICAgICAgIHJldHVybiB7IHN1Z2dlc3RlZCB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL2VudGl0eS9maW5kTWFueVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICAgICAgZnVuY3Rpb24gZmxhdHRlblN1YnNldFJvd3Moc3Vic2V0Um93czogRW50aXR5U3Vic2V0Um93W10pOiBGbGF0dGVuU3Vic2V0Um93W10ge1xuICAgICAgICAgIHJldHVybiBzdWJzZXRSb3dzLmZsYXRNYXAoKHN1YnNldFJvdykgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiwgLi4uc1JvdyB9ID0gc3Vic2V0Um93O1xuICAgICAgICAgICAgcmV0dXJuIFtzUm93LCAuLi5mbGF0dGVuU3Vic2V0Um93cyhjaGlsZHJlbildO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZW50aXRpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBlbnRpdHlJZHMubWFwKChlbnRpdHlJZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgY29uc3Qgc3Vic2V0Um93cyA9IGVudGl0eS5nZXRTdWJzZXRSb3dzKCk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmVudGl0eSxcbiAgICAgICAgICAgICAgZmxhdHRlblN1YnNldFJvd3M6IGZsYXR0ZW5TdWJzZXRSb3dzKHN1YnNldFJvd3MpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBlbnRpdGllcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgY29uc3QgYUlkID0gYS5wYXJlbnRJZCA/PyBhLmlkO1xuICAgICAgICAgIGNvbnN0IGJJZCA9IGIucGFyZW50SWQgPz8gYi5pZDtcbiAgICAgICAgICBpZiAoYUlkIDwgYklkKSByZXR1cm4gLTE7XG4gICAgICAgICAgaWYgKGFJZCA+IGJJZCkgcmV0dXJuIDE7XG4gICAgICAgICAgaWYgKGFJZCA9PT0gYklkKSB7XG4gICAgICAgICAgICBpZiAoYS5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gLTE7XG4gICAgICAgICAgICBpZiAoYi5wYXJlbnRJZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMTtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7IGVudGl0aWVzIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgZmlsdGVyPzogXCJlbnVtc1wiIHwgXCJ0eXBlc1wiO1xuICAgICAgICAgIHJlbG9hZD86IFwiMVwiO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS90eXBlSWRzXCIsIGFzeW5jIChyZXF1ZXN0KTogUHJvbWlzZTx7IHR5cGVJZHM6IHN0cmluZ1tdIH0+ID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWx0ZXIsIHJlbG9hZCB9ID0gcmVxdWVzdC5xdWVyeTtcblxuICAgICAgICBpZiAocmVsb2FkID09PSBcIjFcIikge1xuICAgICAgICAgIGF3YWl0IFNvbmFtdS5zeW5jZXIuYXV0b2xvYWRUeXBlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdHlwZUlkcyA9ICgoKSA9PiB7XG4gICAgICAgICAgLy8g7ZSE66Gc7KCd7Yq47JeQ7IScIOygleydmO2VnCDtg4DsnoXrk6RcbiAgICAgICAgICBjb25zdCBwcm9qZWN0VHlwZUlkcyA9IE9iamVjdC5lbnRyaWVzKFNvbmFtdS5zeW5jZXIudHlwZXMpXG4gICAgICAgICAgICAuZmlsdGVyKChbX3R5cGVJZCwgem9kVHlwZV0pID0+ICh6b2RUeXBlLl96b2QuZGVmLnR5cGUgYXMgc3RyaW5nKSAhPT0gXCJlbnVtXCIpXG4gICAgICAgICAgICAubWFwKChbdHlwZUlkLCBfem9kVHlwZV0pID0+IHR5cGVJZCk7XG5cbiAgICAgICAgICAvLyDrgrTsnqUg7YOA7J6F65OkIChzb25hbXUg7L2U7Ja07JeQ7IScIOygnOqztSlcbiAgICAgICAgICBjb25zdCBidWlsdEluVHlwZUlkcyA9IFsuLi5CVUlMVF9JTl9UWVBFX0lEU107XG5cbiAgICAgICAgICAvLyDrqqjrk6Ag7YOA7J6FIOuzke2VqVxuICAgICAgICAgIGNvbnN0IGFsbFR5cGVJZHMgPSBbLi4uYnVpbHRJblR5cGVJZHMsIC4uLnByb2plY3RUeXBlSWRzXTtcblxuICAgICAgICAgIGlmIChmaWx0ZXIgPT09IFwidHlwZXNcIikge1xuICAgICAgICAgICAgcmV0dXJuIGFsbFR5cGVJZHM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZW51bUlkcyA9IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCkuZmxhdE1hcCgoZW50aXR5SWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnRpdHkuZW51bUxhYmVscyk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoZmlsdGVyID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBlbnVtSWRzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbFR5cGVJZHMsIC4uLmVudW1JZHNdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHR5cGVJZHMsXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZm9ybToge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgICAgICAgICB0YWJsZTogc3RyaW5nO1xuICAgICAgICAgICAgcGFyZW50SWQ/OiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvY3JlYXRlXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGZvcm0gfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBhd2FpdCBTb25hbXUuc3luY2VyLmNyZWF0ZUVudGl0eSh7IC4uLmZvcm0sIGVudGl0eUlkOiBmb3JtLmlkIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2RlbFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIHJldHVybiBhd2FpdCBTb25hbXUuc3luY2VyLmRlbEVudGl0eShlbnRpdHlJZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgbmV3VmFsdWVzOiB7XG4gICAgICAgICAgICB0aXRsZTogc3RyaW5nO1xuICAgICAgICAgICAgdGFibGU6IHN0cmluZztcbiAgICAgICAgICAgIHBhcmVudElkPzogc3RyaW5nO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeUVudGl0eUJhc2VcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIG5ld1ZhbHVlcyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkudGl0bGUgPSBuZXdWYWx1ZXMudGl0bGU7XG4gICAgICAgICAgZW50aXR5LnRhYmxlID0gbmV3VmFsdWVzLnRhYmxlO1xuICAgICAgICAgIGVudGl0eS5wYXJlbnRJZCA9IG5ld1ZhbHVlcy5wYXJlbnRJZDtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgc3Vic2V0S2V5OiBzdHJpbmc7XG4gICAgICAgICAgZmllbGRzOiBzdHJpbmdbXTtcbiAgICAgICAgICBmaWVsZHNJbnRlcm5hbD86IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9tb2RpZnlTdWJzZXRcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIHN1YnNldEtleSwgZmllbGRzLCBmaWVsZHNJbnRlcm5hbCB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldID0gZmllbGRzO1xuICAgICAgICAgIGlmIChmaWVsZHNJbnRlcm5hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoZmllbGRzSW50ZXJuYWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldEtleV0gPSBmaWVsZHNJbnRlcm5hbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSBlbnRpdHkuc3Vic2V0c0ludGVybmFsW3N1YnNldEtleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICByZXR1cm4geyB1cGRhdGVkOiBmaWVsZHMsIHVwZGF0ZWRJbnRlcm5hbDogZmllbGRzSW50ZXJuYWwgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBzdWJzZXRLZXk6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvZGVsU3Vic2V0XCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBzdWJzZXRLZXkgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZGVsZXRlIGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV07XG4gICAgICAgICAgZGVsZXRlIGVudGl0eS5zdWJzZXRzSW50ZXJuYWxbc3Vic2V0S2V5XTtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgbmV3UHJvcDogRW50aXR5UHJvcDtcbiAgICAgICAgICBhdD86IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvY3JlYXRlUHJvcFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgYXQsIG5ld1Byb3AgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgYXdhaXQgZW50aXR5LmNyZWF0ZVByb3AobmV3UHJvcCwgYXQpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIG5ld1Byb3A6IEVudGl0eVByb3A7XG4gICAgICAgICAgYXQ6IG51bWJlcjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5UHJvcFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgYXQsIG5ld1Byb3AgfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkubW9kaWZ5UHJvcChuZXdQcm9wLCBhdCk7XG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBhdDogbnVtYmVyO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2VudGl0eS9kZWxQcm9wXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBhdCB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgIGVudGl0eS5kZWxQcm9wKGF0KTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBhdDogbnVtYmVyO1xuICAgICAgICAgIHRvOiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vdmVQcm9wXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBhdCwgdG8gfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkubW92ZVByb3AoYXQsIHRvKTtcblxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIGluZGV4ZXM6IEVudGl0eUluZGV4W107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L21vZGlmeUluZGV4ZXNcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHdhaXRGb3JITVJDb21wbGV0ZWQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgZW50aXR5SWQsIGluZGV4ZXMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LmluZGV4ZXMgPSBpbmRleGVzO1xuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICByZXR1cm4geyB1cGRhdGVkOiBpbmRleGVzIH07XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgZW51bUxhYmVsczogRW50aXR5W1wiZW51bUxhYmVsc1wiXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5RW51bUxhYmVsc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgZW51bUxhYmVscyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBlbnRpdHkuZW51bUxhYmVscyA9IGVudW1MYWJlbHM7XG4gICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcblxuICAgICAgICAgIHJldHVybiB7IHVwZGF0ZWQ6IGVudW1MYWJlbHMgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICBuZXdFbnVtSWQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvY3JlYXRlRW51bUlkXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBuZXdFbnVtSWQgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAgICAgICBpZiAoZW50aXR5LmVudW1MYWJlbHNbbmV3RW51bUlkXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDsnbTrr7gg7KG07J6s7ZWY64qUIGVudW1JZOyeheuLiOuLpDogJHtuZXdFbnVtSWR9YCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW50aXR5LmVudW1MYWJlbHNbbmV3RW51bUlkXSA9IHtcbiAgICAgICAgICAgIC4uLihuZXdFbnVtSWQuZW5kc1dpdGgoXCJTdGF0dXNcIilcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBhY3RpdmU6IFwi64W47LacXCIsXG4gICAgICAgICAgICAgICAgICBoaWRkZW46IFwi7Iio6rmAXCIsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIFwiXCI6IFwiXCIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgfTtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuXG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgZW51bUlkOiB7XG4gICAgICAgICAgICBiZWZvcmU6IHN0cmluZztcbiAgICAgICAgICAgIGFmdGVyOiBzdHJpbmc7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvbW9kaWZ5RW51bUlkXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBlbnVtSWQgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgICAgIGNvbnN0IGlzRXhpc3RzID0gZW50aXR5SWRzLnNvbWUoKGVudGl0eUlkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmluY2x1ZGVzKGVudW1JZC5hZnRlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGlzRXhpc3RzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOydtOuvuCDsobTsnqztlZjripQgRW51bUlk7J6F64uI64ukOiAke2VudW1JZC5hZnRlcn1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgICAgICAgZW50aXR5LmVudW1MYWJlbHNbZW51bUlkLmFmdGVyXSA9IGVudGl0eS5lbnVtTGFiZWxzW2VudW1JZC5iZWZvcmVdO1xuICAgICAgICAgIGRlbGV0ZSBlbnRpdHkuZW51bUxhYmVsc1tlbnVtSWQuYmVmb3JlXTtcblxuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGVudGl0eUlkIG9mIGVudGl0eUlkcykge1xuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIG9mIGVudGl0eS5wcm9wcykge1xuICAgICAgICAgICAgICBpZiAocHJvcC50eXBlID09PSBcImVudW1cIiAmJiBwcm9wLmlkID09PSBlbnVtSWQuYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgcHJvcC5pZCA9IGVudW1JZC5hZnRlcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgZW50aXR5LnNhdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgZW51bUlkOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2RlbGV0ZUVudW1JZFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgZW51bUlkIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgICAgICAgIGNvbnN0IGlzUmVmZXJlbmNlZCA9IGVudGl0eUlkc1xuICAgICAgICAgICAgLmZsYXRNYXAoKGVudGl0eUlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMpXG4gICAgICAgICAgICAuc29tZSgocHJvcCkgPT4gcHJvcC50eXBlID09PSBcImVudW1cIiAmJiBwcm9wLmlkID09PSBlbnVtSWQpO1xuICAgICAgICAgIGlmIChpc1JlZmVyZW5jZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtlbnVtSWR966W8IOywuOyhsO2VmOuKlCDtlITroZztjbzti7DqsIAg7KG07J6s7ZWp64uI64ukLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICBkZWxldGUgZW50aXR5LmVudW1MYWJlbHNbZW51bUlkXTtcbiAgICAgICAgICBhd2FpdCBlbnRpdHkuc2F2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgIHRhcmdldDogXCJlbnRpdHlcIiB8IFwicHJvcFwiIHwgXCJlbnVtXCIgfCBcInN1YnNldFwiO1xuICAgICAgICAgIHByb3BOYW1lPzogc3RyaW5nO1xuICAgICAgICAgIGVudW1JZD86IHN0cmluZztcbiAgICAgICAgICBzdWJzZXRLZXk/OiBzdHJpbmc7XG4gICAgICAgICAgY29uZTogQ29uZTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvdXBkYXRlQ29uZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgd2FpdEZvckhNUkNvbXBsZXRlZChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBlbnRpdHlJZCwgdGFyZ2V0LCBwcm9wTmFtZSwgZW51bUlkLCBzdWJzZXRLZXksIGNvbmUgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAgICAgICBpZiAodGFyZ2V0ID09PSBcImVudGl0eVwiKSB7XG4gICAgICAgICAgICBlbnRpdHkuY29uZSA9IGNvbmU7XG4gICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwicHJvcFwiICYmIHByb3BOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gZW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gcHJvcE5hbWUpO1xuICAgICAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICAgICAgKHByb3AgYXMgeyBjb25lPzogQ29uZSB9KS5jb25lID0gY29uZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJlbnVtXCIgJiYgZW51bUlkKSB7XG4gICAgICAgICAgICBlbnRpdHkuZW51bUNvbmVzW2VudW1JZF0gPSBjb25lO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcInN1YnNldFwiICYmIHN1YnNldEtleSkge1xuICAgICAgICAgICAgZW50aXR5LnN1YnNldENvbmVzW3N1YnNldEtleV0gPSBjb25lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGF3YWl0IGVudGl0eS5zYXZlKCk7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eUlkOiBzdHJpbmc7XG4gICAgICAgICAgcHJlc2VydmVFeGlzdGluZz86IGJvb2xlYW47XG4gICAgICAgICAgb25seUVtcHR5PzogYm9vbGVhbjtcbiAgICAgICAgICBsb2NhbGU/OiBcImtvXCIgfCBcImVuXCIgfCBcImphXCI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvZW50aXR5L2dlbmVyYXRlQ29uZXNcIiwgYXN5bmMgKHJlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB3YWl0Rm9ySE1SQ29tcGxldGVkKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBjb25zdCB7IGVudGl0eUlkLCBwcmVzZXJ2ZUV4aXN0aW5nLCBvbmx5RW1wdHksIGxvY2FsZSB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEVudGl0eSDsobTsnqwg7Jes67aAIO2ZleyduFxuICAgICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgICAgICAgICAvLyBsb2NhbGUg6riw67O46rCSOiBTb25hbXUuY29uZmlnLmkxOG4uZGVmYXVsdExvY2FsZSDsgqzsmqlcbiAgICAgICAgICAgIGNvbnN0IGVmZmVjdGl2ZUxvY2FsZSA9XG4gICAgICAgICAgICAgIGxvY2FsZSA/PyAoU29uYW11LmNvbmZpZy5pMThuLmRlZmF1bHRMb2NhbGUgYXMgXCJrb1wiIHwgXCJlblwiIHwgXCJqYVwiKTtcblxuICAgICAgICAgICAgLy8gQ29uZSDsg53shLFcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGVudGl0eS5nZW5lcmF0ZUNvbmVzKHtcbiAgICAgICAgICAgICAgcHJlc2VydmVFeGlzdGluZzogcHJlc2VydmVFeGlzdGluZyA/PyB0cnVlLFxuICAgICAgICAgICAgICBvbmx5RW1wdHk6IG9ubHlFbXB0eSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgbG9jYWxlOiBlZmZlY3RpdmVMb2NhbGUsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKTtcblxuICAgICAgICAgICAgLy8gRW50aXR5IG5vdCBmb3VuZFxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoXCLsobTsnqztlZjsp4Ag7JWK64qUIEVudGl0eVwiKSkge1xuICAgICAgICAgICAgICByZXBseS5zdGF0dXMoNDA0KTtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBlcnJvcjogYEVudGl0eSBub3QgZm91bmQ6ICR7ZW50aXR5SWR9YCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQVBJIO2CpCDsl4bsnYxcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLmluY2x1ZGVzKFwiQU5USFJPUElDX0FQSV9LRVkgbm90IGZvdW5kXCIpKSB7XG4gICAgICAgICAgICAgIHJlcGx5LnN0YXR1cyg1MDApO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVycm9yOiBcIkFQSSBrZXkgbm90IGNvbmZpZ3VyZWRcIixcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gUmF0ZSBsaW1pdFxuICAgICAgICAgICAgaWYgKG1lc3NhZ2UuaW5jbHVkZXMoXCJSYXRlIGxpbWl0IGV4Y2VlZGVkXCIpKSB7XG4gICAgICAgICAgICAgIHJlcGx5LnN0YXR1cyg0MjkpO1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVycm9yOiBcIlJhdGUgbGltaXQgZXhjZWVkZWQuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIuXCIsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIOq4sO2DgCDsl5Drn6xcbiAgICAgICAgICAgIHJlcGx5LnN0YXR1cyg1MDApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgIGVycm9yOiBgQ29uZSBnZW5lcmF0aW9uIGZhaWxlZDogJHttZXNzYWdlfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9lbnRpdHkvZ2V0VGFibGVDb2x1bW5zXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZW50aXR5SWQgfSA9IHJlcXVlc3QucXVlcnk7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGVudGl0eS5nZXRUYWJsZUNvbHVtbnMoKTtcbiAgICAgICAgcmV0dXJuIHsgY29sdW1ucyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL21pZ3JhdGlvbnMvc3RhdHVzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgbWlncmF0b3IuZ2V0U3RhdHVzKCk7XG5cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgYWN0aW9uOiBcImFwcGx5XCIgfCBcInJvbGxiYWNrXCIgfCBcInNoYWRvd1wiO1xuICAgICAgICAgIHRhcmdldHM6IChrZXlvZiBTb25hbXVEQkNvbmZpZylbXTtcbiAgICAgICAgICBmb3JjZT86IGJvb2xlYW47XG4gICAgICAgICAgZm9yY2VSZWFzb24/OiBzdHJpbmc7XG4gICAgICAgICAgcmVxdWVzdG9yPzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXG4gICAgICAgIFwiL2FwaS9taWdyYXRpb25zL3J1bkFjdGlvblwiLFxuICAgICAgICBhc3luYyAocmVxdWVzdCk6IFByb21pc2U8TWlncmF0aW9uUmVzdWx0IHwgU2xhY2tDb25maXJtUGVuZGluZ1Jlc3VsdD4gPT4ge1xuICAgICAgICAgIGNvbnN0IHsgYWN0aW9uLCB0YXJnZXRzLCBmb3JjZSwgZm9yY2VSZWFzb24sIHJlcXVlc3RvciB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJzaGFkb3dcIikge1xuICAgICAgICAgICAgcmV0dXJuIG1pZ3JhdG9yLnJ1blNoYWRvd1Rlc3QoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTbGFjayDsirnsnbgg7LK07YGsIChhcHBseSDsi5zsl5Drp4wpXG4gICAgICAgICAgaWYgKGFjdGlvbiA9PT0gXCJhcHBseVwiKSB7XG4gICAgICAgICAgICBjb25zdCBzbGFja0NvbmZpcm0gPSBuZXcgU2xhY2tDb25maXJtKCk7XG4gICAgICAgICAgICBjb25zdCByZXF1aXJlc0FwcHJvdmFsID0gdGFyZ2V0cy5zb21lKCh0KSA9PiBzbGFja0NvbmZpcm0uaXNUYXJnZXRSZXF1aXJlc0FwcHJvdmFsKHQpKTtcblxuICAgICAgICAgICAgLy8g66Gc7LusIERC7J24IOqyveyasCDsirnsnbgg7Iqk7YK1XG4gICAgICAgICAgICBjb25zdCBsb2NhbEhvc3RzID0gW1wibG9jYWxob3N0XCIsIFwiMTI3LjAuMC4xXCIsIFwiMC4wLjAuMFwiLCBcIjo6MVwiXTtcbiAgICAgICAgICAgIGNvbnN0IGlzTG9jYWxUYXJnZXQgPSB0YXJnZXRzLmV2ZXJ5KCh0YXJnZXQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0Q29uZmlnID0gU29uYW11LmRiQ29uZmlnW3RhcmdldF07XG4gICAgICAgICAgICAgIGNvbnN0IGhvc3QgPSAodGFyZ2V0Q29uZmlnPy5jb25uZWN0aW9uIGFzIHsgaG9zdD86IHN0cmluZyB9KT8uaG9zdCA/PyBcImxvY2FsaG9zdFwiO1xuICAgICAgICAgICAgICByZXR1cm4gbG9jYWxIb3N0cy5pbmNsdWRlcyhob3N0LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChyZXF1aXJlc0FwcHJvdmFsICYmIHNsYWNrQ29uZmlybS5pc0NvbmZpZ3VyZWQoKSAmJiAhaXNMb2NhbFRhcmdldCkge1xuICAgICAgICAgICAgICBjb25zdCB7IGNvbm5zIH0gPSBhd2FpdCBtaWdyYXRvci5nZXRTdGF0dXMoKTtcblxuICAgICAgICAgICAgICAvLyDrqqjrk6Ag7YOA6rKfIERC7JeQ7IScIHBlbmRpbmfsnbgg66eI7J206re466CI7J207IWY7J2YIO2Vqeynke2VqeydhCDqtaztlanri4jri6QuXG4gICAgICAgICAgICAgIGNvbnN0IHBlbmRpbmdNaWdyYXRpb25zID0gW1xuICAgICAgICAgICAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgICAgICAgICAgICBjb25uc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChjb25uKSA9PiB0YXJnZXRzLmluY2x1ZGVzKGNvbm4uY29ubktleSBhcyBrZXlvZiBTb25hbXVEQkNvbmZpZykpXG4gICAgICAgICAgICAgICAgICAgIC5mbGF0TWFwKChjb25uKSA9PiBjb25uLnBlbmRpbmcpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgaWYgKHBlbmRpbmdNaWdyYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAvLyDquLDsobQg7Iq57J24IOyalOyyrSDtmZXsnbhcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZyA9IGF3YWl0IHNsYWNrQ29uZmlybS5nZXRFeGlzdGluZ1JlcXVlc3QocGVuZGluZ01pZ3JhdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAvLyDquLDsobQg7JqU7LKt7J20IOyeiOycvOuptCDsirnsnbgg7IOB7YOcIO2ZleyduFxuICAgICAgICAgICAgICAgICAgY29uc3QgeyBhcHByb3ZlZCwgcmVqZWN0ZWQgfSA9IGF3YWl0IHNsYWNrQ29uZmlybS5jaGVja0FwcHJvdmFsKFxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5jaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZy50cyxcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChhcHByb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyDsirnsnbjrkKgg4oaSIOyLpO2WiVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oYWN0aW9uLCB0YXJnZXRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2xhY2tDb25maXJtLmxvZ0V4ZWN1dGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmNoYW5uZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RvcixcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLm1pZ3JhdGlvblJlamVjdGVkXCIpKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yY2Ug7KeE7ZaJXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHNsYWNrQ29uZmlybS5mb3JjZUFwcHJvdmFsKFxuICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmNoYW5uZWwsXG4gICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcudHMsXG4gICAgICAgICAgICAgICAgICAgICAgZm9yY2VSZWFzb24gPz8gXCLsgqzsnKAg7JeG7J2MXCIsXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdG9yLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtaWdyYXRvci5ydW5BY3Rpb24oYWN0aW9uLCB0YXJnZXRzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2xhY2tDb25maXJtLmxvZ0V4ZWN1dGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmNoYW5uZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZy50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RvcixcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyDrjIDquLDspJFcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInBlbmRpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiBleGlzdGluZy5jaGFubmVsLFxuICAgICAgICAgICAgICAgICAgICAgIHRzOiBleGlzdGluZy50cyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8g7IOIIOyKueyduCDsmpTssq0g67Cc7IahXG4gICAgICAgICAgICAgICAgICBjb25zdCB7IGNoYW5uZWwsIHRzIH0gPSBhd2FpdCBzbGFja0NvbmZpcm0ucG9zdEFwcHJvdmFsUmVxdWVzdChcbiAgICAgICAgICAgICAgICAgICAgcGVuZGluZ01pZ3JhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldHMsXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RvcixcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBhd2FpdCBzbGFja0NvbmZpcm0uc2F2ZVJlcXVlc3QocGVuZGluZ01pZ3JhdGlvbnMsIGNoYW5uZWwsIHRzKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJwZW5kaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWwsXG4gICAgICAgICAgICAgICAgICAgIHRzLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWlncmF0b3IucnVuQWN0aW9uKGFjdGlvbiwgdGFyZ2V0cyk7XG4gICAgICAgIH0sXG4gICAgICApO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBjaGFubmVsOiBzdHJpbmc7XG4gICAgICAgICAgdHM6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9taWdyYXRpb25zL2NoZWNrQXBwcm92YWxcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBjaGFubmVsLCB0cyB9ID0gcmVxdWVzdC5ib2R5O1xuICAgICAgICBjb25zdCBzbGFja0NvbmZpcm0gPSBuZXcgU2xhY2tDb25maXJtKCk7XG5cbiAgICAgICAgaWYgKCFzbGFja0NvbmZpcm0uaXNDb25maWd1cmVkKCkpIHtcbiAgICAgICAgICByZXR1cm4geyBhcHByb3ZlZDogdHJ1ZSwgcmVqZWN0ZWQ6IGZhbHNlIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2xhY2tDb25maXJtLmNoZWNrQXBwcm92YWwoY2hhbm5lbCwgdHMpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGNoYW5uZWw6IHN0cmluZztcbiAgICAgICAgICB0czogc3RyaW5nO1xuICAgICAgICAgIHJlYXNvbjogc3RyaW5nO1xuICAgICAgICAgIHJlcXVlc3Rvcj86IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9taWdyYXRpb25zL2ZvcmNlQXBwcm92YWxcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBjaGFubmVsLCB0cywgcmVhc29uLCByZXF1ZXN0b3IgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgY29uc3Qgc2xhY2tDb25maXJtID0gbmV3IFNsYWNrQ29uZmlybSgpO1xuXG4gICAgICAgIGlmICghc2xhY2tDb25maXJtLmlzQ29uZmlndXJlZCgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3Iuc2xhY2tDb25maXJtTm90Q29uZmlndXJlZFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCBzbGFja0NvbmZpcm0uZm9yY2VBcHByb3ZhbChjaGFubmVsLCB0cywgcmVhc29uLCByZXF1ZXN0b3IpO1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgY29kZU5hbWVzOiBzdHJpbmdbXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9taWdyYXRpb25zL2RlbENvZGVzXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29kZU5hbWVzIH0gPSByZXF1ZXN0LmJvZHk7XG4gICAgICAgIHJldHVybiBhd2FpdCBtaWdyYXRvci5kZWxDb2Rlcyhjb2RlTmFtZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0KFwiL2FwaS9taWdyYXRpb25zL2dlbmVyYXRlUHJlcGFyZWRDb2Rlc1wiLCBhc3luYyAoX3JlcXVlc3R0KSA9PiB7XG4gICAgICAgIHJldHVybiBhd2FpdCBtaWdyYXRvci5nZW5lcmF0ZVByZXBhcmVkQ29kZXMoKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdHlJZHM6IHN0cmluZ1tdO1xuICAgICAgICAgIHRlbXBsYXRlS2V5czogc3RyaW5nW107XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvc2NhZmZvbGRpbmcvZ2V0U3RhdHVzXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZW50aXR5SWRzLCB0ZW1wbGF0ZUtleXM6IF90ZW1wbGF0ZUtleXMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgaWYgKChlbnRpdHlJZHMgPz8gW10pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLmVudGl0eUlkc1JlcXVpcmVkXCIpKTtcbiAgICAgICAgfSBlbHNlIGlmICgoX3RlbXBsYXRlS2V5cyA/PyBbXSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IudGVtcGxhdGVLZXlzUmVxdWlyZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc29ydGluZ1xuICAgICAgICBlbnRpdHlJZHMuc29ydCgoYSwgYikgPT4gKGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwKSk7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlS2V5cyA9IFRlbXBsYXRlS2V5Lm9wdGlvbnMuZmlsdGVyKCh0aykgPT4gX3RlbXBsYXRlS2V5cy5pbmNsdWRlcyh0aykpO1xuXG4gICAgICAgIGNvbnN0IGNvbWJpbmF0aW9ucyA9IGVudGl0eUlkcy5mbGF0TWFwKChlbnRpdHlJZCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZUtleXMubWFwKCh0ZW1wbGF0ZUtleSkgPT4gW2VudGl0eUlkLCB0ZW1wbGF0ZUtleV0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzdGF0dXNlcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGNvbWJpbmF0aW9ucy5tYXAoYXN5bmMgKFtlbnRpdHlJZCwgdGVtcGxhdGVLZXldKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHN1YlBhdGgsIGZ1bGxQYXRoLCBpc0V4aXN0cyB9ID0gYXdhaXQgU29uYW11LnN5bmNlci5jaGVja0V4aXN0c0dlbkNvZGUoXG4gICAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgICB0ZW1wbGF0ZUtleSBhcyBUZW1wbGF0ZUtleSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICAgICAgdGVtcGxhdGVLZXksXG4gICAgICAgICAgICAgIHN1YlBhdGgsXG4gICAgICAgICAgICAgIGZ1bGxQYXRoLFxuICAgICAgICAgICAgICBpc0V4aXN0cyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB7IHN0YXR1c2VzIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZW50aXR5SWQ6IHN0cmluZztcbiAgICAgICAgICAgIHRlbXBsYXRlS2V5OiBzdHJpbmc7XG4gICAgICAgICAgICBlbnVtSWQ/OiBzdHJpbmc7XG4gICAgICAgICAgICBvdmVyd3JpdGU/OiBib29sZWFuO1xuICAgICAgICAgIH1bXTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zY2FmZm9sZGluZy9nZW5lcmF0ZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IG9wdGlvbnMgfSA9IHJlcXVlc3QuYm9keTtcbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3Iub3B0aW9uc1JlcXVpcmVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDEuIOuqqOuToCDthZztlIzrpr/sl5DshJwg7ZWE7JqU7ZWcIGRpY3Qg7YKk66W8IOyImOynkVxuICAgICAgICBjb25zdCBrZXlzID0gb3B0aW9ucy5mbGF0TWFwKCh7IHRlbXBsYXRlS2V5IH0pID0+IHtcbiAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IFRlbXBsYXRlTWFuYWdlci5nZXQodGVtcGxhdGVLZXkpO1xuICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZS5nZXRSZXF1aXJlZERpY3RLZXlzKCkgPz8gW107XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIDIuIHRhcmdldOuzhOuhnCBlbnN1cmVEaWN0S2V5cyDtmLjstpwgKOyInOywqCDsspjrpqwpXG4gICAgICAgIGF3YWl0IHNvbmFtdURpY3Rpb25hcnkuZW5zdXJlRGljdEtleXMoWy4uLm5ldyBTZXQoa2V5cyldKTtcblxuICAgICAgICAvLyAzLiDthZztlIzrpr8g7IOd7ISxICjrs5HroKwg7LKY66asKVxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBvcHRpb25zLm1hcChhc3luYyAoeyBlbnRpdHlJZCwgdGVtcGxhdGVLZXksIGVudW1JZCwgb3ZlcndyaXRlIH0pID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBhd2FpdCBTb25hbXUuc3luY2VyLmdlbmVyYXRlVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdGVtcGxhdGVLZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICAgICAgICBlbnVtSWQsXG4gICAgICAgICAgICAgICAgfSBhcyB7XG4gICAgICAgICAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgZW51bUlkPzogc3RyaW5nO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgb3ZlcndyaXRlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIGlmIChpc1NvRXhjZXB0aW9uKGUpICYmIGUuc3RhdHVzQ29kZSA9PT0gNTQxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHJlc3VsdC5maWx0ZXIobm9uTnVsbGFibGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlVW5hdmFpbGFibGVFeGNlcHRpb24oU0QoXCJzb25hbXUuZXJyb3IuYWxsRmlsZXNHZW5lcmF0ZWRcIikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgb3B0aW9uOiB7XG4gICAgICAgICAgICBlbnRpdHlJZDogc3RyaW5nO1xuICAgICAgICAgICAgdGVtcGxhdGVLZXk6IHN0cmluZztcbiAgICAgICAgICAgIGVudW1JZD86IHN0cmluZztcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3NjYWZmb2xkaW5nL3ByZXZpZXdcIiwgYXN5bmMgKHJlcXVlc3QpOiBQcm9taXNlPHsgcGF0aEFuZENvZGVzOiBQYXRoQW5kQ29kZVtdIH0+ID0+IHtcbiAgICAgICAgY29uc3QgeyBvcHRpb24gfSA9IHJlcXVlc3QuYm9keTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgdGVtcGxhdGVLZXksIC4uLnRlbXBsYXRlT3B0aW9ucyB9ID0gb3B0aW9uO1xuICAgICAgICAgIGNvbnN0IHBhdGhBbmRDb2RlcyA9IGF3YWl0IFNvbmFtdS5zeW5jZXIucmVuZGVyVGVtcGxhdGUoXG4gICAgICAgICAgICB0ZW1wbGF0ZUtleSBhcyBUZW1wbGF0ZUtleSxcbiAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9ucyxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHsgcGF0aEFuZENvZGVzIH07XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdChcIi9hcGkvZml4dHVyZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCB7IHNvdXJjZURCLCB0YXJnZXREQiwgc2VhcmNoLCBkdXBsaWNhdGVDaGVjayB9ID0gcmVxdWVzdC5ib2R5IGFzIHtcbiAgICAgICAgICBzb3VyY2VEQjoga2V5b2YgU29uYW11REJDb25maWc7XG4gICAgICAgICAgdGFyZ2V0REI6IGtleW9mIFNvbmFtdURCQ29uZmlnO1xuICAgICAgICAgIHNlYXJjaDogRml4dHVyZVNlYXJjaE9wdGlvbnM7XG4gICAgICAgICAgZHVwbGljYXRlQ2hlY2s/OiBEdXBsaWNhdGVDaGVja09wdGlvbnM7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIEZpeHR1cmVNYW5hZ2VyLmdldEZpeHR1cmVzKHNvdXJjZURCLCB0YXJnZXREQiwgc2VhcmNoLCBkdXBsaWNhdGVDaGVjayk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3QoXCIvYXBpL2ZpeHR1cmUvaW1wb3J0XCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZGIsIGZpeHR1cmVzIH0gPSByZXF1ZXN0LmJvZHkgYXMge1xuICAgICAgICAgIGRiOiBrZXlvZiBTb25hbXVEQkNvbmZpZztcbiAgICAgICAgICBmaXh0dXJlczogRml4dHVyZVJlY29yZFtdO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBGaXh0dXJlTWFuYWdlci5pbnNlcnRGaXh0dXJlcyhkYiwgZml4dHVyZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0KFwiL2FwaS9maXh0dXJlL2FkZEZpeHR1cmVMb2FkZXJcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgeyBjb2RlIH0gPSByZXF1ZXN0LmJvZHkgYXMgeyBjb2RlOiBzdHJpbmcgfTtcblxuICAgICAgICByZXR1cm4gRml4dHVyZU1hbmFnZXIuYWRkRml4dHVyZUxvYWRlcihjb2RlKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0KFwiL2FwaS9pMThuL2RpY3Rpb25hcnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgICByZXR1cm4gc29uYW11RGljdGlvbmFyeS5nZXREaWN0aW9uYXJ5KCk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldChcIi9hcGkvaTE4bi9leHBvcnRcIiwgYXN5bmMgKF9yZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICBjb25zdCB7IGZpbGVuYW1lLCBidWZmZXIgfSA9IGF3YWl0IHNvbmFtdURpY3Rpb25hcnkuZXhwb3J0VG9FeGNlbCgpO1xuICAgICAgICByZXBseVxuICAgICAgICAgIC5oZWFkZXIoXG4gICAgICAgICAgICBcIkNvbnRlbnQtVHlwZVwiLFxuICAgICAgICAgICAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiLFxuICAgICAgICAgIClcbiAgICAgICAgICAuaGVhZGVyKFwiQ29udGVudC1EaXNwb3NpdGlvblwiLCBgYXR0YWNobWVudDsgZmlsZW5hbWU9XCIke2ZpbGVuYW1lfVwiYClcbiAgICAgICAgICAuc2VuZChidWZmZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0KFwiL2FwaS9pMThuL2ltcG9ydFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVxdWVzdC5maWxlKCk7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLmZpbGVOb3RVcGxvYWRlZFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVmZmVyID0gYXdhaXQgZGF0YS50b0J1ZmZlcigpO1xuICAgICAgICByZXR1cm4gc29uYW11RGljdGlvbmFyeS5pbXBvcnRGcm9tRXhjZWwoYnVmZmVyKTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBvbGRLZXk6IHN0cmluZztcbiAgICAgICAgICBuZXdLZXk6IHN0cmluZztcbiAgICAgICAgICBzb3VyY2U6IFwiZW50aXR5XCIgfCBcInByb2plY3RcIiB8IFwic29uYW11XCI7XG4gICAgICAgICAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL2kxOG4vdXBkYXRlXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGF3YWl0IHNvbmFtdURpY3Rpb25hcnkudXBkYXRlRW50cnkocmVxdWVzdC5ib2R5KTtcbiAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICAgIHZhbHVlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9pMThuL2NyZWF0ZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBhd2FpdCBzb25hbXVEaWN0aW9uYXJ5LmNyZWF0ZUVudHJ5KHJlcXVlc3QuYm9keSk7XG4gICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUgfTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9pMThuL2RlbGV0ZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBhd2FpdCBzb25hbXVEaWN0aW9uYXJ5LmRlbGV0ZUVudHJ5KHJlcXVlc3QuYm9keS5rZXkpO1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8eyBCb2R5OiB7IGtleXM6IHN0cmluZ1tdIH0gfT4oXCIvYXBpL2kxOG4vY2hlY2tVc2FnZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICByZXR1cm4gc29uYW11RGljdGlvbmFyeS5jaGVja1VzYWdlKHJlcXVlc3QuYm9keS5rZXlzKTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUYXNrcyBBUElcbiAgICAgIHNlcnZlci5nZXQoXCIvYXBpL3Rhc2tzL3N0YXR1c1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgU29uYW11LndvcmtmbG93cztcbiAgICAgICAgICByZXR1cm4geyBhY3RpdmU6IHRydWUgfTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIHsgYWN0aXZlOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldChcIi9hcGkvdGFza3Mvd29ya2Zsb3dEZWZpbml0aW9uc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb25zID0gU29uYW11LndvcmtmbG93cy53b3JrZmxvd0RlZmluaXRpb25zO1xuICAgICAgICByZXR1cm4geyBkZWZpbml0aW9ucyB9O1xuICAgICAgfSk7XG5cbiAgICAgIHNlcnZlci5nZXQ8e1xuICAgICAgICBRdWVyeXN0cmluZzoge1xuICAgICAgICAgIGxpbWl0Pzogc3RyaW5nO1xuICAgICAgICAgIGFmdGVyPzogc3RyaW5nO1xuICAgICAgICAgIGJlZm9yZT86IHN0cmluZztcbiAgICAgICAgICBvcmRlcj86IFwiYXNjXCIgfCBcImRlc2NcIjtcbiAgICAgICAgICBzdGF0dXM/OiBzdHJpbmc7XG4gICAgICAgICAgd29ya2Zsb3dOYW1lPzogc3RyaW5nO1xuICAgICAgICAgIGNyZWF0ZWRBZnRlcj86IHN0cmluZztcbiAgICAgICAgICBjcmVhdGVkQmVmb3JlPzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3Rhc2tzL3dvcmtmbG93UnVuc1wiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWNrZW5kID0gU29uYW11LndvcmtmbG93cy5iYWNrZW5kO1xuICAgICAgICBjb25zdCB7IGxpbWl0LCBhZnRlciwgYmVmb3JlLCBvcmRlciwgc3RhdHVzLCB3b3JrZmxvd05hbWUsIGNyZWF0ZWRBZnRlciwgY3JlYXRlZEJlZm9yZSB9ID1cbiAgICAgICAgICByZXF1ZXN0LnF1ZXJ5O1xuICAgICAgICByZXR1cm4gYmFja2VuZC5saXN0V29ya2Zsb3dSdW5zKHtcbiAgICAgICAgICBsaW1pdDogbGltaXQgPyBOdW1iZXIucGFyc2VJbnQobGltaXQsIDEwKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBhZnRlcixcbiAgICAgICAgICBiZWZvcmUsXG4gICAgICAgICAgb3JkZXIsXG4gICAgICAgICAgc3RhdHVzOiBzdGF0dXMgPyBzdGF0dXMuc3BsaXQoXCIsXCIpIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdvcmtmbG93TmFtZTogd29ya2Zsb3dOYW1lIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICBjcmVhdGVkQWZ0ZXI6IGNyZWF0ZWRBZnRlciA/IG5ldyBEYXRlKGNyZWF0ZWRBZnRlcikgOiB1bmRlZmluZWQsXG4gICAgICAgICAgY3JlYXRlZEJlZm9yZTogY3JlYXRlZEJlZm9yZSA/IG5ldyBEYXRlKGNyZWF0ZWRCZWZvcmUpIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIuZ2V0PHtcbiAgICAgICAgUGFyYW1zOiB7IGlkOiBzdHJpbmcgfTtcbiAgICAgIH0+KFwiL2FwaS90YXNrcy93b3JrZmxvd1J1bnMvOmlkXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmQgPSBTb25hbXUud29ya2Zsb3dzLmJhY2tlbmQ7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93UnVuID0gYXdhaXQgYmFja2VuZC5nZXRXb3JrZmxvd1J1bih7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZDogcmVxdWVzdC5wYXJhbXMuaWQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXdvcmtmbG93UnVuKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBXb3JrZmxvdyBydW4gbm90IGZvdW5kOiAke3JlcXVlc3QucGFyYW1zLmlkfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3b3JrZmxvd1J1bjtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIFBhcmFtczogeyBpZDogc3RyaW5nIH07XG4gICAgICB9PihcIi9hcGkvdGFza3Mvd29ya2Zsb3dSdW5zLzppZC9jYW5jZWxcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFja2VuZCA9IFNvbmFtdS53b3JrZmxvd3MuYmFja2VuZDtcbiAgICAgICAgcmV0dXJuIGJhY2tlbmQuY2FuY2VsV29ya2Zsb3dSdW4oe1xuICAgICAgICAgIHdvcmtmbG93UnVuSWQ6IHJlcXVlc3QucGFyYW1zLmlkLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIFBhcmFtczogeyBpZDogc3RyaW5nIH07XG4gICAgICB9PihcIi9hcGkvdGFza3Mvd29ya2Zsb3dSdW5zLzppZC9wYXVzZVwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWNrZW5kID0gU29uYW11LndvcmtmbG93cy5iYWNrZW5kO1xuICAgICAgICByZXR1cm4gYmFja2VuZC5wYXVzZVdvcmtmbG93UnVuKHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkOiByZXF1ZXN0LnBhcmFtcy5pZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBQYXJhbXM6IHsgaWQ6IHN0cmluZyB9O1xuICAgICAgfT4oXCIvYXBpL3Rhc2tzL3dvcmtmbG93UnVucy86aWQvcmVzdW1lXCIsIGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhY2tlbmQgPSBTb25hbXUud29ya2Zsb3dzLmJhY2tlbmQ7XG4gICAgICAgIHJldHVybiBiYWNrZW5kLnJlc3VtZVdvcmtmbG93UnVuKHtcbiAgICAgICAgICB3b3JrZmxvd1J1bklkOiByZXF1ZXN0LnBhcmFtcy5pZCxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgc2VydmVyLmdldDx7XG4gICAgICAgIFBhcmFtczogeyBpZDogc3RyaW5nIH07XG4gICAgICAgIFF1ZXJ5c3RyaW5nOiB7XG4gICAgICAgICAgbGltaXQ/OiBzdHJpbmc7XG4gICAgICAgICAgYWZ0ZXI/OiBzdHJpbmc7XG4gICAgICAgICAgYmVmb3JlPzogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3Rhc2tzL3dvcmtmbG93UnVucy86aWQvc3RlcHNcIiwgYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFja2VuZCA9IFNvbmFtdS53b3JrZmxvd3MuYmFja2VuZDtcbiAgICAgICAgY29uc3QgeyBsaW1pdCwgYWZ0ZXIsIGJlZm9yZSB9ID0gcmVxdWVzdC5xdWVyeTtcbiAgICAgICAgcmV0dXJuIGJhY2tlbmQubGlzdFN0ZXBBdHRlbXB0cyh7XG4gICAgICAgICAgd29ya2Zsb3dSdW5JZDogcmVxdWVzdC5wYXJhbXMuaWQsXG4gICAgICAgICAgbGltaXQ6IGxpbWl0ID8gTnVtYmVyLnBhcnNlSW50KGxpbWl0LCAxMCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgYWZ0ZXIsXG4gICAgICAgICAgYmVmb3JlLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvKipcbiAgICAgICAqIEhlYWx0aCBDaGVjayBBUElcbiAgICAgICAqIE1DUCDrj4TqtazqsIAgU29uYW11IOyEnOuyhOulvCDsnpDrj5kg6rCQ7KeA7ZWY6riwIOychO2VnCDsl5Trk5ztj6zsnbjtirhcbiAgICAgICAqL1xuICAgICAgc2VydmVyLmdldChcIi9hcGkvc29uYW11L2hlYWx0aFwiLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICBjb25zdCBhZGRyZXNzID0gcmVxdWVzdC5zZXJ2ZXIuc2VydmVyLmFkZHJlc3MoKTtcbiAgICAgICAgY29uc3QgcG9ydCA9IGFkZHJlc3MgJiYgdHlwZW9mIGFkZHJlc3MgPT09IFwib2JqZWN0XCIgPyAoYWRkcmVzcyBhcyBBZGRyZXNzSW5mbykucG9ydCA6IDA7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgICBwcm9qZWN0OiBwcm9jZXNzLmN3ZCgpLnNwbGl0KFwiL1wiKS5wb3AoKSB8fCBcInVua25vd25cIixcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogRml4dHVyZSDsg53shLEgQVBJXG4gICAgICAgKi9cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eTogc3RyaW5nO1xuICAgICAgICAgIGNvdW50PzogbnVtYmVyO1xuICAgICAgICAgIG92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgIHRhcmdldERiPzogXCJmaXh0dXJlXCIgfCBcInRlc3RcIjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zb25hbXUvZml4dHVyZS9nZW5lcmF0ZVwiLCBhc3luYyAocmVxdWVzdCwgcmVwbHkpID0+IHtcbiAgICAgICAgY29uc3QgeyBlbnRpdHksIGNvdW50ID0gMSwgb3ZlcnJpZGVzLCB0YXJnZXREYiA9IFwiZml4dHVyZVwiIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgLy8g7YOA6rKfIERCIOyEpOyglSDqsIDsoLjsmKTquLBcbiAgICAgICAgY29uc3QgZGJDb25maWcgPSB0YXJnZXREYiA9PT0gXCJmaXh0dXJlXCIgPyBTb25hbXUuZGJDb25maWcuZml4dHVyZSA6IFNvbmFtdS5kYkNvbmZpZy50ZXN0O1xuXG4gICAgICAgIC8vIEtuZXgg7J247Iqk7YS07IqkIOyDneyEsVxuICAgICAgICBjb25zdCBkYiA9IGNyZWF0ZUtuZXhJbnN0YW5jZShkYkNvbmZpZyk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBGaXh0dXJlR2VuZXJhdG9yIOyDneyEsVxuICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBGaXh0dXJlR2VuZXJhdG9yKGRiLCBkYiwgdGFyZ2V0RGIsIEVudGl0eU1hbmFnZXIpO1xuXG4gICAgICAgICAgLy8g64uo7J28IEVudGl0eSDrsLDsuZgg7IOd7ISxXG4gICAgICAgICAgY29uc3QgZml4dHVyZXMgPSBhd2FpdCBnZW5lcmF0b3IuZ2VuZXJhdGVCYXRjaChbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVudGl0eSxcbiAgICAgICAgICAgICAgY291bnQsXG4gICAgICAgICAgICAgIG92ZXJyaWRlczogb3ZlcnJpZGVzID8/IHt9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKTtcblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgZW50aXR5LFxuICAgICAgICAgICAgY291bnQ6IGZpeHR1cmVzLmxlbmd0aCxcbiAgICAgICAgICAgIGZpeHR1cmVzLFxuICAgICAgICAgICAgdGFyZ2V0RGIsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXBseS5zdGF0dXMoNDAwKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgYXdhaXQgZGIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyoqXG4gICAgICAgKiBGaXh0dXJlIOuNsOydtO2EsCDtg5Dsg4kgQVBJXG4gICAgICAgKi9cbiAgICAgIHNlcnZlci5wb3N0PHtcbiAgICAgICAgQm9keToge1xuICAgICAgICAgIGVudGl0eTogc3RyaW5nO1xuICAgICAgICAgIHN0cmF0ZWd5OiBcInNhbXBsZVwiIHwgXCJyZWNlbnRcIiB8IFwicmFuZG9tXCIgfCBcInF1ZXJ5XCI7XG4gICAgICAgICAgbGltaXQ/OiBudW1iZXI7XG4gICAgICAgICAgd2hlcmU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgfTtcbiAgICAgIH0+KFwiL2FwaS9zb25hbXUvZml4dHVyZS9leHBsb3JlXCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0eSwgc3RyYXRlZ3ksIGxpbWl0ID0gMTAsIHdoZXJlIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgLy8gRml4dHVyZSBEQiDshKTsoJUg6rCA7KC47Jik6riwXG4gICAgICAgIGNvbnN0IGZpeHR1cmVEYkNvbmZpZyA9IFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlO1xuXG4gICAgICAgIC8vIEtuZXgg7J247Iqk7YS07IqkIOyDneyEsVxuICAgICAgICBjb25zdCBmaXh0dXJlRGIgPSBjcmVhdGVLbmV4SW5zdGFuY2UoZml4dHVyZURiQ29uZmlnKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIERhdGFFeHBsb3JlciDsg53shLFcbiAgICAgICAgICBjb25zdCBleHBsb3JlciA9IG5ldyBEYXRhRXhwbG9yZXIoZml4dHVyZURiLCBFbnRpdHlNYW5hZ2VyKTtcblxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBleHBsb3Jlci5leHBsb3JlKGVudGl0eSwge1xuICAgICAgICAgICAgc3RyYXRlZ3ksXG4gICAgICAgICAgICBsaW1pdCxcbiAgICAgICAgICAgIHdoZXJlLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICBzdHJhdGVneSxcbiAgICAgICAgICAgIGNvdW50OiBkYXRhLmxlbmd0aCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXBseS5zdGF0dXMoNDAwKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgYXdhaXQgZml4dHVyZURiLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8qKlxuICAgICAgICogRml4dHVyZSDrjbDsnbTthLAg6rCA7KC47Jik6riwIChmZXRjaCkgQVBJXG4gICAgICAgKiBwcm9kdWN0aW9uL2RldmVsb3BtZW50IERC7JeQ7IScIOyLpOygnCDrjbDsnbTthLDrpbwgZml4dHVyZSBEQuuhnCBpbXBvcnRcbiAgICAgICAqL1xuICAgICAgc2VydmVyLnBvc3Q8e1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgZW50aXR5OiBzdHJpbmc7XG4gICAgICAgICAgc3RyYXRlZ3k/OiBcInNhbXBsZVwiIHwgXCJyZWNlbnRcIiB8IFwicmFuZG9tXCIgfCBcInF1ZXJ5XCI7XG4gICAgICAgICAgbGltaXQ/OiBudW1iZXI7XG4gICAgICAgICAgaW5jbHVkZVJlbGF0aW9ucz86IGJvb2xlYW47XG4gICAgICAgICAgbWF4RGVwdGg/OiBudW1iZXI7XG4gICAgICAgIH07XG4gICAgICB9PihcIi9hcGkvc29uYW11L2ZpeHR1cmUvZmV0Y2hcIiwgYXN5bmMgKHJlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgc3RyYXRlZ3kgPSBcInJlY2VudFwiLFxuICAgICAgICAgIGxpbWl0ID0gMTAsXG4gICAgICAgICAgaW5jbHVkZVJlbGF0aW9ucyA9IHRydWUsXG4gICAgICAgICAgbWF4RGVwdGggPSAyLFxuICAgICAgICB9ID0gcmVxdWVzdC5ib2R5O1xuXG4gICAgICAgIC8vIFNvdXJjZSBEQiAocHJvZHVjdGlvbi9kZXZlbG9wbWVudCkgLSDsnb3quLAg7KCE7JqpXG4gICAgICAgIGNvbnN0IHNvdXJjZURiID0gREIuZ2V0REIoXCJyXCIpO1xuXG4gICAgICAgIC8vIFRhcmdldCBEQiAoZml4dHVyZSlcbiAgICAgICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEZpeHR1cmVHZW5lcmF0b3Ig7IOd7ISxXG4gICAgICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IEZpeHR1cmVHZW5lcmF0b3Ioc291cmNlRGIsIGZpeHR1cmVEYiwgXCJmaXh0dXJlXCIsIEVudGl0eU1hbmFnZXIpO1xuXG4gICAgICAgICAgLy8gcHJvZHVjdGlvbiDrjbDsnbTthLDrpbwgZml4dHVyZSBEQuuhnCBpbXBvcnRcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgZ2VuZXJhdG9yLmltcG9ydEZyb21Tb3VyY2UoZW50aXR5LCB7XG4gICAgICAgICAgICBzdHJhdGVneSxcbiAgICAgICAgICAgIGxpbWl0LFxuICAgICAgICAgICAgaW5jbHVkZVJlbGF0aW9ucyxcbiAgICAgICAgICAgIG1heERlcHRoLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBlbnRpdHksXG4gICAgICAgICAgICBzdHJhdGVneSxcbiAgICAgICAgICAgIGNvdW50OiByZXN1bHRzLmxlbmd0aCxcbiAgICAgICAgICAgIGltcG9ydGVkOiByZXN1bHRzLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVwbHkuc3RhdHVzKDQwMCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIHNvdXJjZURi64qUIFNvbmFtdeqwgCDqtIDrpqztlZjrr4DroZwgZGVzdHJvee2VmOyngCDslYrsnYxcbiAgICAgICAgICBhd2FpdCBmaXh0dXJlRGIuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLyoqXG4gICAgICAgKiBGaXh0dXJlIOuNsOydtO2EsCDsgq3soJwgKGNsZWFuKSBBUElcbiAgICAgICAqIEZLIOyInOyEnOulvCDqs6DroKTtlZjsl6wg7JWI7KCE7ZWY6rKMIOyCreygnFxuICAgICAgICovXG4gICAgICBzZXJ2ZXIucG9zdDx7XG4gICAgICAgIEJvZHk6IHtcbiAgICAgICAgICBlbnRpdGllcz86IHN0cmluZ1tdO1xuICAgICAgICB9O1xuICAgICAgfT4oXCIvYXBpL3NvbmFtdS9maXh0dXJlL2NsZWFuXCIsIGFzeW5jIChyZXF1ZXN0LCByZXBseSkgPT4ge1xuICAgICAgICBjb25zdCB7IGVudGl0aWVzIH0gPSByZXF1ZXN0LmJvZHk7XG5cbiAgICAgICAgLy8gRml4dHVyZSBEQiDsl7DqsrBcbiAgICAgICAgY29uc3QgZml4dHVyZURiID0gY3JlYXRlS25leEluc3RhbmNlKFNvbmFtdS5kYkNvbmZpZy5maXh0dXJlKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIOyCreygnO2VoCBFbnRpdHkg66qp66GdIOqysOyglVxuICAgICAgICAgIGNvbnN0IHRhcmdldEVudGl0aWVzID1cbiAgICAgICAgICAgIGVudGl0aWVzICYmIGVudGl0aWVzLmxlbmd0aCA+IDAgPyBlbnRpdGllcyA6IEVudGl0eU1hbmFnZXIuZ2V0QWxsSWRzKCk7XG5cbiAgICAgICAgICAvLyBFbnRpdHkgSUTrpbwg7YWM7J2067iU66qF7Jy866GcIOuzgO2ZmCAoc25ha2VfY2FzZSDrs7XsiJjtmJUpXG4gICAgICAgICAgY29uc3QgdGFibGVOYW1lcyA9IHRhcmdldEVudGl0aWVzLm1hcCgoZW50aXR5SWQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICAgICAgICAgIHJldHVybiBlbnRpdHkudGFibGU7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBQb3N0Z3JlU1FMOiBUUlVOQ0FURSBDQVNDQURF66GcIEZLIOyInOyEnCDrrLTqtIDtlZjqsowg7JWI7KCE7ZWY6rKMIOyCreygnFxuICAgICAgICAgIC8vIENBU0NBREUg7Ji17IWY7Jy866GcIOydmOyhtOyEsSDsnojripQg642w7J207YSw64+EIO2VqOq7mCDsgq3soJxcbiAgICAgICAgICBhd2FpdCBmaXh0dXJlRGIucmF3KFxuICAgICAgICAgICAgYFRSVU5DQVRFIFRBQkxFICR7dGFibGVOYW1lcy5tYXAoKHQpID0+IGBcIiR7dH1cImApLmpvaW4oXCIsIFwiKX0gUkVTVEFSVCBJREVOVElUWSBDQVNDQURFYCxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgICAgICBjbGVhbmVkOiB0YWJsZU5hbWVzLFxuICAgICAgICAgICAgY291bnQ6IHRhYmxlTmFtZXMubGVuZ3RoLFxuICAgICAgICAgIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVwbHkuc3RhdHVzKDQwMCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGF3YWl0IGZpeHR1cmVEYi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyB1aS13ZWIg67mM65OcIO2MjOydvCDshJzruZlcbiAgICAgIGNvbnN0IHVpRGlzdFBhdGggPSBwYXRoLnJlc29sdmUoaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLi91aS13ZWJcIik7XG5cbiAgICAgIC8vIOygleyggSDtjIzsnbwg7ISc67mZOiDro6jtirgg7Y+0642UIOyghOyytCAoYXNzZXRzLCBzZXR0aW5nLnN2ZyDrk7EpXG4gICAgICBzZXJ2ZXIucmVnaXN0ZXIoYXdhaXQgaW1wb3J0KFwiQGZhc3RpZnkvc3RhdGljXCIpLCB7XG4gICAgICAgIHJvb3Q6IHVpRGlzdFBhdGgsXG4gICAgICAgIHByZWZpeDogXCIvXCIsXG4gICAgICAgIGRlY29yYXRlUmVwbHk6IGZhbHNlLFxuICAgICAgICB3aWxkY2FyZDogZmFsc2UsXG4gICAgICB9KTtcblxuICAgICAgLy8gU1BBIGZhbGxiYWNrIC0g7KCV7KCBIO2MjOydvOydtCDsl4bripQg66qo65OgIOqyveuhnOuKlCBpbmRleC5odG1s66GcXG4gICAgICBzZXJ2ZXIuZ2V0KFwiKlwiLCBhc3luYyAoX3JlcXVlc3QsIHJlcGx5KSA9PiB7XG4gICAgICAgIHJlcGx5LmhlYWRlcnMoeyBcIkNvbnRlbnQtdHlwZVwiOiBcInRleHQvaHRtbFwiIH0pLnNlbmQoXG4gICAgICAgICAgZnNcbiAgICAgICAgICAgIC5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKHVpRGlzdFBhdGgsIFwiaW5kZXguaHRtbFwiKSlcbiAgICAgICAgICAgIC50b1N0cmluZygpXG4gICAgICAgICAgICAucmVwbGFjZShcInt7cHJvamVjdE5hbWV9fVwiLCBTb25hbXUuY29uZmlnLnByb2plY3ROYW1lID8/IFwiVW5rbm93blNvbmFtdVByb2plY3RcIiksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHsgcHJlZml4OiBcIi9zb25hbXUtdWlcIiB9LFxuICApO1xufVxuIl0sIm5hbWVzIjpbImV4ZWNTeW5jIiwiZnMiLCJpbmZsZWN0aW9uIiwicGF0aCIsInJhbmdlIiwiU29uYW11IiwiREIiLCJjcmVhdGVLbmV4SW5zdGFuY2UiLCJTRCIsInNvbmFtdURpY3Rpb25hcnkiLCJFbnRpdHlNYW5hZ2VyIiwiQmFkUmVxdWVzdEV4Y2VwdGlvbiIsImlzU29FeGNlcHRpb24iLCJTZXJ2aWNlVW5hdmFpbGFibGVFeGNlcHRpb24iLCJNaWdyYXRvciIsIlNsYWNrQ29uZmlybSIsIlRlbXBsYXRlTWFuYWdlciIsIkRhdGFFeHBsb3JlciIsIkZpeHR1cmVHZW5lcmF0b3IiLCJGaXh0dXJlTWFuYWdlciIsIkJVSUxUX0lOX1RZUEVfSURTIiwiVGVtcGxhdGVLZXkiLCJub25OdWxsYWJsZSIsInNldEFpQXBpIiwic29uYW11VUlBcGlQbHVnaW4iLCJmYXN0aWZ5IiwicmVnaXN0ZXIiLCJzZXJ2ZXIiLCJtaWdyYXRvciIsIndhaXRGb3JITVJDb21wbGV0ZWQiLCJmbiIsIndhaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJoYW5kbGVyIiwiY2xlYXJUaW1lb3V0IiwidGltZW91dCIsInNldFRpbWVvdXQiLCJzeW5jZXIiLCJldmVudEVtaXR0ZXIiLCJvZmYiLCJvbmNlIiwicmVzdWx0IiwiZ2V0IiwiY29uZmlnIiwicmVxdWVzdCIsImVudGl0eUlkIiwicHJlc2V0IiwiYWJzUGF0aCIsInF1ZXJ5IiwidGFyZ2V0UGF0aCIsImVudGl0eSIsIm5hbWVzIiwiYXBpUm9vdFBhdGgiLCJmaWxlbmFtZSIsInBhcmVudEZzIiwib3JpZ2luIiwiZ2xvc3NhcnkiLCJNYXAiLCJnZXRBbGxJZHMiLCJ0aXRsZSIsInNldCIsInVuZGVyc2NvcmUiLCJpZCIsInBsdXJhbGl6ZSIsInByb3BzIiwiZm9yRWFjaCIsInByb3AiLCJoYXMiLCJuYW1lIiwiZGVzYyIsInJlcGxhY2UiLCJzdWdnZXN0ZWQiLCJ3b3JkcyIsInNwbGl0IiwiY29tYmluYXRpb25zIiwibGVuZ3RoIiwiZmxhdE1hcCIsImxlbiIsImlkeCIsInciLCJzbGljZSIsImpvaW4iLCJSRVBMQUNFRF9QUkVGSVgiLCJyZW1haW5BcnIiLCJjb21iIiwicmVtYWluU3RyIiwiaW5jbHVkZXMiLCJtYXAiLCJyIiwic3RhcnRzV2l0aCIsInRvVXBwZXJDYXNlIiwiZW50aXR5SWRzIiwiZmxhdHRlblN1YnNldFJvd3MiLCJzdWJzZXRSb3dzIiwic3Vic2V0Um93IiwiY2hpbGRyZW4iLCJzUm93IiwiZW50aXRpZXMiLCJhbGwiLCJnZXRTdWJzZXRSb3dzIiwic29ydCIsImEiLCJiIiwiYUlkIiwicGFyZW50SWQiLCJiSWQiLCJ1bmRlZmluZWQiLCJmaWx0ZXIiLCJyZWxvYWQiLCJhdXRvbG9hZFR5cGVzIiwidHlwZUlkcyIsInByb2plY3RUeXBlSWRzIiwiT2JqZWN0IiwiZW50cmllcyIsInR5cGVzIiwiX3R5cGVJZCIsInpvZFR5cGUiLCJfem9kIiwiZGVmIiwidHlwZSIsInR5cGVJZCIsIl96b2RUeXBlIiwiYnVpbHRJblR5cGVJZHMiLCJhbGxUeXBlSWRzIiwiZW51bUlkcyIsImtleXMiLCJlbnVtTGFiZWxzIiwicG9zdCIsImZvcm0iLCJib2R5IiwiY3JlYXRlRW50aXR5IiwiZGVsRW50aXR5IiwibmV3VmFsdWVzIiwidGFibGUiLCJzYXZlIiwic3Vic2V0S2V5IiwiZmllbGRzIiwiZmllbGRzSW50ZXJuYWwiLCJzdWJzZXRzIiwic3Vic2V0c0ludGVybmFsIiwidXBkYXRlZCIsInVwZGF0ZWRJbnRlcm5hbCIsImF0IiwibmV3UHJvcCIsImNyZWF0ZVByb3AiLCJtb2RpZnlQcm9wIiwiZGVsUHJvcCIsInRvIiwibW92ZVByb3AiLCJpbmRleGVzIiwibmV3RW51bUlkIiwiRXJyb3IiLCJlbmRzV2l0aCIsImFjdGl2ZSIsImhpZGRlbiIsImVudW1JZCIsImlzRXhpc3RzIiwic29tZSIsImFmdGVyIiwiYmVmb3JlIiwiaXNSZWZlcmVuY2VkIiwidGFyZ2V0IiwicHJvcE5hbWUiLCJjb25lIiwiZmluZCIsInAiLCJlbnVtQ29uZXMiLCJzdWJzZXRDb25lcyIsInJlcGx5IiwicHJlc2VydmVFeGlzdGluZyIsIm9ubHlFbXB0eSIsImxvY2FsZSIsImVmZmVjdGl2ZUxvY2FsZSIsImkxOG4iLCJkZWZhdWx0TG9jYWxlIiwiZ2VuZXJhdGVDb25lcyIsImVycm9yIiwibWVzc2FnZSIsIlN0cmluZyIsInN0YXR1cyIsInN1Y2Nlc3MiLCJjb2x1bW5zIiwiZ2V0VGFibGVDb2x1bW5zIiwiZ2V0U3RhdHVzIiwiYWN0aW9uIiwidGFyZ2V0cyIsImZvcmNlIiwiZm9yY2VSZWFzb24iLCJyZXF1ZXN0b3IiLCJydW5TaGFkb3dUZXN0Iiwic2xhY2tDb25maXJtIiwicmVxdWlyZXNBcHByb3ZhbCIsInQiLCJpc1RhcmdldFJlcXVpcmVzQXBwcm92YWwiLCJsb2NhbEhvc3RzIiwiaXNMb2NhbFRhcmdldCIsImV2ZXJ5IiwidGFyZ2V0Q29uZmlnIiwiZGJDb25maWciLCJob3N0IiwiY29ubmVjdGlvbiIsInRvTG93ZXJDYXNlIiwiaXNDb25maWd1cmVkIiwiY29ubnMiLCJwZW5kaW5nTWlncmF0aW9ucyIsIlNldCIsImNvbm4iLCJjb25uS2V5IiwicGVuZGluZyIsImV4aXN0aW5nIiwiZ2V0RXhpc3RpbmdSZXF1ZXN0IiwiYXBwcm92ZWQiLCJyZWplY3RlZCIsImNoZWNrQXBwcm92YWwiLCJjaGFubmVsIiwidHMiLCJydW5BY3Rpb24iLCJsb2dFeGVjdXRpb24iLCJmb3JjZUFwcHJvdmFsIiwicG9zdEFwcHJvdmFsUmVxdWVzdCIsInNhdmVSZXF1ZXN0IiwicmVhc29uIiwiY29kZU5hbWVzIiwiZGVsQ29kZXMiLCJfcmVxdWVzdHQiLCJnZW5lcmF0ZVByZXBhcmVkQ29kZXMiLCJ0ZW1wbGF0ZUtleXMiLCJfdGVtcGxhdGVLZXlzIiwib3B0aW9ucyIsInRrIiwidGVtcGxhdGVLZXkiLCJzdGF0dXNlcyIsInN1YlBhdGgiLCJmdWxsUGF0aCIsImNoZWNrRXhpc3RzR2VuQ29kZSIsInRlbXBsYXRlIiwiZ2V0UmVxdWlyZWREaWN0S2V5cyIsImVuc3VyZURpY3RLZXlzIiwib3ZlcndyaXRlIiwiZ2VuZXJhdGVUZW1wbGF0ZSIsImUiLCJzdGF0dXNDb2RlIiwiY29uc29sZSIsIm9wdGlvbiIsInRlbXBsYXRlT3B0aW9ucyIsInBhdGhBbmRDb2RlcyIsInJlbmRlclRlbXBsYXRlIiwic291cmNlREIiLCJ0YXJnZXREQiIsInNlYXJjaCIsImR1cGxpY2F0ZUNoZWNrIiwiZ2V0Rml4dHVyZXMiLCJkYiIsImZpeHR1cmVzIiwiaW5zZXJ0Rml4dHVyZXMiLCJjb2RlIiwiYWRkRml4dHVyZUxvYWRlciIsImdldERpY3Rpb25hcnkiLCJfcmVxdWVzdCIsImJ1ZmZlciIsImV4cG9ydFRvRXhjZWwiLCJoZWFkZXIiLCJzZW5kIiwiZGF0YSIsImZpbGUiLCJ0b0J1ZmZlciIsImltcG9ydEZyb21FeGNlbCIsInVwZGF0ZUVudHJ5IiwiY3JlYXRlRW50cnkiLCJkZWxldGVFbnRyeSIsImtleSIsImNoZWNrVXNhZ2UiLCJ3b3JrZmxvd3MiLCJkZWZpbml0aW9ucyIsIndvcmtmbG93RGVmaW5pdGlvbnMiLCJiYWNrZW5kIiwibGltaXQiLCJvcmRlciIsIndvcmtmbG93TmFtZSIsImNyZWF0ZWRBZnRlciIsImNyZWF0ZWRCZWZvcmUiLCJsaXN0V29ya2Zsb3dSdW5zIiwiTnVtYmVyIiwicGFyc2VJbnQiLCJEYXRlIiwid29ya2Zsb3dSdW4iLCJnZXRXb3JrZmxvd1J1biIsIndvcmtmbG93UnVuSWQiLCJwYXJhbXMiLCJjYW5jZWxXb3JrZmxvd1J1biIsInBhdXNlV29ya2Zsb3dSdW4iLCJyZXN1bWVXb3JrZmxvd1J1biIsImxpc3RTdGVwQXR0ZW1wdHMiLCJhZGRyZXNzIiwicG9ydCIsIm9rIiwicHJvamVjdCIsInByb2Nlc3MiLCJjd2QiLCJwb3AiLCJ0aW1lc3RhbXAiLCJ0b0lTT1N0cmluZyIsImNvdW50Iiwib3ZlcnJpZGVzIiwidGFyZ2V0RGIiLCJmaXh0dXJlIiwidGVzdCIsImdlbmVyYXRvciIsImdlbmVyYXRlQmF0Y2giLCJkZXN0cm95Iiwic3RyYXRlZ3kiLCJ3aGVyZSIsImZpeHR1cmVEYkNvbmZpZyIsImZpeHR1cmVEYiIsImV4cGxvcmVyIiwiZXhwbG9yZSIsImluY2x1ZGVSZWxhdGlvbnMiLCJtYXhEZXB0aCIsInNvdXJjZURiIiwiZ2V0REIiLCJyZXN1bHRzIiwiaW1wb3J0RnJvbVNvdXJjZSIsImltcG9ydGVkIiwidGFyZ2V0RW50aXRpZXMiLCJ0YWJsZU5hbWVzIiwicmF3IiwiY2xlYW5lZCIsInVpRGlzdFBhdGgiLCJkaXJuYW1lIiwicm9vdCIsInByZWZpeCIsImRlY29yYXRlUmVwbHkiLCJ3aWxkY2FyZCIsImhlYWRlcnMiLCJyZWFkRmlsZVN5bmMiLCJ0b1N0cmluZyIsInByb2plY3ROYW1lIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFTQSxRQUFRLFFBQVEsZ0JBQWdCO0FBRXpDLE9BQU9DLFFBQVEsS0FBSztBQUNwQixPQUFPQyxnQkFBZ0IsYUFBYTtBQUVwQyxPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsS0FBSyxRQUFRLFVBQVU7QUFDaEMsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQUN2QyxTQUFTQyxFQUFFLFFBQTZCLG9CQUFpQjtBQUN6RCxTQUFTQyxrQkFBa0IsUUFBUSxzQkFBbUI7QUFDdEQsU0FBU0MsRUFBRSxRQUFRLGdCQUFhO0FBQ2hDLFNBQVNDLGdCQUFnQixRQUFRLCtCQUE0QjtBQUU3RCxTQUFTQyxhQUFhLFFBQVEsOEJBQTJCO0FBQ3pELFNBQ0VDLG1CQUFtQixFQUNuQkMsYUFBYSxFQUNiQywyQkFBMkIsUUFDdEIsaUNBQThCO0FBQ3JDLFNBQStCQyxRQUFR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
|
package/package.json
CHANGED
|
@@ -136,11 +136,11 @@ export class Migrator {
|
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
const compareDBconn = createKnexInstance(Sonamu.dbConfig[status0conn.connKey]);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
139
|
+
try {
|
|
140
|
+
return await this.compareMigrations(compareDBconn);
|
|
141
|
+
} finally {
|
|
142
|
+
await compareDBconn.destroy();
|
|
143
|
+
}
|
|
144
144
|
})();
|
|
145
145
|
|
|
146
146
|
Naite.t("migrator:getStatus:preparedCodes", preparedCodes);
|
|
@@ -192,44 +192,45 @@ export class Migrator {
|
|
|
192
192
|
})),
|
|
193
193
|
);
|
|
194
194
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
// destroy
|
|
224
|
-
await Promise.all(
|
|
225
|
-
conns.map(({ knex }) => {
|
|
226
|
-
return knex.destroy();
|
|
227
|
-
}),
|
|
228
|
-
);
|
|
195
|
+
try {
|
|
196
|
+
// action
|
|
197
|
+
const result = await (async () => {
|
|
198
|
+
switch (action) {
|
|
199
|
+
case "apply":
|
|
200
|
+
return Promise.all(
|
|
201
|
+
conns.map(async ({ connKey, knex }) => {
|
|
202
|
+
const [batchNo, applied] = await knex.migrate.latest();
|
|
203
|
+
return {
|
|
204
|
+
connKey,
|
|
205
|
+
batchNo,
|
|
206
|
+
applied, // 이번 latest 호출로 인해 "up"이 적용된 마이그레이션 이름(e.g. "20251124233557_create__companies.ts")들의 배열입니다. 참고: https://github.com/knex/knex/blob/01b177c485d696f1b72858dee728ba143c4fad76/lib/migrations/migrate/Migrator.js#L560
|
|
207
|
+
};
|
|
208
|
+
}),
|
|
209
|
+
);
|
|
210
|
+
case "rollback":
|
|
211
|
+
return Promise.all(
|
|
212
|
+
conns.map(async ({ connKey, knex }) => {
|
|
213
|
+
const [batchNo, applied] = await knex.migrate.rollback();
|
|
214
|
+
return {
|
|
215
|
+
connKey,
|
|
216
|
+
batchNo,
|
|
217
|
+
applied, // 이번 rollback 호출로 인해 "down"이 적용된(=롤백된) 마이그레이션 이름(e.g. "20251124233557_create__companies.ts")들의 배열입니다. 참고: https://github.com/knex/knex/blob/01b177c485d696f1b72858dee728ba143c4fad76/lib/migrations/migrate/Migrator.js#L611
|
|
218
|
+
};
|
|
219
|
+
}),
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
})();
|
|
229
223
|
|
|
230
|
-
|
|
224
|
+
Naite.t("migrator:runAction:result", result);
|
|
231
225
|
|
|
232
|
-
|
|
226
|
+
return result;
|
|
227
|
+
} finally {
|
|
228
|
+
await Promise.all(
|
|
229
|
+
conns.map(({ knex }) => {
|
|
230
|
+
return knex.destroy();
|
|
231
|
+
}),
|
|
232
|
+
);
|
|
233
|
+
}
|
|
233
234
|
}
|
|
234
235
|
|
|
235
236
|
/**
|
|
@@ -49,6 +49,11 @@ axios.defaults.transformResponse = [
|
|
|
49
49
|
},
|
|
50
50
|
];
|
|
51
51
|
|
|
52
|
+
axios.interceptors.request.use((config) => {
|
|
53
|
+
config.headers["Accept-Language"] = getCurrentLocale();
|
|
54
|
+
return config;
|
|
55
|
+
});
|
|
56
|
+
|
|
52
57
|
export async function fetch(options: AxiosRequestConfig) {
|
|
53
58
|
try {
|
|
54
59
|
const res = await axios({
|
package/src/ui/api.ts
CHANGED
|
@@ -47,16 +47,16 @@ export async function sonamuUIApiPlugin(fastify: FastifyInstance) {
|
|
|
47
47
|
// waitForHMRCompleted
|
|
48
48
|
async function waitForHMRCompleted<T>(fn: () => Promise<T>): Promise<T> {
|
|
49
49
|
const waitPromise = new Promise<void>((resolve) => {
|
|
50
|
-
const timeout = setTimeout(() => {
|
|
51
|
-
resolve();
|
|
52
|
-
}, 1500);
|
|
53
|
-
|
|
54
50
|
const handler = () => {
|
|
55
51
|
clearTimeout(timeout);
|
|
56
|
-
Sonamu.syncer.eventEmitter.off("onHMRCompleted", handler);
|
|
57
52
|
resolve();
|
|
58
53
|
};
|
|
59
54
|
|
|
55
|
+
const timeout = setTimeout(() => {
|
|
56
|
+
Sonamu.syncer.eventEmitter.off("onHMRCompleted", handler);
|
|
57
|
+
resolve();
|
|
58
|
+
}, 1500);
|
|
59
|
+
|
|
60
60
|
Sonamu.syncer.eventEmitter.once("onHMRCompleted", handler);
|
|
61
61
|
});
|
|
62
62
|
|