@eggjs/core 6.0.0-beta.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.
Files changed (60) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +296 -0
  3. package/dist/commonjs/base_context_class.d.ts +16 -0
  4. package/dist/commonjs/base_context_class.js +41 -0
  5. package/dist/commonjs/egg.d.ts +204 -0
  6. package/dist/commonjs/egg.js +346 -0
  7. package/dist/commonjs/index.d.ts +5 -0
  8. package/dist/commonjs/index.js +26 -0
  9. package/dist/commonjs/lifecycle.d.ts +75 -0
  10. package/dist/commonjs/lifecycle.js +306 -0
  11. package/dist/commonjs/loader/context_loader.d.ts +24 -0
  12. package/dist/commonjs/loader/context_loader.js +109 -0
  13. package/dist/commonjs/loader/egg_loader.d.ts +405 -0
  14. package/dist/commonjs/loader/egg_loader.js +1497 -0
  15. package/dist/commonjs/loader/file_loader.d.ts +96 -0
  16. package/dist/commonjs/loader/file_loader.js +248 -0
  17. package/dist/commonjs/package.json +3 -0
  18. package/dist/commonjs/types.d.ts +1 -0
  19. package/dist/commonjs/types.js +403 -0
  20. package/dist/commonjs/utils/index.d.ts +14 -0
  21. package/dist/commonjs/utils/index.js +146 -0
  22. package/dist/commonjs/utils/sequencify.d.ts +13 -0
  23. package/dist/commonjs/utils/sequencify.js +59 -0
  24. package/dist/commonjs/utils/timing.d.ts +22 -0
  25. package/dist/commonjs/utils/timing.js +100 -0
  26. package/dist/esm/base_context_class.d.ts +16 -0
  27. package/dist/esm/base_context_class.js +37 -0
  28. package/dist/esm/egg.d.ts +204 -0
  29. package/dist/esm/egg.js +339 -0
  30. package/dist/esm/index.d.ts +5 -0
  31. package/dist/esm/index.js +6 -0
  32. package/dist/esm/lifecycle.d.ts +75 -0
  33. package/dist/esm/lifecycle.js +276 -0
  34. package/dist/esm/loader/context_loader.d.ts +24 -0
  35. package/dist/esm/loader/context_loader.js +102 -0
  36. package/dist/esm/loader/egg_loader.d.ts +405 -0
  37. package/dist/esm/loader/egg_loader.js +1490 -0
  38. package/dist/esm/loader/file_loader.d.ts +96 -0
  39. package/dist/esm/loader/file_loader.js +241 -0
  40. package/dist/esm/package.json +3 -0
  41. package/dist/esm/types.d.ts +1 -0
  42. package/dist/esm/types.js +402 -0
  43. package/dist/esm/utils/index.d.ts +14 -0
  44. package/dist/esm/utils/index.js +141 -0
  45. package/dist/esm/utils/sequencify.d.ts +13 -0
  46. package/dist/esm/utils/sequencify.js +56 -0
  47. package/dist/esm/utils/timing.d.ts +22 -0
  48. package/dist/esm/utils/timing.js +93 -0
  49. package/package.json +103 -0
  50. package/src/base_context_class.ts +39 -0
  51. package/src/egg.ts +430 -0
  52. package/src/index.ts +6 -0
  53. package/src/lifecycle.ts +363 -0
  54. package/src/loader/context_loader.ts +121 -0
  55. package/src/loader/egg_loader.ts +1703 -0
  56. package/src/loader/file_loader.ts +295 -0
  57. package/src/types.ts +447 -0
  58. package/src/utils/index.ts +154 -0
  59. package/src/utils/sequencify.ts +70 -0
  60. package/src/utils/timing.ts +114 -0
