@secrecy/lib 1.5.0 → 1.6.0

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.
@@ -1,21 +1,48 @@
1
1
  import type { SecrecyClient, SuccessResponse, UserData } from "../index.js";
2
2
  import type { KeyPair } from "../crypto/index.js";
3
3
  import type { ErrorAccessDenied, ErrorBasic, ErrorNotExist, ErrorNotFound } from "../error.js";
4
- import type { Thunder } from "../zeus/index.js";
4
+ import type { MongoDbEnv, Thunder } from "../zeus/index.js";
5
5
  import type { Document } from "bson";
6
6
  export declare class SecrecyDbClient {
7
7
  #private;
8
8
  constructor(_client: SecrecyClient, _keys: KeyPair, thunder: ReturnType<typeof Thunder>);
9
- get<U>({ field, userId }: {
9
+ getDbConfig<T>({ appId, env }: {
10
+ appId: string;
11
+ env: MongoDbEnv;
12
+ }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorNotFound | null>;
13
+ dbGetDiff<T>({ appId, env, config }: {
14
+ appId: string;
15
+ env: MongoDbEnv;
16
+ config: string;
17
+ }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null>;
18
+ setDbConfig<T>({ appId, env, config }: {
19
+ appId: string;
20
+ env: MongoDbEnv;
21
+ config: string;
22
+ }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null>;
23
+ dbConfigPushToProd<T>({ appId, diffHash }: {
24
+ appId: string;
25
+ diffHash: string;
26
+ }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | null>;
27
+ get<U>({ field, appId, userId, env }: {
10
28
  field: string;
29
+ appId: string;
30
+ env: MongoDbEnv;
11
31
  userId?: string | null | undefined;
12
- }): Promise<SuccessResponse<U> | ErrorAccessDenied | ErrorNotExist | ErrorNotFound | null>;
13
- set<T extends UserData, U extends Document>({ value, userId }: {
32
+ }): Promise<SuccessResponse<U> | ErrorAccessDenied | ErrorBasic | ErrorNotExist | ErrorNotFound | null>;
33
+ set<T extends UserData, U extends Document>({ value, appId, env, userId }: {
14
34
  value: U;
35
+ appId: string;
36
+ env: MongoDbEnv;
15
37
  userId?: string | null | undefined;
16
- }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorNotFound | null>;
17
- search<T>({ search, field }: {
38
+ }): Promise<SuccessResponse<T> | ErrorAccessDenied | ErrorBasic | ErrorNotFound | null>;
39
+ search<T>({ appId, env, search, field, take, skip, orderBy }: {
40
+ appId: string;
41
+ env: MongoDbEnv;
18
42
  field: string;
19
43
  search: string;
44
+ take?: number;
45
+ skip?: number;
46
+ orderBy?: "createdAt_ASC" | "createdAt_DESC";
20
47
  }): Promise<SuccessResponse<T[]> | ErrorAccessDenied | ErrorBasic | ErrorNotExist | null>;
21
48
  }
@@ -2,6 +2,7 @@ import _classPrivateFieldLooseBase from "@babel/runtime/helpers/classPrivateFiel
2
2
  import _classPrivateFieldLooseKey from "@babel/runtime/helpers/classPrivateFieldLooseKey";
3
3
  /* eslint-disable @typescript-eslint/naming-convention */
4
4
 
5
+ import { encoders } from "../utils/encoders.js";
5
6
  import { serialize } from "bson";
6
7
  var _thunder = /*#__PURE__*/_classPrivateFieldLooseKey("thunder");
7
8
  export class SecrecyDbClient {
@@ -18,22 +19,240 @@ export class SecrecyDbClient {
18
19
  // this.#keys = keys;
19
20
  _classPrivateFieldLooseBase(this, _thunder)[_thunder] = thunder;
20
21
  }
21
- async get(_ref) {
22
+
23
+ /**
24
+ * Get the DbConfig by "env", it can be either "dev" or "prod".
25
+ */
26
+ async getDbConfig(_ref) {
22
27
  let {
23
- field,
24
- userId
28
+ appId,
29
+ env
25
30
  } = _ref;
31
+ const {
32
+ dbConfig
33
+ } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("query", {
34
+ scalars: {
35
+ Json: encoders.json
36
+ }
37
+ })({
38
+ dbConfig: [{
39
+ appId,
40
+ env
41
+ }, {
42
+ "...on ErrorAccessDenied": {
43
+ __typename: true,
44
+ message: true
45
+ },
46
+ "...on ErrorNotFound": {
47
+ __typename: true,
48
+ message: true
49
+ },
50
+ "...on DbConfigResponse": {
51
+ __typename: true,
52
+ json: true
53
+ }
54
+ }]
55
+ });
56
+ if (!dbConfig) {
57
+ return null;
58
+ }
59
+ if (dbConfig.__typename === "ErrorAccessDenied") {
60
+ return dbConfig;
61
+ }
62
+ if (dbConfig.__typename === "ErrorNotFound") {
63
+ return dbConfig;
64
+ }
65
+ return {
66
+ __typename: "SuccessResponse",
67
+ data: dbConfig.json
68
+ };
69
+ }
70
+
71
+ /**
72
+ * Get the difference recipe between two DB configurations.
73
+ */
74
+ async dbGetDiff(_ref2) {
75
+ let {
76
+ appId,
77
+ env,
78
+ config
79
+ } = _ref2;
80
+ const {
81
+ dbGetDiff
82
+ } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("query", {
83
+ scalars: {
84
+ Json: encoders.json
85
+ }
86
+ })({
87
+ dbGetDiff: [{
88
+ appId,
89
+ env,
90
+ config
91
+ }, {
92
+ "...on ErrorBasic": {
93
+ __typename: true,
94
+ message: true
95
+ },
96
+ "...on ErrorAccessDenied": {
97
+ __typename: true,
98
+ message: true
99
+ },
100
+ "...on DbGetDiffConfigResponse": {
101
+ __typename: true,
102
+ dbGetDiffConfig: {
103
+ env: true,
104
+ current: true,
105
+ next: true,
106
+ diff: true,
107
+ hash: true
108
+ }
109
+ }
110
+ }]
111
+ });
112
+ if (!dbGetDiff) {
113
+ return null;
114
+ }
115
+ if (dbGetDiff.__typename === "ErrorBasic") {
116
+ return dbGetDiff;
117
+ }
118
+ if (dbGetDiff.__typename === "ErrorAccessDenied") {
119
+ return dbGetDiff;
120
+ }
121
+ return {
122
+ __typename: "SuccessResponse",
123
+ data: dbGetDiff.dbGetDiffConfig
124
+ };
125
+ }
126
+
127
+ /**
128
+ * Set the DbConfig by "env", it can be either "dev" or "prod".
129
+ *
130
+ * Mostly used for hotfixes on production or common changes on development.
131
+ */
132
+ async setDbConfig(_ref3) {
133
+ let {
134
+ appId,
135
+ env,
136
+ config
137
+ } = _ref3;
138
+ const {
139
+ dbConfigMutation
140
+ } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("mutation", {
141
+ scalars: {
142
+ Json: encoders.json
143
+ }
144
+ })({
145
+ dbConfigMutation: [{
146
+ appId,
147
+ env,
148
+ config
149
+ }, {
150
+ "...on ErrorAccessDenied": {
151
+ __typename: true,
152
+ message: true
153
+ },
154
+ "...on ErrorBasic": {
155
+ __typename: true,
156
+ message: true
157
+ },
158
+ "...on DbConfigMutationResponse": {
159
+ __typename: true,
160
+ dbConfigMutation: true
161
+ }
162
+ }]
163
+ });
164
+ if (!dbConfigMutation) {
165
+ return null;
166
+ }
167
+ if (dbConfigMutation.__typename === "ErrorBasic") {
168
+ return dbConfigMutation;
169
+ }
170
+ if (dbConfigMutation.__typename === "ErrorAccessDenied") {
171
+ return dbConfigMutation;
172
+ }
173
+ return {
174
+ __typename: "SuccessResponse",
175
+ data: dbConfigMutation.dbConfigMutation
176
+ };
177
+ }
178
+
179
+ /**
180
+ * Push the dbConfigDev to the dbCongigProd.
181
+ *
182
+ * It requires a diffHash to verify that the developer has validated his changes.
183
+ */
184
+ async dbConfigPushToProd(_ref4) {
185
+ let {
186
+ appId,
187
+ diffHash
188
+ } = _ref4;
189
+ const {
190
+ dbConfigToProdMutation
191
+ } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("mutation", {
192
+ scalars: {
193
+ Json: encoders.json
194
+ }
195
+ })({
196
+ dbConfigToProdMutation: [{
197
+ appId,
198
+ diffHash
199
+ }, {
200
+ "...on ErrorAccessDenied": {
201
+ __typename: true,
202
+ message: true
203
+ },
204
+ "...on ErrorBasic": {
205
+ __typename: true,
206
+ message: true
207
+ },
208
+ "...on DbConfigToProdMutationResponse": {
209
+ __typename: true,
210
+ dbConfigToProdMutation: true
211
+ }
212
+ }]
213
+ });
214
+ if (!dbConfigToProdMutation) {
215
+ return null;
216
+ }
217
+ if (dbConfigToProdMutation.__typename === "ErrorBasic") {
218
+ return dbConfigToProdMutation;
219
+ }
220
+ if (dbConfigToProdMutation.__typename === "ErrorAccessDenied") {
221
+ return dbConfigToProdMutation;
222
+ }
223
+ return {
224
+ __typename: "SuccessResponse",
225
+ data: dbConfigToProdMutation.dbConfigToProdMutation
226
+ };
227
+ }
228
+
229
+ /**
230
+ * Get the value of a field.
231
+ */
232
+ async get(_ref5) {
233
+ let {
234
+ field,
235
+ appId,
236
+ userId,
237
+ env
238
+ } = _ref5;
26
239
  const {
27
240
  dbGet
28
241
  } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("query")({
29
242
  dbGet: [{
30
243
  field,
31
- userId
244
+ appId,
245
+ userId,
246
+ env
32
247
  }, {
33
248
  "...on ErrorAccessDenied": {
34
249
  __typename: true,
35
250
  message: true
36
251
  },
252
+ "...on ErrorBasic": {
253
+ __typename: true,
254
+ message: true
255
+ },
37
256
  "...on ErrorNotExist": {
38
257
  __typename: true,
39
258
  message: true
@@ -54,6 +273,9 @@ export class SecrecyDbClient {
54
273
  if (dbGet.__typename === "ErrorAccessDenied") {
55
274
  return dbGet;
56
275
  }
276
+ if (dbGet.__typename === "ErrorBasic") {
277
+ return dbGet;
278
+ }
57
279
  if (dbGet.__typename === "ErrorNotExist") {
58
280
  return dbGet;
59
281
  }
@@ -65,11 +287,17 @@ export class SecrecyDbClient {
65
287
  data: dbGet.json.res
66
288
  };
67
289
  }
68
- async set(_ref2) {
290
+
291
+ /**
292
+ * Set an user document.
293
+ */
294
+ async set(_ref6) {
69
295
  let {
70
296
  value,
297
+ appId,
298
+ env,
71
299
  userId
72
- } = _ref2;
300
+ } = _ref6;
73
301
  if (typeof value !== "object") {
74
302
  throw new Error(`value should be an object including fields you want to update.`);
75
303
  }
@@ -78,12 +306,18 @@ export class SecrecyDbClient {
78
306
  } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("mutation")({
79
307
  dbSet: [{
80
308
  userId,
309
+ appId,
310
+ env,
81
311
  value: serialize(value).toString("base64")
82
312
  }, {
83
313
  "...on ErrorAccessDenied": {
84
314
  __typename: true,
85
315
  message: true
86
316
  },
317
+ "...on ErrorBasic": {
318
+ __typename: true,
319
+ message: true
320
+ },
87
321
  "...on ErrorNotFound": {
88
322
  __typename: true,
89
323
  message: true
@@ -103,6 +337,9 @@ export class SecrecyDbClient {
103
337
  if (dbSet.__typename === "ErrorNotFound") {
104
338
  return dbSet;
105
339
  }
340
+ if (dbSet.__typename === "ErrorBasic") {
341
+ return dbSet;
342
+ }
106
343
  if (!dbSet.dbSet) {
107
344
  return null;
108
345
  }
@@ -111,32 +348,37 @@ export class SecrecyDbClient {
111
348
  data: dbSet.dbSet.res
112
349
  };
113
350
  }
114
- async search(_ref3) {
351
+
352
+ /**
353
+ * Searches for user fields that match the search arguments.
354
+ */
355
+ async search(_ref7) {
115
356
  let {
357
+ appId,
358
+ env,
116
359
  search,
117
- field
118
- } = _ref3;
360
+ field,
361
+ take,
362
+ skip,
363
+ orderBy
364
+ } = _ref7;
119
365
  const {
120
366
  dbSearch
121
367
  } = await _classPrivateFieldLooseBase(this, _thunder)[_thunder]("query", {
122
368
  scalars: {
123
- Json: {
124
- encode: e => JSON.stringify(e),
125
- decode: e => JSON.parse(e)
126
- },
127
- DateTime: {
128
- decode: e => new Date(e),
129
- encode: e => e.toISOString()
130
- },
131
- BigInt: {
132
- decode: e => BigInt(e),
133
- encode: e => e.toString()
134
- }
369
+ Json: encoders.json,
370
+ DateTime: encoders.dateTime,
371
+ BigInt: encoders.bigInt
135
372
  }
136
373
  })({
137
374
  dbSearch: [{
375
+ appId,
376
+ env,
377
+ field,
138
378
  search,
139
- field
379
+ take,
380
+ skip,
381
+ orderBy
140
382
  }, {
141
383
  "...on ErrorAccessDenied": {
142
384
  __typename: true,
@@ -174,4 +416,4 @@ export class SecrecyDbClient {
174
416
  };
175
417
  }
176
418
  }
177
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJzZXJpYWxpemUiLCJTZWNyZWN5RGJDbGllbnQiLCJjb25zdHJ1Y3RvciIsIl9jbGllbnQiLCJfa2V5cyIsInRodW5kZXIiLCJnZXQiLCJmaWVsZCIsInVzZXJJZCIsImRiR2V0IiwiX190eXBlbmFtZSIsIm1lc3NhZ2UiLCJqc29uIiwiZGF0YSIsInJlcyIsInNldCIsInZhbHVlIiwiRXJyb3IiLCJkYlNldCIsInRvU3RyaW5nIiwic2VhcmNoIiwiZGJTZWFyY2giLCJzY2FsYXJzIiwiSnNvbiIsImVuY29kZSIsImUiLCJKU09OIiwic3RyaW5naWZ5IiwiZGVjb2RlIiwicGFyc2UiLCJEYXRlVGltZSIsIkRhdGUiLCJ0b0lTT1N0cmluZyIsIkJpZ0ludCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvU2VjcmVjeURiQ2xpZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuaW1wb3J0IHR5cGUgeyBTZWNyZWN5Q2xpZW50LCBTdWNjZXNzUmVzcG9uc2UsIFVzZXJEYXRhIH0gZnJvbSBcIi4uL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7IEtleVBhaXIgfSBmcm9tIFwiLi4vY3J5cHRvL2luZGV4LmpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEVycm9yQWNjZXNzRGVuaWVkLFxuICBFcnJvckJhc2ljLFxuICBFcnJvck5vdEV4aXN0LFxuICBFcnJvck5vdEZvdW5kXG59IGZyb20gXCIuLi9lcnJvci5qc1wiO1xuaW1wb3J0IHR5cGUgeyBUaHVuZGVyIH0gZnJvbSBcIi4uL3pldXMvaW5kZXguanNcIjtcbmltcG9ydCB0eXBlIHsgRG9jdW1lbnQgfSBmcm9tIFwiYnNvblwiO1xuaW1wb3J0IHsgc2VyaWFsaXplIH0gZnJvbSBcImJzb25cIjtcblxuZXhwb3J0IGNsYXNzIFNlY3JlY3lEYkNsaWVudCB7XG4gIC8vICNjbGllbnQ6IFNlY3JlY3lDbGllbnQ7XG5cbiAgLy8gI2tleXM6IEtleVBhaXI7XG5cbiAgI3RodW5kZXI6IFJldHVyblR5cGU8dHlwZW9mIFRodW5kZXI+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIF9jbGllbnQ6IFNlY3JlY3lDbGllbnQsXG4gICAgX2tleXM6IEtleVBhaXIsXG4gICAgdGh1bmRlcjogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj5cbiAgKSB7XG4gICAgLy8gdGhpcy4jY2xpZW50ID0gY2xpZW50O1xuICAgIC8vIHRoaXMuI2tleXMgPSBrZXlzO1xuICAgIHRoaXMuI3RodW5kZXIgPSB0aHVuZGVyO1xuICB9XG5cbiAgYXN5bmMgZ2V0PFU+KHtcbiAgICBmaWVsZCxcbiAgICB1c2VySWRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgdXNlcklkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfSk6IFByb21pc2U8XG4gICAgfCBTdWNjZXNzUmVzcG9uc2U8VT5cbiAgICB8IEVycm9yQWNjZXNzRGVuaWVkXG4gICAgfCBFcnJvck5vdEV4aXN0XG4gICAgfCBFcnJvck5vdEZvdW5kXG4gICAgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJHZXQgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJxdWVyeVwiKSh7XG4gICAgICBkYkdldDogW1xuICAgICAgICB7XG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgdXNlcklkXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JOb3RGb3VuZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYkdldFJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBqc29uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiR2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RFeGlzdFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiAoZGJHZXQuanNvbiBhcyB7IHJlczogVSB9KS5yZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2V0PFQgZXh0ZW5kcyBVc2VyRGF0YSwgVSBleHRlbmRzIERvY3VtZW50Pih7XG4gICAgdmFsdWUsXG4gICAgdXNlcklkXG4gIH06IHtcbiAgICB2YWx1ZTogVTtcbiAgICB1c2VySWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yTm90Rm91bmQgfCBudWxsPiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgdmFsdWUgc2hvdWxkIGJlIGFuIG9iamVjdCBpbmNsdWRpbmcgZmllbGRzIHlvdSB3YW50IHRvIHVwZGF0ZS5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZGJTZXQgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiKSh7XG4gICAgICBkYlNldDogW1xuICAgICAgICB7XG4gICAgICAgICAgdXNlcklkLFxuICAgICAgICAgIHZhbHVlOiBzZXJpYWxpemUodmFsdWUpLnRvU3RyaW5nKFwiYmFzZTY0XCIpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgZGJTZXQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJTZXQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYlNldC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEZvdW5kXCIpIHtcbiAgICAgIHJldHVybiBkYlNldDtcbiAgICB9XG5cbiAgICBpZiAoIWRiU2V0LmRiU2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IChkYlNldC5kYlNldCBhcyB7IHJlczogVCB9KS5yZXNcbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgc2VhcmNoPFQ+KHtcbiAgICBzZWFyY2gsXG4gICAgZmllbGRcbiAgfToge1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxUW10+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgRXJyb3JOb3RFeGlzdCB8IG51bGxcbiAgPiB7XG4gICAgY29uc3QgeyBkYlNlYXJjaCB9ID0gYXdhaXQgdGhpcy4jdGh1bmRlcihcInF1ZXJ5XCIsIHtcbiAgICAgIHNjYWxhcnM6IHtcbiAgICAgICAgSnNvbjoge1xuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IEpTT04uc3RyaW5naWZ5KGUpLFxuICAgICAgICAgIGRlY29kZTogKGU6IHVua25vd24pID0+IEpTT04ucGFyc2UoZSBhcyBzdHJpbmcpXG4gICAgICAgIH0sXG4gICAgICAgIERhdGVUaW1lOiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gbmV3IERhdGUoZSBhcyBzdHJpbmcpLFxuICAgICAgICAgIGVuY29kZTogKGU6IHVua25vd24pID0+IChlIGFzIERhdGUpLnRvSVNPU3RyaW5nKClcbiAgICAgICAgfSxcbiAgICAgICAgQmlnSW50OiB7XG4gICAgICAgICAgZGVjb2RlOiAoZTogdW5rbm93bikgPT4gQmlnSW50KGUgYXMgc3RyaW5nKSxcbiAgICAgICAgICBlbmNvZGU6IChlOiB1bmtub3duKSA9PiAoZSBhcyBiaWdpbnQpLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKHtcbiAgICAgIGRiU2VhcmNoOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZWFyY2gsXG4gICAgICAgICAgZmllbGRcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiU2VhcmNoUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGpzb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJTZWFyY2gpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYlNlYXJjaDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZWFyY2guX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBkYlNlYXJjaDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZWFyY2guX190eXBlbmFtZSA9PT0gXCJFcnJvck5vdEV4aXN0XCIpIHtcbiAgICAgIHJldHVybiBkYlNlYXJjaDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgX190eXBlbmFtZTogXCJTdWNjZXNzUmVzcG9uc2VcIixcbiAgICAgIGRhdGE6IGRiU2VhcmNoLmpzb24gYXMgdW5rbm93biBhcyBUW11cbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBV0EsU0FBU0EsU0FBUyxRQUFRLE1BQU07QUFBQztBQUVqQyxPQUFPLE1BQU1DLGVBQWUsQ0FBQztFQUMzQjs7RUFFQTs7RUFJQUMsV0FBVyxDQUNUQyxPQUFzQixFQUN0QkMsS0FBYyxFQUNkQyxPQUFtQyxFQUNuQztJQUFBO01BQUE7TUFBQTtJQUFBO0lBQ0E7SUFDQTtJQUNBLGdDQUFJLHdCQUFZQSxPQUFPO0VBQ3pCO0VBRUEsTUFBTUMsR0FBRyxPQVlQO0lBQUEsSUFaVztNQUNYQyxLQUFLO01BQ0xDO0lBSUYsQ0FBQztJQU9DLE1BQU07TUFBRUM7SUFBTSxDQUFDLEdBQUcsTUFBTSxnQ0FBSSxzQkFBVSxPQUFPLEVBQUU7TUFDN0NBLEtBQUssRUFBRSxDQUNMO1FBQ0VGLEtBQUs7UUFDTEM7TUFDRixDQUFDLEVBQ0Q7UUFDRSx5QkFBeUIsRUFBRTtVQUN6QkUsVUFBVSxFQUFFLElBQUk7VUFDaEJDLE9BQU8sRUFBRTtRQUNYLENBQUM7UUFDRCxxQkFBcUIsRUFBRTtVQUNyQkQsVUFBVSxFQUFFLElBQUk7VUFDaEJDLE9BQU8sRUFBRTtRQUNYLENBQUM7UUFDRCxxQkFBcUIsRUFBRTtVQUNyQkQsVUFBVSxFQUFFLElBQUk7VUFDaEJDLE9BQU8sRUFBRTtRQUNYLENBQUM7UUFDRCxxQkFBcUIsRUFBRTtVQUNyQkQsVUFBVSxFQUFFLElBQUk7VUFDaEJFLElBQUksRUFBRTtRQUNSO01BQ0YsQ0FBQztJQUVMLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQ0gsS0FBSyxFQUFFO01BQ1YsT0FBTyxJQUFJO0lBQ2I7SUFFQSxJQUFJQSxLQUFLLENBQUNDLFVBQVUsS0FBSyxtQkFBbUIsRUFBRTtNQUM1QyxPQUFPRCxLQUFLO0lBQ2Q7SUFFQSxJQUFJQSxLQUFLLENBQUNDLFVBQVUsS0FBSyxlQUFlLEVBQUU7TUFDeEMsT0FBT0Qs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
419
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJlbmNvZGVycyIsInNlcmlhbGl6ZSIsIlNlY3JlY3lEYkNsaWVudCIsImNvbnN0cnVjdG9yIiwiX2NsaWVudCIsIl9rZXlzIiwidGh1bmRlciIsImdldERiQ29uZmlnIiwiYXBwSWQiLCJlbnYiLCJkYkNvbmZpZyIsInNjYWxhcnMiLCJKc29uIiwianNvbiIsIl9fdHlwZW5hbWUiLCJtZXNzYWdlIiwiZGF0YSIsImRiR2V0RGlmZiIsImNvbmZpZyIsImRiR2V0RGlmZkNvbmZpZyIsImN1cnJlbnQiLCJuZXh0IiwiZGlmZiIsImhhc2giLCJzZXREYkNvbmZpZyIsImRiQ29uZmlnTXV0YXRpb24iLCJkYkNvbmZpZ1B1c2hUb1Byb2QiLCJkaWZmSGFzaCIsImRiQ29uZmlnVG9Qcm9kTXV0YXRpb24iLCJnZXQiLCJmaWVsZCIsInVzZXJJZCIsImRiR2V0IiwicmVzIiwic2V0IiwidmFsdWUiLCJFcnJvciIsImRiU2V0IiwidG9TdHJpbmciLCJzZWFyY2giLCJ0YWtlIiwic2tpcCIsIm9yZGVyQnkiLCJkYlNlYXJjaCIsIkRhdGVUaW1lIiwiZGF0ZVRpbWUiLCJCaWdJbnQiLCJiaWdJbnQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L1NlY3JlY3lEYkNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbmltcG9ydCB0eXBlIHsgU2VjcmVjeUNsaWVudCwgU3VjY2Vzc1Jlc3BvbnNlLCBVc2VyRGF0YSB9IGZyb20gXCIuLi9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBLZXlQYWlyIH0gZnJvbSBcIi4uL2NyeXB0by9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUge1xuICBFcnJvckFjY2Vzc0RlbmllZCxcbiAgRXJyb3JCYXNpYyxcbiAgRXJyb3JOb3RFeGlzdCxcbiAgRXJyb3JOb3RGb3VuZFxufSBmcm9tIFwiLi4vZXJyb3IuanNcIjtcbmltcG9ydCB7IGVuY29kZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VuY29kZXJzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IE1vbmdvRGJFbnYsIFRodW5kZXIgfSBmcm9tIFwiLi4vemV1cy9pbmRleC5qc1wiO1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gXCJic29uXCI7XG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tIFwiYnNvblwiO1xuXG5leHBvcnQgY2xhc3MgU2VjcmVjeURiQ2xpZW50IHtcbiAgLy8gI2NsaWVudDogU2VjcmVjeUNsaWVudDtcblxuICAvLyAja2V5czogS2V5UGFpcjtcblxuICAjdGh1bmRlcjogUmV0dXJuVHlwZTx0eXBlb2YgVGh1bmRlcj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgX2NsaWVudDogU2VjcmVjeUNsaWVudCxcbiAgICBfa2V5czogS2V5UGFpcixcbiAgICB0aHVuZGVyOiBSZXR1cm5UeXBlPHR5cGVvZiBUaHVuZGVyPlxuICApIHtcbiAgICAvLyB0aGlzLiNjbGllbnQgPSBjbGllbnQ7XG4gICAgLy8gdGhpcy4ja2V5cyA9IGtleXM7XG4gICAgdGhpcy4jdGh1bmRlciA9IHRodW5kZXI7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBEYkNvbmZpZyBieSBcImVudlwiLCBpdCBjYW4gYmUgZWl0aGVyIFwiZGV2XCIgb3IgXCJwcm9kXCIuXG4gICAqL1xuICBhc3luYyBnZXREYkNvbmZpZzxUPih7XG4gICAgYXBwSWQsXG4gICAgZW52XG4gIH06IHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGVudjogTW9uZ29EYkVudjtcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFQ+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvck5vdEZvdW5kIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGJDb25maWcgfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEpzb246IGVuY29kZXJzLmpzb25cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBkYkNvbmZpZzogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwSWQsXG4gICAgICAgICAgZW52XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJDb25maWdSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkNvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiQ29uZmlnLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZy5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJDb25maWcuanNvbiBhcyBUXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRpZmZlcmVuY2UgcmVjaXBlIGJldHdlZW4gdHdvIERCIGNvbmZpZ3VyYXRpb25zLlxuICAgKi9cbiAgYXN5bmMgZGJHZXREaWZmPFQ+KHtcbiAgICBhcHBJZCxcbiAgICBlbnYsXG4gICAgY29uZmlnXG4gIH06IHtcbiAgICBhcHBJZDogc3RyaW5nO1xuICAgIGVudjogTW9uZ29EYkVudjtcbiAgICBjb25maWc6IHN0cmluZztcbiAgfSk6IFByb21pc2U8U3VjY2Vzc1Jlc3BvbnNlPFQ+IHwgRXJyb3JBY2Nlc3NEZW5pZWQgfCBFcnJvckJhc2ljIHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgZGJHZXREaWZmIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwicXVlcnlcIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBKc29uOiBlbmNvZGVycy5qc29uXG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgZGJHZXREaWZmOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBJZCxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJHZXREaWZmQ29uZmlnUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRiR2V0RGlmZkNvbmZpZzoge1xuICAgICAgICAgICAgICBlbnY6IHRydWUsXG4gICAgICAgICAgICAgIGN1cnJlbnQ6IHRydWUsXG4gICAgICAgICAgICAgIG5leHQ6IHRydWUsXG4gICAgICAgICAgICAgIGRpZmY6IHRydWUsXG4gICAgICAgICAgICAgIGhhc2g6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJHZXREaWZmKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJHZXREaWZmLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZGJHZXREaWZmO1xuICAgIH1cblxuICAgIGlmIChkYkdldERpZmYuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJHZXREaWZmO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJHZXREaWZmLmRiR2V0RGlmZkNvbmZpZyBhcyBUXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIERiQ29uZmlnIGJ5IFwiZW52XCIsIGl0IGNhbiBiZSBlaXRoZXIgXCJkZXZcIiBvciBcInByb2RcIi5cbiAgICpcbiAgICogTW9zdGx5IHVzZWQgZm9yIGhvdGZpeGVzIG9uIHByb2R1Y3Rpb24gb3IgY29tbW9uIGNoYW5nZXMgb24gZGV2ZWxvcG1lbnQuXG4gICAqL1xuICBhc3luYyBzZXREYkNvbmZpZzxUPih7XG4gICAgYXBwSWQsXG4gICAgZW52LFxuICAgIGNvbmZpZ1xuICB9OiB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBlbnY6IE1vbmdvRGJFbnY7XG4gICAgY29uZmlnOiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPFN1Y2Nlc3NSZXNwb25zZTxUPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IG51bGw+IHtcbiAgICBjb25zdCB7IGRiQ29uZmlnTXV0YXRpb24gfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJtdXRhdGlvblwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEpzb246IGVuY29kZXJzLmpzb25cbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBkYkNvbmZpZ011dGF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhcHBJZCxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgY29uZmlnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQWNjZXNzRGVuaWVkXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yQmFzaWNcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJDb25maWdNdXRhdGlvblJlc3BvbnNlXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBkYkNvbmZpZ011dGF0aW9uOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiQ29uZmlnTXV0YXRpb24pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZ011dGF0aW9uLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZGJDb25maWdNdXRhdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoZGJDb25maWdNdXRhdGlvbi5fX3R5cGVuYW1lID09PSBcIkVycm9yQWNjZXNzRGVuaWVkXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZ011dGF0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJDb25maWdNdXRhdGlvbi5kYkNvbmZpZ011dGF0aW9uIGFzIFRcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFB1c2ggdGhlIGRiQ29uZmlnRGV2IHRvIHRoZSBkYkNvbmdpZ1Byb2QuXG4gICAqXG4gICAqIEl0IHJlcXVpcmVzIGEgZGlmZkhhc2ggdG8gdmVyaWZ5IHRoYXQgdGhlIGRldmVsb3BlciBoYXMgdmFsaWRhdGVkIGhpcyBjaGFuZ2VzLlxuICAgKi9cbiAgYXN5bmMgZGJDb25maWdQdXNoVG9Qcm9kPFQ+KHtcbiAgICBhcHBJZCxcbiAgICBkaWZmSGFzaFxuICB9OiB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBkaWZmSGFzaDogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxTdWNjZXNzUmVzcG9uc2U8VD4gfCBFcnJvckFjY2Vzc0RlbmllZCB8IEVycm9yQmFzaWMgfCBudWxsPiB7XG4gICAgY29uc3QgeyBkYkNvbmZpZ1RvUHJvZE11dGF0aW9uIH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIiwge1xuICAgICAgc2NhbGFyczoge1xuICAgICAgICBKc29uOiBlbmNvZGVycy5qc29uXG4gICAgICB9XG4gICAgfSkoe1xuICAgICAgZGJDb25maWdUb1Byb2RNdXRhdGlvbjogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwSWQsXG4gICAgICAgICAgZGlmZkhhc2hcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBEYkNvbmZpZ1RvUHJvZE11dGF0aW9uUmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRiQ29uZmlnVG9Qcm9kTXV0YXRpb246IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIGlmICghZGJDb25maWdUb1Byb2RNdXRhdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiQ29uZmlnVG9Qcm9kTXV0YXRpb24uX190eXBlbmFtZSA9PT0gXCJFcnJvckJhc2ljXCIpIHtcbiAgICAgIHJldHVybiBkYkNvbmZpZ1RvUHJvZE11dGF0aW9uO1xuICAgIH1cblxuICAgIGlmIChkYkNvbmZpZ1RvUHJvZE11dGF0aW9uLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiQ29uZmlnVG9Qcm9kTXV0YXRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiBkYkNvbmZpZ1RvUHJvZE11dGF0aW9uLmRiQ29uZmlnVG9Qcm9kTXV0YXRpb24gYXMgVFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiBhIGZpZWxkLlxuICAgKi9cbiAgYXN5bmMgZ2V0PFU+KHtcbiAgICBmaWVsZCxcbiAgICBhcHBJZCxcbiAgICB1c2VySWQsXG4gICAgZW52XG4gIH06IHtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgZW52OiBNb25nb0RiRW52O1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFxuICAgIHwgU3VjY2Vzc1Jlc3BvbnNlPFU+XG4gICAgfCBFcnJvckFjY2Vzc0RlbmllZFxuICAgIHwgRXJyb3JCYXNpY1xuICAgIHwgRXJyb3JOb3RFeGlzdFxuICAgIHwgRXJyb3JOb3RGb3VuZFxuICAgIHwgbnVsbFxuICA+IHtcbiAgICBjb25zdCB7IGRiR2V0IH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwicXVlcnlcIikoe1xuICAgICAgZGJHZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIGFwcElkLFxuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBlbnZcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEV4aXN0XCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90Rm91bmRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJHZXRSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYkdldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiR2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIGlmIChkYkdldC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90Rm91bmRcIikge1xuICAgICAgcmV0dXJuIGRiR2V0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogKGRiR2V0Lmpzb24gYXMgeyByZXM6IFUgfSkucmVzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYW4gdXNlciBkb2N1bWVudC5cbiAgICovXG4gIGFzeW5jIHNldDxUIGV4dGVuZHMgVXNlckRhdGEsIFUgZXh0ZW5kcyBEb2N1bWVudD4oe1xuICAgIHZhbHVlLFxuICAgIGFwcElkLFxuICAgIGVudixcbiAgICB1c2VySWRcbiAgfToge1xuICAgIHZhbHVlOiBVO1xuICAgIGFwcElkOiBzdHJpbmc7XG4gICAgZW52OiBNb25nb0RiRW52O1xuICAgIHVzZXJJZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIH0pOiBQcm9taXNlPFxuICAgIFN1Y2Nlc3NSZXNwb25zZTxUPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IEVycm9yTm90Rm91bmQgfCBudWxsXG4gID4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYHZhbHVlIHNob3VsZCBiZSBhbiBvYmplY3QgaW5jbHVkaW5nIGZpZWxkcyB5b3Ugd2FudCB0byB1cGRhdGUuYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IGRiU2V0IH0gPSBhd2FpdCB0aGlzLiN0aHVuZGVyKFwibXV0YXRpb25cIikoe1xuICAgICAgZGJTZXQ6IFtcbiAgICAgICAge1xuICAgICAgICAgIHVzZXJJZCxcbiAgICAgICAgICBhcHBJZCxcbiAgICAgICAgICBlbnYsXG4gICAgICAgICAgdmFsdWU6IHNlcmlhbGl6ZSh2YWx1ZSkudG9TdHJpbmcoXCJiYXNlNjRcIilcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIFwiLi4ub24gRXJyb3JBY2Nlc3NEZW5pZWRcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRXJyb3JCYXNpY1wiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvck5vdEZvdW5kXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIERiU2V0UmVzcG9uc2VcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIGRiU2V0OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSk7XG5cbiAgICBpZiAoIWRiU2V0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGJTZXQuX190eXBlbmFtZSA9PT0gXCJFcnJvckFjY2Vzc0RlbmllZFwiKSB7XG4gICAgICByZXR1cm4gZGJTZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiU2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JOb3RGb3VuZFwiKSB7XG4gICAgICByZXR1cm4gZGJTZXQ7XG4gICAgfVxuXG4gICAgaWYgKGRiU2V0Ll9fdHlwZW5hbWUgPT09IFwiRXJyb3JCYXNpY1wiKSB7XG4gICAgICByZXR1cm4gZGJTZXQ7XG4gICAgfVxuXG4gICAgaWYgKCFkYlNldC5kYlNldCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIF9fdHlwZW5hbWU6IFwiU3VjY2Vzc1Jlc3BvbnNlXCIsXG4gICAgICBkYXRhOiAoZGJTZXQuZGJTZXQgYXMgeyByZXM6IFQgfSkucmVzXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2hlcyBmb3IgdXNlciBmaWVsZHMgdGhhdCBtYXRjaCB0aGUgc2VhcmNoIGFyZ3VtZW50cy5cbiAgICovXG4gIGFzeW5jIHNlYXJjaDxUPih7XG4gICAgYXBwSWQsXG4gICAgZW52LFxuICAgIHNlYXJjaCxcbiAgICBmaWVsZCxcbiAgICB0YWtlLFxuICAgIHNraXAsXG4gICAgb3JkZXJCeVxuICB9OiB7XG4gICAgYXBwSWQ6IHN0cmluZztcbiAgICBlbnY6IE1vbmdvRGJFbnY7XG4gICAgZmllbGQ6IHN0cmluZztcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICB0YWtlPzogbnVtYmVyO1xuICAgIHNraXA/OiBudW1iZXI7XG4gICAgb3JkZXJCeT86IFwiY3JlYXRlZEF0X0FTQ1wiIHwgXCJjcmVhdGVkQXRfREVTQ1wiO1xuICB9KTogUHJvbWlzZTxcbiAgICBTdWNjZXNzUmVzcG9uc2U8VFtdPiB8IEVycm9yQWNjZXNzRGVuaWVkIHwgRXJyb3JCYXNpYyB8IEVycm9yTm90RXhpc3QgfCBudWxsXG4gID4ge1xuICAgIGNvbnN0IHsgZGJTZWFyY2ggfSA9IGF3YWl0IHRoaXMuI3RodW5kZXIoXCJxdWVyeVwiLCB7XG4gICAgICBzY2FsYXJzOiB7XG4gICAgICAgIEpzb246IGVuY29kZXJzLmpzb24sXG4gICAgICAgIERhdGVUaW1lOiBlbmNvZGVycy5kYXRlVGltZSxcbiAgICAgICAgQmlnSW50OiBlbmNvZGVycy5iaWdJbnRcbiAgICAgIH1cbiAgICB9KSh7XG4gICAgICBkYlNlYXJjaDogW1xuICAgICAgICB7XG4gICAgICAgICAgYXBwSWQsXG4gICAgICAgICAgZW52LFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIHNlYXJjaCxcbiAgICAgICAgICB0YWtlLFxuICAgICAgICAgIHNraXAsXG4gICAgICAgICAgb3JkZXJCeVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgXCIuLi5vbiBFcnJvckFjY2Vzc0RlbmllZFwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgXCIuLi5vbiBFcnJvckJhc2ljXCI6IHtcbiAgICAgICAgICAgIF9fdHlwZW5hbWU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgICBcIi4uLm9uIEVycm9yTm90RXhpc3RcIjoge1xuICAgICAgICAgICAgX190eXBlbmFtZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIFwiLi4ub24gRGJTZWFyY2hSZXNwb25zZVwiOiB7XG4gICAgICAgICAgICBfX3R5cGVuYW1lOiB0cnVlLFxuICAgICAgICAgICAganNvbjogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgaWYgKCFkYlNlYXJjaCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGRiU2VhcmNoLl9fdHlwZW5hbWUgPT09IFwiRXJyb3JBY2Nlc3NEZW5pZWRcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yQmFzaWNcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIGlmIChkYlNlYXJjaC5fX3R5cGVuYW1lID09PSBcIkVycm9yTm90RXhpc3RcIikge1xuICAgICAgcmV0dXJuIGRiU2VhcmNoO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBfX3R5cGVuYW1lOiBcIlN1Y2Nlc3NSZXNwb25zZVwiLFxuICAgICAgZGF0YTogZGJTZWFyY2guanNvbiBhcyB1bmtub3duIGFzIFRbXVxuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7QUFTQSxTQUFTQSxRQUFRLFFBQVEsc0JBQXNCO0FBRy9DLFNBQVNDLFNBQVMsUUFBUSxNQUFNO0FBQUM7QUFFakMsT0FBTyxNQUFNQyxlQUFlLENBQUM7RUFDM0I7O0VBRUE7O0VBSUFDLFdBQVcsQ0FDVEMsT0FBc0IsRUFDdEJDLEtBQWMsRUFDZEMsT0FBbUMsRUFDbkM7SUFBQTtNQUFBO01BQUE7SUFBQTtJQUNBO0lBQ0E7SUFDQSxnQ0FBSSx3QkFBWUEsT0FBTztFQUN6Qjs7RUFFQTtBQUNGO0FBQ0E7RUFDRSxNQUFNQyxXQUFXLE9BTTBEO0lBQUEsSUFOdEQ7TUFDbkJDLEtBQUs7TUFDTEM7SUFJRixDQUFDO0lBQ0MsTUFBTTtNQUFFQztJQUFTLENBQUMsR0FBRyxNQUFNLGdDQUFJLHNCQUFVLE9BQU8sRUFBRTtNQUNoREMsT0FBTyxFQUFFO1FBQ1BDLElBQUksRUFBRVosUUFBUSxDQUFDYTtNQUNqQjtJQUNGLENBQUMsRUFBRTtNQUNESCxRQUFRLEVBQUUsQ0FDUjtRQUNFRixLQUFLO1FBQ0xDO01BQ0YsQ0FBQyxFQUNEO1FBQ0UseUJBQXlCLEVBQUU7VUFDekJLLFVBQVUsRUFBRSxJQUFJO1VBQ2hCQyxPQUFPLEVBQUU7UUFDWCxDQUFDO1FBQ0QscUJBQXFCLEVBQUU7VUFDckJELFVBQVUsRUFBRSxJQUFJO1VBQ2hCQyxPQUFPLEVBQUU7UUFDWCxDQUFDO1FBQ0Qsd0JBQXdCLEVBQUU7VUFDeEJELFVBQVUsRUFBRSxJQUFJO1VBQ2hCRCxJQUFJLEVBQUU7UUFDUjtNQUNGLENBQUM7SUFFTCxDQUFDLENBQUM7SUFFRixJQUFJLENBQUNILFFBQVEsRUFBRTtNQUNiLE9BQU8sSUFBSTtJQUNiO0lBRUEsSUFBSUEsUUFBUSxDQUFDSSxVQUFVLEtBQUssbUJBQW1CLEVBQUU7TUFD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
@@ -0,0 +1,26 @@
1
+ export declare const jsonEncoder: {
2
+ decode: (e: unknown) => object;
3
+ encode: (e: unknown) => string;
4
+ };
5
+ export declare const dateTimeEncoder: {
6
+ decode: (e: unknown) => Date;
7
+ encode: (e: unknown) => string;
8
+ };
9
+ export declare const bigIntEncoder: {
10
+ decode: (e: unknown) => bigint;
11
+ encode: (e: unknown) => string;
12
+ };
13
+ export declare const encoders: {
14
+ json: {
15
+ decode: (e: unknown) => object;
16
+ encode: (e: unknown) => string;
17
+ };
18
+ dateTime: {
19
+ decode: (e: unknown) => Date;
20
+ encode: (e: unknown) => string;
21
+ };
22
+ bigInt: {
23
+ decode: (e: unknown) => bigint;
24
+ encode: (e: unknown) => string;
25
+ };
26
+ };
@@ -0,0 +1,18 @@
1
+ export const jsonEncoder = {
2
+ decode: e => JSON.parse(e),
3
+ encode: e => JSON.stringify(e)
4
+ };
5
+ export const dateTimeEncoder = {
6
+ decode: e => new Date(e),
7
+ encode: e => e.toISOString()
8
+ };
9
+ export const bigIntEncoder = {
10
+ decode: e => BigInt(e),
11
+ encode: e => e.toString()
12
+ };
13
+ export const encoders = {
14
+ json: jsonEncoder,
15
+ dateTime: dateTimeEncoder,
16
+ bigInt: bigIntEncoder
17
+ };
18
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJqc29uRW5jb2RlciIsImRlY29kZSIsImUiLCJKU09OIiwicGFyc2UiLCJlbmNvZGUiLCJzdHJpbmdpZnkiLCJkYXRlVGltZUVuY29kZXIiLCJEYXRlIiwidG9JU09TdHJpbmciLCJiaWdJbnRFbmNvZGVyIiwiQmlnSW50IiwidG9TdHJpbmciLCJlbmNvZGVycyIsImpzb24iLCJkYXRlVGltZSIsImJpZ0ludCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9lbmNvZGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QganNvbkVuY29kZXIgPSB7XG4gIGRlY29kZTogKGU6IHVua25vd24pOiBvYmplY3QgPT4gSlNPTi5wYXJzZShlIGFzIHN0cmluZyksXG4gIGVuY29kZTogKGU6IHVua25vd24pOiBzdHJpbmcgPT4gSlNPTi5zdHJpbmdpZnkoZSlcbn07XG5cbmV4cG9ydCBjb25zdCBkYXRlVGltZUVuY29kZXIgPSB7XG4gIGRlY29kZTogKGU6IHVua25vd24pOiBEYXRlID0+IG5ldyBEYXRlKGUgYXMgc3RyaW5nKSxcbiAgZW5jb2RlOiAoZTogdW5rbm93bik6IHN0cmluZyA9PiAoZSBhcyBEYXRlKS50b0lTT1N0cmluZygpXG59O1xuXG5leHBvcnQgY29uc3QgYmlnSW50RW5jb2RlciA9IHtcbiAgZGVjb2RlOiAoZTogdW5rbm93bik6IGJpZ2ludCA9PiBCaWdJbnQoZSBhcyBzdHJpbmcpLFxuICBlbmNvZGU6IChlOiB1bmtub3duKTogc3RyaW5nID0+IChlIGFzIGJpZ2ludCkudG9TdHJpbmcoKVxufTtcblxuZXhwb3J0IGNvbnN0IGVuY29kZXJzID0ge1xuICBqc29uOiBqc29uRW5jb2RlcixcbiAgZGF0ZVRpbWU6IGRhdGVUaW1lRW5jb2RlcixcbiAgYmlnSW50OiBiaWdJbnRFbmNvZGVyXG59O1xuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU1BLFdBQVcsR0FBRztFQUN6QkMsTUFBTSxFQUFHQyxDQUFVLElBQWFDLElBQUksQ0FBQ0MsS0FBSyxDQUFDRixDQUFDLENBQVc7RUFDdkRHLE1BQU0sRUFBR0gsQ0FBVSxJQUFhQyxJQUFJLENBQUNHLFNBQVMsQ0FBQ0osQ0FBQztBQUNsRCxDQUFDO0FBRUQsT0FBTyxNQUFNSyxlQUFlLEdBQUc7RUFDN0JOLE1BQU0sRUFBR0MsQ0FBVSxJQUFXLElBQUlNLElBQUksQ0FBQ04sQ0FBQyxDQUFXO0VBQ25ERyxNQUFNLEVBQUdILENBQVUsSUFBY0EsQ0FBQyxDQUFVTyxXQUFXO0FBQ3pELENBQUM7QUFFRCxPQUFPLE1BQU1DLGFBQWEsR0FBRztFQUMzQlQsTUFBTSxFQUFHQyxDQUFVLElBQWFTLE1BQU0sQ0FBQ1QsQ0FBQyxDQUFXO0VBQ25ERyxNQUFNLEVBQUdILENBQVUsSUFBY0EsQ0FBQyxDQUFZVSxRQUFRO0FBQ3hELENBQUM7QUFFRCxPQUFPLE1BQU1DLFFBQVEsR0FBRztFQUN0QkMsSUFBSSxFQUFFZCxXQUFXO0VBQ2pCZSxRQUFRLEVBQUVSLGVBQWU7RUFDekJTLE1BQU0sRUFBRU47QUFDVixDQUFDIn0=