serverless-plugin-datadog 3.3.0 → 3.4.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 (53) hide show
  1. package/dist/env.d.ts +17 -0
  2. package/dist/env.d.ts.map +1 -0
  3. package/dist/env.js +63 -0
  4. package/dist/env.js.map +1 -0
  5. package/dist/forwarder.d.ts +14 -0
  6. package/dist/forwarder.d.ts.map +1 -0
  7. package/dist/forwarder.js +87 -0
  8. package/dist/forwarder.js.map +1 -0
  9. package/dist/index.d.ts +10 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +161 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/layer.d.ts +26 -0
  14. package/dist/layer.d.ts.map +1 -0
  15. package/dist/layer.js +65 -0
  16. package/dist/layer.js.map +1 -0
  17. package/dist/layers.json +156 -0
  18. package/dist/package.json +1 -1
  19. package/dist/src/layer.d.ts.map +1 -1
  20. package/dist/src/layer.js +1 -2
  21. package/dist/src/layer.js.map +1 -1
  22. package/dist/src/layers-gov.json +4 -4
  23. package/dist/src/layers.json +42 -42
  24. package/dist/templates/node-es6-template.d.ts +2 -0
  25. package/dist/templates/node-es6-template.d.ts.map +1 -0
  26. package/dist/templates/node-es6-template.js +25 -0
  27. package/dist/templates/node-es6-template.js.map +1 -0
  28. package/dist/templates/node-js-template.d.ts +2 -0
  29. package/dist/templates/node-js-template.d.ts.map +1 -0
  30. package/dist/templates/node-js-template.js +24 -0
  31. package/dist/templates/node-js-template.js.map +1 -0
  32. package/dist/templates/node-ts-template.d.ts +2 -0
  33. package/dist/templates/node-ts-template.d.ts.map +1 -0
  34. package/dist/templates/node-ts-template.js +26 -0
  35. package/dist/templates/node-ts-template.js.map +1 -0
  36. package/dist/templates/python-template.d.ts +2 -0
  37. package/dist/templates/python-template.d.ts.map +1 -0
  38. package/dist/templates/python-template.js +25 -0
  39. package/dist/templates/python-template.js.map +1 -0
  40. package/dist/tracing.d.ts +9 -0
  41. package/dist/tracing.d.ts.map +1 -0
  42. package/dist/tracing.js +36 -0
  43. package/dist/tracing.js.map +1 -0
  44. package/dist/util.d.ts +9 -0
  45. package/dist/util.d.ts.map +1 -0
  46. package/dist/util.js +72 -0
  47. package/dist/util.js.map +1 -0
  48. package/dist/wrapper.d.ts +11 -0
  49. package/dist/wrapper.d.ts.map +1 -0
  50. package/dist/wrapper.js +57 -0
  51. package/dist/wrapper.js.map +1 -0
  52. package/dist/yarn.lock +3703 -0
  53. package/package.json +1 -1
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /*
3
+ * Unless explicitly stated otherwise all files in this repository are licensed
4
+ * under the Apache License Version 2.0.
5
+ *
6
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
7
+ * Copyright 2019 Datadog, Inc.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ function pythonTemplate(filePath, methods) {
11
+ const newPath = filePath.split(/\/|\\/).join(".");
12
+ const methodsString = methodsTemplate(newPath, methods);
13
+ return `from datadog_lambda.wrapper import datadog_lambda_wrapper` + methodsString;
14
+ }
15
+ exports.pythonTemplate = pythonTemplate;
16
+ function methodsTemplate(newPath, methods) {
17
+ let data = "";
18
+ for (const method of methods) {
19
+ data += "\n";
20
+ data += `from ${newPath} import ${method} as ${method}_impl
21
+ ${method} = datadog_lambda_wrapper(${method}_impl)`;
22
+ }
23
+ return data;
24
+ }
25
+ //# sourceMappingURL=python-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-template.js","sourceRoot":"","sources":["../../src/templates/python-template.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAEH,SAAgB,cAAc,CAAC,QAAgB,EAAE,OAAiB;IAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAExD,OAAO,2DAA2D,GAAG,aAAa,CAAC;AACrF,CAAC;AALD,wCAKC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,OAAiB;IACzD,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,IAAI,IAAI,IAAI,CAAC;QACb,IAAI,IAAI,QAAQ,OAAO,WAAW,MAAM,OAAO,MAAM;EACvD,MAAM,6BAA6B,MAAM,QAAQ,CAAC;KACjD;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ import Service from "serverless/classes/Service";
2
+ export declare enum TracingMode {
3
+ XRAY = 0,
4
+ DD_TRACE = 1,
5
+ HYBRID = 2,
6
+ NONE = 3
7
+ }
8
+ export declare function enableTracing(service: Service, tracingMode: TracingMode): void;
9
+ //# sourceMappingURL=tracing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAQA,OAAO,OAAO,MAAM,4BAA4B,CAAC;AAKjD,oBAAY,WAAW;IACrB,IAAI,IAAA;IACJ,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,IAAI,IAAA;CACL;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,QAcvE"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /*
3
+ * Unless explicitly stated otherwise all files in this repository are licensed
4
+ * under the Apache License Version 2.0.
5
+ *
6
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
7
+ * Copyright 2019 Datadog, Inc.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const ddTraceEnabledEnvVar = "DD_TRACE_ENABLED";
11
+ const ddMergeXrayTracesEnvVar = "DD_MERGE_XRAY_TRACES";
12
+ var TracingMode;
13
+ (function (TracingMode) {
14
+ TracingMode[TracingMode["XRAY"] = 0] = "XRAY";
15
+ TracingMode[TracingMode["DD_TRACE"] = 1] = "DD_TRACE";
16
+ TracingMode[TracingMode["HYBRID"] = 2] = "HYBRID";
17
+ TracingMode[TracingMode["NONE"] = 3] = "NONE";
18
+ })(TracingMode = exports.TracingMode || (exports.TracingMode = {}));
19
+ function enableTracing(service, tracingMode) {
20
+ var _a;
21
+ const provider = service.provider;
22
+ if (tracingMode === TracingMode.XRAY || tracingMode === TracingMode.HYBRID) {
23
+ provider.tracing = {
24
+ apiGateway: true,
25
+ lambda: true,
26
+ };
27
+ }
28
+ if (tracingMode === TracingMode.HYBRID || tracingMode === TracingMode.DD_TRACE) {
29
+ const environment = (_a = provider.environment) !== null && _a !== void 0 ? _a : {};
30
+ environment[ddTraceEnabledEnvVar] = true;
31
+ environment[ddMergeXrayTracesEnvVar] = tracingMode === TracingMode.HYBRID;
32
+ provider.environment = environment;
33
+ }
34
+ }
35
+ exports.enableTracing = enableTracing;
36
+ //# sourceMappingURL=tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAIH,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAChD,MAAM,uBAAuB,GAAG,sBAAsB,CAAC;AAEvD,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,6CAAI,CAAA;IACJ,qDAAQ,CAAA;IACR,iDAAM,CAAA;IACN,6CAAI,CAAA;AACN,CAAC,EALW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAKtB;AAED,SAAgB,aAAa,CAAC,OAAgB,EAAE,WAAwB;;IACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAe,CAAC;IACzC,IAAI,WAAW,KAAK,WAAW,CAAC,IAAI,IAAI,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE;QAC1E,QAAQ,CAAC,OAAO,GAAG;YACjB,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,IAAI;SACb,CAAC;KACH;IACD,IAAI,WAAW,KAAK,WAAW,CAAC,MAAM,IAAI,WAAW,KAAK,WAAW,CAAC,QAAQ,EAAE;QAC9E,MAAM,WAAW,SAA4B,QAAQ,CAAC,WAAW,mCAAI,EAAE,CAAC;QACxE,WAAW,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;QACzC,WAAW,CAAC,uBAAuB,CAAC,GAAG,WAAW,KAAK,WAAW,CAAC,MAAM,CAAC;QAC1E,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;KACpC;AACH,CAAC;AAdD,sCAcC"}
package/dist/util.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { FunctionInfo } from "layer";
2
+ import Service from "serverless/classes/Service";
3
+ export declare function removeDirectory(path: string): Promise<void>;
4
+ export declare function getHandlerPath(handlerInfo: FunctionInfo): {
5
+ method: string;
6
+ filename: string;
7
+ } | undefined;
8
+ export declare function hasWebpackPlugin(service: Service): boolean;
9
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,OAAO,MAAM,4BAA4B,CAAC;AAQjD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,iBAejD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,YAAY;;;cASvD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,WAMhD"}
package/dist/util.js ADDED
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /*
3
+ * Unless explicitly stated otherwise all files in this repository are licensed
4
+ * under the Apache License Version 2.0.
5
+ *
6
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
7
+ * Copyright 2019 Datadog, Inc.
8
+ */
9
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
10
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11
+ return new (P || (P = Promise))(function (resolve, reject) {
12
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
13
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
15
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
16
+ });
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 (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
22
+ result["default"] = mod;
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const fs = __importStar(require("fs"));
27
+ const util_1 = require("util");
28
+ const exists = util_1.promisify(fs.exists);
29
+ const readdir = util_1.promisify(fs.readdir);
30
+ const lstat = util_1.promisify(fs.lstat);
31
+ const unlink = util_1.promisify(fs.unlink);
32
+ const rmdir = util_1.promisify(fs.rmdir);
33
+ function removeDirectory(path) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const dirExists = yield exists(path);
36
+ if (dirExists) {
37
+ const files = yield readdir(path);
38
+ for (const file of files) {
39
+ const curPath = path + "/" + file;
40
+ const stats = yield lstat(curPath);
41
+ if (stats.isDirectory()) {
42
+ yield removeDirectory(curPath);
43
+ }
44
+ else {
45
+ yield unlink(curPath);
46
+ }
47
+ }
48
+ yield rmdir(path);
49
+ }
50
+ });
51
+ }
52
+ exports.removeDirectory = removeDirectory;
53
+ function getHandlerPath(handlerInfo) {
54
+ const handlerfile = handlerInfo.handler.handler;
55
+ const parts = handlerfile.split(".");
56
+ if (parts.length < 2) {
57
+ return;
58
+ }
59
+ const method = parts[parts.length - 1];
60
+ const filename = parts.slice(0, -1).join(".");
61
+ return { method, filename };
62
+ }
63
+ exports.getHandlerPath = getHandlerPath;
64
+ function hasWebpackPlugin(service) {
65
+ const plugins = service.plugins;
66
+ if (plugins === undefined) {
67
+ return false;
68
+ }
69
+ return plugins.find((plugin) => plugin === "serverless-webpack") !== undefined;
70
+ }
71
+ exports.hasWebpackPlugin = hasWebpackPlugin;
72
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AAGzB,+BAAiC;AAGjC,MAAM,MAAM,GAAG,gBAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACpC,MAAM,OAAO,GAAG,gBAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACtC,MAAM,KAAK,GAAG,gBAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAClC,MAAM,MAAM,GAAG,gBAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACpC,MAAM,KAAK,GAAG,gBAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAElC,SAAsB,eAAe,CAAC,IAAY;;QAChD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,SAAS,EAAE;YACb,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,OAAO,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;gBAClC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;oBACvB,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;iBAChC;qBAAM;oBACL,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;iBACvB;aACF;YACD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;SACnB;IACH,CAAC;CAAA;AAfD,0CAeC;AAED,SAAgB,cAAc,CAAC,WAAyB;IACtD,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;IAChD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,OAAO;KACR;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AATD,wCASC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,OAAO,GAA0B,OAAe,CAAC,OAAO,CAAC;IAC/D,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,KAAK,CAAC;KACd;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,oBAAoB,CAAC,KAAK,SAAS,CAAC;AACjF,CAAC;AAND,4CAMC"}
@@ -0,0 +1,11 @@
1
+ import { FunctionInfo } from "./layer";
2
+ export declare const datadogHandlerEnvVar = "DD_LAMBDA_HANDLER";
3
+ export declare const pythonHandler = "datadog_lambda.handler.handler";
4
+ export declare const jsHandlerWithLayers = "/opt/nodejs/node_modules/datadog-lambda-js/handler.handler";
5
+ export declare const jsHandler = "node_modules/datadog-lambda-js/dist/handler.handler";
6
+ /**
7
+ * For each lambda function, redirects handler to the Datadog handler for the given runtime,
8
+ * and sets Datadog environment variable `DD_LAMBDA_HANDLER` to the original handler.
9
+ */
10
+ export declare function redirectHandlers(funcs: FunctionInfo[], addLayers: boolean): void;
11
+ //# sourceMappingURL=wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAe,MAAM,SAAS,CAAC;AAEpD,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AACxD,eAAO,MAAM,aAAa,mCAAmC,CAAC;AAC9D,eAAO,MAAM,mBAAmB,+DAA+D,CAAC;AAChG,eAAO,MAAM,SAAS,wDAAwD,CAAC;AAE/E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,OAAO,QAkBzE"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /*
3
+ * Unless explicitly stated otherwise all files in this repository are licensed
4
+ * under the Apache License Version 2.0.
5
+ *
6
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
7
+ * Copyright 2019 Datadog, Inc.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const layer_1 = require("./layer");
11
+ exports.datadogHandlerEnvVar = "DD_LAMBDA_HANDLER";
12
+ exports.pythonHandler = "datadog_lambda.handler.handler";
13
+ exports.jsHandlerWithLayers = "/opt/nodejs/node_modules/datadog-lambda-js/handler.handler";
14
+ exports.jsHandler = "node_modules/datadog-lambda-js/dist/handler.handler";
15
+ /**
16
+ * For each lambda function, redirects handler to the Datadog handler for the given runtime,
17
+ * and sets Datadog environment variable `DD_LAMBDA_HANDLER` to the original handler.
18
+ */
19
+ function redirectHandlers(funcs, addLayers) {
20
+ funcs.forEach((func) => {
21
+ setEnvDatadogHandler(func);
22
+ const handler = getDDHandler(func.type, addLayers);
23
+ if (handler === undefined) {
24
+ return;
25
+ }
26
+ func.handler.handler = handler;
27
+ if (func.handler.package === undefined) {
28
+ func.handler.package = {
29
+ exclude: [],
30
+ include: [],
31
+ };
32
+ }
33
+ if (func.handler.package.include === undefined) {
34
+ func.handler.package.include = [];
35
+ }
36
+ });
37
+ }
38
+ exports.redirectHandlers = redirectHandlers;
39
+ function getDDHandler(lambdaRuntime, addLayers) {
40
+ if (lambdaRuntime === undefined) {
41
+ return;
42
+ }
43
+ switch (lambdaRuntime) {
44
+ case layer_1.RuntimeType.NODE:
45
+ return addLayers ? exports.jsHandlerWithLayers : exports.jsHandler;
46
+ case layer_1.RuntimeType.PYTHON:
47
+ return exports.pythonHandler;
48
+ }
49
+ }
50
+ function setEnvDatadogHandler(func) {
51
+ var _a;
52
+ const originalHandler = func.handler.handler;
53
+ const environment = (_a = func.handler.environment) !== null && _a !== void 0 ? _a : {};
54
+ environment[exports.datadogHandlerEnvVar] = originalHandler;
55
+ func.handler.environment = environment;
56
+ }
57
+ //# sourceMappingURL=wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAEH,mCAAoD;AAEvC,QAAA,oBAAoB,GAAG,mBAAmB,CAAC;AAC3C,QAAA,aAAa,GAAG,gCAAgC,CAAC;AACjD,QAAA,mBAAmB,GAAG,4DAA4D,CAAC;AACnF,QAAA,SAAS,GAAG,qDAAqD,CAAC;AAE/E;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,KAAqB,EAAE,SAAkB;IACxE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO;SACR;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG;gBACrB,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;aACZ,CAAC;SACH;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE;YAC9C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;SACnC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAlBD,4CAkBC;AAED,SAAS,YAAY,CAAC,aAAsC,EAAE,SAAkB;IAC9E,IAAI,aAAa,KAAK,SAAS,EAAE;QAC/B,OAAO;KACR;IACD,QAAQ,aAAa,EAAE;QACrB,KAAK,mBAAW,CAAC,IAAI;YACnB,OAAO,SAAS,CAAC,CAAC,CAAC,2BAAmB,CAAC,CAAC,CAAC,iBAAS,CAAC;QACrD,KAAK,mBAAW,CAAC,MAAM;YACrB,OAAO,qBAAa,CAAC;KACxB;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAkB;;IAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC7C,MAAM,WAAW,SAAI,IAAI,CAAC,OAAe,CAAC,WAAW,mCAAI,EAAE,CAAC;IAC5D,WAAW,CAAC,4BAAoB,CAAC,GAAG,eAAe,CAAC;IACnD,IAAI,CAAC,OAAe,CAAC,WAAW,GAAG,WAAW,CAAC;AAClD,CAAC"}