@@ -0,0 +1,306 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.Lifecycle = void 0;
30
+ const node_assert_1 = __importDefault(require("node:assert"));
31
+ const node_events_1 = require("node:events");
32
+ const node_util_1 = require("node:util");
33
+ const is_type_of_1 = __importStar(require("is-type-of"));
34
+ const get_ready_1 = __importDefault(require("get-ready"));
35
+ const ready_callback_1 = require("ready-callback");
36
+ const egg_logger_1 = require("egg-logger");
37
+ const index_js_1 = __importDefault(require("./utils/index.js"));
38
+ const debug = (0, node_util_1.debuglog)('@eggjs/core:lifecycle');
39
+ class Lifecycle extends node_events_1.EventEmitter {
40
+ #init;
41
+ #readyObject;
42
+ #bootHooks;
43
+ #boots;
44
+ #isClosed;
45
+ #closeFunctionSet;
46
+ loadReady;
47
+ bootReady;
48
+ options;
49
+ readyTimeout;
50
+ constructor(options) {
51
+ super();
52
+ options.logger = options.logger ?? new egg_logger_1.EggConsoleLogger();
53
+ this.options = options;
54
+ this.#readyObject = new get_ready_1.default();
55
+ this.#bootHooks = [];
56
+ this.#boots = [];
57
+ this.#closeFunctionSet = new Set();
58
+ this.#isClosed = false;
59
+ this.#init = false;
60
+ this.timing.start('Application Start');
61
+ // get app timeout from env or use default timeout 10 second
62
+ const eggReadyTimeoutEnv = parseInt(process.env.EGG_READY_TIMEOUT_ENV || '10000');
63
+ (0, node_assert_1.default)(Number.isInteger(eggReadyTimeoutEnv), `process.env.EGG_READY_TIMEOUT_ENV ${process.env.EGG_READY_TIMEOUT_ENV} should be able to parseInt.`);
64
+ this.readyTimeout = eggReadyTimeoutEnv;
65
+ this.#initReady();
66
+ this
67
+ .on('ready_stat', data => {
68
+ this.logger.info('[egg:core:ready_stat] end ready task %s, remain %j', data.id, data.remain);
69
+ })
70
+ .on('ready_timeout', id => {
71
+ this.logger.warn('[egg:core:ready_timeout] %s seconds later %s was still unable to finish.', this.readyTimeout / 1000, id);
72
+ });
73
+ this.ready(err => {
74
+ this.triggerDidReady(err);
75
+ debug('app ready');
76
+ this.timing.end('Application Start');
77
+ });
78
+ }
79
+ ready(arg) {
80
+ return this.#readyObject.ready(arg);
81
+ }
82
+ get app() {
83
+ return this.options.app;
84
+ }
85
+ get logger() {
86
+ return this.options.logger;
87
+ }
88
+ get timing() {
89
+ return this.app.timing;
90
+ }
91
+ legacyReadyCallback(name, opt) {
92
+ const timingKeyPrefix = 'readyCallback';
93
+ const timing = this.timing;
94
+ const cb = this.loadReady.readyCallback(name, opt);
95
+ const timingKey = `${timingKeyPrefix} in ` + index_js_1.default.getResolvedFilename(name, this.app.baseDir);
96
+ this.timing.start(timingKey);
97
+ debug('register legacyReadyCallback');
98
+ return function legacyReadyCallback(...args) {
99
+ timing.end(timingKey);
100
+ debug('end legacyReadyCallback');
101
+ cb(...args);
102
+ };
103
+ }
104
+ addBootHook(bootHootOrBootClass) {
105
+ (0, node_assert_1.default)(this.#init === false, 'do not add hook when lifecycle has been initialized');
106
+ this.#bootHooks.push(bootHootOrBootClass);
107
+ }
108
+ addFunctionAsBootHook(hook) {
109
+ (0, node_assert_1.default)(this.#init === false, 'do not add hook when lifecycle has been initialized');
110
+ // app.js is exported as a function
111
+ // call this function in configDidLoad
112
+ this.#bootHooks.push(class Boot {
113
+ app;
114
+ constructor(app) {
115
+ this.app = app;
116
+ }
117
+ configDidLoad() {
118
+ hook(this.app);
119
+ }
120
+ });
121
+ }
122
+ /**
123
+ * init boots and trigger config did config
124
+ */
125
+ init() {
126
+ (0, node_assert_1.default)(this.#init === false, 'lifecycle have been init');
127
+ this.#init = true;
128
+ this.#boots = this.#bootHooks.map(BootHootOrBootClass => {
129
+ if ((0, is_type_of_1.isClass)(BootHootOrBootClass)) {
130
+ return new BootHootOrBootClass(this.app);
131
+ }
132
+ return BootHootOrBootClass;
133
+ });
134
+ }
135
+ registerBeforeStart(scope, name) {
136
+ debug('add registerBeforeStart, name: %o', name);
137
+ this.#registerReadyCallback({
138
+ scope,
139
+ ready: this.loadReady,
140
+ timingKeyPrefix: 'Before Start',
141
+ scopeFullName: name,
142
+ });
143
+ }
144
+ registerBeforeClose(fn) {
145
+ (0, node_assert_1.default)(is_type_of_1.default.function(fn), 'argument should be function');
146
+ (0, node_assert_1.default)(this.#isClosed === false, 'app has been closed');
147
+ this.#closeFunctionSet.add(fn);
148
+ }
149
+ async close() {
150
+ // close in reverse order: first created, last closed
151
+ const closeFns = Array.from(this.#closeFunctionSet);
152
+ for (const fn of closeFns.reverse()) {
153
+ await index_js_1.default.callFn(fn);
154
+ this.#closeFunctionSet.delete(fn);
155
+ }
156
+ // Be called after other close callbacks
157
+ this.app.emit('close');
158
+ this.removeAllListeners();
159
+ this.app.removeAllListeners();
160
+ this.#isClosed = true;
161
+ }
162
+ triggerConfigWillLoad() {
163
+ debug('trigger configWillLoad start');
164
+ for (const boot of this.#boots) {
165
+ if (typeof boot.configWillLoad === 'function') {
166
+ boot.configWillLoad();
167
+ }
168
+ }
169
+ debug('trigger configWillLoad end');
170
+ this.triggerConfigDidLoad();
171
+ }
172
+ triggerConfigDidLoad() {
173
+ debug('trigger configDidLoad start');
174
+ for (const boot of this.#boots) {
175
+ if (typeof boot.configDidLoad === 'function') {
176
+ boot.configDidLoad();
177
+ }
178
+ // function boot hook register after configDidLoad trigger
179
+ if (typeof boot.beforeClose === 'function') {
180
+ const beforeClose = boot.beforeClose.bind(boot);
181
+ this.registerBeforeClose(beforeClose);
182
+ }
183
+ }
184
+ debug('trigger configDidLoad end');
185
+ this.triggerDidLoad();
186
+ }
187
+ triggerDidLoad() {
188
+ debug('trigger didLoad start');
189
+ debug('loadReady start');
190
+ this.loadReady.start();
191
+ for (const boot of this.#boots) {
192
+ if (typeof boot.didLoad === 'function') {
193
+ const didLoad = boot.didLoad.bind(boot);
194
+ this.#registerReadyCallback({
195
+ scope: didLoad,
196
+ ready: this.loadReady,
197
+ timingKeyPrefix: 'Did Load',
198
+ scopeFullName: boot.fullPath + ':didLoad',
199
+ });
200
+ }
201
+ }
202
+ }
203
+ triggerWillReady() {
204
+ debug('trigger willReady start');
205
+ debug('bootReady start');
206
+ this.bootReady.start();
207
+ for (const boot of this.#boots) {
208
+ if (typeof boot.willReady === 'function') {
209
+ const willReady = boot.willReady.bind(boot);
210
+ this.#registerReadyCallback({
211
+ scope: willReady,
212
+ ready: this.bootReady,
213
+ timingKeyPrefix: 'Will Ready',
214
+ scopeFullName: boot.fullPath + ':willReady',
215
+ });
216
+ }
217
+ }
218
+ }
219
+ triggerDidReady(err) {
220
+ debug('trigger didReady start');
221
+ return (async () => {
222
+ for (const boot of this.#boots) {
223
+ if (typeof boot.didReady === 'function') {
224
+ try {
225
+ await boot.didReady(err);
226
+ }
227
+ catch (e) {
228
+ this.emit('error', e);
229
+ }
230
+ }
231
+ }
232
+ debug('trigger didReady end');
233
+ })();
234
+ }
235
+ triggerServerDidReady() {
236
+ debug('trigger serverDidReady start');
237
+ return (async () => {
238
+ for (const boot of this.#boots) {
239
+ if (typeof boot.serverDidReady !== 'function') {
240
+ continue;
241
+ }
242
+ try {
243
+ await boot.serverDidReady();
244
+ }
245
+ catch (err) {
246
+ this.emit('error', err);
247
+ }
248
+ }
249
+ debug('trigger serverDidReady end');
250
+ })();
251
+ }
252
+ #initReady() {
253
+ debug('loadReady init');
254
+ this.loadReady = new ready_callback_1.Ready({ timeout: this.readyTimeout, lazyStart: true });
255
+ this.#delegateReadyEvent(this.loadReady);
256
+ this.loadReady.ready((err) => {
257
+ debug('loadReady end, err: %o', err);
258
+ debug('trigger didLoad end');
259
+ if (err) {
260
+ this.ready(err);
261
+ }
262
+ else {
263
+ this.triggerWillReady();
264
+ }
265
+ });
266
+ debug('bootReady init');
267
+ this.bootReady = new ready_callback_1.Ready({ timeout: this.readyTimeout, lazyStart: true });
268
+ this.#delegateReadyEvent(this.bootReady);
269
+ this.bootReady.ready((err) => {
270
+ debug('bootReady end, err: %o', err);
271
+ debug('trigger willReady end');
272
+ this.ready(err || true);
273
+ });
274
+ }
275
+ #delegateReadyEvent(ready) {
276
+ ready.once('error', (err) => ready.ready(err));
277
+ ready.on('ready_timeout', (id) => this.emit('ready_timeout', id));
278
+ ready.on('ready_stat', (data) => this.emit('ready_stat', data));
279
+ ready.on('error', (err) => this.emit('error', err));
280
+ }
281
+ #registerReadyCallback(args) {
282
+ const { scope, ready, timingKeyPrefix, scopeFullName } = args;
283
+ if (typeof scope !== 'function') {
284
+ throw new Error('boot only support function');
285
+ }
286
+ // get filename from stack if scopeFullName is undefined
287
+ const name = scopeFullName || index_js_1.default.getCalleeFromStack(true, 4);
288
+ const timingKey = `${timingKeyPrefix} in ` + index_js_1.default.getResolvedFilename(name, this.app.baseDir);
289
+ this.timing.start(timingKey);
290
+ debug('[registerReadyCallback] start name: %o', name);
291
+ const done = ready.readyCallback(name);
292
+ // ensure scope executes after load completed
293
+ process.nextTick(() => {
294
+ index_js_1.default.callFn(scope).then(() => {
295
+ debug('[registerReadyCallback] end name: %o', name);
296
+ done();
297
+ this.timing.end(timingKey);
298
+ }, (err) => {
299
+ done(err);
300
+ this.timing.end(timingKey);
301
+ });
302
+ });
303
+ }
304
+ }
305
+ exports.Lifecycle = Lifecycle;
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlmZWN5Y2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpZmVjeWNsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDhEQUFpQztBQUNqQyw2Q0FBMkM7QUFDM0MseUNBQXFDO0FBQ3JDLHlEQUF5QztBQUN6QywwREFBb0M7QUFFcEMsbURBQXVDO0FBQ3ZDLDJDQUE4QztBQUM5QyxnRUFBcUM7QUFJckMsTUFBTSxLQUFLLEdBQUcsSUFBQSxvQkFBUSxFQUFDLHVCQUF1QixDQUFDLENBQUM7QUFvRGhELE1BQWEsU0FBVSxTQUFRLDBCQUFZO0lBQ3pDLEtBQUssQ0FBVTtJQUNmLFlBQVksQ0FBYztJQUMxQixVQUFVLENBQXFDO0lBQy9DLE1BQU0sQ0FBbUI7SUFDekIsU0FBUyxDQUFVO0lBQ25CLGlCQUFpQixDQUFXO0lBQzVCLFNBQVMsQ0FBUTtJQUNqQixTQUFTLENBQVE7SUFDakIsT0FBTyxDQUFtQjtJQUMxQixZQUFZLENBQVM7SUFFckIsWUFBWSxPQUFrQztRQUM1QyxLQUFLLEVBQUUsQ0FBQztRQUNSLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLDZCQUFnQixFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUEyQixDQUFDO1FBQzNDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxtQkFBVyxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFL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
@@ -0,0 +1,24 @@
1
+ import { FileLoader, type FileLoaderOptions } from './file_loader.js';
2
+ export interface ContextLoaderOptions extends Omit<FileLoaderOptions, 'target'> {
3
+ /** required inject */
4
+ inject: Record<string, any>;
5
+ /** property name defined to target */
6
+ property: string;
7
+ /** determine the field name of inject object. */
8
+ fieldClass?: string;
9
+ }
10
+ /**
11
+ * Same as {@link FileLoader}, but it will attach file to `inject[fieldClass]`.
12
+ * The exports will be lazy loaded, such as `ctx.group.repository`.
13
+ * @augments FileLoader
14
+ * @since 1.0.0
15
+ */
16
+ export declare class ContextLoader extends FileLoader {
17
+ #private;
18
+ /**
19
+ * @class
20
+ * @param {Object} options - options same as {@link FileLoader}
21
+ * @param {String} options.fieldClass - determine the field name of inject object.
22
+ */
23
+ constructor(options: ContextLoaderOptions);
24
+ }
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ContextLoader = void 0;
7
+ const node_assert_1 = __importDefault(require("node:assert"));
8
+ const is_type_of_1 = require("is-type-of");
9
+ const file_loader_js_1 = require("./file_loader.js");
10
+ const CLASS_LOADER = Symbol('classLoader');
11
+ class ClassLoader {
12
+ _cache = new Map();
13
+ _ctx;
14
+ constructor(options) {
15
+ (0, node_assert_1.default)(options.ctx, 'options.ctx is required');
16
+ const properties = options.properties;
17
+ this._ctx = options.ctx;
18
+ for (const property in properties) {
19
+ this.#defineProperty(property, properties[property]);
20
+ }
21
+ }
22
+ #defineProperty(property, values) {
23
+ Object.defineProperty(this, property, {
24
+ get() {
25
+ let instance = this._cache.get(property);
26
+ if (!instance) {
27
+ instance = getInstance(values, this._ctx);
28
+ this._cache.set(property, instance);
29
+ }
30
+ return instance;
31
+ },
32
+ });
33
+ }
34
+ }
35
+ /**
36
+ * Same as {@link FileLoader}, but it will attach file to `inject[fieldClass]`.
37
+ * The exports will be lazy loaded, such as `ctx.group.repository`.
38
+ * @augments FileLoader
39
+ * @since 1.0.0
40
+ */
41
+ class ContextLoader extends file_loader_js_1.FileLoader {
42
+ #inject;
43
+ /**
44
+ * @class
45
+ * @param {Object} options - options same as {@link FileLoader}
46
+ * @param {String} options.fieldClass - determine the field name of inject object.
47
+ */
48
+ constructor(options) {
49
+ (0, node_assert_1.default)(options.property, 'options.property is required');
50
+ (0, node_assert_1.default)(options.inject, 'options.inject is required');
51
+ const target = {};
52
+ if (options.fieldClass) {
53
+ options.inject[options.fieldClass] = target;
54
+ }
55
+ super({
56
+ ...options,
57
+ target,
58
+ });
59
+ this.#inject = this.options.inject;
60
+ const app = this.#inject;
61
+ const property = options.property;
62
+ // define ctx.service
63
+ Object.defineProperty(app.context, property, {
64
+ get() {
65
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
66
+ const ctx = this;
67
+ // distinguish property cache,
68
+ // cache's lifecycle is the same with this context instance
69
+ // e.x. ctx.service1 and ctx.service2 have different cache
70
+ if (!ctx[CLASS_LOADER]) {
71
+ ctx[CLASS_LOADER] = new Map();
72
+ }
73
+ const classLoader = ctx[CLASS_LOADER];
74
+ let instance = classLoader.get(property);
75
+ if (!instance) {
76
+ instance = getInstance(target, ctx);
77
+ classLoader.set(property, instance);
78
+ }
79
+ return instance;
80
+ },
81
+ });
82
+ }
83
+ }
84
+ exports.ContextLoader = ContextLoader;
85
+ function getInstance(values, ctx) {
86
+ // it's a directory when it has no exports
87
+ // then use ClassLoader
88
+ const Class = values[file_loader_js_1.EXPORTS] ? values : null;
89
+ let instance;
90
+ if (Class) {
91
+ if ((0, is_type_of_1.isClass)(Class)) {
92
+ instance = new Class(ctx);
93
+ }
94
+ else {
95
+ // it's just an object
96
+ instance = Class;
97
+ }
98
+ // Can't set property to primitive, so check again
99
+ // e.x. module.exports = 1;
100
+ }
101
+ else if ((0, is_type_of_1.isPrimitive)(values)) {
102
+ instance = values;
103
+ }
104
+ else {
105
+ instance = new ClassLoader({ ctx, properties: values });
106
+ }
107
+ return instance;
108
+ }
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dF9sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbG9hZGVyL2NvbnRleHRfbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLDhEQUFpQztBQUVqQywyQ0FBa0Q7QUFDbEQscURBQStFO0FBRS9FLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQU8zQyxNQUFNLFdBQVc7SUFDTixNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM1QixJQUFJLENBQW9CO0lBRXhCLFlBQVksT0FBMkI7UUFDckMsSUFBQSxxQkFBTSxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUV4QixLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQWdCLEVBQUUsTUFBVztRQUMzQyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDcEMsR0FBRztnQkFDRCxJQUFJLFFBQVEsR0FBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNkLFFBQVEsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO2dCQUNELE9BQU8sUUFBUSxDQUFDO1lBQ2xCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFXRDs7Ozs7R0FLRztBQUNILE1BQWEsYUFBYyxTQUFRLDJCQUFVO0lBQ2xDLE9BQU8sQ0FBc0I7SUFDdEM7Ozs7T0FJRztJQUNILFlBQVksT0FBNkI7UUFDdkMsSUFBQSxxQkFBTSxFQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUN6RCxJQUFBLHFCQUFNLEVBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDOUMsQ0FBQztRQUNELEtBQUssQ0FBQztZQUNKLEdBQUcsT0FBTztZQUNWLE1BQU07U0FDUCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTyxDQUFDO1FBRXBDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDekIsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNsQyxxQkFBcUI7UUFDckIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRTtZQUMzQyxHQUFHO2dCQUNELDREQUE0RDtnQkFDNUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDO2dCQUNqQiw4QkFBOEI7Z0JBQzlCLDJEQUEyRDtnQkFDM0QsMERBQTBEO2dCQUMxRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQ3ZCLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxDQUFDO2dCQUNELE1BQU0sV0FBVyxHQUE2QixHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2hFLElBQUksUUFBUSxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDZCxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDcEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsUUFBUyxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7Z0JBQ0QsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTNDRCxzQ0EyQ0M7QUFFRCxTQUFTLFdBQVcsQ0FBQyxNQUFXLEVBQUUsR0FBc0I7SUFDdEQsMENBQTBDO0lBQzFDLHVCQUF1QjtJQUN2QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsd0JBQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM5QyxJQUFJLFFBQVEsQ0FBQztJQUNiLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixJQUFJLElBQUEsb0JBQU8sRUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ25CLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDO2FBQU0sQ0FBQztZQUNOLHNCQUFzQjtZQUN0QixRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ25CLENBQUM7UUFDSCxrREFBa0Q7UUFDbEQsMkJBQTJCO0lBQzNCLENBQUM7U0FBTSxJQUFJLElBQUEsd0JBQVcsRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQy9CLFFBQVEsR0FBRyxNQUFNLENBQUM7SUFDcEIsQ0FBQztTQUFNLENBQUM7UUFDTixRQUFRLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMifQ==