openship 0.3.0 → 0.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.
- package/README.md +104 -61
- package/dist/bare-ITM45QBX.js +18 -0
- package/dist/bowser-MFQA6OS4.js +2821 -0
- package/dist/chunk-3U4SPZD5.js +241 -0
- package/dist/chunk-46YJFP4S.js +1771 -0
- package/dist/chunk-4CQWT2WL.js +116 -0
- package/dist/chunk-4FABQGQP.js +23 -0
- package/dist/chunk-4LEL3H2Z.js +84 -0
- package/dist/chunk-4MG3BVHE.js +326 -0
- package/dist/chunk-4VNS5WPM.js +42 -0
- package/dist/chunk-5N7VUGL6.js +2094 -0
- package/dist/chunk-5ZCKQ2MI.js +1360 -0
- package/dist/chunk-6ERIMTBC.js +1412 -0
- package/dist/chunk-7UOB5GGQ.js +132 -0
- package/dist/chunk-BUBSSKO6.js +1384 -0
- package/dist/chunk-E6W2JMMU.js +341 -0
- package/dist/chunk-E77LJWJK.js +1535 -0
- package/dist/chunk-F4DFVG6Q.js +573 -0
- package/dist/chunk-HFYDYK4D.js +1092 -0
- package/dist/chunk-JR2OCMJA.js +46 -0
- package/dist/chunk-JUJBBF5U.js +746 -0
- package/dist/chunk-JZLNHGLW.js +19145 -0
- package/dist/chunk-KD7VO4LG.js +2617 -0
- package/dist/chunk-LBFH7THC.js +435 -0
- package/dist/chunk-NB2VEIWG.js +129 -0
- package/dist/chunk-OJE6YWPQ.js +2866 -0
- package/dist/chunk-QKFRZNKN.js +4941 -0
- package/dist/chunk-RBZPFTHV.js +13354 -0
- package/dist/chunk-S6DSRLNE.js +121 -0
- package/dist/chunk-TEYJYSMT.js +409 -0
- package/dist/chunk-U2DPZSXA.js +112 -0
- package/dist/chunk-WJPCBU7Z.js +3147 -0
- package/dist/chunk-XIFRMKYT.js +13 -0
- package/dist/chunk-XVSAUO2I.js +7946 -0
- package/dist/chunk-Y37KHU7L.js +31 -0
- package/dist/chunk-YL67EWYZ.js +416 -0
- package/dist/chunk-ZKJOFWBJ.js +1879 -0
- package/dist/cloud-JMPHO3CW.js +7 -0
- package/dist/cloud-W5G6YXAY.js +24 -0
- package/dist/dist-L3MPOWCA.js +65 -0
- package/dist/dist-es-4C322O5D.js +22 -0
- package/dist/dist-es-GTAMF674.js +87 -0
- package/dist/dist-es-KE56MWYO.js +169 -0
- package/dist/dist-es-NRZIQY5B.js +484 -0
- package/dist/dist-es-WZCR7DHQ.js +317 -0
- package/dist/dist-es-XQCOTGC7.js +376 -0
- package/dist/dist-es-ZW3HFQUM.js +69 -0
- package/dist/docker-3FVJMFC3.js +12 -0
- package/dist/docker-edge-executor-ZIWAZWPL.js +9 -0
- package/dist/edge-import-53M5DGWZ.js +39 -0
- package/dist/event-streams-7LGDL56D.js +42 -0
- package/dist/executor-J7BHW5HF.js +26 -0
- package/dist/index.js +2450 -3484
- package/dist/loadSso-N273C5I7.js +577 -0
- package/dist/nginx-YZWKYKQU.js +16 -0
- package/dist/noop-RRNCIUI5.js +7 -0
- package/dist/openresty-lua-HAO4EUDY.js +32 -0
- package/dist/server/index.js +230533 -217891
- package/dist/server/migrations/0057_complete_prism.sql +18 -0
- package/dist/server/migrations/0058_add_server_is_local.sql +1 -0
- package/dist/server/migrations/0059_legal_fixer.sql +18 -0
- package/dist/server/migrations/0060_add_route_strategy_host_port.sql +3 -0
- package/dist/server/migrations/0061_notification_default_multi_kind.sql +3 -0
- package/dist/server/migrations/0062_add_incoming_webhook.sql +21 -0
- package/dist/server/migrations/0063_add_migration_logs.sql +1 -0
- package/dist/server/migrations/0064_add_migration_partial.sql +2 -0
- package/dist/server/migrations/0065_custom_app_template.sql +14 -0
- package/dist/server/migrations/0066_ensure_migration_partial_columns.sql +2 -0
- package/dist/server/migrations/0067_webhook_delivery.sql +28 -0
- package/dist/server/migrations/0068_add_migration_target_volumes.sql +1 -0
- package/dist/server/migrations/0069_add_project_composite_routes.sql +1 -0
- package/dist/server/migrations/0070_forward_git_to_server.sql +1 -0
- package/dist/server/migrations/meta/0057_snapshot.json +9326 -0
- package/dist/server/migrations/meta/0058_snapshot.json +9333 -0
- package/dist/server/migrations/meta/0059_snapshot.json +9495 -0
- package/dist/server/migrations/meta/0060_snapshot.json +9515 -0
- package/dist/server/migrations/meta/_journal.json +99 -1
- package/dist/setup-5X3WEEHA.js +14 -0
- package/dist/signin-DR462ERO.js +663 -0
- package/dist/sso-oidc-VBZLJUK5.js +830 -0
- package/dist/sts-EJLZ4Z77.js +1422 -0
- package/package.json +6 -2
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
import {
|
|
2
|
+
safeErrorMessage
|
|
3
|
+
} from "./chunk-JZLNHGLW.js";
|
|
4
|
+
|
|
5
|
+
// ../../packages/adapters/src/infra/openresty-lua.ts
|
|
6
|
+
import { createHash } from "crypto";
|
|
7
|
+
import { existsSync, readFileSync } from "fs";
|
|
8
|
+
import { dirname, join } from "path";
|
|
9
|
+
import { fileURLToPath } from "url";
|
|
10
|
+
|
|
11
|
+
// ../../packages/adapters/src/infra/lua-embedded.ts
|
|
12
|
+
var EMBEDDED_LUA = {
|
|
13
|
+
"geo_country.lua": "LS0gZ2VvX2NvdW50cnkubHVhCi0tIE1heE1pbmQgR2VvTGl0ZTItQ291bnRyeSBsb29rdXAgd2l0aCBwZXItd29ya2VyIExSVSBjYWNoZS4KLS0KLS0gREIgYW5kIGNhY2hlIGFyZSBwZXItd29ya2VyIG9ubHk6IG9uZSBsb2FkIHBlciB3b3JrZXIsIHNoYXJlZCBieSBhbGwKLS0gcmVxdWVzdHMuIE5vIHJlbG9hZCBwZXIgc3RyZWFtIG9yIHBlciByZXF1ZXN0LgotLQotLSBEZXBlbmRlbmNpZXMgKGluc3RhbGxlZCBieSBkZXBsb3lMdWFTY3JpcHRzKToKLS0gICBvcG06IGFuamlhMDUzMi9sdWEtcmVzdHktbWF4bWluZGRiCi0tICAgYXB0OiBsaWJtYXhtaW5kZGIwIGxpYm1heG1pbmRkYi1kZXYgIChDIGxpYnJhcnkgZm9yIEZGSSkKLS0gICBEYXRhYmFzZTogL3Vzci9zaGFyZS9HZW9JUC9HZW9MaXRlMi1Db3VudHJ5Lm1tZGIKLS0KLS0gRmFsbHMgYmFjayBncmFjZWZ1bGx5IC0gaWYgdGhlIGxpYnJhcnkgb3IgZGF0YWJhc2UgaXMgbWlzc2luZywKLS0gZ2V0X2NvdW50cnlfY29kZSgpIHJldHVybnMgbmlsLiAgQm90aCBzaXRlX2xvZ2dlci5sdWEgYW5kIHBpcGVfbG9nLmx1YQotLSB3cmFwIHRoaXMgbW9kdWxlIGluIHBjYWxsKHJlcXVpcmUsIC4uLikgc28gYSBtaXNzaW5nIERCIG5ldmVyIGNyYXNoZXMKLS0gdGhlIHJlcXVlc3QgcGlwZWxpbmUuCgpsb2NhbCBfTSA9IHt9Cgpsb2NhbCBEQl9QQVRIID0gIi91c3Ivc2hhcmUvR2VvSVAvR2VvTGl0ZTItQ291bnRyeS5tbWRiIgoKbG9jYWwgbW1kYl9vaywgbWF4bWluZCA9IHBjYWxsKHJlcXVpcmUsICJyZXN0eS5tYXhtaW5kZGIiKQpsb2NhbCBscnVjYWNoZV9vaywgbHJ1Y2FjaGUgPSBwY2FsbChyZXF1aXJlLCAicmVzdHkubHJ1Y2FjaGUiKQoKbG9jYWwgY2FjaGUgICAgICAgICAgICAtLSBvbmUgTFJVIHBlciB3b3JrZXIKbG9jYWwgZ2VvX2luaXR0ZWQgPSBmYWxzZSAgLS0gREIgb3BlbmVkIG9uY2UgcGVyIHdvcmtlciBvbiBmaXJzdCBsb29rdXAKCi0tIEluaXQgTWF4TWluZCBvbmNlIHBlciB3b3JrZXI7IHN1YnNlcXVlbnQgbG9va3VwcyAoYW55IHN0cmVhbSkgcmV1c2UuCmxvY2FsIGZ1bmN0aW9uIGVuc3VyZV9nZW9faW5pdCgpCiAgICBpZiBnZW9faW5pdHRlZCB0aGVuCiAgICAgICAgcmV0dXJuIHRydWUKICAgIGVuZAogICAgaWYgbm90IG1tZGJfb2sgb3Igbm90IG1heG1pbmQgdGhlbgogICAgICAgIHJldHVybiBmYWxzZQogICAgZW5kCiAgICBsb2NhbCBvaywgZXJyID0gbWF4bWluZC5pbml0KERCX1BBVEgpCiAgICBpZiBub3Qgb2sgdGhlbgogICAgICAgIG5neC5sb2cobmd4LldBUk4sCiAgICAgICAgICAgICJbZ2VvX2NvdW50cnldIEdlb0xpdGUyIGRhdGFiYXNlIG5vdCBmb3VuZCBhdCAiIC4uIERCX1BBVEggLi4KICAgICAgICAgICAgIiAtIGdlbyBsb29rdXBzIGRpc2FibGVkOiAiIC4uIChlcnIgb3IgInVua25vd24iKSkKICAgICAgICByZXR1cm4gZmFsc2UKICAgIGVuZAogICAgZ2VvX2luaXR0ZWQgPSB0cnVlCiAgICBuZ3gubG9nKG5neC5JTkZPLCAiW2dlb19jb3VudHJ5XSBHZW9MaXRlMi1Db3VudHJ5IGxvYWRlZCBmcm9tICIgLi4gREJfUEFUSCkKICAgIHJldHVybiB0cnVlCmVuZAoKLS0gQ3JlYXRlIExSVSBjYWNoZSBvbmNlIHBlciB3b3JrZXIgKG1heCA1MDAwMCBJUHMpLgpsb2NhbCBmdW5jdGlvbiBnZXRfY2FjaGUoKQogICAgaWYgY2FjaGUgdGhlbgogICAgICAgIHJldHVybiBjYWNoZQogICAgZW5kCiAgICBpZiBub3QgbHJ1Y2FjaGVfb2sgb3Igbm90IGxydWNhY2hlIHRoZW4KICAgICAgICByZXR1cm4gbmlsCiAgICBlbmQKICAgIGxvY2FsIGMsIGVyciA9IGxydWNhY2hlLm5ldyg1MDAwMCkKICAgIGlmIG5vdCBjIHRoZW4KICAgICAgICByZXR1cm4gbmlsCiAgICBlbmQKICAgIGNhY2hlID0gYwogICAgcmV0dXJuIGNhY2hlCmVuZAoKLS0tIEdldCBjb3VudHJ5IElTTyBjb2RlIGZvciBJUC4gVXNlcyBpbi1tZW1vcnkgTFJVIGNhY2hlIHRoZW4gTWF4TWluZCBEQi4KLS0gQHBhcmFtIGlwIHN0cmluZyAoZS5nLiAiOC44LjguOCIpCi0tIEByZXR1cm4gc3RyaW5nfG5pbCBjb3VudHJ5IGNvZGUgKGUuZy4gIlVTIikgb3IgbmlsCmZ1bmN0aW9uIF9NLmdldF9jb3VudHJ5X2NvZGUoaXApCiAgICBpZiBub3QgaXAgb3IgaXAgPT0gIiIgdGhlbgogICAgICAgIHJldHVybiBuaWwKICAgIGVuZAoKICAgIGxvY2FsIGMgPSBnZXRfY2FjaGUoKQogICAgaWYgYyB0aGVuCiAgICAgICAgbG9jYWwgY2FjaGVkID0gYzpnZXQoaXApCiAgICAgICAgaWYgY2FjaGVkIH49IG5pbCB0aGVuCiAgICAgICAgICAgIC0tIGZhbHNlIG1lYW5zICJsb29rZWQgdXAsIG5vIHJlc3VsdCIgLSBhdm9pZHMgcmVwZWF0ZWQgREIgbWlzc2VzCiAgICAgICAgICAgIHJldHVybiAoY2FjaGVkID09IGZhbHNlKSBhbmQgbmlsIG9yIGNhY2hlZAogICAgICAgIGVuZAogICAgZW5kCgogICAgaWYgbm90IGVuc3VyZV9nZW9faW5pdCgpIHRoZW4KICAgICAgICBpZiBjIHRoZW4gYzpzZXQoaXAsIGZhbHNlKSBlbmQKICAgICAgICByZXR1cm4gbmlsCiAgICBlbmQKCiAgICBsb2NhbCBvaywgcmVzLCBlcnIgPSBwY2FsbChtYXhtaW5kLmxvb2t1cCwgaXApCiAgICBsb2NhbCBjb2RlID0gbmlsCiAgICBpZiBvayBhbmQgcmVzIGFuZCByZXMuY291bnRyeSBhbmQgcmVzLmNvdW50cnkuaXNvX2NvZGUgdGhlbgogICAgICAgIGNvZGUgPSByZXMuY291bnRyeS5pc29fY29kZQogICAgZW5kCgogICAgaWYgYyB0aGVuCiAgICAgICAgYzpzZXQoaXAsIGNvZGUgb3IgZmFsc2UpCiAgICBlbmQKICAgIHJldHVybiBjb2RlCmVuZAoKZnVuY3Rpb24gX00uZW5zdXJlX2dlb19pbml0KCkKICAgIHJldHVybiBlbnN1cmVfZ2VvX2luaXQoKQplbmQKCnJldHVybiBfTQo=",
|
|
14
|
+
"mgmt_api.lua": "LS0gbWdtdF9hcGkubHVhCi0tIFJFU1QgYW5hbHl0aWNzIGVuZHBvaW50cyBiYWNrZWQgYnkgbmd4LnNoYXJlZC5kaWN0LgotLSBJbnRlcm5hbCBtYW5hZ2VtZW50IHBvcnQgb25seSAoMTI3LjAuMC4xOjkxNDUpLgoKbG9jYWwgY2pzb24gPSByZXF1aXJlICJjanNvbi5zYWZlIgoKbG9jYWwgYW5hbHl0aWNzICAgID0gbmd4LnNoYXJlZC5hbmFseXRpY3MKbG9jYWwgcmVxdWVzdF9kYXRhID0gbmd4LnNoYXJlZC5yZXF1ZXN0X2RhdGEKbG9jYWwgdXJpICAgICAgICAgID0gbmd4LnZhci51cmkKCmxvY2FsIGZ1bmN0aW9uIGpzb24oZGF0YSwgY29kZSkKICAgIG5neC5zdGF0dXMgPSBjb2RlIG9yIDIwMAogICAgbmd4LmhlYWRlclsiQ29udGVudC1UeXBlIl0gPSAiYXBwbGljYXRpb24vanNvbiIKICAgIG5neC5zYXkoY2pzb24uZW5jb2RlKGRhdGEpKQogICAgcmV0dXJuIG5neC5leGl0KG5neC5zdGF0dXMpCmVuZAoKbG9jYWwgZnVuY3Rpb24gYmFkKG1zZykKICAgIHJldHVybiBqc29uKHsgZXJyb3IgPSBtc2cgfSwgNDAwKQplbmQKCi0tIOKUgOKUgCBHRVQgL2hlYWx0aCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKCmlmIHVyaSA9PSAiL2hlYWx0aCIgdGhlbgogICAgbmd4LnNheSgib2siKQogICAgcmV0dXJuIG5neC5leGl0KDIwMCkKZW5kCgotLSDilIDilIAgL3J1bGVzIC0gcGVyLXJvdXRlIHJ1bGVzIGNhY2hlICh3cml0dGVuIGJ5IHRoZSBBUEksIHJlYWQgYnkgcnVsZXNfZ3VhcmQpIOKUgOKUgAotLSBQT1NUIC9ydWxlcyAgYm9keTogeyAiaG9zdCI6ICIuLi4iLCAicnVsZXMiOiBbIHsgInBhdGhQcmVmaXgiOiAiLyIsICJzcGVjIjogey4uLn0gfSBdIH0KLS0gICDihpIgcmVwbGFjZXMgdGhlIHJ1bGVzZXQgZm9yIHRoYXQgaG9zdCBpbiB0aGUgYHJ1bGVzYCBzaGFyZWQgZGljdCAocmVsb2FkLWZyZWUpLgotLSAgIEFuIGVtcHR5L2Fic2VudCBgcnVsZXNgIGFycmF5IGNsZWFycyB0aGUgaG9zdC4KLS0gR0VUICAvcnVsZXM/aG9zdD0uLi4gICDihpIgdGhlIHN0b3JlZCBydWxlc2V0IChkZWJ1ZykuCi0tIERFTEVURSAvcnVsZXM/aG9zdD0uLi4g4oaSIGNsZWFyIHRoZSBob3N0J3MgcnVsZXNldC4KLS0gSGFuZGxlZCBCRUZPUkUgdGhlIGFuYWx5dGljcyBndWFyZDogcnVsZXMgdXNlIHRoZWlyIG93biBkaWN0LgppZiB1cmkgPT0gIi9ydWxlcyIgdGhlbgogICAgbG9jYWwgcnVsZXMgPSBuZ3guc2hhcmVkLnJ1bGVzCiAgICBpZiBub3QgcnVsZXMgdGhlbiByZXR1cm4ganNvbih7IGVycm9yID0gInJ1bGVzIGRpY3QgdW5hdmFpbGFibGUiIH0sIDUwMykgZW5kCiAgICBsb2NhbCBtZXRob2QgPSBuZ3gucmVxLmdldF9tZXRob2QoKQoKICAgIGlmIG1ldGhvZCA9PSAiR0VUIiB0aGVuCiAgICAgICAgbG9jYWwgaG9zdCA9IG5neC52YXIuYXJnX2hvc3QKICAgICAgICBpZiBub3QgaG9zdCBvciBob3N0ID09ICIiIHRoZW4gcmV0dXJuIGJhZCgibWlzc2luZyA/aG9zdD0iKSBlbmQKICAgICAgICBob3N0ID0gaG9zdDpsb3dlcigpCiAgICAgICAgbG9jYWwgcmF3ID0gcnVsZXM6Z2V0KGhvc3QpCiAgICAgICAgcmV0dXJuIGpzb24oeyBob3N0ID0gaG9zdCwgcnVsZXMgPSByYXcgYW5kIGNqc29uLmRlY29kZShyYXcpIG9yIHt9IH0pCiAgICBlbmQKCiAgICBpZiBtZXRob2QgPT0gIkRFTEVURSIgdGhlbgogICAgICAgIGxvY2FsIGhvc3QgPSBuZ3gudmFyLmFyZ19ob3N0CiAgICAgICAgaWYgbm90IGhvc3Qgb3IgaG9zdCA9PSAiIiB0aGVuIHJldHVybiBiYWQoIm1pc3NpbmcgP2hvc3Q9IikgZW5kCiAgICAgICAgcnVsZXM6ZGVsZXRlKGhvc3Q6bG93ZXIoKSkKICAgICAgICByZXR1cm4ganNvbih7IG9rID0gdHJ1ZSB9KQogICAgZW5kCgogICAgaWYgbWV0aG9kID09ICJQT1NUIiB0aGVuCiAgICAgICAgbmd4LnJlcS5yZWFkX2JvZHkoKQogICAgICAgIGxvY2FsIGJvZHkgPSBuZ3gucmVxLmdldF9ib2R5X2RhdGEoKQogICAgICAgIGlmIG5vdCBib2R5IHRoZW4gcmV0dXJuIGJhZCgiZW1wdHkgYm9keSIpIGVuZAogICAgICAgIGxvY2FsIHBheWxvYWQgPSBjanNvbi5kZWNvZGUoYm9keSkKICAgICAgICBpZiB0eXBlKHBheWxvYWQpIH49ICJ0YWJsZSIgb3Igbm90IHBheWxvYWQuaG9zdCB0aGVuCiAgICAgICAgICAgIHJldHVybiBiYWQoImV4cGVjdGVkIHsgaG9zdCwgcnVsZXM6IFsuLi5dIH0iKQogICAgICAgIGVuZAogICAgICAgIGxvY2FsIGhvc3QgPSB0b3N0cmluZyhwYXlsb2FkLmhvc3QpOmxvd2VyKCkKICAgICAgICBsb2NhbCBsaXN0ID0gcGF5bG9hZC5ydWxlcwogICAgICAgIGlmIHR5cGUobGlzdCkgfj0gInRhYmxlIiBvciAjbGlzdCA9PSAwIHRoZW4KICAgICAgICAgICAgcnVsZXM6ZGVsZXRlKGhvc3QpICAgICAgICAgICAgICAgICAtLSBlbXB0eSBzZXQgPSBjbGVhciB0aGUgaG9zdAogICAgICAgICAgICByZXR1cm4ganNvbih7IG9rID0gdHJ1ZSwgaG9zdCA9IGhvc3QsIGNvdW50ID0gMCB9KQogICAgICAgIGVuZAogICAgICAgIGxvY2FsIG9rLCBlcnIgPSBydWxlczpzZXQoaG9zdCwgY2pzb24uZW5jb2RlKGxpc3QpKQogICAgICAgIGlmIG5vdCBvayB0aGVuIHJldHVybiBqc29uKHsgZXJyb3IgPSAic2V0IGZhaWxlZDogIiAuLiAoZXJyIG9yICI/IikgfSwgNTAwKSBlbmQKICAgICAgICByZXR1cm4ganNvbih7IG9rID0gdHJ1ZSwgaG9zdCA9IGhvc3QsIGNvdW50ID0gI2xpc3QgfSkKICAgIGVuZAoKICAgIHJldHVybiBqc29uKHsgZXJyb3IgPSAibWV0aG9kIG5vdCBhbGxvd2VkIiB9LCA0MDUpCmVuZAoKaWYgbm90IGFuYWx5dGljcyB0aGVuCiAgICByZXR1cm4ganNvbih7IGVycm9yID0gImFuYWx5dGljcyBkaWN0IHVuYXZhaWxhYmxlIiB9LCA1MDMpCmVuZAoKLS0g4pSA4pSAIEdFVCAvYW5hbHl0aWNzIC0gbWludXRlLWJ1Y2tldCB0aW1lIHNlcmllcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKLS0gP2RvbWFpbj1leGFtcGxlLmNvbSZmcm9tPUVQT0NIX01JTiZ0bz1FUE9DSF9NSU4KCmlmIHVyaSA9PSAiL2FuYWx5dGljcyIgdGhlbgogICAgbG9jYWwgZG9tYWluID0gbmd4LnZhci5hcmdfZG9tYWluCiAgICBpZiBub3QgZG9tYWluIG9yIGRvbWFpbiA9PSAiIiB0aGVuIHJldHVybiBiYWQoIm1pc3NpbmcgP2RvbWFpbj0iKSBlbmQKICAgIGRvbWFpbiA9IGRvbWFpbjpsb3dlcigpCgogICAgbG9jYWwgZnJvbV9tID0gdG9udW1iZXIobmd4LnZhci5hcmdfZnJvbSkKICAgIGxvY2FsIHRvX20gICA9IHRvbnVtYmVyKG5neC52YXIuYXJnX3RvKQogICAgaWYgbm90IGZyb21fbSBvciBub3QgdG9fbSB0aGVuCiAgICAgICAgcmV0dXJuIGJhZCgibWlzc2luZyA/ZnJvbT0gYW5kID90bz0gKGVwb2NoIG1pbnV0ZXMpIikKICAgIGVuZAogICAgLS0gQ2FwIGF0IDI0aAogICAgaWYgdG9fbSAtIGZyb21fbSA+IDE0NDAgdGhlbiB0b19tID0gZnJvbV9tICsgMTQ0MCBlbmQKCiAgICBsb2NhbCBidWNrZXRzID0ge30KICAgIGZvciBtID0gZnJvbV9tLCB0b19tIGRvCiAgICAgICAgbG9jYWwgcCA9ICJzOiIgLi4gZG9tYWluIC4uICI6IiAuLiBtCiAgICAgICAgbG9jYWwgciA9IGFuYWx5dGljczpnZXQocCAuLiAiOnIiKQogICAgICAgIGlmIHIgdGhlbgogICAgICAgICAgICAtLSBSZXNwb25zZSB0aW1lIHN0b3JlZCBhcyBtaWNyb3NlY29uZHMsIGNvbnZlcnQgdG8gc2Vjb25kcyAoZmxvYXQpCiAgICAgICAgICAgIGxvY2FsIHJ0X3VzID0gYW5hbHl0aWNzOmdldChwIC4uICI6dCIpIG9yIDAKICAgICAgICAgICAgbG9jYWwgYnVja2V0ID0gewogICAgICAgICAgICAgICAgbWludXRlICAgICAgICAgICA9IG0sCiAgICAgICAgICAgICAgICByZXF1ZXN0cyAgICAgICAgID0gciwKICAgICAgICAgICAgICAgIHVuaXF1ZV9yZXF1ZXN0cyAgPSBhbmFseXRpY3M6Z2V0KHAgLi4gIjp1Iikgb3IgMCwKICAgICAgICAgICAgICAgIGJhbmR3aWR0aF9pbiAgICAgPSBhbmFseXRpY3M6Z2V0KHAgLi4gIjppIikgb3IgMCwKICAgICAgICAgICAgICAgIGJhbmR3aWR0aF9vdXQgICAgPSBhbmFseXRpY3M6Z2V0KHAgLi4gIjpvIikgb3IgMCwKICAgICAgICAgICAgICAgIHJlc3BvbnNlX3RpbWUgICAgPSBydF91cyAvIDEwMDAwMDAsCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC0tIENvbGxlY3QgcGVyLW1pbnV0ZSBjb3VudHJ5IGRhdGEgaWYgcHJlc2VudAogICAgICAgICAgICBsb2NhbCBjcGZ4ID0gImM6IiAuLiBkb21haW4gLi4gIjoiIC4uIG0gLi4gIjoiCiAgICAgICAgICAgIGxvY2FsIGFsbF9rZXlzID0gYW5hbHl0aWNzOmdldF9rZXlzKDEwMDAwKQogICAgICAgICAgICBsb2NhbCBjb3VudHJpZXMgPSB7fQogICAgICAgICAgICBsb2NhbCBoYXNfY291bnRyaWVzID0gZmFsc2UKICAgICAgICAgICAgZm9yIF8sIGsgaW4gaXBhaXJzKGFsbF9rZXlzKSBkbwogICAgICAgICAgICAgICAgaWYgazpzdWIoMSwgI2NwZngpID09IGNwZnggdGhlbgogICAgICAgICAgICAgICAgICAgIGNvdW50cmllc1trOnN1YigjY3BmeCArIDEpXSA9IGFuYWx5dGljczpnZXQoaykgb3IgMAogICAgICAgICAgICAgICAgICAgIGhhc19jb3VudHJpZXMgPSB0cnVlCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGlmIGhhc19jb3VudHJpZXMgdGhlbgogICAgICAgICAgICAgICAgYnVja2V0LmNvdW50cmllcyA9IGNvdW50cmllcwogICAgICAgICAgICBlbmQKCiAgICAgICAgICAgIGJ1Y2tldHNbI2J1Y2tldHMgKyAxXSA9IGJ1Y2tldAogICAgICAgIGVuZAogICAgZW5kCgogICAgcmV0dXJuIGpzb24oeyBkb21haW4gPSBkb21haW4sIGJ1Y2tldHMgPSBidWNrZXRzIH0pCmVuZAoKLS0g4pSA4pSAIFBPU1QgL2FuYWx5dGljcy9mbHVzaCAtIHJlYWQgKyBkZWxldGUgbWludXRlIGJ1Y2tldHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi0tIFNhbWUgYXMgR0VUIC9hbmFseXRpY3MgYnV0IGRlbGV0ZXMgdGhlIHJldHVybmVkIGJ1Y2tldHMgZnJvbSBzaGFyZWQgbWVtb3J5LgotLSBVc2VkIGJ5IHRoZSBzY3JhcGVyIHRvIGF0b21pY2FsbHkgbW92ZSBkYXRhIGZyb20gT3BlblJlc3R5IOKGkiBEQi4KLS0gP2RvbWFpbj1leGFtcGxlLmNvbSZmcm9tPUVQT0NIX01JTiZ0bz1FUE9DSF9NSU4KCmlmIHVyaSA9PSAiL2FuYWx5dGljcy9mbHVzaCIgYW5kIG5neC5yZXEuZ2V0X21ldGhvZCgpID09ICJQT1NUIiB0aGVuCiAgICBsb2NhbCBkb21haW4gPSBuZ3gudmFyLmFyZ19kb21haW4KICAgIGlmIG5vdCBkb21haW4gb3IgZG9tYWluID09ICIiIHRoZW4gcmV0dXJuIGJhZCgibWlzc2luZyA/ZG9tYWluPSIpIGVuZAogICAgZG9tYWluID0gZG9tYWluOmxvd2VyKCkKCiAgICBsb2NhbCBmcm9tX20gPSB0b251bWJlcihuZ3gudmFyLmFyZ19mcm9tKQogICAgbG9jYWwgdG9fbSAgID0gdG9udW1iZXIobmd4LnZhci5hcmdfdG8pCiAgICBpZiBub3QgZnJvbV9tIG9yIG5vdCB0b19tIHRoZW4KICAgICAgICByZXR1cm4gYmFkKCJtaXNzaW5nID9mcm9tPSBhbmQgP3RvPSAoZXBvY2ggbWludXRlcykiKQogICAgZW5kCiAgICBpZiB0b19tIC0gZnJvbV9tID4gMTQ0MCB0aGVuIHRvX20gPSBmcm9tX20gKyAxNDQwIGVuZAoKICAgIGxvY2FsIGJ1Y2tldHMgPSB7fQogICAgbG9jYWwgZmx1c2hlZCA9IDAKICAgIGZvciBtID0gZnJvbV9tLCB0b19tIGRvCiAgICAgICAgbG9jYWwgcCA9ICJzOiIgLi4gZG9tYWluIC4uICI6IiAuLiBtCiAgICAgICAgbG9jYWwgciA9IGFuYWx5dGljczpnZXQocCAuLiAiOnIiKQogICAgICAgIGlmIHIgdGhlbgogICAgICAgICAgICBsb2NhbCBydF91cyA9IGFuYWx5dGljczpnZXQocCAuLiAiOnQiKSBvciAwCiAgICAgICAgICAgIGxvY2FsIGJ1Y2tldCA9IHsKICAgICAgICAgICAgICAgIG1pbnV0ZSAgICAgICAgICAgPSBtLAogICAgICAgICAgICAgICAgcmVxdWVzdHMgICAgICAgICA9IHIsCiAgICAgICAgICAgICAgICB1bmlxdWVfcmVxdWVzdHMgID0gYW5hbHl0aWNzOmdldChwIC4uICI6dSIpIG9yIDAsCiAgICAgICAgICAgICAgICBiYW5kd2lkdGhfaW4gICAgID0gYW5hbHl0aWNzOmdldChwIC4uICI6aSIpIG9yIDAsCiAgICAgICAgICAgICAgICBiYW5kd2lkdGhfb3V0ICAgID0gYW5hbHl0aWNzOmdldChwIC4uICI6byIpIG9yIDAsCiAgICAgICAgICAgICAgICByZXNwb25zZV90aW1lICAgID0gcnRfdXMgLyAxMDAwMDAwLAogICAgICAgICAgICB9CgogICAgICAgICAgICAtLSBDb2xsZWN0IHBlci1taW51dGUgY291bnRyeSBkYXRhCiAgICAgICAgICAgIGxvY2FsIGNwZnggPSAiYzoiIC4uIGRvbWFpbiAuLiAiOiIgLi4gbSAuLiAiOiIKICAgICAgICAgICAgbG9jYWwgYWxsX2tleXMgPSBhbmFseXRpY3M6Z2V0X2tleXMoMTAwMDApCiAgICAgICAgICAgIGxvY2FsIGNvdW50cmllcyA9IHt9CiAgICAgICAgICAgIGxvY2FsIGhhc19jb3VudHJpZXMgPSBmYWxzZQogICAgICAgICAgICBmb3IgXywgayBpbiBpcGFpcnMoYWxsX2tleXMpIGRvCiAgICAgICAgICAgICAgICBpZiBrOnN1YigxLCAjY3BmeCkgPT0gY3BmeCB0aGVuCiAgICAgICAgICAgICAgICAgICAgY291bnRyaWVzW2s6c3ViKCNjcGZ4ICsgMSldID0gYW5hbHl0aWNzOmdldChrKSBvciAwCiAgICAgICAgICAgICAgICAgICAgYW5hbHl0aWNzOmRlbGV0ZShrKQogICAgICAgICAgICAgICAgICAgIGhhc19jb3VudHJpZXMgPSB0cnVlCiAgICAgICAgICAgICAgICBlbmQKICAgICAgICAgICAgZW5kCiAgICAgICAgICAgIGlmIGhhc19jb3VudHJpZXMgdGhlbiBidWNrZXQuY291bnRyaWVzID0gY291bnRyaWVzIGVuZAoKICAgICAgICAgICAgYnVja2V0c1sjYnVja2V0cyArIDFdID0gYnVja2V0CgogICAgICAgICAgICAtLSBEZWxldGUgdGhlIG1pbnV0ZS1idWNrZXQgY291bnRlciBrZXlzCiAgICAgICAgICAgIGFuYWx5dGljczpkZWxldGUocCAuLiAiOnIiKQogICAgICAgICAgICBhbmFseXRpY3M6ZGVsZXRlKHAgLi4gIjppIikKICAgICAgICAgICAgYW5hbHl0aWNzOmRlbGV0ZShwIC4uICI6byIpCiAgICAgICAgICAgIGFuYWx5dGljczpkZWxldGUocCAuLiAiOnQiKQogICAgICAgICAgICBhbmFseXRpY3M6ZGVsZXRlKHAgLi4gIjp1IikKICAgICAgICAgICAgZmx1c2hlZCA9IGZsdXNoZWQgKyAxCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICByZXR1cm4ganNvbih7IGRvbWFpbiA9IGRvbWFpbiwgYnVja2V0cyA9IGJ1Y2tldHMsIGZsdXNoZWQgPSBmbHVzaGVkIH0pCmVuZAoKLS0g4pSA4pSAIEdFVCAvYW5hbHl0aWNzL3RvdGFscyAtIGxpZmV0aW1lIGNvdW50ZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAotLSA/ZG9tYWluPWV4YW1wbGUuY29tICAgICAg4oaSIHNpbmdsZSBkb21haW4KLS0gKG5vIGRvbWFpbikgICAgICAgICAgICAgIOKGkiBhbGwga25vd24gZG9tYWlucwoKaWYgdXJpID09ICIvYW5hbHl0aWNzL3RvdGFscyIgdGhlbgogICAgbG9jYWwgZG9tYWluID0gbmd4LnZhci5hcmdfZG9tYWluCgogICAgaWYgbm90IGRvbWFpbiBvciBkb21haW4gPT0gIiIgdGhlbgogICAgICAgIGxvY2FsIGtleXMgPSBhbmFseXRpY3M6Z2V0X2tleXMoMTAwMDApCiAgICAgICAgbG9jYWwgZG9tYWlucyA9IHt9CiAgICAgICAgZm9yIF8sIGsgaW4gaXBhaXJzKGtleXMpIGRvCiAgICAgICAgICAgIGxvY2FsIGQgPSBrOm1hdGNoKCJeZDooLispJCIpCiAgICAgICAgICAgIGlmIGQgdGhlbgogICAgICAgICAgICAgICAgZG9tYWluc1sjZG9tYWlucyArIDFdID0gewogICAgICAgICAgICAgICAgICAgIGRvbWFpbiAgICAgICAgPSBkLAogICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzICAgICAgPSBhbmFseXRpY3M6Z2V0KCJ0OiIgLi4gZCAuLiAiOnIiKSBvciAwLAogICAgICAgICAgICAgICAgICAgIGJhbmR3aWR0aF9pbiAgPSBhbmFseXRpY3M6Z2V0KCJ0OiIgLi4gZCAuLiAiOmkiKSBvciAwLAogICAgICAgICAgICAgICAgICAgIGJhbmR3aWR0aF9vdXQgPSBhbmFseXRpY3M6Z2V0KCJ0OiIgLi4gZCAuLiAiOm8iKSBvciAwLAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgICAgICByZXR1cm4ganNvbih7IGRvbWFpbnMgPSBkb21haW5zIH0pCiAgICBlbmQKCiAgICBkb21haW4gPSBkb21haW46bG93ZXIoKQogICAgcmV0dXJuIGpzb24oewogICAgICAgIGRvbWFpbiAgICAgICAgPSBkb21haW4sCiAgICAgICAgcmVxdWVzdHMgICAgICA9IGFuYWx5dGljczpnZXQoInQ6IiAuLiBkb21haW4gLi4gIjpyIikgb3IgMCwKICAgICAgICBiYW5kd2lkdGhfaW4gID0gYW5hbHl0aWNzOmdldCgidDoiIC4uIGRvbWFpbiAuLiAiOmkiKSBvciAwLAogICAgICAgIGJhbmR3aWR0aF9vdXQgPSBhbmFseXRpY3M6Z2V0KCJ0OiIgLi4gZG9tYWluIC4uICI6byIpIG9yIDAsCiAgICB9KQplbmQKCi0tIOKUgOKUgCBHRVQgL2FuYWx5dGljcy9nZW8gLSBjb3VudHJ5IGJyZWFrZG93biBmb3IgYSBkYXkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi0tID9kb21haW49ZXhhbXBsZS5jb20mZGF5PVlZWVlNTURECgppZiB1cmkgPT0gIi9hbmFseXRpY3MvZ2VvIiB0aGVuCiAgICBsb2NhbCBkb21haW4gPSBuZ3gudmFyLmFyZ19kb21haW4KICAgIGlmIG5vdCBkb21haW4gb3IgZG9tYWluID09ICIiIHRoZW4gcmV0dXJuIGJhZCgibWlzc2luZyA/ZG9tYWluPSIpIGVuZAogICAgZG9tYWluID0gZG9tYWluOmxvd2VyKCkKCiAgICBsb2NhbCBkYXkgPSBuZ3gudmFyLmFyZ19kYXkKICAgIGlmIG5vdCBkYXkgb3IgI2RheSB+PSA4IHRoZW4KICAgICAgICBkYXkgPSBvcy5kYXRlKCIhJVklbSVkIikKICAgIGVuZAoKICAgIGxvY2FsIHByZWZpeCA9ICJnOiIgLi4gZG9tYWluIC4uICI6IiAuLiBkYXkgLi4gIjoiCiAgICBsb2NhbCBrZXlzID0gYW5hbHl0aWNzOmdldF9rZXlzKDEwMDAwKQogICAgbG9jYWwgY291bnRyaWVzID0ge30KICAgIGZvciBfLCBrIGluIGlwYWlycyhrZXlzKSBkbwogICAgICAgIGlmIGs6c3ViKDEsICNwcmVmaXgpID09IHByZWZpeCB0aGVuCiAgICAgICAgICAgIGNvdW50cmllc1trOnN1YigjcHJlZml4ICsgMSldID0gYW5hbHl0aWNzOmdldChrKSBvciAwCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICByZXR1cm4ganNvbih7IGRvbWFpbiA9IGRvbWFpbiwgZGF5ID0gZGF5LCBjb3VudHJpZXMgPSBjb3VudHJpZXMgfSkKZW5kCgotLSDilIDilIAgR0VUIC9sb2dzL3JlY2VudCAtIHJhdyByZXF1ZXN0IHJpbmcgYnVmZmVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAotLSA/ZG9tYWluPWV4YW1wbGUuY29tJmxpbWl0PTUwCgppZiB1cmkgPT0gIi9sb2dzL3JlY2VudCIgdGhlbgogICAgaWYgbm90IHJlcXVlc3RfZGF0YSB0aGVuCiAgICAgICAgcmV0dXJuIGpzb24oeyBlcnJvciA9ICJyZXF1ZXN0X2RhdGEgZGljdCB1bmF2YWlsYWJsZSIgfSwgNTAzKQogICAgZW5kCgogICAgbG9jYWwgZG9tYWluID0gbmd4LnZhci5hcmdfZG9tYWluCiAgICBpZiBub3QgZG9tYWluIG9yIGRvbWFpbiA9PSAiIiB0aGVuIHJldHVybiBiYWQoIm1pc3NpbmcgP2RvbWFpbj0iKSBlbmQKICAgIGRvbWFpbiA9IGRvbWFpbjpsb3dlcigpCgogICAgbG9jYWwgbGltaXQgPSBtYXRoLm1pbih0b251bWJlcihuZ3gudmFyLmFyZ19saW1pdCkgb3IgNTAsIDEwMDApCiAgICBsb2NhbCBzZXEgICA9IHJlcXVlc3RfZGF0YTpnZXQoInJsb2c6IiAuLiBkb21haW4gLi4gIjpzZXEiKSBvciAwCiAgICBsb2NhbCBvdXQgICA9IHt9CgogICAgZm9yIGkgPSAwLCBsaW1pdCAtIDEgZG8KICAgICAgICBsb2NhbCBzbG90ID0gKHNlcSAtIGkpICUgMTAwMAogICAgICAgIGlmIHNsb3QgPCAwIHRoZW4gc2xvdCA9IHNsb3QgKyAxMDAwIGVuZAogICAgICAgIGxvY2FsIHJhdyA9IHJlcXVlc3RfZGF0YTpnZXQoInJsb2c6IiAuLiBkb21haW4gLi4gIjoiIC4uIHNsb3QpCiAgICAgICAgaWYgcmF3IHRoZW4gb3V0WyNvdXQgKyAxXSA9IHJhdyBlbmQKICAgIGVuZAoKICAgIC0tIFJldHVybiBwcmUtZW5jb2RlZCBKU09OIGVudHJpZXMgYXMgYSBKU09OIGFycmF5CiAgICBuZ3guaGVhZGVyWyJDb250ZW50LVR5cGUiXSA9ICJhcHBsaWNhdGlvbi9qc29uIgogICAgbmd4LnByaW50KCJbIikKICAgIGZvciBpZHgsIGVudHJ5IGluIGlwYWlycyhvdXQpIGRvCiAgICAgICAgaWYgaWR4ID4gMSB0aGVuIG5neC5wcmludCgiLCIpIGVuZAogICAgICAgIG5neC5wcmludChlbnRyeSkKICAgIGVuZAogICAgbmd4LnNheSgiXSIpCiAgICByZXR1cm4gbmd4LmV4aXQoMjAwKQplbmQKCi0tIOKUgOKUgCA0MDQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACnJldHVybiBqc29uKHsgZXJyb3IgPSAibm90IGZvdW5kIiB9LCA0MDQpCg==",
|
|
15
|
+
"pipe_log.lua": "LS0gcGlwZV9sb2cubHVhCi0tIFB1c2ggcmVxdWVzdCBsb2cgaW50byBzaGFyZWQgZGljdCBxdWV1ZSBsb2dfcGlwZTpxOntob3N0fSBmb3IgL3N0cmVhbSBTU0UuCi0tIFBheWxvYWQgc2hhcGUgbWF0Y2hlcyByZXF1ZXN0TG9nZ2VyLmpzIChpZCwgaXAsIGNvdW50cnkgd2hlbiBrbm93biwKLS0gdGltZXN0YW1wLCBkYXRlLCB1cmksIG1ldGhvZCwgc3RhdHVzLCB1c2VyQWdlbnQsIHJlcXVlc3RTaXplLCByZXNwb25zZVNpemUsCi0tIHJlc3BvbnNlVGltZSkuCi0tCi0tIENhbGxlZCB2aWEgbmd4LnRpbWVyLmF0IGZyb20gc2l0ZV9sb2dnZXIgKHByZW1hdHVyZSBpcyBmaXJzdCBhcmcpLgoKbG9jYWwgY2pzb24gPSByZXF1aXJlICJjanNvbi5zYWZlIgoKbG9jYWwgU1VCX1BSRUZJWCAgID0gImxvZ19waXBlOnN1YjoiCmxvY2FsIFFVRVVFX1BSRUZJWCA9ICJsb2dfcGlwZTpxOiIKbG9jYWwgUVVFVUVfTUFYX0xFTiA9IDIwMDAKCi0tIFNBRkUgTE9BRDogR2VvSVAgKHBlci13b3JrZXIsIGNhY2hlZCBieSByZXF1aXJlKQpsb2NhbCBnZW9fb2ssIGdlbyA9IHBjYWxsKHJlcXVpcmUsICJvcGVuc2hpcC5nZW9fY291bnRyeSIpCmlmIG5vdCBnZW9fb2sgdGhlbiBnZW8gPSBuaWwgZW5kCgotLSBSZXVzZWQgcGF5bG9hZCB0YWJsZSBwZXIgd29ya2VyIChjbGVhcmVkIGFmdGVyIGVuY29kZSB0byBhdm9pZCBHQyBwcmVzc3VyZSkKbG9jYWwgcGF5bG9hZCA9IHt9Cgpsb2NhbCBmdW5jdGlvbiBwaXBlX3JlcXVlc3RfbG9nKHByZW1hdHVyZSwgaG9zdCwgaXAsIHRzLCB1YSwgdXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcV9sZW4sIGJ5dGVzLCBydCwgbWV0aG9kLCBzdGF0dXMpCiAgICBpZiBwcmVtYXR1cmUgdGhlbiByZXR1cm4gZW5kCgogICAgbG9jYWwgc2ggPSBuZ3guc2hhcmVkLnJlcXVlc3RfZGF0YQogICAgaWYgbm90IHNoIHRoZW4gcmV0dXJuIGVuZAoKICAgIC0tIERvdWJsZS1jaGVjayBzdWJzY3JpYmVyIGlzIHN0aWxsIGFjdGl2ZSAoZ3VhcmQgYWdhaW5zdCByYWNlKQogICAgaWYgbm90IHNoOmdldChTVUJfUFJFRklYIC4uIGhvc3QpIHRoZW4gcmV0dXJuIGVuZAoKICAgIHBjYWxsKGZ1bmN0aW9uKCkKICAgICAgICBsb2NhbCBjb3VudHJ5ID0gbmlsCiAgICAgICAgaWYgZ2VvIGFuZCBnZW8uZ2V0X2NvdW50cnlfY29kZSB0aGVuCiAgICAgICAgICAgIGNvdW50cnkgPSBnZW8uZ2V0X2NvdW50cnlfY29kZShpcCkKICAgICAgICBlbmQKCiAgICAgICAgcGF5bG9hZC5pZCAgICAgICAgICAgPSBzdHJpbmcuZm9ybWF0KCIlLjNmLSVkIiwgdHMsIG1hdGgucmFuZG9tKDEwMDAwLCA5OTk5OSkpCiAgICAgICAgcGF5bG9hZC5ob3N0ICAgICAgICAgPSBob3N0CiAgICAgICAgcGF5bG9hZC5pcCAgICAgICAgICAgPSBpcAogICAgICAgIGlmIGNvdW50cnkgYW5kIHR5cGUoY291bnRyeSkgPT0gInN0cmluZyIgYW5kIGNvdW50cnkgfj0gIiIgdGhlbgogICAgICAgICAgICBwYXlsb2FkLmNvdW50cnkgPSBjb3VudHJ5CiAgICAgICAgZW5kCiAgICAgICAgcGF5bG9hZC50aW1lc3RhbXAgICAgPSB0cwogICAgICAgIHBheWxvYWQuZGF0ZSAgICAgICAgID0gb3MuZGF0ZSgiISVZLSVtLSVkICVIOiVNOiVTIiwgdHMpCiAgICAgICAgcGF5bG9hZC51cmkgICAgICAgICAgPSB1cmkKICAgICAgICBwYXlsb2FkLm1ldGhvZCAgICAgICA9IG1ldGhvZCBvciAiR0VUIgogICAgICAgIHBheWxvYWQuc3RhdHVzICAgICAgID0gdG9udW1iZXIoc3RhdHVzKSBvciAwCiAgICAgICAgcGF5bG9hZC51c2VyQWdlbnQgICAgPSB1YSBvciAiIgogICAgICAgIHBheWxvYWQucmVxdWVzdFNpemUgID0gdG9udW1iZXIocmVxX2xlbikgb3IgMAogICAgICAgIHBheWxvYWQucmVzcG9uc2VTaXplID0gdG9udW1iZXIoYnl0ZXMpIG9yIDAKICAgICAgICBwYXlsb2FkLnJlc3BvbnNlVGltZSA9IHRvbnVtYmVyKHJ0KSBvciAwCgogICAgICAgIGxvY2FsIGJvZHkgPSBjanNvbi5lbmNvZGUocGF5bG9hZCkKCiAgICAgICAgLS0gQ2xlYXIgcGF5bG9hZCB0YWJsZSBmb3IgbmV4dCByZXVzZQogICAgICAgIGZvciBrIGluIHBhaXJzKHBheWxvYWQpIGRvIHBheWxvYWRba10gPSBuaWwgZW5kCgogICAgICAgIGlmIG5vdCBib2R5IHRoZW4gcmV0dXJuIGVuZAoKICAgICAgICBsb2NhbCBxa2V5ID0gUVVFVUVfUFJFRklYIC4uIGhvc3QKICAgICAgICBzaDpscHVzaChxa2V5LCBib2R5KQogICAgICAgIGlmIHNoOmxsZW4ocWtleSkgPiBRVUVVRV9NQVhfTEVOIHRoZW4KICAgICAgICAgICAgc2g6cnBvcChxa2V5KQogICAgICAgIGVuZAogICAgZW5kKQplbmQKCnJldHVybiB7CiAgICBwaXBlX3JlcXVlc3RfbG9nID0gcGlwZV9yZXF1ZXN0X2xvZywKfQo=",
|
|
16
|
+
"pipe_stream.lua": "LS0gcGlwZV9zdHJlYW0ubHVhCi0tIGNvbnRlbnRfYnlfbHVhOiBTU0UgZW5kcG9pbnQgZm9yIHJlYWwtdGltZSByZXF1ZXN0IGxvZyBzdHJlYW1pbmcuCi0tIEdFVCAvbG9ncy9zdHJlYW0/ZG9tYWluPWV4YW1wbGUuY29tCi0tIEludGVybmFsIG9ubHkgLSAxMjcuMC4wLjE6OTE0NQoKbG9jYWwgc2ggPSBuZ3guc2hhcmVkLnJlcXVlc3RfZGF0YQppZiBub3Qgc2ggdGhlbgogICAgbmd4LnN0YXR1cyA9IDUwMwogICAgbmd4LnNheSgic2hhcmVkIGRpY3QgdW5hdmFpbGFibGUiKQogICAgcmV0dXJuIG5neC5leGl0KDUwMykKZW5kCgpsb2NhbCBkb21haW4gPSBuZ3gudmFyLmFyZ19kb21haW4KaWYgbm90IGRvbWFpbiBvciBkb21haW4gPT0gIiIgdGhlbgogICAgbmd4LnN0YXR1cyA9IDQwMAogICAgbmd4LnNheSgibWlzc2luZyA/ZG9tYWluPSBwYXJhbWV0ZXIiKQogICAgcmV0dXJuIG5neC5leGl0KDQwMCkKZW5kCgpkb21haW4gPSBkb21haW46bG93ZXIoKQppZiBkb21haW46c3ViKDEsIDQpID09ICJ3d3cuIiB0aGVuIGRvbWFpbiA9IGRvbWFpbjpzdWIoNSkgZW5kCgpsb2NhbCBTVUJfS0VZICAgPSAibG9nX3BpcGU6c3ViOiIgLi4gZG9tYWluCmxvY2FsIFFVRVVFX0tFWSA9ICJsb2dfcGlwZTpxOiIgICAuLiBkb21haW4KCi0tIENsZWFyIHN0YWxlIHF1ZXVlIGVudHJpZXMsIG1hcmsgc3Vic2NyaWJlciBhY3RpdmUKc2g6ZGVsZXRlKFFVRVVFX0tFWSkKc2g6c2V0KFNVQl9LRVksIHRydWUsIDMwKQoKbmd4LmhlYWRlclsiQ29udGVudC1UeXBlIl0gICAgICA9ICJ0ZXh0L2V2ZW50LXN0cmVhbSIKbmd4LmhlYWRlclsiQ2FjaGUtQ29udHJvbCJdICAgICA9ICJuby1jYWNoZSwgbm8tc3RvcmUiCm5neC5oZWFkZXJbIkNvbm5lY3Rpb24iXSAgICAgICAgPSAia2VlcC1hbGl2ZSIKbmd4LmhlYWRlclsiWC1BY2NlbC1CdWZmZXJpbmciXSA9ICJubyIKCi0tIFNlbmQgaW5pdGlhbCBTU0UgY29tbWVudCBzbyB0aGUgZmlyc3QgZmx1c2ggaGFzIGRhdGEuCi0tIFdpdGhvdXQgdGhpcywgbmd4LmZsdXNoIG9uIGFuIGVtcHR5IGJ1ZmZlciBzZW5kcyBjaHVua2VkLUVPRiAoMFxyXG5cclxuKQotLSBhbmQgdGVybWluYXRlcyB0aGUgcmVzcG9uc2UgaW1tZWRpYXRlbHkuCm5neC5wcmludCgiOiBjb25uZWN0ZWRcblxuIikKaWYgbm90IG5neC5mbHVzaCh0cnVlKSB0aGVuCiAgICBzaDpkZWxldGUoU1VCX0tFWSkKICAgIHJldHVybgplbmQKCmxvY2FsIHN0YXJ0ZWQgID0gbmd4Lm5vdygpCmxvY2FsIGxhc3RfaGIgID0gc3RhcnRlZApsb2NhbCBsYXN0X3JlZiA9IHN0YXJ0ZWQKCndoaWxlIHRydWUgZG8KICAgIC0tIE1heCAxIGhvdXIgcGVyIGNvbm5lY3Rpb24KICAgIGlmIG5neC5ub3coKSAtIHN0YXJ0ZWQgPiAzNjAwIHRoZW4KICAgICAgICBzaDpkZWxldGUoU1VCX0tFWSkKICAgICAgICByZXR1cm4KICAgIGVuZAoKICAgIC0tIERyYWluIHVwIHRvIDEwMCBxdWV1ZWQgZW50cmllcyBwZXIgY3ljbGUKICAgIGxvY2FsIHNlbnQgPSAwCiAgICB3aGlsZSBzZW50IDwgMTAwIGRvCiAgICAgICAgbG9jYWwgZW50cnkgPSBzaDpycG9wKFFVRVVFX0tFWSkKICAgICAgICBpZiBub3QgZW50cnkgdGhlbiBicmVhayBlbmQKICAgICAgICBuZ3gucHJpbnQoImV2ZW50OiByZXF1ZXN0XG5kYXRhOiAiLCBlbnRyeSwgIlxuXG4iKQogICAgICAgIHNlbnQgPSBzZW50ICsgMQogICAgZW5kCgogICAgaWYgc2VudCA+IDAgdGhlbgogICAgICAgIGlmIG5vdCBuZ3guZmx1c2godHJ1ZSkgdGhlbgogICAgICAgICAgICBzaDpkZWxldGUoU1VCX0tFWSkKICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgZW5kCiAgICBlbmQKCiAgICBsb2NhbCBub3cgPSBuZ3gubm93KCkKCiAgICAtLSBIZWFydGJlYXQgZXZlcnkgMTVzCiAgICBpZiBub3cgLSBsYXN0X2hiID4gMTUgdGhlbgogICAgICAgIG5neC5wcmludCgiOiBwaW5nXG5cbiIpCiAgICAgICAgaWYgbm90IG5neC5mbHVzaCh0cnVlKSB0aGVuCiAgICAgICAgICAgIHNoOmRlbGV0ZShTVUJfS0VZKQogICAgICAgICAgICByZXR1cm4KICAgICAgICBlbmQKICAgICAgICBsYXN0X2hiID0gbm93CiAgICBlbmQKCiAgICAtLSBSZWZyZXNoIHN1YnNjcmliZXIgVFRMIGV2ZXJ5IDEwcwogICAgaWYgbm93IC0gbGFzdF9yZWYgPiAxMCB0aGVuCiAgICAgICAgc2g6c2V0KFNVQl9LRVksIHRydWUsIDMwKQogICAgICAgIGxhc3RfcmVmID0gbm93CiAgICBlbmQKCiAgICBuZ3guc2xlZXAoMC4wNSkKZW5kCg==",
|
|
17
|
+
"rules_guard.lua": "LS0gcnVsZXNfZ3VhcmQubHVhCi0tIGFjY2Vzc19ieV9sdWEgZHJpdmVyOiBlbmZvcmNlIHBlci1yb3V0ZSBydWxlcyAobWV0aG9kIMK3IElQL0NJRFIgYWxsb3ctZGVueSDCtwotLSBjb3VudHJ5IGFsbG93L2JhbiDCtyBiYWQgdXNlci1hZ2VudCDCtyBob3RsaW5rIMK3IHJhdGUtbGltaXQpIGZvciB0aGUgcmVxdWVzdCdzCi0tIGhvc3QuIFJ1bGVzIGFyZSBwdXNoZWQgcmVsb2FkLWZyZWUgYnkgbWdtdF9hcGkgYFBPU1QgL3J1bGVzYDsgdGhlIERCCi0tIGByb3V0ZV9ydWxlYCB0YWJsZSBpcyB0aGUgc291cmNlIG9mIHRydXRoLiBBbGwgcGFyc2luZy9jb21waWxpbmcvbWF0Y2hpbmcKLS0gbGl2ZXMgaW4gb3BlbnNoaXAucnVsZXNfbGliIChsb2FkZWQgT05DRSBwZXIgd29ya2VyKSDigJQgdGhpcyBmaWxlIGlzIHJlLXJ1bgotLSBldmVyeSByZXF1ZXN0IHNvIGl0IHN0YXlzIG1pbmltYWwuIFNlZSBydWxlc19saWIubHVhIGZvciB0aGUgY29tcGlsZWQgc2hhcGUuCi0tCi0tIEVuZm9yY2VtZW50IHVzZXMgdGhlIGNvbm5lY3RpbmcgcGVlciAobmd4LnZhci5yZW1vdGVfYWRkcik7IGZyb250IGEgcmVhbF9pcAotLSBjb25maWcgaWYgYmVoaW5kIGEgdHJ1c3RlZCBwcm94eS4gTm8gdXNlci1zdXBwbGllZCB2YWx1ZSBpcyBldmVyIHVzZWQgYXMgYQotLSBMdWEgcGF0dGVybiBvciB3cml0dGVuIGludG8gYSByZXNwb25zZSBoZWFkZXIuCgpsb2NhbCBydWxlcyA9IG5neC5zaGFyZWQucnVsZXMKaWYgbm90IHJ1bGVzIHRoZW4gcmV0dXJuIGVuZAoKLS0gUmF0ZS1saW1pdCBjb3VudGVycyBsaXZlIGluIHRoZWlyIE9XTiBkaWN0IHNvIGEgaGlnaC1jYXJkaW5hbGl0eSBmbG9vZCAoYSBuZXcKLS0gcmw6IGtleSBwZXIgc291cmNlIElQIHBlciBzZWNvbmQpIGNhbid0IExSVS1ldmljdCB0aGUgcnVsZXNldHMgYW5kIHNpbGVudGx5Ci0tIGRpc2FibGUgZW5mb3JjZW1lbnQuIEZhbGwgYmFjayB0byBgcnVsZXNgIG9uIGEgYm94IHdob3NlIGNvbmZpZyBwcmVkYXRlcyB0aGUKLS0gc2VwYXJhdGUgZGljdCAoc3RpbGwgd29ya3MsIGp1c3Qgc2hhcmVzIHRoZSB6b25lIHVudGlsIHRoZSBuZXh0IHJlbG9hZCkuCmxvY2FsIGNvdW50ZXJzID0gbmd4LnNoYXJlZC5ybF9jb3VudGVycyBvciBydWxlcwoKbG9jYWwgaG9zdCA9IG5neC52YXIuaG9zdAppZiBub3QgaG9zdCB0aGVuIHJldHVybiBlbmQKCmxvY2FsIHJhdyA9IHJ1bGVzOmdldChob3N0KQppZiBub3QgcmF3IHRoZW4gcmV0dXJuIGVuZCAgICAgICAgICAtLSBmYXN0IHBhdGg6IG5vdGhpbmcgY29uZmlndXJlZCBmb3IgdGhpcyBob3N0Cgpsb2NhbCBsaWIgPSByZXF1aXJlICJvcGVuc2hpcC5ydWxlc19saWIiCmxvY2FsIGVudHJpZXMgPSBsaWIuZ2V0KGhvc3QsIHJhdykKbG9jYWwgbiA9ICNlbnRyaWVzCmlmIG4gPT0gMCB0aGVuIHJldHVybiBlbmQKCi0tIOKUgOKUgCBMb25nZXN0IG1hdGNoaW5nIHBhdGhQcmVmaXggd2lucyDilIDilIAKbG9jYWwgdXJpID0gbmd4LnZhci51cmkgb3IgIi8iCmxvY2FsIGNob3NlbiwgY2hvc2VuX2xlbiA9IG5pbCwgLTEKZm9yIGkgPSAxLCBuIGRvCiAgICBsb2NhbCBlID0gZW50cmllc1tpXQogICAgbG9jYWwgcCA9IGUucGF0aFByZWZpeAogICAgaWYgcCA9PSBuaWwgb3IgcCA9PSAiIiBvciBwID09ICIvIiB0aGVuCiAgICAgICAgaWYgY2hvc2VuX2xlbiA8IDAgdGhlbiBjaG9zZW4sIGNob3Nlbl9sZW4gPSBlLCAwIGVuZAogICAgZWxzZWlmIHVyaSA9PSBwIG9yIHN0cmluZy5zdWIodXJpLCAxLCAjcCkgPT0gcCB0aGVuCiAgICAgICAgaWYgI3AgPiBjaG9zZW5fbGVuIHRoZW4gY2hvc2VuLCBjaG9zZW5fbGVuID0gZSwgI3AgZW5kCiAgICBlbmQKZW5kCmlmIG5vdCBjaG9zZW4gdGhlbiByZXR1cm4gZW5kCgpsb2NhbCBzcGVjID0gY2hvc2VuLnNwZWMKbG9jYWwgZGVueV9zdGF0dXMgPSBzcGVjLmJsb2NrU3RhdHVzIG9yIDQwMwoKbG9jYWwgaXBzID0gbmd4LnZhci5yZW1vdGVfYWRkciBvciAiMC4wLjAuMCIKbG9jYWwgaXBpID0gbGliLmlwdjRfdG9faW50KGlwcykKCi0tIENvdW50cnkgcmVzb2x2ZWQgYXQgbW9zdCBvbmNlIHBlciByZXF1ZXN0IChvbmx5IHdoZW4gYSBjb3VudHJ5IHJ1bGUgZXhpc3RzKS4KbG9jYWwgY291bnRyeV9jYWNoZQpsb2NhbCBmdW5jdGlvbiBjb3VudHJ5X29mKCkKICAgIGlmIGNvdW50cnlfY2FjaGUgPT0gbmlsIHRoZW4KICAgICAgICBsb2NhbCBvaywgZ2VvID0gcGNhbGwocmVxdWlyZSwgIm9wZW5zaGlwLmdlb19jb3VudHJ5IikKICAgICAgICBjb3VudHJ5X2NhY2hlID0gKG9rIGFuZCBnZW8gYW5kIGdlby5nZXRfY291bnRyeV9jb2RlKGlwcykpIG9yIGZhbHNlCiAgICBlbmQKICAgIHJldHVybiBjb3VudHJ5X2NhY2hlIG9yIG5pbAplbmQKCi0tIOKUgOKUgCAxLiBBY2Nlc3M6IG1ldGhvZCBhbGxvdy1saXN0LCBJUCBhbGxvdy9kZW55LCBjb3VudHJ5IGFsbG93LWxpc3Qg4pSA4pSACmxvY2FsIGFjY2VzcyA9IHNwZWMuYWNjZXNzCmlmIGFjY2VzcyB0aGVuCiAgICBpZiBhY2Nlc3MubWV0aG9kcyBhbmQgbm90IGFjY2Vzcy5tZXRob2RzW25neC5yZXEuZ2V0X21ldGhvZCgpXSB0aGVuCiAgICAgICAgcmV0dXJuIG5neC5leGl0KGRlbnlfc3RhdHVzKQogICAgZW5kCiAgICBpZiBsaWIubWF0Y2hfY29tcGlsZWQoYWNjZXNzLmRlbnksIGlwaSwgaXBzKSB0aGVuIHJldHVybiBuZ3guZXhpdChkZW55X3N0YXR1cykgZW5kCiAgICBpZiBhY2Nlc3MuYWxsb3cgYW5kIG5vdCBsaWIubWF0Y2hfY29tcGlsZWQoYWNjZXNzLmFsbG93LCBpcGksIGlwcykgdGhlbgogICAgICAgIHJldHVybiBuZ3guZXhpdChkZW55X3N0YXR1cykKICAgIGVuZAogICAgLS0gQWxsb3ctbGlzdDogYW4gdW5yZXNvbHZlZCBjb3VudHJ5IGlzIG5vdCBvbiB0aGUgbGlzdCDihpIgYmxvY2tlZCAoZGVmYXVsdC1kZW55KS4KICAgIGlmIGFjY2Vzcy5hbGxvd0NvdW50cmllcyBhbmQgbm90IGFjY2Vzcy5hbGxvd0NvdW50cmllc1tjb3VudHJ5X29mKCkgb3IgIiJdIHRoZW4KICAgICAgICByZXR1cm4gbmd4LmV4aXQoZGVueV9zdGF0dXMpCiAgICBlbmQKZW5kCgotLSDilIDilIAgMi4gQmFuOiBJUC9DSURSLCBjb3VudHJ5LCB1c2VyLWFnZW50IOKUgOKUgApsb2NhbCBiYW4gPSBzcGVjLmJhbgppZiBiYW4gdGhlbgogICAgaWYgbGliLm1hdGNoX2NvbXBpbGVkKGJhbi5pcHMsIGlwaSwgaXBzKSBvciBsaWIubWF0Y2hfY29tcGlsZWQoYmFuLmNpZHJzLCBpcGksIGlwcykgdGhlbgogICAgICAgIHJldHVybiBuZ3guZXhpdChkZW55X3N0YXR1cykKICAgIGVuZAogICAgaWYgYmFuLmNvdW50cmllcyB0aGVuCiAgICAgICAgbG9jYWwgY2MgPSBjb3VudHJ5X29mKCkKICAgICAgICAtLSBGYWlsIENMT1NFRCAobWF0Y2hlcyB0aGUgYWxsb3ctbGlzdCBhYm92ZSk6IGlmIGdlbyBpcyB1bmF2YWlsYWJsZSB3ZQogICAgICAgIC0tIGNhbm5vdCBwcm92ZSB0aGUgY2xpZW50IGlzIE5PVCBmcm9tIGEgYmFubmVkIGNvdW50cnksIHNvIGJsb2NrIHJhdGhlcgogICAgICAgIC0tIHRoYW4gc2lsZW50bHkgbGV0dGluZyBiYW5uZWQgdHJhZmZpYyB0aHJvdWdoLiBBIGJsb2NrZWQgaG9zdCBpcyBhIGxvdWQKICAgICAgICAtLSBzaWduYWwgdG8gZml4IGdlbzsgZmFpbC1vcGVuIHdvdWxkIGJlIGEgc2lsZW50IHNlY3VyaXR5IGhvbGUuCiAgICAgICAgaWYgbm90IGNjIHRoZW4KICAgICAgICAgICAgbmd4LmxvZyhuZ3guV0FSTiwgInJ1bGVzX2d1YXJkOiBjb3VudHJ5IGJhbiBhY3RpdmUgYnV0IGdlbyB1bmF2YWlsYWJsZSDigJQgYmxvY2tpbmcgKGZhaWwtY2xvc2VkKSIpCiAgICAgICAgICAgIHJldHVybiBuZ3guZXhpdChkZW55X3N0YXR1cykKICAgICAgICBlbmQKICAgICAgICBpZiBiYW4uY291bnRyaWVzW2NjXSB0aGVuIHJldHVybiBuZ3guZXhpdChkZW55X3N0YXR1cykgZW5kCiAgICBlbmQKICAgIGlmIGJhbi5lbXB0eVVBIG9yIGJhbi51YXMgdGhlbgogICAgICAgIGxvY2FsIHVhID0gbmd4LnZhci5odHRwX3VzZXJfYWdlbnQKICAgICAgICBpZiBiYW4uZW1wdHlVQSBhbmQgKHVhID09IG5pbCBvciB1YSA9PSAiIikgdGhlbiByZXR1cm4gbmd4LmV4aXQoZGVueV9zdGF0dXMpIGVuZAogICAgICAgIGlmIGJhbi51YXMgYW5kIHVhIGFuZCB1YSB+PSAiIiB0aGVuCiAgICAgICAgICAgIGxvY2FsIHVhbCA9IHN0cmluZy5sb3dlcih1YSkKICAgICAgICAgICAgZm9yIGkgPSAxLCAjYmFuLnVhcyBkbwogICAgICAgICAgICAgICAgaWYgc3RyaW5nLmZpbmQodWFsLCBiYW4udWFzW2ldLCAxLCB0cnVlKSB0aGVuIHJldHVybiBuZ3guZXhpdChkZW55X3N0YXR1cykgZW5kCiAgICAgICAgICAgIGVuZAogICAgICAgIGVuZAogICAgZW5kCmVuZAoKLS0g4pSA4pSAIDMuIEhvdGxpbms6IG9ubHkgbGlzdGVkIHJlZmVyZXIgaG9zdHMgKGVtcHR5IHJlZmVyZXIgcGVyIGFsbG93RW1wdHkpIOKUgOKUgApsb2NhbCBob3QgPSBzcGVjLmhvdGxpbmsKaWYgaG90IHRoZW4KICAgIGxvY2FsIHJlZiA9IG5neC52YXIuaHR0cF9yZWZlcmVyCiAgICBpZiByZWYgPT0gbmlsIG9yIHJlZiA9PSAiIiB0aGVuCiAgICAgICAgaWYgbm90IGhvdC5hbGxvd0VtcHR5IHRoZW4gcmV0dXJuIG5neC5leGl0KGRlbnlfc3RhdHVzKSBlbmQKICAgIGVsc2UKICAgICAgICBsb2NhbCByaG9zdCA9IHN0cmluZy5tYXRjaChyZWYsICJeJXcrOi8vKFteL10rKSIpICAgICAgICAgIC0tIGF1dGhvcml0eQogICAgICAgIGlmIHJob3N0IHRoZW4gcmhvc3QgPSBzdHJpbmcubG93ZXIoc3RyaW5nLm1hdGNoKHJob3N0LCAiXihbXjpdKykiKSBvciByaG9zdCkgZW5kIC0tIHN0cmlwIDpwb3J0CiAgICAgICAgaWYgbm90IChyaG9zdCBhbmQgaG90LnJlZmVyZXJzW3Job3N0XSkgdGhlbiByZXR1cm4gbmd4LmV4aXQoZGVueV9zdGF0dXMpIGVuZAogICAgZW5kCmVuZAoKLS0g4pSA4pSAIDQuIFJhdGUgbGltaXQg4oCUIGZpeGVkIDFzIHdpbmRvdyBwZXIgKGhvc3QsIHBhdGgsIGlwKSDilIDilIAKbG9jYWwgcmwgPSBzcGVjLnJsCmlmIHJsIHRoZW4KICAgIGxvY2FsIGtleSA9ICJybDoiIC4uIGhvc3QgLi4gIjoiIC4uIChjaG9zZW4ucGF0aFByZWZpeCBvciAiLyIpIC4uICI6IiAuLiBpcHMKICAgICAgICAuLiAiOiIgLi4gbWF0aC5mbG9vcihuZ3gubm93KCkpCiAgICBsb2NhbCBjID0gY291bnRlcnM6aW5jcihrZXksIDEsIDAsIDIpICAtLSBpbml0IDAsIDJzIFRUTCDihpIgc2VsZi1leHBpcmluZyBidWNrZXRzCiAgICBpZiBjIGFuZCBjID4gcmwubGltaXQgdGhlbgogICAgICAgIG5neC5oZWFkZXJbIlJldHJ5LUFmdGVyIl0gPSAiMSIKICAgICAgICByZXR1cm4gbmd4LmV4aXQocmwuc3RhdHVzKQogICAgZW5kCmVuZAo=",
|
|
18
|
+
"rules_lib.lua": "LS0gcnVsZXNfbGliLmx1YQotLSBQZXItd29ya2VyIGhlbHBlcnMgKyBwYXJzZWQtcnVsZSBjYWNoZSBmb3IgcnVsZXNfZ3VhcmQubHVhIChhY2Nlc3MgcGhhc2UpLgotLSBMb2FkZWQgT05DRSBwZXIgd29ya2VyIHZpYSByZXF1aXJlKCJvcGVuc2hpcC5ydWxlc19saWIiKS4gVGhlIGFjY2VzcyBmaWxlIGlzCi0tIHJlLWV4ZWN1dGVkIG9uIGV2ZXJ5IHJlcXVlc3QsIHNvIGFsbCBwYXJzaW5nL2NvbXBpbGluZy9tYXRjaGluZyBsaXZlcyBoZXJlIHRvCi0tIGF2b2lkIHJlLWNyZWF0aW5nIGNsb3N1cmVzIGFuZCByZS1kZWNvZGluZyBKU09OIG9uIHRoZSBob3QgcGF0aC4KLS0KLS0gU2hhcmVkLWRpY3QgdmFsdWUgYHJ1bGVzW2hvc3RdYCA9IEpTT04gYXJyYXkgb2YgeyBwYXRoUHJlZml4LCBzcGVjIH0gd2hlcmUKLS0gc3BlYyBtYXRjaGVzIEByZXBvL2NvcmUgUm91dGVSdWxlU3BlYy4gcGFyc2UoKSBkZWNvZGVzICsgcHJlY29tcGlsZXMgQ0lEUnMgdG8KLS0gaW50ZWdlcnMsIGxvd2VyY2FzZXMgVUEvcmVmZXJlciBuZWVkbGVzLCBhbmQgYnVpbGRzIE8oMSkgc2V0cyBmb3IKLS0gY291bnRyaWVzL21ldGhvZHMgT05DRTsgdGhlIGNvbXBpbGVkIHJlc3VsdCBpcyBMUlUtY2FjaGVkIHBlciBob3N0IGFuZCByZXVzZWQKLS0gdW50aWwgdGhlIHJhdyBzdHJpbmcgY2hhbmdlcyAocnVsZSBlZGl0cyBhcmUgcmFyZSwgcmVxdWVzdHMgYXJlIGhvdCkuCi0tCi0tIFNFQ1VSSVRZOiBub3RoaW5nIGhlcmUgdHVybnMgYSBydWxlIHZhbHVlIGludG8gTHVhIGNvZGUgb3IgYSBMdWEgcGF0dGVybi4KLS0gU3RyaW5ncyBhcmUgY29tcGFyZWQgd2l0aCBgPT1gL3NldC1sb29rdXBzOyB1c2VyLWFnZW50IG1hdGNoaW5nIGlzCi0tIHN0cmluZy5maW5kKGhheSwgbmVlZGxlLCAxLCB0cnVlKSDigJQgUExBSU4sIG5ldmVyIGEgcmVnZXguCgpsb2NhbCBjanNvbiA9IHJlcXVpcmUgImNqc29uLnNhZmUiCmxvY2FsIGxydWNhY2hlID0gcmVxdWlyZSAicmVzdHkubHJ1Y2FjaGUiCgpsb2NhbCBNID0ge30KCmxvY2FsIGNhY2hlID0gbHJ1Y2FjaGUubmV3KDEwMjQpIC0tIGNvbXBpbGVkIHJ1bGVzLCBwZXIgd29ya2VyLCB+MTAyNCBob3N0cwoKLS0g4pSA4pSAIElQdjQgaGVscGVycyDilIDilIAKbG9jYWwgZnVuY3Rpb24gaXB2NF90b19pbnQocykKICAgIGxvY2FsIGEsIGIsIGMsIGQgPSBzdHJpbmcubWF0Y2gocywgIl4oJWQrKSUuKCVkKyklLiglZCspJS4oJWQrKSQiKQogICAgaWYgbm90IGEgdGhlbiByZXR1cm4gbmlsIGVuZAogICAgYSwgYiwgYywgZCA9IHRvbnVtYmVyKGEpLCB0b251bWJlcihiKSwgdG9udW1iZXIoYyksIHRvbnVtYmVyKGQpCiAgICBpZiBhID4gMjU1IG9yIGIgPiAyNTUgb3IgYyA+IDI1NSBvciBkID4gMjU1IHRoZW4gcmV0dXJuIG5pbCBlbmQKICAgIHJldHVybiBhICogMTY3NzcyMTYgKyBiICogNjU1MzYgKyBjICogMjU2ICsgZAplbmQKTS5pcHY0X3RvX2ludCA9IGlwdjRfdG9faW50CgotLSBQcmVjb21waWxlIGEgQ0lEUiAvIGJhcmUtSVAgc3RyaW5nIGludG8gYSBjaGVhcCBtYXRjaCBkZXNjcmlwdG9yLgpsb2NhbCBmdW5jdGlvbiBjb21waWxlX2NpZHIocykKICAgIGxvY2FsIGJhc2UsIGJpdHMgPSBzdHJpbmcubWF0Y2gocywgIl4oW14vXSspLyglZCspJCIpCiAgICBpZiBiYXNlIHRoZW4KICAgICAgICBiaXRzID0gdG9udW1iZXIoYml0cykKICAgICAgICBsb2NhbCBiYXNlaSA9IGlwdjRfdG9faW50KGJhc2UpCiAgICAgICAgaWYgbm90IGJhc2VpIG9yIGJpdHMgPCAwIG9yIGJpdHMgPiAzMiB0aGVuIHJldHVybiB7IGV4YWN0ID0gcyB9IGVuZAogICAgICAgIGlmIGJpdHMgPT0gMCB0aGVuIHJldHVybiB7IGFsbCA9IHRydWUgfSBlbmQKICAgICAgICBsb2NhbCBkaXYgPSAyIF4gKDMyIC0gYml0cykgLS0gY29tcGFyZSB0aGUgdG9wIGBiaXRzYCBiaXRzCiAgICAgICAgcmV0dXJuIHsgbmV0ID0gbWF0aC5mbG9vcihiYXNlaSAvIGRpdiksIGRpdiA9IGRpdiB9CiAgICBlbmQKICAgIGxvY2FsIGkgPSBpcHY0X3RvX2ludChzKQogICAgaWYgaSB0aGVuIHJldHVybiB7IGlwID0gaSB9IGVuZAogICAgcmV0dXJuIHsgZXhhY3QgPSBzIH0gLS0gSVB2NiAvIHVucGFyc2VhYmxlIOKGkiBsaXRlcmFsIHN0cmluZyBjb21wYXJlCmVuZAoKbG9jYWwgZnVuY3Rpb24gY29tcGlsZV9saXN0KGxpc3QpCiAgICBpZiB0eXBlKGxpc3QpIH49ICJ0YWJsZSIgdGhlbiByZXR1cm4gbmlsIGVuZAogICAgbG9jYWwgb3V0LCBuID0ge30sIDAKICAgIGZvciBfLCBzIGluIGlwYWlycyhsaXN0KSBkbwogICAgICAgIGlmIHR5cGUocykgPT0gInN0cmluZyIgYW5kIHMgfj0gIiIgdGhlbgogICAgICAgICAgICBuID0gbiArIDEKICAgICAgICAgICAgb3V0W25dID0gY29tcGlsZV9jaWRyKHMpCiAgICAgICAgZW5kCiAgICBlbmQKICAgIHJldHVybiBuID4gMCBhbmQgb3V0IG9yIG5pbAplbmQKCi0tIE1hdGNoIGEgY2xpZW50IChpbnQgZm9ybSBgaXBpYCwgbWF5IGJlIG5pbCBmb3Igbm9uLUlQdjQ7IHJhdyBgaXBzYCkgYWdhaW5zdCBhCi0tIGNvbXBpbGVkIENJRFIvSVAgbGlzdC4KbG9jYWwgZnVuY3Rpb24gbWF0Y2hfY29tcGlsZWQoY29tcGlsZWQsIGlwaSwgaXBzKQogICAgaWYgbm90IGNvbXBpbGVkIHRoZW4gcmV0dXJuIGZhbHNlIGVuZAogICAgZm9yIGkgPSAxLCAjY29tcGlsZWQgZG8KICAgICAgICBsb2NhbCBjID0gY29tcGlsZWRbaV0KICAgICAgICBpZiBjLmFsbCB0aGVuCiAgICAgICAgICAgIHJldHVybiB0cnVlCiAgICAgICAgZWxzZWlmIGMuaXAgdGhlbgogICAgICAgICAgICBpZiBpcGkgYW5kIGlwaSA9PSBjLmlwIHRoZW4gcmV0dXJuIHRydWUgZW5kCiAgICAgICAgZWxzZWlmIGMubmV0IHRoZW4KICAgICAgICAgICAgaWYgaXBpIGFuZCBtYXRoLmZsb29yKGlwaSAvIGMuZGl2KSA9PSBjLm5ldCB0aGVuIHJldHVybiB0cnVlIGVuZAogICAgICAgIGVsc2VpZiBjLmV4YWN0ID09IGlwcyB0aGVuCiAgICAgICAgICAgIHJldHVybiB0cnVlCiAgICAgICAgZW5kCiAgICBlbmQKICAgIHJldHVybiBmYWxzZQplbmQKTS5tYXRjaF9jb21waWxlZCA9IG1hdGNoX2NvbXBpbGVkCgpsb2NhbCBmdW5jdGlvbiBsb3dlcl9saXN0KGxpc3QpCiAgICBpZiB0eXBlKGxpc3QpIH49ICJ0YWJsZSIgdGhlbiByZXR1cm4gbmlsIGVuZAogICAgbG9jYWwgb3V0LCBuID0ge30sIDAKICAgIGZvciBfLCBzIGluIGlwYWlycyhsaXN0KSBkbwogICAgICAgIGlmIHR5cGUocykgPT0gInN0cmluZyIgYW5kIHMgfj0gIiIgdGhlbgogICAgICAgICAgICBuID0gbiArIDEKICAgICAgICAgICAgb3V0W25dID0gc3RyaW5nLmxvd2VyKHMpCiAgICAgICAgZW5kCiAgICBlbmQKICAgIHJldHVybiBuID4gMCBhbmQgb3V0IG9yIG5pbAplbmQKCi0tIEJ1aWxkIGFuIE8oMSkgbG9va3VwIHNldCBmcm9tIGEgc3RyaW5nIGxpc3QgKG9wdGlvbmFsbHkgbG93ZXJjYXNlZCkuCmxvY2FsIGZ1bmN0aW9uIHRvX3NldChsaXN0LCBsb3dlcikKICAgIGlmIHR5cGUobGlzdCkgfj0gInRhYmxlIiB0aGVuIHJldHVybiBuaWwgZW5kCiAgICBsb2NhbCBzZXQsIGFueSA9IHt9LCBmYWxzZQogICAgZm9yIF8sIHMgaW4gaXBhaXJzKGxpc3QpIGRvCiAgICAgICAgaWYgdHlwZShzKSA9PSAic3RyaW5nIiBhbmQgcyB+PSAiIiB0aGVuCiAgICAgICAgICAgIHNldFtsb3dlciBhbmQgc3RyaW5nLmxvd2VyKHMpIG9yIHNdID0gdHJ1ZQogICAgICAgICAgICBhbnkgPSB0cnVlCiAgICAgICAgZW5kCiAgICBlbmQKICAgIHJldHVybiBhbnkgYW5kIHNldCBvciBuaWwKZW5kCgotLSBDb21waWxlIG9uZSBSb3V0ZVJ1bGVTcGVjIGludG8gYSBmYXN0LW1hdGNoIHNoYXBlLgpsb2NhbCBmdW5jdGlvbiBjb21waWxlX3NwZWMoc3BlYykKICAgIGlmIHR5cGUoc3BlYykgfj0gInRhYmxlIiB0aGVuIHJldHVybiB7IGJsb2NrU3RhdHVzID0gNDAzIH0gZW5kCiAgICBsb2NhbCBvdXQgPSB7fQoKICAgIGxvY2FsIHJsID0gc3BlYy5yYXRlTGltaXQKICAgIGxvY2FsIHJwcyA9IHJsIGFuZCB0b251bWJlcihybC5ycHMpCiAgICBpZiBycHMgYW5kIHJwcyA+IDAgdGhlbgogICAgICAgIG91dC5ybCA9IHsKICAgICAgICAgICAgbGltaXQgPSBtYXRoLmZsb29yKHJwcykgKyBtYXRoLmZsb29yKHRvbnVtYmVyKHJsLmJ1cnN0KSBvciAwKSwKICAgICAgICAgICAgc3RhdHVzID0gdG9udW1iZXIocmwuc3RhdHVzKSBvciA0MjksCiAgICAgICAgfQogICAgZW5kCgogICAgbG9jYWwgYmFuID0gc3BlYy5iYW4KICAgIGlmIHR5cGUoYmFuKSA9PSAidGFibGUiIHRoZW4KICAgICAgICBvdXQuYmFuID0gewogICAgICAgICAgICBpcHMgPSBjb21waWxlX2xpc3QoYmFuLmlwcyksCiAgICAgICAgICAgIGNpZHJzID0gY29tcGlsZV9saXN0KGJhbi5jaWRycyksCiAgICAgICAgICAgIGNvdW50cmllcyA9IHRvX3NldChiYW4uY291bnRyaWVzKSwKICAgICAgICAgICAgdWFzID0gbG93ZXJfbGlzdChiYW4udXNlckFnZW50cyksCiAgICAgICAgICAgIGVtcHR5VUEgPSBiYW4uZW1wdHlVc2VyQWdlbnQgPT0gdHJ1ZSwKICAgICAgICB9CiAgICBlbmQKCiAgICBsb2NhbCBhY2MgPSBzcGVjLmFjY2VzcwogICAgaWYgdHlwZShhY2MpID09ICJ0YWJsZSIgdGhlbgogICAgICAgIG91dC5hY2Nlc3MgPSB7CiAgICAgICAgICAgIGFsbG93ID0gY29tcGlsZV9saXN0KGFjYy5hbGxvd0NpZHJzKSwKICAgICAgICAgICAgZGVueSA9IGNvbXBpbGVfbGlzdChhY2MuZGVueUNpZHJzKSwKICAgICAgICAgICAgYWxsb3dDb3VudHJpZXMgPSB0b19zZXQoYWNjLmFsbG93Q291bnRyaWVzKSwKICAgICAgICAgICAgbWV0aG9kcyA9IHRvX3NldChhY2MubWV0aG9kcyksCiAgICAgICAgfQogICAgZW5kCgogICAgbG9jYWwgaG90ID0gc3BlYy5ob3RsaW5rCiAgICBpZiB0eXBlKGhvdCkgPT0gInRhYmxlIiB0aGVuCiAgICAgICAgbG9jYWwgcmVmcyA9IHRvX3NldChob3QuYWxsb3dSZWZlcmVycywgdHJ1ZSkKICAgICAgICBpZiByZWZzIHRoZW4KICAgICAgICAgICAgb3V0LmhvdGxpbmsgPSB7IHJlZmVyZXJzID0gcmVmcywgYWxsb3dFbXB0eSA9IGhvdC5hbGxvd0VtcHR5IH49IGZhbHNlIH0KICAgICAgICBlbmQKICAgIGVuZAoKICAgIG91dC5ibG9ja1N0YXR1cyA9ICh0eXBlKHNwZWMuYmxvY2spID09ICJ0YWJsZSIgYW5kIHRvbnVtYmVyKHNwZWMuYmxvY2suc3RhdHVzKSkgb3IgNDAzCiAgICByZXR1cm4gb3V0CmVuZAoKbG9jYWwgZnVuY3Rpb24gcGFyc2UocmF3KQogICAgbG9jYWwgZW50cmllcyA9IGNqc29uLmRlY29kZShyYXcpCiAgICBpZiB0eXBlKGVudHJpZXMpIH49ICJ0YWJsZSIgdGhlbiByZXR1cm4ge30gZW5kCiAgICBsb2NhbCBvdXQsIG4gPSB7fSwgMAogICAgZm9yIF8sIGUgaW4gaXBhaXJzKGVudHJpZXMpIGRvCiAgICAgICAgaWYgdHlwZShlKSA9PSAidGFibGUiIHRoZW4KICAgICAgICAgICAgbiA9IG4gKyAxCiAgICAgICAgICAgIG91dFtuXSA9IHsgcGF0aFByZWZpeCA9IGUucGF0aFByZWZpeCwgc3BlYyA9IGNvbXBpbGVfc3BlYyhlLnNwZWMpIH0KICAgICAgICBlbmQKICAgIGVuZAogICAgcmV0dXJuIG91dAplbmQKCi0tIExSVS1jYWNoZWQgcGFyc2U6IHJldXNlIHRoZSBjb21waWxlZCBmb3JtIHVudGlsIHRoZSByYXcgZGljdCBzdHJpbmcgY2hhbmdlcy4KZnVuY3Rpb24gTS5nZXQoaG9zdCwgcmF3KQogICAgbG9jYWwgaGl0ID0gY2FjaGU6Z2V0KGhvc3QpCiAgICBpZiBoaXQgYW5kIGhpdC5yYXcgPT0gcmF3IHRoZW4gcmV0dXJuIGhpdC5wYXJzZWQgZW5kCiAgICBsb2NhbCBwYXJzZWQgPSBwYXJzZShyYXcpCiAgICBjYWNoZTpzZXQoaG9zdCwgeyByYXcgPSByYXcsIHBhcnNlZCA9IHBhcnNlZCB9KQogICAgcmV0dXJuIHBhcnNlZAplbmQKCnJldHVybiBNCg==",
|
|
19
|
+
"site_logger.lua": "LS0gc2l0ZV9sb2dnZXIubHVhCi0tIE9wZW5SZXN0eSBsb2dfYnlfbHVhIC0gcnVucyBBRlRFUiB0aGUgcmVzcG9uc2UgaXMgc2VudC4KLS0gUHVyZSBzaGFyZWQtZGljdCBhbmFseXRpY3MuICBObyBSZWRpcywgbm8gdGltZXJzIGZvciBjb3VudGVycywgbm8gYmF0Y2hpbmcuCi0tIEV2ZXJ5IGluY3IoKSBpcyBhdG9taWMgYWNyb3NzIHdvcmtlcnMuCi0tCi0tIFNoYXJlZCBkaWN0IGtleSBzY2hlbWEgKGFuYWx5dGljcyB6b25lKToKLS0gICBzOntkb21haW59OntlcG9jaF9taW59OnIgICAgICAgIHJlcXVlc3QgY291bnQgICAgICAgICAgICAgICAoVFRMIDI0aCkKLS0gICBzOntkb21haW59OntlcG9jaF9taW59OmkgICAgICAgIGJhbmR3aWR0aCBpbiAgYnl0ZXMgICAgICAgICAoVFRMIDI0aCkKLS0gICBzOntkb21haW59OntlcG9jaF9taW59Om8gICAgICAgIGJhbmR3aWR0aCBvdXQgYnl0ZXMgICAgICAgICAoVFRMIDI0aCkKLS0gICBzOntkb21haW59OntlcG9jaF9taW59OnQgICAgICAgIHJlc3BvbnNlIHRpbWUgc3VtIChzZWNvbmRzKSAoVFRMIDI0aCkKLS0gICBzOntkb21haW59OntlcG9jaF9taW59OnUgICAgICAgIHVuaXF1ZSAobm9uLXN0YXRpYykgcmVxcyAgICAoVFRMIDI0aCkKLS0gICBnOntkb21haW59OntZWVlZTU1ERH06e0NDfSAgICAgIGNvdW50cnkgaGl0IGNvdW50ICAgICAgICAgICAoVFRMIDQ4aCkKLS0gICBjOntkb21haW59OntlcG9jaF9taW59OntDQ30gICAgIGNvdW50cnkgcGVyIG1pbnV0ZSAgICAgICAgICAoVFRMIDI0aCkKLS0gICB0Ontkb21haW59OnIgLyA6aSAvIDpvICAgICAgICAgIGxpZmV0aW1lIHRvdGFscyAgICAgICAgICAgICAobm8gVFRMKQotLSAgIGQ6e2RvbWFpbn0gICAgICAgICAgICAgICAgICAgICAgZG9tYWluIGluZGV4IG1hcmtlciAgICAgICAgIChubyBUVEwpCi0tCi0tIFNoYXJlZCBkaWN0IGtleSBzY2hlbWEgKHJlcXVlc3RfZGF0YSB6b25lKToKLS0gICBybG9nOntkb21haW59OnNlcSAgICAgICAgICAgICAgIG1vbm90b25pYyB3cml0ZSBwb2ludGVyCi0tICAgcmxvZzp7ZG9tYWlufTp7c2xvdH0gICAgICAgICAgICBKU09OIGVudHJ5IChyaW5nIGJ1ZikgICAgICAgKFRUTCAxaCkKLS0gICBsb2dfcGlwZTpzdWI6e2RvbWFpbn0gICAgICAgICAgIGxpdmUgc3Vic2NyaWJlciBmbGFnICAgICAgICAoVFRMIDMwcykKLS0gICBsb2dfcGlwZTpxOntkb21haW59ICAgICAgICAgICAgIGxpdmUgbG9nIHF1ZXVlIGVudHJpZXMKCmxvY2FsIGNqc29uID0gcmVxdWlyZSAiY2pzb24uc2FmZSIKCi0tIFNBRkUgTE9BRDogR2VvSVAgTW9kdWxlIChwZXItd29ya2VyLCBjYWNoZWQgYnkgcmVxdWlyZSkKbG9jYWwgZ2VvX29rLCBnZW8gPSBwY2FsbChyZXF1aXJlLCAib3BlbnNoaXAuZ2VvX2NvdW50cnkiKQppZiBub3QgZ2VvX29rIHRoZW4KICAgIGdlbyA9IG5pbAogICAgbmd4LmxvZyhuZ3guV0FSTiwgIltzaXRlX2xvZ2dlcl0gZ2VvX2NvdW50cnkgbW9kdWxlIG5vdCBhdmFpbGFibGUuIEdlb0lQIGRpc2FibGVkLiIpCmVuZAoKLS0gU0FGRSBMT0FEOiBQaXBlIG1vZHVsZSAocGVyLXdvcmtlciwgY2FjaGVkIGJ5IHJlcXVpcmUpCmxvY2FsIHBpcGVfb2ssIHBpcGVfbG9nID0gcGNhbGwocmVxdWlyZSwgIm9wZW5zaGlwLnBpcGVfbG9nIikKaWYgbm90IHBpcGVfb2sgdGhlbiBwaXBlX2xvZyA9IG5pbCBlbmQKCmxvY2FsIGFuYWx5dGljcyAgICA9IG5neC5zaGFyZWQuYW5hbHl0aWNzCmxvY2FsIHJlcXVlc3RfZGF0YSA9IG5neC5zaGFyZWQucmVxdWVzdF9kYXRhCmlmIG5vdCBhbmFseXRpY3Mgb3Igbm90IHJlcXVlc3RfZGF0YSB0aGVuIHJldHVybiBlbmQKCi0tIOKUgOKUgCBIZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKbG9jYWwgZnVuY3Rpb24gbm9ybWFsaXplKGhvc3QpCiAgICBpZiBub3QgaG9zdCB0aGVuIHJldHVybiBuaWwgZW5kCiAgICBsb2NhbCBoID0gaG9zdDpsb3dlcigpCiAgICBpZiBoOnN1YigxLCA0KSA9PSAid3d3LiIgdGhlbiBoID0gaDpzdWIoNSkgZW5kCiAgICByZXR1cm4gaAplbmQKCmxvY2FsIF9kYXkgPSB7IHN0ciA9ICIiLCB0cyA9IDAgfQpsb2NhbCBmdW5jdGlvbiB0b2RheSgpCiAgICBsb2NhbCBub3cgPSBuZ3gubm93KCkKICAgIGlmIG5vdyAtIF9kYXkudHMgPiA2MCB0aGVuCiAgICAgICAgX2RheS5zdHIgPSBvcy5kYXRlKCIhJVklbSVkIiwgbm93KQogICAgICAgIF9kYXkudHMgPSBub3cKICAgIGVuZAogICAgcmV0dXJuIF9kYXkuc3RyCmVuZAoKLS0gRmFzdCBjaGVjayBpZiBVUkkgaXMgYSBzdGF0aWMgYXNzZXQgKGZvciB1bmlxdWVfcmVxdWVzdHMgY291bnRlcikKbG9jYWwgZnVuY3Rpb24gaXNfc3RhdGljX2Fzc2V0KHUpCiAgICBsb2NhbCBsb3dlciA9IHU6bG93ZXIoKQoKICAgIC0tIFN0YXRpYyBmaWxlIGV4dGVuc2lvbnMKICAgIGlmIGxvd2VyOm1hdGNoKCIlLmpzJCIpIG9yIGxvd2VyOm1hdGNoKCIlLmNzcyQiKSBvcgogICAgICAgbG93ZXI6bWF0Y2goIiUuanBnJCIpIG9yIGxvd2VyOm1hdGNoKCIlLmpwZWckIikgb3IKICAgICAgIGxvd2VyOm1hdGNoKCIlLnBuZyQiKSBvciBsb3dlcjptYXRjaCgiJS5naWYkIikgb3IKICAgICAgIGxvd2VyOm1hdGNoKCIlLnN2ZyQiKSBvciBsb3dlcjptYXRjaCgiJS53ZWJwJCIpIG9yCiAgICAgICBsb3dlcjptYXRjaCgiJS5pY28kIikgb3IgbG93ZXI6bWF0Y2goIiUuYm1wJCIpIG9yCiAgICAgICBsb3dlcjptYXRjaCgiJS53b2ZmMj8kIikgb3IgbG93ZXI6bWF0Y2goIiUudHRmJCIpIG9yCiAgICAgICBsb3dlcjptYXRjaCgiJS5lb3QkIikgb3IgbG93ZXI6bWF0Y2goIiUub3RmJCIpIG9yCiAgICAgICBsb3dlcjptYXRjaCgiJS5tcDQkIikgb3IgbG93ZXI6bWF0Y2goIiUud2VibSQiKSBvcgogICAgICAgbG93ZXI6bWF0Y2goIiUubXAzJCIpIG9yIGxvd2VyOm1hdGNoKCIlLndhdiQiKSBvcgogICAgICAgbG93ZXI6bWF0Y2goIiUucGRmJCIpIG9yIGxvd2VyOm1hdGNoKCIlLnppcCQiKSBvcgogICAgICAgbG93ZXI6bWF0Y2goIiUudGFyJCIpIG9yIGxvd2VyOm1hdGNoKCIlLmd6JCIpIG9yCiAgICAgICBsb3dlcjptYXRjaCgiJS54bWwkIikgb3IgbG93ZXI6bWF0Y2goIiUuanNvbiQiKSBvcgogICAgICAgbG93ZXI6bWF0Y2goIiUudHh0JCIpIG9yIGxvd2VyOm1hdGNoKCIlLm1hcCQiKSB0aGVuCiAgICAgICAgcmV0dXJuIHRydWUKICAgIGVuZAoKICAgIC0tIENvbW1vbiBzdGF0aWMgcGF0aHMKICAgIGlmIGxvd2VyOm1hdGNoKCJeL19uZXh0L3N0YXRpYy8iKSBvcgogICAgICAgbG93ZXI6bWF0Y2goIl4vc3RhdGljLyIpIG9yCiAgICAgICBsb3dlcjptYXRjaCgiXi9hc3NldHMvIikgb3IKICAgICAgIGxvd2VyOm1hdGNoKCJeL3B1YmxpYy8iKSBvcgogICAgICAgbG93ZXI6bWF0Y2goIi9mYXZpY29uJS5pY28iKSB0aGVuCiAgICAgICAgcmV0dXJuIHRydWUKICAgIGVuZAoKICAgIHJldHVybiBmYWxzZQplbmQKCmxvY2FsIFJJTkcgICA9IDEwMDAKbG9jYWwgRDI0SCAgID0gODY0MDAKbG9jYWwgRDQ4SCAgID0gMTcyODAwCmxvY2FsIEQxSCAgICA9IDM2MDAKCi0tIOKUgOKUgCBDYXB0dXJlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKbG9jYWwgaG9zdCA9IG5vcm1hbGl6ZShuZ3gudmFyLmhvc3QpCmlmIG5vdCBob3N0IHRoZW4gcmV0dXJuIGVuZAoKbG9jYWwgaXAgICAgICA9IG5neC52YXIucmVtb3RlX2FkZHIgICAgb3IgIjAuMC4wLjAiCmxvY2FsIHRzICAgICAgPSBuZ3gubm93KCkKbG9jYWwgdWEgICAgICA9IG5neC52YXIuaHR0cF91c2VyX2FnZW50IG9yICIiCmxvY2FsIHVyaSAgICAgPSBuZ3gudmFyLnJlcXVlc3RfdXJpICAgIG9yICIvIgpsb2NhbCByZXFfbGVuID0gdG9udW1iZXIobmd4LnZhci5yZXF1ZXN0X2xlbmd0aCkgb3IgMApsb2NhbCBieXRlcyAgID0gdG9udW1iZXIobmd4LnZhci5ieXRlc19zZW50KSAgICAgb3IgMApsb2NhbCBydCAgICAgID0gdG9udW1iZXIobmd4LnZhci5yZXF1ZXN0X3RpbWUpICAgb3IgMCAgLS0gc2Vjb25kcyAoZmxvYXQpCmxvY2FsIG1ldGhvZCAgPSBuZ3gudmFyLnJlcXVlc3RfbWV0aG9kIG9yICJHRVQiCmxvY2FsIHN0YXR1cyAgPSBuZ3gudmFyLnN0YXR1cyAgICAgICAgIG9yICIwIgoKLS0g4pSA4pSAIDEuIE1pbnV0ZS1idWNrZXQgY291bnRlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgpsb2NhbCBtaW51dGUgPSBtYXRoLmZsb29yKHRzIC8gNjApCmxvY2FsIHAgPSAiczoiIC4uIGhvc3QgLi4gIjoiIC4uIG1pbnV0ZQoKYW5hbHl0aWNzOmluY3IocCAuLiAiOnIiLCAxLCAgICAgIDAsIEQyNEgpCmFuYWx5dGljczppbmNyKHAgLi4gIjppIiwgcmVxX2xlbiwgMCwgRDI0SCkKYW5hbHl0aWNzOmluY3IocCAuLiAiOm8iLCBieXRlcywgICAwLCBEMjRIKQoKLS0gUmVzcG9uc2UgdGltZSBhcyBmbG9hdCBzZWNvbmRzIChtYXRjaGVzIG9yaWdpbmFsIHByZWNpc2lvbikKaWYgcnQgPiAwIHRoZW4KICAgIC0tIHNhZmVfYWRkIGluaXRpYWxpemVzLCBpbmNyIGFkZHMgLSBlbXVsYXRlIEhJTkNSQllGTE9BVCB3aXRoIGludGVnZXIgbWljcm9zCiAgICBsb2NhbCBydF91cyA9IG1hdGguZmxvb3IocnQgKiAxMDAwMDAwKQogICAgYW5hbHl0aWNzOmluY3IocCAuLiAiOnQiLCBydF91cywgMCwgRDI0SCkKZW5kCgotLSBVbmlxdWUgKG5vbi1zdGF0aWMpIHJlcXVlc3QgY291bnRlcgppZiBub3QgaXNfc3RhdGljX2Fzc2V0KHVyaSkgdGhlbgogICAgYW5hbHl0aWNzOmluY3IocCAuLiAiOnUiLCAxLCAwLCBEMjRIKQplbmQKCi0tIOKUgOKUgCAyLiBMaWZldGltZSB0b3RhbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgphbmFseXRpY3M6aW5jcigidDoiIC4uIGhvc3QgLi4gIjpyIiwgMSwgICAgICAgMCkKYW5hbHl0aWNzOmluY3IoInQ6IiAuLiBob3N0IC4uICI6aSIsIHJlcV9sZW4sIDApCmFuYWx5dGljczppbmNyKCJ0OiIgLi4gaG9zdCAuLiAiOm8iLCBieXRlcywgICAwKQoKLS0gRG9tYWluIGluZGV4IChzZXQgb25jZSwgaWdub3JlIHN1YnNlcXVlbnQgImV4aXN0cyIgZXJyb3JzKQphbmFseXRpY3M6c2FmZV9hZGQoImQ6IiAuLiBob3N0LCAxKQoKLS0g4pSA4pSAIDMuIEdlb0lQIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAoKaWYgZ2VvIHRoZW4KICAgIGxvY2FsIGNjID0gZ2VvLmdldF9jb3VudHJ5X2NvZGUoaXApCiAgICBpZiBjYyBhbmQgY2Mgfj0gIiIgdGhlbgogICAgICAgIC0tIERhaWx5IGdlbyAoZm9yIC9hbmFseXRpY3MvZ2VvIGVuZHBvaW50KQogICAgICAgIGFuYWx5dGljczppbmNyKCJnOiIgLi4gaG9zdCAuLiAiOiIgLi4gdG9kYXkoKSAuLiAiOiIgLi4gY2MsIDEsIDAsIEQ0OEgpCiAgICAgICAgLS0gUGVyLW1pbnV0ZSBnZW8gKGZvciB0aW1lLXNlcmllcyBjb3VudHJ5IGJyZWFrZG93bikKICAgICAgICBhbmFseXRpY3M6aW5jcigiYzoiIC4uIGhvc3QgLi4gIjoiIC4uIG1pbnV0ZSAuLiAiOiIgLi4gY2MsIDEsIDAsIEQyNEgpCiAgICBlbmQKZW5kCgotLSDilIDilIAgNC4gUmF3IHJlcXVlc3QgcmluZyBidWZmZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACgpwY2FsbChmdW5jdGlvbigpCiAgICBsb2NhbCBva19qLCBqID0gcGNhbGwoY2pzb24uZW5jb2RlLCB7CiAgICAgICAgaXAgICAgID0gaXAsCiAgICAgICAgdHMgICAgID0gdHMsCiAgICAgICAgbWV0aG9kID0gbWV0aG9kLAogICAgICAgIHN0YXR1cyA9IHN0YXR1cywKICAgICAgICB1cmkgICAgPSB1cmksCiAgICAgICAgdWEgICAgID0gdWEsCiAgICAgICAgYndfaW4gID0gcmVxX2xlbiwKICAgICAgICBid19vdXQgPSBieXRlcywKICAgICAgICBydCAgICAgPSBydCwKICAgIH0pCiAgICBpZiBva19qIGFuZCBqIHRoZW4KICAgICAgICBsb2NhbCBzZXEgID0gcmVxdWVzdF9kYXRhOmluY3IoInJsb2c6IiAuLiBob3N0IC4uICI6c2VxIiwgMSwgMCkKICAgICAgICBsb2NhbCBzbG90ID0gc2VxICUgUklORwogICAgICAgIHJlcXVlc3RfZGF0YTpzZXQoInJsb2c6IiAuLiBob3N0IC4uICI6IiAuLiBzbG90LCBqLCBEMUgpCiAgICBlbmQKZW5kKQoKLS0g4pSA4pSAIDUuIExpdmUtbG9nIHBpcGUgKG9ubHkgd2hlbiBhIHN1YnNjcmliZXIgaXMgd2F0Y2hpbmcpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAotLSBGaXJlIHZpYSB0aW1lciB0byBhdm9pZCBibG9ja2luZyB0aGUgbG9nIHBoYXNlCgppZiBwaXBlX2xvZyBhbmQgcGlwZV9sb2cucGlwZV9yZXF1ZXN0X2xvZwogICBhbmQgcmVxdWVzdF9kYXRhOmdldCgibG9nX3BpcGU6c3ViOiIgLi4gaG9zdCkgdGhlbgogICAgbmd4LnRpbWVyLmF0KDAsIHBpcGVfbG9nLnBpcGVfcmVxdWVzdF9sb2csCiAgICAgICAgICAgICAgICAgaG9zdCwgaXAsIHRzLCB1YSwgdXJpLCByZXFfbGVuLCBieXRlcywgcnQsIG1ldGhvZCwgc3RhdHVzKQplbmQK",
|
|
20
|
+
"webhook_handler.lua": "LS0gd2ViaG9va19oYW5kbGVyLmx1YQotLSBIYW5kbGVzIGluY29taW5nIHdlYmhvb2sgZXZlbnRzIGZvcndhcmRlZCBmcm9tIHRoZSBTYWFTIGVkZ2UuCi0tIEludGVybmFsIG1hbmFnZW1lbnQgcG9ydCBvbmx5ICgxMjcuMC4wLjE6OTE0NSkuCi0tCi0tIFJvdXRlczoKLS0gICBQT1NUIC9faG9va3MvcHVzaCAgICAgICAgICAtIHJlY2VpdmUgYSBmb3J3YXJkZWQgR2l0SHViIHB1c2ggZXZlbnQKLS0gICBHRVQgIC9faG9va3MvcGVuZGluZyAgICAgICAtIGZldGNoIHN0b3JlZCBldmVudHMgKGZvciBsb2NhbCBhcHAgcG9sbGluZykKLS0gICBQT1NUIC9faG9va3MvYWNrICAgICAgICAgICAtIGFja25vd2xlZGdlIGNvbnN1bWVkIGV2ZW50cwotLQotLSBCZWhhdmlvciBvbiBQT1NUIC9faG9va3MvcHVzaDoKLS0gICAxLiBUcnkgdG8gcHJveHkgdG8gYSBsb2NhbCBPcGVuc2hpcCBBUEkgKGNvbmZpZ3VyYWJsZSB2aWEgWC1PcGVuc2hpcC1VcmwgaGVhZGVyKQotLSAgIDIuIElmIE9wZW5zaGlwIGlzIG5vdCByZWFjaGFibGUsIHN0b3JlIHRoZSBldmVudCBpbiBzaGFyZWQgZGljdCBmb3IgbGF0ZXIgcG9sbGluZwoKbG9jYWwgY2pzb24gPSByZXF1aXJlICJjanNvbi5zYWZlIgoKbG9jYWwgd2ViaG9va19ldmVudHMgPSBuZ3guc2hhcmVkLndlYmhvb2tfZXZlbnRzCmxvY2FsIHVyaSAgICAgICAgICAgID0gbmd4LnZhci51cmkKbG9jYWwgbWV0aG9kICAgICAgICAgPSBuZ3gucmVxLmdldF9tZXRob2QoKQoKbG9jYWwgZnVuY3Rpb24ganNvbl9yZXNwb25zZShkYXRhLCBjb2RlKQogICAgbmd4LnN0YXR1cyA9IGNvZGUgb3IgMjAwCiAgICBuZ3guaGVhZGVyWyJDb250ZW50LVR5cGUiXSA9ICJhcHBsaWNhdGlvbi9qc29uIgogICAgbmd4LnNheShjanNvbi5lbmNvZGUoZGF0YSkpCiAgICByZXR1cm4gbmd4LmV4aXQobmd4LnN0YXR1cykKZW5kCgotLSDilIDilIAgUE9TVCAvX2hvb2tzL3B1c2gg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi0tIFJlY2VpdmVzIGZvcndhcmRlZCB3ZWJob29rIHBheWxvYWQgZnJvbSBTYWFTLgotLSBIZWFkZXJzOgotLSAgIFgtT3BlbnNoaXAtVXJsOiBodHRwOi8vMTI3LjAuMC4xOjM0NTYgKGlmIE9wZW5zaGlwIHJ1bnMgb24gdGhpcyBzZXJ2ZXIpCi0tICAgWC1Ib29rLUlkOiB0aGUgc3Vic2NyaXB0aW9uIGhvb2tJZCAoZm9yIGNvcnJlbGF0aW9uKQoKaWYgdXJpID09ICIvX2hvb2tzL3B1c2giIGFuZCBtZXRob2QgPT0gIlBPU1QiIHRoZW4KICAgIG5neC5yZXEucmVhZF9ib2R5KCkKICAgIGxvY2FsIGJvZHkgPSBuZ3gucmVxLmdldF9ib2R5X2RhdGEoKQogICAgaWYgbm90IGJvZHkgdGhlbgogICAgICAgIHJldHVybiBqc29uX3Jlc3BvbnNlKHsgZXJyb3IgPSAiZW1wdHkgYm9keSIgfSwgNDAwKQogICAgZW5kCgogICAgbG9jYWwgb3BlbnNoaXBfdXJsID0gbmd4LnJlcS5nZXRfaGVhZGVycygpWyJ4LW9wZW5zaGlwLXVybCJdCgogICAgLS0gSWYgT3BlbnNoaXAgcnVucyBvbiB0aGlzIHNlcnZlciwgcHJveHkgZGlyZWN0bHkKICAgIGlmIG9wZW5zaGlwX3VybCBhbmQgb3BlbnNoaXBfdXJsIH49ICIiIHRoZW4KICAgICAgICBsb2NhbCBodHRwID0gcmVxdWlyZSAicmVzdHkuaHR0cCIKICAgICAgICBsb2NhbCBodHRwYyA9IGh0dHAubmV3KCkKICAgICAgICBodHRwYzpzZXRfdGltZW91dCg1MDAwKQoKICAgICAgICBsb2NhbCB0YXJnZXQgPSBvcGVuc2hpcF91cmwgLi4gIi9hcGkvd2ViaG9va3MvcHVzaCIKICAgICAgICBsb2NhbCByZXMsIGVyciA9IGh0dHBjOnJlcXVlc3RfdXJpKHRhcmdldCwgewogICAgICAgICAgICBtZXRob2QgID0gIlBPU1QiLAogICAgICAgICAgICBib2R5ICAgID0gYm9keSwKICAgICAgICAgICAgaGVhZGVycyA9IHsKICAgICAgICAgICAgICAgIFsiQ29udGVudC1UeXBlIl0gPSAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgICAgICAgICAgICBbIlgtSG9vay1JZCJdICAgID0gbmd4LnJlcS5nZXRfaGVhZGVycygpWyJ4LWhvb2staWQiXSBvciAiIiwKICAgICAgICAgICAgfSwKICAgICAgICB9KQoKICAgICAgICBpZiByZXMgYW5kIHJlcy5zdGF0dXMgPCA1MDAgdGhlbgogICAgICAgICAgICAtLSBPcGVuc2hpcCBoYW5kbGVkIGl0ICgyeHggb3IgNHh4KQogICAgICAgICAgICByZXR1cm4ganNvbl9yZXNwb25zZSh7IG9rID0gdHJ1ZSwgcHJveGllZCA9IHRydWUsIHN0YXR1cyA9IHJlcy5zdGF0dXMgfSkKICAgICAgICBlbmQKCiAgICAgICAgLS0gT3BlbnNoaXAgdW5yZWFjaGFibGUgb3IgZXJyb3JlZCAtIGZhbGwgdGhyb3VnaCB0byBzdG9yZQogICAgZW5kCgogICAgLS0gU3RvcmUgZm9yIGxhdGVyIHBvbGxpbmcgYnkgbG9jYWwvZGVza3RvcCBhcHAKICAgIGxvY2FsIGV2ZW50X2lkID0gbmd4Lm5vdygpIC4uICI6IiAuLiBtYXRoLnJhbmRvbSgxMDAwMDAsIDk5OTk5OSkKICAgIGxvY2FsIGV2ZW50ID0gY2pzb24uZW5jb2RlKHsKICAgICAgICBpZCAgICAgICA9IGV2ZW50X2lkLAogICAgICAgIGhvb2tfaWQgID0gbmd4LnJlcS5nZXRfaGVhZGVycygpWyJ4LWhvb2staWQiXSBvciAiIiwKICAgICAgICBwYXlsb2FkICA9IGJvZHksCiAgICAgICAgcmVjZWl2ZWQgPSBuZ3gubm93KCksCiAgICB9KQoKICAgIC0tIFVzZSBhIHNsb3QtYmFzZWQgcmluZyBidWZmZXIgKG1heCAyMDAgZXZlbnRzKQogICAgbG9jYWwgbWF4X2V2ZW50cyA9IDIwMAogICAgbG9jYWwgaWR4ID0gd2ViaG9va19ldmVudHM6aW5jcigiX2lkeCIsIDEsIDApIG9yIDAKICAgIGxvY2FsIHNsb3QgPSAoaWR4ICUgbWF4X2V2ZW50cykKICAgIHdlYmhvb2tfZXZlbnRzOnNldCgiZXZ0OiIgLi4gc2xvdCwgZXZlbnQsIDM2MDApIC0tIDFoIFRUTAogICAgd2ViaG9va19ldmVudHM6c2V0KCJfY291bnQiLCBtYXRoLm1pbihpZHgsIG1heF9ldmVudHMpKQoKICAgIHJldHVybiBqc29uX3Jlc3BvbnNlKHsgb2sgPSB0cnVlLCBzdG9yZWQgPSB0cnVlLCBldmVudF9pZCA9IGV2ZW50X2lkIH0pCmVuZAoKLS0g4pSA4pSAIEdFVCAvX2hvb2tzL3BlbmRpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi0tIFJldHVybnMgc3RvcmVkIHdlYmhvb2sgZXZlbnRzIGZvciBsb2NhbCBhcHAgdG8gY29uc3VtZS4KCmlmIHVyaSA9PSAiL19ob29rcy9wZW5kaW5nIiBhbmQgbWV0aG9kID09ICJHRVQiIHRoZW4KICAgIGlmIG5vdCB3ZWJob29rX2V2ZW50cyB0aGVuCiAgICAgICAgcmV0dXJuIGpzb25fcmVzcG9uc2UoeyBldmVudHMgPSB7fSB9KQogICAgZW5kCgogICAgbG9jYWwgY291bnQgPSB3ZWJob29rX2V2ZW50czpnZXQoIl9jb3VudCIpIG9yIDAKICAgIGxvY2FsIGlkeCAgID0gd2ViaG9va19ldmVudHM6Z2V0KCJfaWR4Iikgb3IgMAogICAgbG9jYWwgZXZlbnRzID0ge30KCiAgICAtLSBSZWFkIGFsbCBzdG9yZWQgZXZlbnRzIChuZXdlc3QgZmlyc3QpCiAgICBsb2NhbCBtYXhfZXZlbnRzID0gMjAwCiAgICBsb2NhbCBzdGFydCA9IG1hdGgubWF4KDAsIGlkeCAtIGNvdW50KQogICAgZm9yIGkgPSBzdGFydCwgaWR4IC0gMSBkbwogICAgICAgIGxvY2FsIHNsb3QgPSBpICUgbWF4X2V2ZW50cwogICAgICAgIGxvY2FsIHJhdyA9IHdlYmhvb2tfZXZlbnRzOmdldCgiZXZ0OiIgLi4gc2xvdCkKICAgICAgICBpZiByYXcgdGhlbgogICAgICAgICAgICBsb2NhbCBwYXJzZWQgPSBjanNvbi5kZWNvZGUocmF3KQogICAgICAgICAgICBpZiBwYXJzZWQgdGhlbgogICAgICAgICAgICAgICAgZXZlbnRzWyNldmVudHMgKyAxXSA9IHBhcnNlZAogICAgICAgICAgICBlbmQKICAgICAgICBlbmQKICAgIGVuZAoKICAgIHJldHVybiBqc29uX3Jlc3BvbnNlKHsgZXZlbnRzID0gZXZlbnRzIH0pCmVuZAoKLS0g4pSA4pSAIFBPU1QgL19ob29rcy9hY2sg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACi0tIEFja25vd2xlZGdlIGV2ZW50cyBoYXZlIGJlZW4gY29uc3VtZWQgLSBjbGVhcnMgdGhlIHN0b3JlLgoKaWYgdXJpID09ICIvX2hvb2tzL2FjayIgYW5kIG1ldGhvZCA9PSAiUE9TVCIgdGhlbgogICAgaWYgd2ViaG9va19ldmVudHMgdGhlbgogICAgICAgIHdlYmhvb2tfZXZlbnRzOmZsdXNoX2FsbCgpCiAgICAgICAgd2ViaG9va19ldmVudHM6Zmx1c2hfZXhwaXJlZCgpCiAgICBlbmQKICAgIHJldHVybiBqc29uX3Jlc3BvbnNlKHsgb2sgPSB0cnVlIH0pCmVuZAoKLS0g4pSA4pSAIEZhbGxiYWNrIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgApyZXR1cm4ganNvbl9yZXNwb25zZSh7IGVycm9yID0gIm5vdCBmb3VuZCIgfSwgNDA0KQo="
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
// ../../packages/adapters/src/infra/openresty-lua.ts
|
|
24
|
+
var OPENRESTY_LUA_DIR = "/usr/local/openresty/site/lualib/openship";
|
|
25
|
+
var LUA_LOGGER_PATH = `${OPENRESTY_LUA_DIR}/site_logger.lua`;
|
|
26
|
+
var RULES_GUARD_PATH = `${OPENRESTY_LUA_DIR}/rules_guard.lua`;
|
|
27
|
+
var OPENRESTY_MGMT_PORT = 9145;
|
|
28
|
+
var OPENRESTY_DEFAULT_PATHS = {
|
|
29
|
+
bin: "/usr/local/openresty/bin/openresty",
|
|
30
|
+
confPath: "/usr/local/openresty/nginx/conf/nginx.conf",
|
|
31
|
+
confDir: "/usr/local/openresty/nginx/conf",
|
|
32
|
+
sitesDir: "/usr/local/openresty/nginx/conf/sites-enabled",
|
|
33
|
+
pidPath: "/usr/local/openresty/nginx/logs/nginx.pid"
|
|
34
|
+
};
|
|
35
|
+
var KNOWN_CONF_PATHS = [
|
|
36
|
+
"/usr/local/openresty/nginx/conf/nginx.conf",
|
|
37
|
+
"/etc/openresty/nginx.conf",
|
|
38
|
+
"/etc/nginx/nginx.conf"
|
|
39
|
+
];
|
|
40
|
+
async function detectOpenRestyPaths(executor) {
|
|
41
|
+
const raw = await executor.exec("openresty -V 2>&1 || true");
|
|
42
|
+
const parseFlag = (flag) => {
|
|
43
|
+
const m = raw.match(new RegExp(`--${flag}=([^\\s]+)`));
|
|
44
|
+
return m ? m[1] : null;
|
|
45
|
+
};
|
|
46
|
+
const bin = parseFlag("sbin-path") ?? OPENRESTY_DEFAULT_PATHS.bin;
|
|
47
|
+
let confPath = parseFlag("conf-path") ?? OPENRESTY_DEFAULT_PATHS.confPath;
|
|
48
|
+
const pidPath = parseFlag("pid-path") ?? OPENRESTY_DEFAULT_PATHS.pidPath;
|
|
49
|
+
if (!await executor.exists(confPath)) {
|
|
50
|
+
let found = false;
|
|
51
|
+
for (const candidate of KNOWN_CONF_PATHS) {
|
|
52
|
+
if (candidate !== confPath && await executor.exists(candidate)) {
|
|
53
|
+
confPath = candidate;
|
|
54
|
+
found = true;
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (!found) {
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
const confDir = confPath.replace(/\/[^/]+$/, "");
|
|
62
|
+
return {
|
|
63
|
+
bin,
|
|
64
|
+
confPath,
|
|
65
|
+
confDir,
|
|
66
|
+
sitesDir: `${confDir}/sites-enabled`,
|
|
67
|
+
pidPath
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
function buildReloadCommand(paths) {
|
|
71
|
+
return `${paths.bin} -t 2>&1 || exit 1
|
|
72
|
+
|
|
73
|
+
if ${paths.bin} -s reload 2>/dev/null; then
|
|
74
|
+
exit 0
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
pkill -f '[o]penresty' >/dev/null 2>&1 || true
|
|
78
|
+
pkill -f '[n]ginx' >/dev/null 2>&1 || true
|
|
79
|
+
sleep 1
|
|
80
|
+
rm -f ${paths.pidPath}
|
|
81
|
+
${paths.bin}`;
|
|
82
|
+
}
|
|
83
|
+
async function ensureOpenRestyConfig(executor, paths) {
|
|
84
|
+
await executor.mkdir(paths.sitesDir);
|
|
85
|
+
await executor.mkdir("/var/www/acme");
|
|
86
|
+
const pidDir = paths.pidPath.replace(/\/[^/]+$/, "");
|
|
87
|
+
await executor.mkdir(pidDir);
|
|
88
|
+
await executor.writeFile(`${paths.sitesDir}/_management.conf`, MANAGEMENT_BLOCK);
|
|
89
|
+
await executor.writeFile(`${paths.sitesDir}/_default.conf`, DEFAULT_BLOCK);
|
|
90
|
+
if (!await executor.exists(paths.confPath)) {
|
|
91
|
+
await executor.mkdir(paths.confDir);
|
|
92
|
+
await executor.writeFile(
|
|
93
|
+
paths.confPath,
|
|
94
|
+
MINIMAL_NGINX_CONF(paths.confDir, paths.sitesDir)
|
|
95
|
+
);
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const hasCorrectInclude = await executor.exec(`grep -qF 'include ${paths.sitesDir}/' ${paths.confPath}`).then(() => true).catch(() => false);
|
|
99
|
+
if (!hasCorrectInclude) {
|
|
100
|
+
const hasWrongInclude = await executor.exec(`grep -q 'include.*sites-enabled' ${paths.confPath}`).then(() => true).catch(() => false);
|
|
101
|
+
if (hasWrongInclude) {
|
|
102
|
+
await executor.exec(
|
|
103
|
+
`sed -i 's|include.*/sites-enabled/\\*\\.conf;|include ${paths.sitesDir}/*.conf;|' ${paths.confPath}`
|
|
104
|
+
);
|
|
105
|
+
} else {
|
|
106
|
+
await executor.exec(
|
|
107
|
+
`sed -i '/http *{/a \\ include ${paths.sitesDir}/*.conf;' ${paths.confPath}`
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function MINIMAL_NGINX_CONF(confDir, sitesDir) {
|
|
113
|
+
return `# Auto-generated by Openship - safe to extend
|
|
114
|
+
worker_processes auto;
|
|
115
|
+
events {
|
|
116
|
+
worker_connections 1024;
|
|
117
|
+
}
|
|
118
|
+
http {
|
|
119
|
+
include ${confDir}/mime.types;
|
|
120
|
+
default_type application/octet-stream;
|
|
121
|
+
sendfile on;
|
|
122
|
+
keepalive_timeout 65;
|
|
123
|
+
include ${sitesDir}/*.conf;
|
|
124
|
+
}
|
|
125
|
+
`;
|
|
126
|
+
}
|
|
127
|
+
var GEOIP_DIR = "/usr/share/GeoIP";
|
|
128
|
+
var GEOIP_DB_PATH = `${GEOIP_DIR}/GeoLite2-Country.mmdb`;
|
|
129
|
+
var GEOIP_DB_URL = "https://github.com/P3TERX/GeoLite.mmdb/releases/download/2026.04.07/GeoLite2-Country.mmdb";
|
|
130
|
+
var LUA_SRC_DIR = process.env.OPENSHIP_LUA_DIR?.trim() || join(dirname(fileURLToPath(import.meta.url)), "lua");
|
|
131
|
+
var VHOST_REFERENCED_LUA = ["rules_guard.lua", "rules_lib.lua", "site_logger.lua"];
|
|
132
|
+
function luaSourceAvailable() {
|
|
133
|
+
return VHOST_REFERENCED_LUA.every(
|
|
134
|
+
(f) => EMBEDDED_LUA[f] !== void 0 || existsSync(join(LUA_SRC_DIR, f))
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
function readLua(filename) {
|
|
138
|
+
const onDisk = join(LUA_SRC_DIR, filename);
|
|
139
|
+
if (existsSync(onDisk)) return readFileSync(onDisk, "utf-8");
|
|
140
|
+
const embedded = EMBEDDED_LUA[filename];
|
|
141
|
+
if (embedded !== void 0) return Buffer.from(embedded, "base64").toString("utf-8");
|
|
142
|
+
throw new Error(
|
|
143
|
+
`Lua script "${filename}" not found on disk (${LUA_SRC_DIR}) or in EMBEDDED_LUA \u2014 add it to packages/adapters/src/infra/lua/ and run \`bun run embed:lua\`.`
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
var MANAGEMENT_BLOCK = `# Openship internal management - analytics & live-log streaming
|
|
147
|
+
# Auto-generated - do not edit manually
|
|
148
|
+
server {
|
|
149
|
+
listen 127.0.0.1:${OPENRESTY_MGMT_PORT};
|
|
150
|
+
|
|
151
|
+
# Long-running Lua content handlers need generous timeouts
|
|
152
|
+
send_timeout 3600s;
|
|
153
|
+
keepalive_timeout 3600s;
|
|
154
|
+
lua_check_client_abort on;
|
|
155
|
+
|
|
156
|
+
# SSE live-log stream (long-lived connection)
|
|
157
|
+
location = /logs/stream {
|
|
158
|
+
content_by_lua_file ${OPENRESTY_LUA_DIR}/pipe_stream.lua;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
# REST analytics + health (short-lived)
|
|
162
|
+
location / {
|
|
163
|
+
content_by_lua_file ${OPENRESTY_LUA_DIR}/mgmt_api.lua;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
`;
|
|
167
|
+
var ACME_HTTP01_PORT = 49180;
|
|
168
|
+
var ACME_CHALLENGE_LOCATION = ` location /.well-known/acme-challenge/ {
|
|
169
|
+
proxy_pass http://127.0.0.1:${ACME_HTTP01_PORT};
|
|
170
|
+
proxy_set_header Host $host;
|
|
171
|
+
}`;
|
|
172
|
+
var DEFAULT_BLOCK = `# Openship default catch-all - prevents the stock OpenResty welcome page AND
|
|
173
|
+
# stops an unmatched Host/SNI from being served the first real vhost by default.
|
|
174
|
+
# Auto-generated - do not edit manually
|
|
175
|
+
server {
|
|
176
|
+
listen 80 default_server;
|
|
177
|
+
server_name _;
|
|
178
|
+
|
|
179
|
+
${ACME_CHALLENGE_LOCATION}
|
|
180
|
+
|
|
181
|
+
location / {
|
|
182
|
+
return 404;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
# HTTPS catch-all. WITHOUT a 443 default_server, nginx serves the first-loaded
|
|
187
|
+
# 443 vhost to any request whose SNI matches no server_name - so a domain we do
|
|
188
|
+
# NOT route (removed / never-added / just pointed at this IP) silently gets some
|
|
189
|
+
# other app's cert + backend. That is cross-serving, a security hole. Owning the
|
|
190
|
+
# 443 default and rejecting unknown SNI closes it: an unrouted host gets a TLS
|
|
191
|
+
# handshake failure, never a fallthrough. ssl_reject_handshake (OpenResty/nginx
|
|
192
|
+
# >= 1.19.4; our installer pulls the newest LTS) needs no certificate.
|
|
193
|
+
server {
|
|
194
|
+
listen 443 ssl default_server;
|
|
195
|
+
ssl_reject_handshake on;
|
|
196
|
+
}
|
|
197
|
+
`;
|
|
198
|
+
var LUA_SCRIPTS = [
|
|
199
|
+
"site_logger.lua",
|
|
200
|
+
"pipe_log.lua",
|
|
201
|
+
"pipe_stream.lua",
|
|
202
|
+
"mgmt_api.lua",
|
|
203
|
+
"geo_country.lua",
|
|
204
|
+
"rules_lib.lua",
|
|
205
|
+
"rules_guard.lua"
|
|
206
|
+
];
|
|
207
|
+
var LUA_VERSION_MARKER = `${OPENRESTY_LUA_DIR}/.openship-lua-version`;
|
|
208
|
+
function luaBundleHash() {
|
|
209
|
+
const h = createHash("sha256");
|
|
210
|
+
for (const name of LUA_SCRIPTS) {
|
|
211
|
+
h.update(name);
|
|
212
|
+
h.update("\0");
|
|
213
|
+
h.update(readLua(name));
|
|
214
|
+
h.update("\0");
|
|
215
|
+
}
|
|
216
|
+
return h.digest("hex");
|
|
217
|
+
}
|
|
218
|
+
async function ensureLuaScripts(executor, paths) {
|
|
219
|
+
try {
|
|
220
|
+
if (!luaSourceAvailable()) {
|
|
221
|
+
console.error(
|
|
222
|
+
"[openresty] Lua unavailable in this build (not on disk or embedded) \u2014 edge rules/logging disabled. Run `bun run embed:lua` in packages/adapters."
|
|
223
|
+
);
|
|
224
|
+
return { repaired: [], available: false };
|
|
225
|
+
}
|
|
226
|
+
const expected = luaBundleHash();
|
|
227
|
+
await executor.mkdir(OPENRESTY_LUA_DIR);
|
|
228
|
+
const listing = await executor.exec(`ls -1 '${OPENRESTY_LUA_DIR}' 2>/dev/null || true`).catch(() => "");
|
|
229
|
+
const present = new Set(listing.split("\n").map((s) => s.trim()).filter(Boolean));
|
|
230
|
+
const missing = LUA_SCRIPTS.filter((name) => !present.has(name));
|
|
231
|
+
const onBoxVersion = (await executor.readFile(LUA_VERSION_MARKER).catch(() => "")).trim();
|
|
232
|
+
if (missing.length === 0 && onBoxVersion === expected) {
|
|
233
|
+
return { repaired: [], available: true };
|
|
234
|
+
}
|
|
235
|
+
for (const name of LUA_SCRIPTS) {
|
|
236
|
+
await executor.writeFile(`${OPENRESTY_LUA_DIR}/${name}`, readLua(name));
|
|
237
|
+
}
|
|
238
|
+
await executor.writeFile(LUA_VERSION_MARKER, expected);
|
|
239
|
+
const reason = missing.length ? `missing: ${missing.join(", ")}` : "version changed";
|
|
240
|
+
console.warn(`[openresty] (re)installed Lua (${reason}) \u2014 reloading edge.`);
|
|
241
|
+
await executor.exec(buildReloadCommand(paths)).catch((err) => {
|
|
242
|
+
console.error(`[openresty] reload after Lua (re)install failed: ${safeErrorMessage(err)}`);
|
|
243
|
+
});
|
|
244
|
+
return { repaired: missing.length ? missing : [...LUA_SCRIPTS], available: true };
|
|
245
|
+
} catch (err) {
|
|
246
|
+
console.error(`[openresty] ensureLuaScripts failed (deploy continues): ${safeErrorMessage(err)}`);
|
|
247
|
+
return { repaired: [], available: false };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
async function installGeoDeps(executor) {
|
|
251
|
+
try {
|
|
252
|
+
const hasPkg = async (cmd) => {
|
|
253
|
+
try {
|
|
254
|
+
await executor.exec(`command -v ${cmd}`);
|
|
255
|
+
return true;
|
|
256
|
+
} catch {
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
if (await hasPkg("apt-get")) {
|
|
261
|
+
await executor.exec(
|
|
262
|
+
"apt-get update -qq && apt-get install -y -qq libmaxminddb0 libmaxminddb-dev"
|
|
263
|
+
);
|
|
264
|
+
} else if (await hasPkg("dnf")) {
|
|
265
|
+
await executor.exec("dnf install -y libmaxminddb libmaxminddb-devel");
|
|
266
|
+
} else if (await hasPkg("yum")) {
|
|
267
|
+
await executor.exec("yum install -y libmaxminddb libmaxminddb-devel");
|
|
268
|
+
}
|
|
269
|
+
} catch {
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
await executor.exec(
|
|
273
|
+
"opm get anjia0532/lua-resty-maxminddb"
|
|
274
|
+
);
|
|
275
|
+
} catch {
|
|
276
|
+
try {
|
|
277
|
+
await executor.exec(
|
|
278
|
+
"/usr/local/openresty/bin/opm get anjia0532/lua-resty-maxminddb"
|
|
279
|
+
);
|
|
280
|
+
} catch {
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
try {
|
|
284
|
+
const exists = await executor.exists(GEOIP_DB_PATH);
|
|
285
|
+
if (!exists) {
|
|
286
|
+
await executor.mkdir(GEOIP_DIR);
|
|
287
|
+
await executor.exec(
|
|
288
|
+
`curl -fsSL -o ${GEOIP_DB_PATH} "${GEOIP_DB_URL}"`
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
} catch {
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
async function deployLuaScripts(executor, paths) {
|
|
295
|
+
await installGeoDeps(executor);
|
|
296
|
+
if (!luaSourceAvailable()) {
|
|
297
|
+
throw new Error(
|
|
298
|
+
`OpenResty Lua is unavailable in this build \u2014 not on disk (LUA_SRC_DIR=${LUA_SRC_DIR}) and not in EMBEDDED_LUA. The edge scripts (rules_guard.lua/site_logger.lua) can't be installed. Run \`bun run embed:lua\` in packages/adapters to regenerate lua-embedded.ts.`
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
await executor.mkdir(OPENRESTY_LUA_DIR);
|
|
302
|
+
for (const name of LUA_SCRIPTS) {
|
|
303
|
+
await executor.writeFile(
|
|
304
|
+
`${OPENRESTY_LUA_DIR}/${name}`,
|
|
305
|
+
readLua(name)
|
|
306
|
+
);
|
|
307
|
+
}
|
|
308
|
+
await ensureOpenRestyConfig(executor, paths);
|
|
309
|
+
await executor.exec(
|
|
310
|
+
`grep -q 'lua_shared_dict analytics ' ${paths.confPath} || sed -i '/http *{/a \\ lua_shared_dict analytics 256m;' ${paths.confPath}`
|
|
311
|
+
);
|
|
312
|
+
await executor.exec(
|
|
313
|
+
`grep -q 'lua_shared_dict request_data ' ${paths.confPath} || sed -i '/http *{/a \\ lua_shared_dict request_data 128m;' ${paths.confPath}`
|
|
314
|
+
);
|
|
315
|
+
await executor.exec(
|
|
316
|
+
`grep -q 'lua_shared_dict rules ' ${paths.confPath} || sed -i '/http *{/a \\ lua_shared_dict rules 32m;' ${paths.confPath}`
|
|
317
|
+
);
|
|
318
|
+
await executor.exec(
|
|
319
|
+
`grep -q 'lua_shared_dict rl_counters ' ${paths.confPath} || sed -i '/http *{/a \\ lua_shared_dict rl_counters 16m;' ${paths.confPath}`
|
|
320
|
+
);
|
|
321
|
+
await executor.exec(
|
|
322
|
+
`grep -q 'lua_package_path' ${paths.confPath} || sed -i '/http *{/a \\ lua_package_path "/usr/local/openresty/site/lualib/?.lua;;";' ${paths.confPath}`
|
|
323
|
+
);
|
|
324
|
+
await executor.exec(buildReloadCommand(paths));
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
export {
|
|
328
|
+
OPENRESTY_LUA_DIR,
|
|
329
|
+
LUA_LOGGER_PATH,
|
|
330
|
+
RULES_GUARD_PATH,
|
|
331
|
+
OPENRESTY_MGMT_PORT,
|
|
332
|
+
OPENRESTY_DEFAULT_PATHS,
|
|
333
|
+
detectOpenRestyPaths,
|
|
334
|
+
buildReloadCommand,
|
|
335
|
+
ensureOpenRestyConfig,
|
|
336
|
+
luaSourceAvailable,
|
|
337
|
+
ACME_HTTP01_PORT,
|
|
338
|
+
ACME_CHALLENGE_LOCATION,
|
|
339
|
+
ensureLuaScripts,
|
|
340
|
+
deployLuaScripts
|
|
341
|
+
};
|