From dc9d5467332de60b60e074391b20619720b28bfb Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Tue, 28 Jul 2026 04:43:23 +0300 Subject: [PATCH] feat: implement billing, usage tracking, and administrative geocoding features in API with infrastructure updates --- apps/api/dist/app.module.js | 19 +- apps/api/dist/app.module.js.map | 2 +- apps/api/dist/auth/auth.module.js | 12 +- apps/api/dist/auth/auth.module.js.map | 2 +- apps/api/dist/auth/auth.service.d.ts | 4 + apps/api/dist/auth/auth.service.js | 75 ++++- apps/api/dist/auth/auth.service.js.map | 2 +- .../auth/dto/management/create-key.dto.d.ts | 5 + .../auth/dto/management/create-key.dto.js | 35 +++ .../auth/dto/management/create-key.dto.js.map | 1 + .../api/dist/auth/entities/tenant.entity.d.ts | 12 +- apps/api/dist/auth/entities/tenant.entity.js | 41 ++- .../dist/auth/entities/tenant.entity.js.map | 2 +- .../api/dist/auth/firebase-admin.service.d.ts | 11 + apps/api/dist/auth/firebase-admin.service.js | 99 ++++++ .../dist/auth/firebase-admin.service.js.map | 1 + .../dist/auth/guards/firebase-auth.guard.d.ts | 10 + .../dist/auth/guards/firebase-auth.guard.js | 54 ++++ .../auth/guards/firebase-auth.guard.js.map | 1 + apps/api/dist/auth/tenant.controller.d.ts | 9 + apps/api/dist/auth/tenant.controller.js | 74 +++++ apps/api/dist/auth/tenant.controller.js.map | 1 + apps/api/dist/billing/billing.controller.d.ts | 36 +++ apps/api/dist/billing/billing.controller.js | 259 ++++++++++++++++ .../dist/billing/billing.controller.js.map | 1 + apps/api/dist/billing/billing.module.d.ts | 2 + apps/api/dist/billing/billing.module.js | 32 ++ apps/api/dist/billing/billing.module.js.map | 1 + apps/api/dist/billing/billing.service.d.ts | 20 ++ apps/api/dist/billing/billing.service.js | 131 ++++++++ apps/api/dist/billing/billing.service.js.map | 1 + .../billing/entities/subscription.entity.d.ts | 18 ++ .../billing/entities/subscription.entity.js | 82 +++++ .../entities/subscription.entity.js.map | 1 + .../billing/entities/transaction.entity.d.ts | 23 ++ .../billing/entities/transaction.entity.js | 92 ++++++ .../entities/transaction.entity.js.map | 1 + .../billing/providers/binance.provider.d.ts | 16 + .../billing/providers/binance.provider.js | 150 +++++++++ .../billing/providers/binance.provider.js.map | 1 + .../billing/providers/paymob.provider.d.ts | 14 + .../dist/billing/providers/paymob.provider.js | 179 +++++++++++ .../billing/providers/paymob.provider.js.map | 1 + apps/api/dist/common/cache.service.js | 3 +- apps/api/dist/common/cache.service.js.map | 2 +- apps/api/dist/common/guards/admin.guard.d.ts | 4 + apps/api/dist/common/guards/admin.guard.js | 29 ++ .../api/dist/common/guards/admin.guard.js.map | 1 + .../common/guards/rate-limiter.guard.d.ts | 1 + .../dist/common/guards/rate-limiter.guard.js | 18 +- .../common/guards/rate-limiter.guard.js.map | 2 +- apps/api/dist/common/mail.module.d.ts | 2 + apps/api/dist/common/mail.module.js | 22 ++ apps/api/dist/common/mail.module.js.map | 1 + apps/api/dist/common/mail.service.d.ts | 13 + apps/api/dist/common/mail.service.js | 122 ++++++++ apps/api/dist/common/mail.service.js.map | 1 + apps/api/dist/common/redis.service.d.ts | 1 + apps/api/dist/common/redis.service.js | 3 + apps/api/dist/common/redis.service.js.map | 2 +- apps/api/dist/common/telegram.service.js | 3 +- apps/api/dist/common/telegram.service.js.map | 2 +- .../geocoding/admin-boundaries.service.js | 3 +- .../geocoding/admin-boundaries.service.js.map | 2 +- .../administrative-linking.service.js | 6 +- .../administrative-linking.service.js.map | 2 +- .../entities/map-candidate.entity.d.ts | 21 ++ .../entities/map-candidate.entity.js | 84 +++++ .../entities/map-candidate.entity.js.map | 1 + .../dist/geocoding/geocoding-init.service.js | 3 +- .../geocoding/geocoding-init.service.js.map | 2 +- .../dist/geocoding/geocoding.controller.d.ts | 42 ++- .../dist/geocoding/geocoding.controller.js | 44 ++- .../geocoding/geocoding.controller.js.map | 2 +- apps/api/dist/geocoding/geocoding.module.js | 15 +- .../dist/geocoding/geocoding.module.js.map | 2 +- .../api/dist/geocoding/geocoding.service.d.ts | 39 +-- apps/api/dist/geocoding/geocoding.service.js | 292 ++++++++++++++---- .../dist/geocoding/geocoding.service.js.map | 2 +- .../dist/geocoding/index-refresh.service.d.ts | 8 + .../dist/geocoding/index-refresh.service.js | 60 ++++ .../geocoding/index-refresh.service.js.map | 1 + .../geocoding/jordan-research.service.d.ts | 2 +- .../dist/geocoding/jordan-research.service.js | 3 +- .../geocoding/jordan-research.service.js.map | 2 +- .../geocoding/map-refinement.controller.d.ts | 12 + .../geocoding/map-refinement.controller.js | 87 ++++++ .../map-refinement.controller.js.map | 1 + .../geocoding/map-refinement.service.d.ts | 19 ++ .../dist/geocoding/map-refinement.service.js | 208 +++++++++++++ .../geocoding/map-refinement.service.js.map | 1 + apps/api/dist/main.js | 16 +- apps/api/dist/main.js.map | 2 +- apps/api/dist/maps/candidate-road.entity.d.ts | 4 + apps/api/dist/maps/candidate-road.entity.js | 20 ++ .../dist/maps/candidate-road.entity.js.map | 2 +- apps/api/dist/maps/maps.controller.d.ts | 12 +- apps/api/dist/maps/maps.controller.js | 105 ++++++- apps/api/dist/maps/maps.controller.js.map | 2 +- apps/api/dist/maps/maps.service.d.ts | 20 +- apps/api/dist/maps/maps.service.js | 144 +++++++-- apps/api/dist/maps/maps.service.js.map | 2 +- apps/api/dist/maps/traffic-grid.service.js | 3 +- .../api/dist/maps/traffic-grid.service.js.map | 2 +- .../telemetry/telemetry-analyzer.service.js | 49 ++- apps/api/dist/tsconfig.build.tsbuildinfo | 2 +- apps/api/dist/usage/usage.controller.d.ts | 17 + apps/api/dist/usage/usage.controller.js | 72 +++++ apps/api/dist/usage/usage.controller.js.map | 1 + apps/api/dist/usage/usage.entity.d.ts | 12 + apps/api/dist/usage/usage.entity.js | 73 +++++ apps/api/dist/usage/usage.entity.js.map | 1 + apps/api/dist/usage/usage.interceptor.d.ts | 9 + apps/api/dist/usage/usage.interceptor.js | 81 +++++ apps/api/dist/usage/usage.interceptor.js.map | 1 + apps/api/dist/usage/usage.module.d.ts | 2 + apps/api/dist/usage/usage.module.js | 28 ++ apps/api/dist/usage/usage.module.js.map | 1 + apps/api/dist/usage/usage.service.d.ts | 39 +++ apps/api/dist/usage/usage.service.js | 135 ++++++++ apps/api/dist/usage/usage.service.js.map | 1 + apps/api/src/maps/candidate-road.entity.ts | 6 + docker-compose.map2.yml | 3 +- docker-compose.yml | 20 +- infrastructure/docker/graphhopper/Dockerfile | 16 + infrastructure/docker/graphhopper/config.yml | 8 +- infrastructure/scripts/apply-delta.sh | 10 +- infrastructure/scripts/normalize-oneway.sh | 6 +- .../.dart_tool/extension_discovery/README.md | 31 ++ .../extension_discovery/vs_code.json | 1 + .../.dart_tool/package_config.json | 50 +-- .../flutter-sdk/.dart_tool/package_graph.json | 177 +++++------ packages/flutter-sdk/pubspec.lock | 38 +-- 133 files changed, 3599 insertions(+), 356 deletions(-) create mode 100644 apps/api/dist/auth/dto/management/create-key.dto.d.ts create mode 100644 apps/api/dist/auth/dto/management/create-key.dto.js create mode 100644 apps/api/dist/auth/dto/management/create-key.dto.js.map create mode 100644 apps/api/dist/auth/firebase-admin.service.d.ts create mode 100644 apps/api/dist/auth/firebase-admin.service.js create mode 100644 apps/api/dist/auth/firebase-admin.service.js.map create mode 100644 apps/api/dist/auth/guards/firebase-auth.guard.d.ts create mode 100644 apps/api/dist/auth/guards/firebase-auth.guard.js create mode 100644 apps/api/dist/auth/guards/firebase-auth.guard.js.map create mode 100644 apps/api/dist/auth/tenant.controller.d.ts create mode 100644 apps/api/dist/auth/tenant.controller.js create mode 100644 apps/api/dist/auth/tenant.controller.js.map create mode 100644 apps/api/dist/billing/billing.controller.d.ts create mode 100644 apps/api/dist/billing/billing.controller.js create mode 100644 apps/api/dist/billing/billing.controller.js.map create mode 100644 apps/api/dist/billing/billing.module.d.ts create mode 100644 apps/api/dist/billing/billing.module.js create mode 100644 apps/api/dist/billing/billing.module.js.map create mode 100644 apps/api/dist/billing/billing.service.d.ts create mode 100644 apps/api/dist/billing/billing.service.js create mode 100644 apps/api/dist/billing/billing.service.js.map create mode 100644 apps/api/dist/billing/entities/subscription.entity.d.ts create mode 100644 apps/api/dist/billing/entities/subscription.entity.js create mode 100644 apps/api/dist/billing/entities/subscription.entity.js.map create mode 100644 apps/api/dist/billing/entities/transaction.entity.d.ts create mode 100644 apps/api/dist/billing/entities/transaction.entity.js create mode 100644 apps/api/dist/billing/entities/transaction.entity.js.map create mode 100644 apps/api/dist/billing/providers/binance.provider.d.ts create mode 100644 apps/api/dist/billing/providers/binance.provider.js create mode 100644 apps/api/dist/billing/providers/binance.provider.js.map create mode 100644 apps/api/dist/billing/providers/paymob.provider.d.ts create mode 100644 apps/api/dist/billing/providers/paymob.provider.js create mode 100644 apps/api/dist/billing/providers/paymob.provider.js.map create mode 100644 apps/api/dist/common/guards/admin.guard.d.ts create mode 100644 apps/api/dist/common/guards/admin.guard.js create mode 100644 apps/api/dist/common/guards/admin.guard.js.map create mode 100644 apps/api/dist/common/mail.module.d.ts create mode 100644 apps/api/dist/common/mail.module.js create mode 100644 apps/api/dist/common/mail.module.js.map create mode 100644 apps/api/dist/common/mail.service.d.ts create mode 100644 apps/api/dist/common/mail.service.js create mode 100644 apps/api/dist/common/mail.service.js.map create mode 100644 apps/api/dist/geocoding/entities/map-candidate.entity.d.ts create mode 100644 apps/api/dist/geocoding/entities/map-candidate.entity.js create mode 100644 apps/api/dist/geocoding/entities/map-candidate.entity.js.map create mode 100644 apps/api/dist/geocoding/index-refresh.service.d.ts create mode 100644 apps/api/dist/geocoding/index-refresh.service.js create mode 100644 apps/api/dist/geocoding/index-refresh.service.js.map create mode 100644 apps/api/dist/geocoding/map-refinement.controller.d.ts create mode 100644 apps/api/dist/geocoding/map-refinement.controller.js create mode 100644 apps/api/dist/geocoding/map-refinement.controller.js.map create mode 100644 apps/api/dist/geocoding/map-refinement.service.d.ts create mode 100644 apps/api/dist/geocoding/map-refinement.service.js create mode 100644 apps/api/dist/geocoding/map-refinement.service.js.map create mode 100644 apps/api/dist/usage/usage.controller.d.ts create mode 100644 apps/api/dist/usage/usage.controller.js create mode 100644 apps/api/dist/usage/usage.controller.js.map create mode 100644 apps/api/dist/usage/usage.entity.d.ts create mode 100644 apps/api/dist/usage/usage.entity.js create mode 100644 apps/api/dist/usage/usage.entity.js.map create mode 100644 apps/api/dist/usage/usage.interceptor.d.ts create mode 100644 apps/api/dist/usage/usage.interceptor.js create mode 100644 apps/api/dist/usage/usage.interceptor.js.map create mode 100644 apps/api/dist/usage/usage.module.d.ts create mode 100644 apps/api/dist/usage/usage.module.js create mode 100644 apps/api/dist/usage/usage.module.js.map create mode 100644 apps/api/dist/usage/usage.service.d.ts create mode 100644 apps/api/dist/usage/usage.service.js create mode 100644 apps/api/dist/usage/usage.service.js.map create mode 100644 infrastructure/docker/graphhopper/Dockerfile create mode 100644 packages/flutter-sdk/.dart_tool/extension_discovery/README.md create mode 100644 packages/flutter-sdk/.dart_tool/extension_discovery/vs_code.json diff --git a/apps/api/dist/app.module.js b/apps/api/dist/app.module.js index 6873f4d..b7419cc 100644 --- a/apps/api/dist/app.module.js +++ b/apps/api/dist/app.module.js @@ -8,6 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, Object.defineProperty(exports, "__esModule", { value: true }); exports.AppModule = void 0; const common_1 = require("@nestjs/common"); +const core_1 = require("@nestjs/core"); const config_1 = require("@nestjs/config"); const typeorm_1 = require("@nestjs/typeorm"); const schedule_1 = require("@nestjs/schedule"); @@ -16,6 +17,10 @@ const maps_module_1 = require("./maps/maps.module"); const geocoding_module_1 = require("./geocoding/geocoding.module"); const auth_module_1 = require("./auth/auth.module"); const throttler_1 = require("@nestjs/throttler"); +const usage_module_1 = require("./usage/usage.module"); +const billing_module_1 = require("./billing/billing.module"); +const mail_module_1 = require("./common/mail.module"); +const usage_interceptor_1 = require("./usage/usage.interceptor"); let AppModule = class AppModule { }; exports.AppModule = AppModule; @@ -33,17 +38,27 @@ exports.AppModule = AppModule = __decorate([ type: 'postgres', url: config.get('DATABASE_URL'), autoLoadEntities: true, - synchronize: true, + synchronize: false, }), }), throttler_1.ThrottlerModule.forRoot([{ - ttl: 60, + ttl: 60000, limit: 10, }]), auth_module_1.AuthModule, telemetry_module_1.TelemetryModule, maps_module_1.MapsModule, geocoding_module_1.GeocodingModule, + usage_module_1.UsageModule, + billing_module_1.BillingModule, + mail_module_1.MailModule, + ], + controllers: [], + providers: [ + { + provide: core_1.APP_INTERCEPTOR, + useClass: usage_interceptor_1.UsageInterceptor, + }, ], }) ], AppModule); diff --git a/apps/api/dist/app.module.js.map b/apps/api/dist/app.module.js.map index 1a1ee63..f27e676 100644 --- a/apps/api/dist/app.module.js.map +++ b/apps/api/dist/app.module.js.map @@ -1 +1 @@ -{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA6D;AAC7D,6CAAgD;AAChD,+CAAkD;AAClD,mEAA+D;AAC/D,oDAAgD;AAChD,mEAA+D;AAC/D,oDAAgD;AAChD,iDAAoD;AA4B7C,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IA1BrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,qBAAY,CAAC,OAAO,CAAC;gBACnB,QAAQ,EAAE,IAAI;aACf,CAAC;YACF,yBAAc,CAAC,OAAO,EAAE;YACxB,uBAAa,CAAC,YAAY,CAAC;gBACzB,OAAO,EAAE,CAAC,qBAAY,CAAC;gBACvB,MAAM,EAAE,CAAC,sBAAa,CAAC;gBACvB,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,UAAU;oBAChB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;oBAC/B,gBAAgB,EAAE,IAAI;oBACtB,WAAW,EAAE,IAAI;iBAClB,CAAC;aACH,CAAC;YACF,2BAAe,CAAC,OAAO,CAAC,CAAC;oBACvB,GAAG,EAAE,EAAE;oBACP,KAAK,EAAE,EAAE;iBACV,CAAC,CAAC;YACH,wBAAU;YACV,kCAAe;YACf,wBAAU;YACV,kCAAe;SAChB;KACF,CAAC;GACW,SAAS,CAAG"} \ No newline at end of file +{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uCAA0D;AAC1D,2CAA6D;AAC7D,6CAAgD;AAChD,+CAAkD;AAClD,mEAA+D;AAC/D,oDAAgD;AAChD,mEAA+D;AAC/D,oDAAgD;AAChD,iDAAoD;AACpD,uDAAmD;AACnD,6DAAyD;AACzD,sDAAkD;AAClD,iEAA6D;AAsCtD,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IApCrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,qBAAY,CAAC,OAAO,CAAC;gBACnB,QAAQ,EAAE,IAAI;aACf,CAAC;YACF,yBAAc,CAAC,OAAO,EAAE;YACxB,uBAAa,CAAC,YAAY,CAAC;gBACzB,OAAO,EAAE,CAAC,qBAAY,CAAC;gBACvB,MAAM,EAAE,CAAC,sBAAa,CAAC;gBACvB,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,UAAU;oBAChB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;oBAC/B,gBAAgB,EAAE,IAAI;oBACtB,WAAW,EAAE,KAAK;iBACnB,CAAC;aACH,CAAC;YACF,2BAAe,CAAC,OAAO,CAAC,CAAC;oBACvB,GAAG,EAAE,KAAK;oBACV,KAAK,EAAE,EAAE;iBACV,CAAC,CAAC;YACH,wBAAU;YACV,kCAAe;YACf,wBAAU;YACV,kCAAe;YACf,0BAAW;YACX,8BAAa;YACb,wBAAU;SACX;QACD,WAAW,EAAE,EAAE;QACf,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,oCAAgB;aAC3B;SACF;KACF,CAAC;GACW,SAAS,CAAG"} \ No newline at end of file diff --git a/apps/api/dist/auth/auth.module.js b/apps/api/dist/auth/auth.module.js index 4595d99..6048e52 100644 --- a/apps/api/dist/auth/auth.module.js +++ b/apps/api/dist/auth/auth.module.js @@ -8,6 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; +var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.AuthModule = void 0; const common_1 = require("@nestjs/common"); @@ -17,6 +18,9 @@ const tenant_entity_1 = require("./entities/tenant.entity"); const api_key_entity_1 = require("./entities/api-key.entity"); const redis_module_1 = require("../common/redis.module"); const config_1 = require("@nestjs/config"); +const tenant_controller_1 = require("./tenant.controller"); +const firebase_admin_service_1 = require("./firebase-admin.service"); +const firebase_auth_guard_1 = require("./guards/firebase-auth.guard"); let AuthModule = class AuthModule { authService; configService; @@ -40,10 +44,10 @@ exports.AuthModule = AuthModule = __decorate([ typeorm_1.TypeOrmModule.forFeature([tenant_entity_1.Tenant, api_key_entity_1.ApiKey]), redis_module_1.RedisModule, ], - providers: [auth_service_1.AuthService], - exports: [auth_service_1.AuthService], + controllers: [tenant_controller_1.TenantController], + providers: [auth_service_1.AuthService, firebase_admin_service_1.FirebaseAdminService, firebase_auth_guard_1.FirebaseAuthGuard], + exports: [auth_service_1.AuthService, firebase_admin_service_1.FirebaseAdminService, firebase_auth_guard_1.FirebaseAuthGuard], }), - __metadata("design:paramtypes", [auth_service_1.AuthService, - config_1.ConfigService]) + __metadata("design:paramtypes", [auth_service_1.AuthService, typeof (_a = typeof config_1.ConfigService !== "undefined" && config_1.ConfigService) === "function" ? _a : Object]) ], AuthModule); //# sourceMappingURL=auth.module.js.map \ No newline at end of file diff --git a/apps/api/dist/auth/auth.module.js.map b/apps/api/dist/auth/auth.module.js.map index 7704cda..6471b76 100644 --- a/apps/api/dist/auth/auth.module.js.map +++ b/apps/api/dist/auth/auth.module.js.map @@ -1 +1 @@ -{"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../src/auth/auth.module.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA8D;AAC9D,6CAAgD;AAChD,iDAA6C;AAC7C,4DAAkD;AAClD,8DAAmD;AACnD,yDAAqD;AACrD,2CAA+C;AAWxC,IAAM,UAAU,GAAhB,MAAM,UAAU;IAEF;IACA;IAFnB,YACmB,WAAwB,EACxB,aAA4B;QAD5B,gBAAW,GAAX,WAAW,CAAa;QACxB,kBAAa,GAAb,aAAa,CAAe;IAC5C,CAAC;IAMJ,KAAK,CAAC,YAAY;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,aAAa,CAAC,CAAC;QACjE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,UAAU,CAAC,CAAC;YACzF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF,CAAA;AAjBY,gCAAU;qBAAV,UAAU;IATtB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC,CAAC,sBAAM,EAAE,uBAAM,CAAC,CAAC;YAC1C,0BAAW;SACZ;QACD,SAAS,EAAE,CAAC,0BAAW,CAAC;QACxB,OAAO,EAAE,CAAC,0BAAW,CAAC;KACvB,CAAC;qCAGgC,0BAAW;QACT,sBAAa;GAHpC,UAAU,CAiBtB"} \ No newline at end of file +{"version":3,"file":"auth.module.js","sourceRoot":"","sources":["../../src/auth/auth.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA8D;AAC9D,6CAAgD;AAChD,iDAA6C;AAC7C,4DAAkD;AAClD,8DAAmD;AACnD,yDAAqD;AACrD,2CAA+C;AAC/C,2DAAuD;AACvD,qEAAgE;AAChE,sEAAiE;AAY1D,IAAM,UAAU,GAAhB,MAAM,UAAU;IAEF;IACA;IAFnB,YACmB,WAAwB,EACxB,aAA4B;QAD5B,gBAAW,GAAX,WAAW,CAAa;QACxB,kBAAa,GAAb,aAAa,CAAe;IAC5C,CAAC;IAMJ,KAAK,CAAC,YAAY;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,aAAa,CAAC,CAAC;QACjE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,UAAU,CAAC,CAAC;YACzF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;CACF,CAAA;AAjBY,gCAAU;qBAAV,UAAU;IAVtB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC,CAAC,sBAAM,EAAE,uBAAM,CAAC,CAAC;YAC1C,0BAAW;SACZ;QACD,WAAW,EAAE,CAAC,oCAAgB,CAAC;QAC/B,SAAS,EAAE,CAAC,0BAAW,EAAE,6CAAoB,EAAE,uCAAiB,CAAC;QACjE,OAAO,EAAE,CAAC,0BAAW,EAAE,6CAAoB,EAAE,uCAAiB,CAAC;KAChE,CAAC;qCAGgC,0BAAW,sBACT,sBAAa,oBAAb,sBAAa;GAHpC,UAAU,CAiBtB"} \ No newline at end of file diff --git a/apps/api/dist/auth/auth.service.d.ts b/apps/api/dist/auth/auth.service.d.ts index b287e7f..2f80e3f 100644 --- a/apps/api/dist/auth/auth.service.d.ts +++ b/apps/api/dist/auth/auth.service.d.ts @@ -17,4 +17,8 @@ export declare class AuthService { private isDomainAllowed; hashSecret(secret: string): string; seedDefaultKey(name: string, email: string, keyString: string): Promise; + getApiKeys(tenantId: string): Promise; + createApiKey(tenantId: string, name: string, rateLimit?: number, allowedOrigins?: string[]): Promise; + getDefaultTenant(): Promise; + findOrCreateByFirebaseUid(uid: string, email: string, name: string, photoUrl?: string): Promise; } diff --git a/apps/api/dist/auth/auth.service.js b/apps/api/dist/auth/auth.service.js index 2f7a545..b96cee2 100644 --- a/apps/api/dist/auth/auth.service.js +++ b/apps/api/dist/auth/auth.service.js @@ -12,6 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var AuthService_1; +var _a, _b; Object.defineProperty(exports, "__esModule", { value: true }); exports.AuthService = void 0; const common_1 = require("@nestjs/common"); @@ -49,7 +50,7 @@ let AuthService = AuthService_1 = class AuthService { const result = { tenant: apiKey.tenant, apiKey: apiKey, - rateLimit: apiKey.rateLimit || 100, + rateLimit: apiKey.rateLimit || tenant_entity_1.RATE_LIMITS[apiKey.tenant.plan] || 100, }; await this.redisService.set(cacheKey, result, 3600); this.apiKeyRepository.update(apiKey.id, { lastUsedAt: new Date() }).catch(err => this.logger.error(`Failed to update lastUsedAt for API key ${apiKey.id}: ${err.message}`)); @@ -87,7 +88,8 @@ let AuthService = AuthService_1 = class AuthService { tenant = await this.tenantRepository.save({ name, email, - isActive: true + isActive: true, + plan: tenant_entity_1.TenantPlan.ENTERPRISE, }); } const existingKey = await this.apiKeyRepository.findOne({ where: { key: keyString } }); @@ -102,14 +104,77 @@ let AuthService = AuthService_1 = class AuthService { }); } } + async getApiKeys(tenantId) { + return this.apiKeyRepository.find({ + where: { tenantId }, + order: { createdAt: 'DESC' } + }); + } + async createApiKey(tenantId, name, rateLimit, allowedOrigins) { + const existingKeysCount = await this.apiKeyRepository.count({ where: { tenantId } }); + if (existingKeysCount >= 1) { + throw new common_1.ConflictException('Limit reached: Only 1 API key allowed per developer currently.'); + } + const key = `in_${(0, crypto_1.createHash)('md5').update(Math.random().toString()).digest('hex').substring(0, 24)}`; + const apiKey = this.apiKeyRepository.create({ + key, + secretHash: this.hashSecret(key), + name, + tenantId, + rateLimit: rateLimit || 100, + allowedOrigins: allowedOrigins || [], + isActive: true + }); + return this.apiKeyRepository.save(apiKey); + } + async getDefaultTenant() { + const tenant = await this.tenantRepository.findOne({ where: {} }); + if (!tenant) + throw new common_1.NotFoundException('No tenants found in system'); + return tenant; + } + async findOrCreateByFirebaseUid(uid, email, name, photoUrl) { + let tenant = await this.tenantRepository.findOne({ where: { firebaseUid: uid } }); + if (!tenant) { + tenant = await this.tenantRepository.findOne({ where: { email } }); + if (tenant) { + this.logger.log(`Linking existing tenant ${email} to Firebase UID: ${uid}`); + tenant.firebaseUid = uid; + if (photoUrl) + tenant.photoUrl = photoUrl; + tenant = await this.tenantRepository.save(tenant); + } + else { + this.logger.log(`Creating new tenant for Firebase user: ${email} (${uid})`); + const isAdmin = email === 'hamzaaleghwairyeen@gmail.com' || email === 'hamzadoctor@gmail.com' || email === 'hamzaayedpython@gmail.com'; + tenant = await this.tenantRepository.save({ + firebaseUid: uid, + email, + name, + photoUrl, + plan: isAdmin ? tenant_entity_1.TenantPlan.ENTERPRISE : tenant_entity_1.TenantPlan.FREE, + isActive: true, + }); + } + } + else { + const isAdmin = email === 'hamzaaleghwairyeen@gmail.com' || email === 'hamzadoctor@gmail.com' || email === 'hamzaayedpython@gmail.com'; + if (isAdmin && tenant.plan !== tenant_entity_1.TenantPlan.ENTERPRISE) { + tenant.plan = tenant_entity_1.TenantPlan.ENTERPRISE; + await this.tenantRepository.save(tenant); + } + if (tenant.photoUrl !== photoUrl || tenant.name !== name) { + await this.tenantRepository.update(tenant.id, { photoUrl, name }); + } + } + return tenant; + } }; exports.AuthService = AuthService; exports.AuthService = AuthService = AuthService_1 = __decorate([ (0, common_1.Injectable)(), __param(0, (0, typeorm_1.InjectRepository)(api_key_entity_1.ApiKey)), __param(1, (0, typeorm_1.InjectRepository)(tenant_entity_1.Tenant)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - redis_service_1.RedisService]) + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, redis_service_1.RedisService]) ], AuthService); //# sourceMappingURL=auth.service.js.map \ No newline at end of file diff --git a/apps/api/dist/auth/auth.service.js.map b/apps/api/dist/auth/auth.service.js.map index 195a1e4..e5ca27c 100644 --- a/apps/api/dist/auth/auth.service.js.map +++ b/apps/api/dist/auth/auth.service.js.map @@ -1 +1 @@ -{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/auth/auth.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"auth.service.js","sourceRoot":"","sources":["../../src/auth/auth.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/auth/dto/management/create-key.dto.d.ts b/apps/api/dist/auth/dto/management/create-key.dto.d.ts new file mode 100644 index 0000000..89b1b5c --- /dev/null +++ b/apps/api/dist/auth/dto/management/create-key.dto.d.ts @@ -0,0 +1,5 @@ +export declare class CreateKeyDto { + name: string; + rateLimit?: number; + allowedOrigins?: string[]; +} diff --git a/apps/api/dist/auth/dto/management/create-key.dto.js b/apps/api/dist/auth/dto/management/create-key.dto.js new file mode 100644 index 0000000..64ec835 --- /dev/null +++ b/apps/api/dist/auth/dto/management/create-key.dto.js @@ -0,0 +1,35 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.CreateKeyDto = void 0; +const class_validator_1 = require("class-validator"); +class CreateKeyDto { + name; + rateLimit; + allowedOrigins; +} +exports.CreateKeyDto = CreateKeyDto; +__decorate([ + (0, class_validator_1.IsString)(), + __metadata("design:type", String) +], CreateKeyDto.prototype, "name", void 0); +__decorate([ + (0, class_validator_1.IsOptional)(), + (0, class_validator_1.IsNumber)(), + __metadata("design:type", Number) +], CreateKeyDto.prototype, "rateLimit", void 0); +__decorate([ + (0, class_validator_1.IsOptional)(), + (0, class_validator_1.IsArray)(), + (0, class_validator_1.IsString)({ each: true }), + __metadata("design:type", Array) +], CreateKeyDto.prototype, "allowedOrigins", void 0); +//# sourceMappingURL=create-key.dto.js.map \ No newline at end of file diff --git a/apps/api/dist/auth/dto/management/create-key.dto.js.map b/apps/api/dist/auth/dto/management/create-key.dto.js.map new file mode 100644 index 0000000..083ed73 --- /dev/null +++ b/apps/api/dist/auth/dto/management/create-key.dto.js.map @@ -0,0 +1 @@ +{"version":3,"file":"create-key.dto.js","sourceRoot":"","sources":["../../../../src/auth/dto/management/create-key.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAA0E;AAE1E,MAAa,YAAY;IAEvB,IAAI,CAAS;IAIb,SAAS,CAAU;IAKnB,cAAc,CAAY;CAC3B;AAZD,oCAYC;AAVC;IADC,IAAA,0BAAQ,GAAE;;0CACE;AAIb;IAFC,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;+CACQ;AAKnB;IAHC,IAAA,4BAAU,GAAE;IACZ,IAAA,yBAAO,GAAE;IACT,IAAA,0BAAQ,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;oDACC"} \ No newline at end of file diff --git a/apps/api/dist/auth/entities/tenant.entity.d.ts b/apps/api/dist/auth/entities/tenant.entity.d.ts index 625ff67..70bbb55 100644 --- a/apps/api/dist/auth/entities/tenant.entity.d.ts +++ b/apps/api/dist/auth/entities/tenant.entity.d.ts @@ -1,14 +1,24 @@ import { ApiKey } from './api-key.entity'; export declare enum TenantPlan { FREE = "FREE", - PREMIUM = "PREMIUM", + STARTER = "STARTER", + PRO = "PRO", ENTERPRISE = "ENTERPRISE" } +export declare enum TenantRole { + USER = "USER", + ADMIN = "ADMIN" +} +export declare const QUOTA_LIMITS: Record; +export declare const RATE_LIMITS: Record; export declare class Tenant { id: string; name: string; email: string; plan: TenantPlan; + firebaseUid: string; + role: TenantRole; + photoUrl: string; isActive: boolean; createdAt: Date; updatedAt: Date; diff --git a/apps/api/dist/auth/entities/tenant.entity.js b/apps/api/dist/auth/entities/tenant.entity.js index 78add87..a249c7c 100644 --- a/apps/api/dist/auth/entities/tenant.entity.js +++ b/apps/api/dist/auth/entities/tenant.entity.js @@ -9,20 +9,41 @@ var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.Tenant = exports.TenantPlan = void 0; +exports.Tenant = exports.RATE_LIMITS = exports.QUOTA_LIMITS = exports.TenantRole = exports.TenantPlan = void 0; const typeorm_1 = require("typeorm"); const api_key_entity_1 = require("./api-key.entity"); var TenantPlan; (function (TenantPlan) { TenantPlan["FREE"] = "FREE"; - TenantPlan["PREMIUM"] = "PREMIUM"; + TenantPlan["STARTER"] = "STARTER"; + TenantPlan["PRO"] = "PRO"; TenantPlan["ENTERPRISE"] = "ENTERPRISE"; })(TenantPlan || (exports.TenantPlan = TenantPlan = {})); +var TenantRole; +(function (TenantRole) { + TenantRole["USER"] = "USER"; + TenantRole["ADMIN"] = "ADMIN"; +})(TenantRole || (exports.TenantRole = TenantRole = {})); +exports.QUOTA_LIMITS = { + [TenantPlan.FREE]: 8000, + [TenantPlan.STARTER]: 25000, + [TenantPlan.PRO]: 100000, + [TenantPlan.ENTERPRISE]: 500000, +}; +exports.RATE_LIMITS = { + [TenantPlan.FREE]: 5, + [TenantPlan.STARTER]: 100, + [TenantPlan.PRO]: 500, + [TenantPlan.ENTERPRISE]: 50000, +}; let Tenant = class Tenant { id; name; email; plan; + firebaseUid; + role; + photoUrl; isActive; createdAt; updatedAt; @@ -49,6 +70,22 @@ __decorate([ }), __metadata("design:type", String) ], Tenant.prototype, "plan", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: true, unique: true }), + __metadata("design:type", String) +], Tenant.prototype, "firebaseUid", void 0); +__decorate([ + (0, typeorm_1.Column)({ + type: 'enum', + enum: TenantRole, + default: TenantRole.USER, + }), + __metadata("design:type", String) +], Tenant.prototype, "role", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: true }), + __metadata("design:type", String) +], Tenant.prototype, "photoUrl", void 0); __decorate([ (0, typeorm_1.Column)({ default: true }), __metadata("design:type", Boolean) diff --git a/apps/api/dist/auth/entities/tenant.entity.js.map b/apps/api/dist/auth/entities/tenant.entity.js.map index f8a466b..6742005 100644 --- a/apps/api/dist/auth/entities/tenant.entity.js.map +++ b/apps/api/dist/auth/entities/tenant.entity.js.map @@ -1 +1 @@ -{"version":3,"file":"tenant.entity.js","sourceRoot":"","sources":["../../../src/auth/entities/tenant.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAgH;AAChH,qDAA0C;AAE1C,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,iCAAmB,CAAA;IACnB,uCAAyB,CAAA;AAC3B,CAAC,EAJW,UAAU,0BAAV,UAAU,QAIrB;AAGM,IAAM,MAAM,GAAZ,MAAM,MAAM;IAEjB,EAAE,CAAS;IAGX,IAAI,CAAS;IAGb,KAAK,CAAS;IAOd,IAAI,CAAa;IAGjB,QAAQ,CAAU;IAGlB,SAAS,CAAO;IAGhB,SAAS,CAAO;IAGhB,OAAO,CAAW;CACnB,CAAA;AA5BY,wBAAM;AAEjB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;kCACpB;AAGX;IADC,IAAA,gBAAM,GAAE;;oCACI;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;qCACX;AAOd;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU,CAAC,IAAI;KACzB,CAAC;;oCACe;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;wCACR;AAGlB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;yCAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;yCAAC;AAGhB;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,uBAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;;uCACjC;iBA3BP,MAAM;IADlB,IAAA,gBAAM,EAAC,SAAS,CAAC;GACL,MAAM,CA4BlB"} \ No newline at end of file +{"version":3,"file":"tenant.entity.js","sourceRoot":"","sources":["../../../src/auth/entities/tenant.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAgH;AAChH,qDAA0C;AAE1C,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,iCAAmB,CAAA;IACnB,yBAAW,CAAA;IACX,uCAAyB,CAAA;AAC3B,CAAC,EALW,UAAU,0BAAV,UAAU,QAKrB;AAED,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,6BAAe,CAAA;AACjB,CAAC,EAHW,UAAU,0BAAV,UAAU,QAGrB;AAEY,QAAA,YAAY,GAA+B;IACtD,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI;IACvB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK;IAC3B,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM;IACxB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM;CAChC,CAAC;AAEW,QAAA,WAAW,GAA+B;IACrD,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IACpB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,GAAG;IACzB,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,GAAG;IACrB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK;CAC/B,CAAC;AAGK,IAAM,MAAM,GAAZ,MAAM,MAAM;IAEjB,EAAE,CAAS;IAGX,IAAI,CAAS;IAGb,KAAK,CAAS;IAOd,IAAI,CAAa;IAGjB,WAAW,CAAS;IAOpB,IAAI,CAAa;IAGjB,QAAQ,CAAS;IAGjB,QAAQ,CAAU;IAGlB,SAAS,CAAO;IAGhB,SAAS,CAAO;IAGhB,OAAO,CAAW;CACnB,CAAA;AAzCY,wBAAM;AAEjB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;kCACpB;AAGX;IADC,IAAA,gBAAM,GAAE;;oCACI;AAGb;IADC,IAAA,gBAAM,EAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;qCACX;AAOd;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU,CAAC,IAAI;KACzB,CAAC;;oCACe;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;2CACrB;AAOpB;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU,CAAC,IAAI;KACzB,CAAC;;oCACe;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;wCACV;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;wCACR;AAGlB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;yCAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;yCAAC;AAGhB;IADC,IAAA,mBAAS,EAAC,GAAG,EAAE,CAAC,uBAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;;uCACjC;iBAxCP,MAAM;IADlB,IAAA,gBAAM,EAAC,SAAS,CAAC;GACL,MAAM,CAyClB"} \ No newline at end of file diff --git a/apps/api/dist/auth/firebase-admin.service.d.ts b/apps/api/dist/auth/firebase-admin.service.d.ts new file mode 100644 index 0000000..851acd6 --- /dev/null +++ b/apps/api/dist/auth/firebase-admin.service.d.ts @@ -0,0 +1,11 @@ +import { OnModuleInit } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import * as admin from 'firebase-admin'; +export declare class FirebaseAdminService implements OnModuleInit { + private configService; + private readonly logger; + private firebaseApp; + constructor(configService: ConfigService); + onModuleInit(): void; + verifyIdToken(token: string): Promise; +} diff --git a/apps/api/dist/auth/firebase-admin.service.js b/apps/api/dist/auth/firebase-admin.service.js new file mode 100644 index 0000000..a3606b4 --- /dev/null +++ b/apps/api/dist/auth/firebase-admin.service.js @@ -0,0 +1,99 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var FirebaseAdminService_1; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FirebaseAdminService = void 0; +const common_1 = require("@nestjs/common"); +const config_1 = require("@nestjs/config"); +const admin = __importStar(require("firebase-admin")); +const fs = __importStar(require("fs")); +const path = __importStar(require("path")); +let FirebaseAdminService = FirebaseAdminService_1 = class FirebaseAdminService { + configService; + logger = new common_1.Logger(FirebaseAdminService_1.name); + firebaseApp; + constructor(configService) { + this.configService = configService; + } + onModuleInit() { + const keyPath = this.configService.get('FIREBASE_SERVICE_ACCOUNT_PATH'); + if (!keyPath) { + this.logger.error('FIREBASE_SERVICE_ACCOUNT_PATH is not defined in environment variables'); + return; + } + try { + const absolutePath = path.isAbsolute(keyPath) + ? keyPath + : path.resolve(process.cwd(), keyPath); + if (!fs.existsSync(absolutePath)) { + this.logger.error(`Firebase service account key not found at: ${absolutePath}`); + return; + } + const serviceAccount = JSON.parse(fs.readFileSync(absolutePath, 'utf8')); + this.firebaseApp = admin.initializeApp({ + credential: admin.credential.cert(serviceAccount), + }); + this.logger.log('✅ Firebase Admin SDK initialized successfully'); + } + catch (error) { + this.logger.error(`Failed to initialize Firebase Admin SDK: ${error.message}`); + } + } + async verifyIdToken(token) { + try { + return await admin.auth().verifyIdToken(token); + } + catch (error) { + this.logger.error(`Token verification failed: ${error.message}`); + throw error; + } + } +}; +exports.FirebaseAdminService = FirebaseAdminService; +exports.FirebaseAdminService = FirebaseAdminService = FirebaseAdminService_1 = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof config_1.ConfigService !== "undefined" && config_1.ConfigService) === "function" ? _a : Object]) +], FirebaseAdminService); +//# sourceMappingURL=firebase-admin.service.js.map \ No newline at end of file diff --git a/apps/api/dist/auth/firebase-admin.service.js.map b/apps/api/dist/auth/firebase-admin.service.js.map new file mode 100644 index 0000000..86782c1 --- /dev/null +++ b/apps/api/dist/auth/firebase-admin.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"firebase-admin.service.js","sourceRoot":"","sources":["../../src/auth/firebase-admin.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAkE;AAClE,2CAA+C;AAC/C,sDAAwC;AACxC,uCAAyB;AACzB,2CAA6B;AAGtB,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAIX;IAHH,MAAM,GAAG,IAAI,eAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;IACxD,WAAW,CAAgB;IAEnC,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAEpD,YAAY;QACV,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,+BAA+B,CAAC,CAAC;QAEhF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;YAC3F,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YAEH,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBAC3C,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;YAEzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,YAAY,EAAE,CAAC,CAAC;gBAChF,OAAO;YACT,CAAC;YAED,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;YAEzE,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC;gBACrC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC;aAClD,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,IAAI,CAAC;YACH,OAAO,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACjE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAA;AA7CY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;yDAKwB,sBAAa,oBAAb,sBAAa;GAJrC,oBAAoB,CA6ChC"} \ No newline at end of file diff --git a/apps/api/dist/auth/guards/firebase-auth.guard.d.ts b/apps/api/dist/auth/guards/firebase-auth.guard.d.ts new file mode 100644 index 0000000..47dc02c --- /dev/null +++ b/apps/api/dist/auth/guards/firebase-auth.guard.d.ts @@ -0,0 +1,10 @@ +import { CanActivate, ExecutionContext } from '@nestjs/common'; +import { FirebaseAdminService } from '../firebase-admin.service'; +import { AuthService } from '../auth.service'; +export declare class FirebaseAuthGuard implements CanActivate { + private firebaseAdminService; + private authService; + private readonly logger; + constructor(firebaseAdminService: FirebaseAdminService, authService: AuthService); + canActivate(context: ExecutionContext): Promise; +} diff --git a/apps/api/dist/auth/guards/firebase-auth.guard.js b/apps/api/dist/auth/guards/firebase-auth.guard.js new file mode 100644 index 0000000..4779b56 --- /dev/null +++ b/apps/api/dist/auth/guards/firebase-auth.guard.js @@ -0,0 +1,54 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var FirebaseAuthGuard_1; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FirebaseAuthGuard = void 0; +const common_1 = require("@nestjs/common"); +const firebase_admin_service_1 = require("../firebase-admin.service"); +const auth_service_1 = require("../auth.service"); +let FirebaseAuthGuard = FirebaseAuthGuard_1 = class FirebaseAuthGuard { + firebaseAdminService; + authService; + logger = new common_1.Logger(FirebaseAuthGuard_1.name); + constructor(firebaseAdminService, authService) { + this.firebaseAdminService = firebaseAdminService; + this.authService = authService; + } + async canActivate(context) { + const request = context.switchToHttp().getRequest(); + const authHeader = request.headers.authorization; + if (!authHeader || !authHeader.startsWith('Bearer ')) { + throw new common_1.UnauthorizedException('Missing or invalid Authorization header'); + } + const token = authHeader.split('Bearer ')[1]; + try { + const decodedToken = await this.firebaseAdminService.verifyIdToken(token); + const tenant = await this.authService.findOrCreateByFirebaseUid(decodedToken.uid, decodedToken.email || '', decodedToken.name || decodedToken.email?.split('@')[0] || 'Unknown User', decodedToken.picture); + if (!tenant.isActive) { + throw new common_1.UnauthorizedException('Tenant account is disabled'); + } + request['tenant'] = tenant; + request['user'] = decodedToken; + return true; + } + catch (error) { + this.logger.error(`Firebase Auth failed: ${error.message}`); + throw new common_1.UnauthorizedException(error.message || 'Authentication failed'); + } + } +}; +exports.FirebaseAuthGuard = FirebaseAuthGuard; +exports.FirebaseAuthGuard = FirebaseAuthGuard = FirebaseAuthGuard_1 = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [firebase_admin_service_1.FirebaseAdminService, + auth_service_1.AuthService]) +], FirebaseAuthGuard); +//# sourceMappingURL=firebase-auth.guard.js.map \ No newline at end of file diff --git a/apps/api/dist/auth/guards/firebase-auth.guard.js.map b/apps/api/dist/auth/guards/firebase-auth.guard.js.map new file mode 100644 index 0000000..7c85d72 --- /dev/null +++ b/apps/api/dist/auth/guards/firebase-auth.guard.js.map @@ -0,0 +1 @@ +{"version":3,"file":"firebase-auth.guard.js","sourceRoot":"","sources":["../../../src/auth/guards/firebase-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAMwB;AACxB,sEAAiE;AACjE,kDAA8C;AAGvC,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAIlB;IACA;IAJO,MAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAE7D,YACU,oBAA0C,EAC1C,WAAwB;QADxB,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,gBAAW,GAAX,WAAW,CAAa;IAC/B,CAAC;IAEJ,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;QAEjD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,8BAAqB,CAAC,yCAAyC,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAE7C,IAAI,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAG1E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAC7D,YAAY,CAAC,GAAG,EAChB,YAAY,CAAC,KAAK,IAAI,EAAE,EACxB,YAAY,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,cAAc,EACxE,YAAY,CAAC,OAAO,CACrB,CAAC;YAEF,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,MAAM,IAAI,8BAAqB,CAAC,4BAA4B,CAAC,CAAC;YAChE,CAAC;YAGD,OAAO,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;YAC3B,OAAO,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC;YAE/B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,MAAM,IAAI,8BAAqB,CAAC,KAAK,CAAC,OAAO,IAAI,uBAAuB,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;CACF,CAAA;AA5CY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAKqB,6CAAoB;QAC7B,0BAAW;GALvB,iBAAiB,CA4C7B"} \ No newline at end of file diff --git a/apps/api/dist/auth/tenant.controller.d.ts b/apps/api/dist/auth/tenant.controller.d.ts new file mode 100644 index 0000000..7011936 --- /dev/null +++ b/apps/api/dist/auth/tenant.controller.d.ts @@ -0,0 +1,9 @@ +import { AuthService } from './auth.service'; +import { CreateKeyDto } from './dto/management/create-key.dto'; +export declare class TenantController { + private readonly authService; + constructor(authService: AuthService); + createKey(req: any, dto: CreateKeyDto): Promise; + getKeys(req: any): Promise; + getMe(req: any): Promise; +} diff --git a/apps/api/dist/auth/tenant.controller.js b/apps/api/dist/auth/tenant.controller.js new file mode 100644 index 0000000..bcec1ac --- /dev/null +++ b/apps/api/dist/auth/tenant.controller.js @@ -0,0 +1,74 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TenantController = void 0; +const common_1 = require("@nestjs/common"); +const auth_service_1 = require("./auth.service"); +const create_key_dto_1 = require("./dto/management/create-key.dto"); +const swagger_1 = require("@nestjs/swagger"); +const firebase_auth_guard_1 = require("./guards/firebase-auth.guard"); +let TenantController = class TenantController { + authService; + constructor(authService) { + this.authService = authService; + } + async createKey(req, dto) { + if (req.user && req.user.email_verified === false) { + throw new common_1.ForbiddenException('You must verify your email address before creating an API key.'); + } + const tenantId = req.tenant.id; + return this.authService.createApiKey(tenantId, dto.name, dto.rateLimit, dto.allowedOrigins); + } + async getKeys(req) { + const tenantId = req.tenant.id; + return this.authService.getApiKeys(tenantId); + } + async getMe(req) { + return req.tenant; + } +}; +exports.TenantController = TenantController; +__decorate([ + (0, common_1.Post)('keys'), + (0, swagger_1.ApiOperation)({ summary: 'Create a new API key' }), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, create_key_dto_1.CreateKeyDto]), + __metadata("design:returntype", Promise) +], TenantController.prototype, "createKey", null); +__decorate([ + (0, common_1.Get)('keys'), + (0, swagger_1.ApiOperation)({ summary: 'Get all API keys for the authenticated tenant' }), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], TenantController.prototype, "getKeys", null); +__decorate([ + (0, common_1.Get)('me'), + (0, swagger_1.ApiOperation)({ summary: 'Get current authenticated tenant info' }), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], TenantController.prototype, "getMe", null); +exports.TenantController = TenantController = __decorate([ + (0, swagger_1.ApiTags)('auth'), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(firebase_auth_guard_1.FirebaseAuthGuard), + (0, common_1.Controller)('auth/management'), + __metadata("design:paramtypes", [auth_service_1.AuthService]) +], TenantController); +//# sourceMappingURL=tenant.controller.js.map \ No newline at end of file diff --git a/apps/api/dist/auth/tenant.controller.js.map b/apps/api/dist/auth/tenant.controller.js.map new file mode 100644 index 0000000..bc25365 --- /dev/null +++ b/apps/api/dist/auth/tenant.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"tenant.controller.js","sourceRoot":"","sources":["../../src/auth/tenant.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwG;AACxG,iDAA6C;AAC7C,oEAA+D;AAC/D,6CAAuE;AACvE,sEAAiE;AAM1D,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IACE;IAA7B,YAA6B,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;IAAG,CAAC;IAInD,AAAN,KAAK,CAAC,SAAS,CACN,GAAQ,EACP,GAAiB;QAEzB,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YAClD,MAAM,IAAI,2BAAkB,CAAC,gEAAgE,CAAC,CAAC;QACjG,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,CAClC,QAAQ,EACR,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,cAAc,CACnB,CAAC;IACJ,CAAC;IAIK,AAAN,KAAK,CAAC,OAAO,CAAQ,GAAQ;QAC3B,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAIK,AAAN,KAAK,CAAC,KAAK,CAAQ,GAAQ;QACzB,OAAO,GAAG,CAAC,MAAM,CAAC;IACpB,CAAC;CACF,CAAA;AAlCY,4CAAgB;AAKrB;IAFL,IAAA,aAAI,EAAC,MAAM,CAAC;IACZ,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAE/C,WAAA,IAAA,YAAG,GAAE,CAAA;IACL,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,6BAAY;;iDAa1B;AAIK;IAFL,IAAA,YAAG,EAAC,MAAM,CAAC;IACX,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,+CAA+C,EAAE,CAAC;IAC5D,WAAA,IAAA,YAAG,GAAE,CAAA;;;;+CAGnB;AAIK;IAFL,IAAA,YAAG,EAAC,IAAI,CAAC;IACT,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,uCAAuC,EAAE,CAAC;IACtD,WAAA,IAAA,YAAG,GAAE,CAAA;;;;6CAEjB;2BAjCU,gBAAgB;IAJ5B,IAAA,iBAAO,EAAC,MAAM,CAAC;IACf,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,uCAAiB,CAAC;IAC5B,IAAA,mBAAU,EAAC,iBAAiB,CAAC;qCAEc,0BAAW;GAD1C,gBAAgB,CAkC5B"} \ No newline at end of file diff --git a/apps/api/dist/billing/billing.controller.d.ts b/apps/api/dist/billing/billing.controller.d.ts new file mode 100644 index 0000000..cfcffa8 --- /dev/null +++ b/apps/api/dist/billing/billing.controller.d.ts @@ -0,0 +1,36 @@ +import { BillingService } from './billing.service'; +import { PayMobProvider } from './providers/paymob.provider'; +import { BinanceProvider } from './providers/binance.provider'; +import { PaymentProvider } from './entities/transaction.entity'; +export declare class BillingController { + private billingService; + private paymobProvider; + private binanceProvider; + private readonly logger; + constructor(billingService: BillingService, paymobProvider: PayMobProvider, binanceProvider: BinanceProvider); + getSubscription(req: any): Promise; + checkout(req: any, body: { + plan: string; + provider: PaymentProvider; + }): Promise<{ + checkoutUrl: any; + orderId: string; + prepayId: any; + } | { + checkoutUrl: string; + orderId: string; + }>; + handlePaymobCallback(query: any, req: any): Promise; + handlePaymobWebhook(body: any, hmac: string): Promise<{ + status: string; + message: string; + } | { + status: string; + message?: undefined; + }>; + handleBinanceWebhook(body: any, req: any): Promise<{ + returnCode: string; + returnMessage: any; + }>; + getInvoices(req: any): Promise; +} diff --git a/apps/api/dist/billing/billing.controller.js b/apps/api/dist/billing/billing.controller.js new file mode 100644 index 0000000..4fd1ac5 --- /dev/null +++ b/apps/api/dist/billing/billing.controller.js @@ -0,0 +1,259 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var BillingController_1; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BillingController = void 0; +const common_1 = require("@nestjs/common"); +const billing_service_1 = require("./billing.service"); +const paymob_provider_1 = require("./providers/paymob.provider"); +const binance_provider_1 = require("./providers/binance.provider"); +const firebase_auth_guard_1 = require("../auth/guards/firebase-auth.guard"); +const swagger_1 = require("@nestjs/swagger"); +const transaction_entity_1 = require("./entities/transaction.entity"); +let BillingController = BillingController_1 = class BillingController { + billingService; + paymobProvider; + binanceProvider; + logger = new common_1.Logger(BillingController_1.name); + constructor(billingService, paymobProvider, binanceProvider) { + this.billingService = billingService; + this.paymobProvider = paymobProvider; + this.binanceProvider = binanceProvider; + } + async getSubscription(req) { + return this.billingService.getSubscription(req.tenant.id); + } + async checkout(req, body) { + const tenantId = req.tenant.id; + const plan = body.plan; + const pricing = { + 'STARTER': 29, + 'PRO': 89, + }; + const amount = pricing[plan] || 0; + if (amount === 0 && plan !== 'FREE') { + throw new common_1.BadRequestException('Invalid plan or price not configured'); + } + if (body.provider === transaction_entity_1.PaymentProvider.PAYMOB) { + const { paymentKey, orderId } = await this.paymobProvider.createPaymentKey(tenantId, amount, plan); + const iframeId = this.billingService.getIframeId(); + const checkoutUrl = `https://accept.paymob.com/api/acceptance/iframes/${iframeId}?payment_token=${paymentKey}`; + return { checkoutUrl, orderId }; + } + if (body.provider === transaction_entity_1.PaymentProvider.BINANCE) { + return this.binanceProvider.createOrder(tenantId, amount, plan); + } + throw new common_1.BadRequestException('Invalid payment provider'); + } + async handlePaymobCallback(query, req) { + this.logger.log(`🔄 PayMob Redirect Callback: ID ${query.id}, Success: ${query.success}`); + if (query.success === 'true' && query.id) { + try { + const txDetails = await this.paymobProvider.getTransactionDetails(query.id); + if (txDetails && txDetails.success === true) { + const extraDesc = txDetails.order?.shipping_data?.extra_description || ""; + const [tenantId, plan] = extraDesc.split('|'); + if (tenantId) { + await this.billingService.processSuccessfulPayment(query.id.toString(), transaction_entity_1.PaymentProvider.PAYMOB, txDetails.amount_cents / 100, { tenantId, plan: plan || 'PRO' }); + this.logger.log(`🚀 Immediate Activation triggered via Callback for Tenant ${tenantId}`); + } + } + } + catch (e) { + this.logger.error(`Failed during immediate activation fallback: ${e.message}`); + } + } + const targetUrl = `https://map-dashboard.intaleqapp.com/dashboard.html#billing?payment_status=${query.success === 'true' ? 'success' : 'failed'}&id=${query.id}`; + return ` + + + + + Intaleq Maps | تمت العملية بنجاح + + + + + +
+ +
+
+ +
+
+ + + +
+ +

شكراً لك، حمزة!

+

تم تفعيل خطة PRO بنجاح. يتم الآن توجيهك إلى لوحة التحكم...

+ +
+
+
+
+
+
+ + +
+ + + `; + } + async handlePaymobWebhook(body, hmac) { + this.logger.log(`📥 PayMob Webhook Received: Transaction ID ${body.obj?.id}`); + if (!this.paymobProvider.verifyHmac(body.obj, hmac)) { + this.logger.error('❌ PayMob HMAC Verification Failed'); + throw new common_1.BadRequestException('Invalid signature'); + } + if (body.obj.success === true) { + const extraDesc = body.obj.order?.shipping_data?.extra_description || ""; + const [tenantId, plan] = extraDesc.split('|'); + if (!tenantId) { + this.logger.error(`❌ PayMob Webhook failed: No tenantId in metadata. Raw: ${extraDesc}`); + return { status: 'error', message: 'No tenantId found' }; + } + await this.billingService.processSuccessfulPayment(body.obj.id.toString(), transaction_entity_1.PaymentProvider.PAYMOB, body.obj.amount_cents / 100, { + tenantId, + plan: plan || 'PRO' + }); + } + return { status: 'success' }; + } + async handleBinanceWebhook(body, req) { + const timestamp = req.headers['binancepay-timestamp']; + const nonce = req.headers['binancepay-nonce']; + const signature = req.headers['binancepay-signature']; + this.logger.log(`📥 Binance Webhook Received: Transaction ID ${body.bizId || 'UNKNOWN'}`); + if (!timestamp || !nonce || !signature) { + this.logger.error('❌ Binance Webhook: Missing required headers'); + throw new common_1.BadRequestException('Missing headers'); + } + if (!this.binanceProvider.verifySignature(timestamp, nonce, signature, body)) { + this.logger.error('❌ Binance Signature Verification Failed'); + throw new common_1.BadRequestException('Invalid signature'); + } + if (body.bizStatus === 'PAY_SUCCESS') { + try { + let dataObj = {}; + if (body.data) { + dataObj = JSON.parse(body.data); + } + let tenantId = ''; + let plan = 'PRO'; + if (dataObj.passThroughInfo) { + const passThrough = JSON.parse(dataObj.passThroughInfo); + tenantId = passThrough.tenantId; + plan = passThrough.plan; + } + if (!tenantId) { + this.logger.error(`❌ Binance Webhook failed: No tenantId found. Body: ${JSON.stringify(body)}`); + return { returnCode: 'FAIL', returnMessage: 'No tenantId found' }; + } + const externalTxId = dataObj.merchantTradeNo || body.bizId?.toString(); + await this.billingService.processSuccessfulPayment(externalTxId, transaction_entity_1.PaymentProvider.BINANCE, 0, { tenantId, plan }); + this.logger.log(`✅ Binance Payment Processed Successfully for Tenant ${tenantId}`); + } + catch (err) { + this.logger.error(`❌ Failed to process Binance payment: ${err.message}`); + return { returnCode: 'FAIL', returnMessage: err.message }; + } + } + return { + returnCode: 'SUCCESS', + returnMessage: null, + }; + } + async getInvoices(req) { + return this.billingService.getTransactionHistory(req.tenant.id); + } +}; +exports.BillingController = BillingController; +__decorate([ + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(firebase_auth_guard_1.FirebaseAuthGuard), + (0, common_1.Get)('subscription'), + (0, swagger_1.ApiOperation)({ summary: 'Get current subscription details' }), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], BillingController.prototype, "getSubscription", null); +__decorate([ + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(firebase_auth_guard_1.FirebaseAuthGuard), + (0, common_1.Post)('checkout'), + (0, swagger_1.ApiOperation)({ summary: 'Initialize a checkout session' }), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, Object]), + __metadata("design:returntype", Promise) +], BillingController.prototype, "checkout", null); +__decorate([ + (0, common_1.Get)('callback/paymob'), + (0, swagger_1.ApiOperation)({ summary: 'PayMob Redirection Handler' }), + __param(0, (0, common_1.Query)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, Object]), + __metadata("design:returntype", Promise) +], BillingController.prototype, "handlePaymobCallback", null); +__decorate([ + (0, common_1.Post)('webhooks/paymob'), + (0, swagger_1.ApiOperation)({ summary: 'PayMob Payment Webhook' }), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Query)('hmac')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, String]), + __metadata("design:returntype", Promise) +], BillingController.prototype, "handlePaymobWebhook", null); +__decorate([ + (0, common_1.Post)('webhooks/binance'), + (0, swagger_1.ApiOperation)({ summary: 'Binance Payment Webhook' }), + __param(0, (0, common_1.Body)()), + __param(1, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, Object]), + __metadata("design:returntype", Promise) +], BillingController.prototype, "handleBinanceWebhook", null); +__decorate([ + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(firebase_auth_guard_1.FirebaseAuthGuard), + (0, common_1.Get)('invoices'), + (0, swagger_1.ApiOperation)({ summary: 'Get payment history' }), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], BillingController.prototype, "getInvoices", null); +exports.BillingController = BillingController = BillingController_1 = __decorate([ + (0, swagger_1.ApiTags)('billing'), + (0, common_1.Controller)('billing'), + __metadata("design:paramtypes", [billing_service_1.BillingService, + paymob_provider_1.PayMobProvider, + binance_provider_1.BinanceProvider]) +], BillingController); +//# sourceMappingURL=billing.controller.js.map \ No newline at end of file diff --git a/apps/api/dist/billing/billing.controller.js.map b/apps/api/dist/billing/billing.controller.js.map new file mode 100644 index 0000000..645d1d5 --- /dev/null +++ b/apps/api/dist/billing/billing.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"billing.controller.js","sourceRoot":"","sources":["../../src/billing/billing.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/billing/billing.module.d.ts b/apps/api/dist/billing/billing.module.d.ts new file mode 100644 index 0000000..f45c2c8 --- /dev/null +++ b/apps/api/dist/billing/billing.module.d.ts @@ -0,0 +1,2 @@ +export declare class BillingModule { +} diff --git a/apps/api/dist/billing/billing.module.js b/apps/api/dist/billing/billing.module.js new file mode 100644 index 0000000..3977b07 --- /dev/null +++ b/apps/api/dist/billing/billing.module.js @@ -0,0 +1,32 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BillingModule = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const subscription_entity_1 = require("./entities/subscription.entity"); +const transaction_entity_1 = require("./entities/transaction.entity"); +const billing_service_1 = require("./billing.service"); +const billing_controller_1 = require("./billing.controller"); +const paymob_provider_1 = require("./providers/paymob.provider"); +const binance_provider_1 = require("./providers/binance.provider"); +const tenant_entity_1 = require("../auth/entities/tenant.entity"); +let BillingModule = class BillingModule { +}; +exports.BillingModule = BillingModule; +exports.BillingModule = BillingModule = __decorate([ + (0, common_1.Module)({ + imports: [ + typeorm_1.TypeOrmModule.forFeature([subscription_entity_1.Subscription, transaction_entity_1.Transaction, tenant_entity_1.Tenant]), + ], + providers: [billing_service_1.BillingService, paymob_provider_1.PayMobProvider, binance_provider_1.BinanceProvider], + controllers: [billing_controller_1.BillingController], + exports: [billing_service_1.BillingService], + }) +], BillingModule); +//# sourceMappingURL=billing.module.js.map \ No newline at end of file diff --git a/apps/api/dist/billing/billing.module.js.map b/apps/api/dist/billing/billing.module.js.map new file mode 100644 index 0000000..08effd0 --- /dev/null +++ b/apps/api/dist/billing/billing.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"billing.module.js","sourceRoot":"","sources":["../../src/billing/billing.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,wEAA8D;AAC9D,sEAA4D;AAC5D,uDAAmD;AACnD,6DAAyD;AACzD,iEAA6D;AAC7D,mEAA+D;AAC/D,kEAAwD;AAUjD,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IARzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC,CAAC,kCAAY,EAAE,gCAAW,EAAE,sBAAM,CAAC,CAAC;SAC9D;QACD,SAAS,EAAE,CAAC,gCAAc,EAAE,gCAAc,EAAE,kCAAe,CAAC;QAC5D,WAAW,EAAE,CAAC,sCAAiB,CAAC;QAChC,OAAO,EAAE,CAAC,gCAAc,CAAC;KAC1B,CAAC;GACW,aAAa,CAAG"} \ No newline at end of file diff --git a/apps/api/dist/billing/billing.service.d.ts b/apps/api/dist/billing/billing.service.d.ts new file mode 100644 index 0000000..713fdea --- /dev/null +++ b/apps/api/dist/billing/billing.service.d.ts @@ -0,0 +1,20 @@ +import { ConfigService } from '@nestjs/config'; +import { Repository } from 'typeorm'; +import { Subscription } from './entities/subscription.entity'; +import { Transaction, PaymentProvider } from './entities/transaction.entity'; +import { Tenant } from '../auth/entities/tenant.entity'; +import { MailService } from '../common/mail.service'; +export declare class BillingService { + private subscriptionRepository; + private transactionRepository; + private tenantRepository; + private configService; + private mailService; + private readonly logger; + constructor(subscriptionRepository: Repository, transactionRepository: Repository, tenantRepository: Repository, configService: ConfigService, mailService: MailService); + getIframeId(): string; + getSubscription(tenantId: string): Promise; + processSuccessfulPayment(externalTxId: string, provider: PaymentProvider, amount: number, metadata: any): Promise; + private upgradeTenantPlan; + getTransactionHistory(tenantId: string): Promise; +} diff --git a/apps/api/dist/billing/billing.service.js b/apps/api/dist/billing/billing.service.js new file mode 100644 index 0000000..ba6ad57 --- /dev/null +++ b/apps/api/dist/billing/billing.service.js @@ -0,0 +1,131 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var BillingService_1; +var _a, _b, _c, _d; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BillingService = void 0; +const common_1 = require("@nestjs/common"); +const config_1 = require("@nestjs/config"); +const typeorm_1 = require("@nestjs/typeorm"); +const typeorm_2 = require("typeorm"); +const subscription_entity_1 = require("./entities/subscription.entity"); +const transaction_entity_1 = require("./entities/transaction.entity"); +const tenant_entity_1 = require("../auth/entities/tenant.entity"); +const mail_service_1 = require("../common/mail.service"); +let BillingService = BillingService_1 = class BillingService { + subscriptionRepository; + transactionRepository; + tenantRepository; + configService; + mailService; + logger = new common_1.Logger(BillingService_1.name); + constructor(subscriptionRepository, transactionRepository, tenantRepository, configService, mailService) { + this.subscriptionRepository = subscriptionRepository; + this.transactionRepository = transactionRepository; + this.tenantRepository = tenantRepository; + this.configService = configService; + this.mailService = mailService; + } + getIframeId() { + return this.configService.get('PAYMOB_IFRAME_ID', '837992'); + } + async getSubscription(tenantId) { + let sub = await this.subscriptionRepository.findOne({ where: { tenantId } }); + if (!sub) { + sub = await this.subscriptionRepository.save({ + tenantId, + plan: 'FREE', + monthlyRequestLimit: 5000, + status: subscription_entity_1.SubscriptionStatus.ACTIVE, + }); + } + return sub; + } + async processSuccessfulPayment(externalTxId, provider, amount, metadata) { + let txn = await this.transactionRepository.findOne({ where: { externalTransactionId: externalTxId } }); + if (txn && txn.status === transaction_entity_1.PaymentStatus.SUCCESS) { + this.logger.warn(`Transaction ${externalTxId} already processed.`); + return; + } + if (!txn) { + const tenantId = metadata.tenantId; + if (!tenantId) + throw new common_1.BadRequestException('No tenantId found in payment metadata'); + txn = await this.transactionRepository.save({ + tenantId, + externalTransactionId: externalTxId, + amount, + provider, + status: transaction_entity_1.PaymentStatus.SUCCESS, + metadata, + }); + } + else { + txn.status = transaction_entity_1.PaymentStatus.SUCCESS; + txn.metadata = { ...txn.metadata, ...metadata }; + await this.transactionRepository.save(txn); + } + const tenantId = txn.tenantId; + const plan = metadata.plan || 'PRO'; + await this.upgradeTenantPlan(tenantId, plan); + try { + const tenant = await this.tenantRepository.findOne({ where: { id: tenantId } }); + if (tenant && tenant.email) { + await this.mailService.sendInvoiceEmail(tenant.email, { + tenantName: tenant.name, + plan: plan, + amount: `${amount} EGP`, + transactionId: externalTxId, + }); + } + } + catch (err) { + this.logger.error(`Failed to send invoice email for tx ${externalTxId}: ${err.message}`); + } + this.logger.log(`✅ Tenant ${tenantId} upgraded to ${plan} after payment ${externalTxId}`); + } + async upgradeTenantPlan(tenantId, plan) { + await this.tenantRepository.update(tenantId, { plan }); + const limits = { + [tenant_entity_1.TenantPlan.FREE]: 5000, + [tenant_entity_1.TenantPlan.STARTER]: 25000, + [tenant_entity_1.TenantPlan.PRO]: 100000, + [tenant_entity_1.TenantPlan.ENTERPRISE]: 500000, + }; + const sub = await this.getSubscription(tenantId); + sub.plan = plan; + sub.monthlyRequestLimit = limits[plan] || 8000; + sub.status = subscription_entity_1.SubscriptionStatus.ACTIVE; + sub.currentPeriodStart = new Date(); + const nextMonth = new Date(); + nextMonth.setMonth(nextMonth.getMonth() + 1); + sub.currentPeriodEnd = nextMonth; + await this.subscriptionRepository.save(sub); + } + async getTransactionHistory(tenantId) { + return this.transactionRepository.find({ + where: { tenantId }, + order: { createdAt: 'DESC' }, + }); + } +}; +exports.BillingService = BillingService; +exports.BillingService = BillingService = BillingService_1 = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(subscription_entity_1.Subscription)), + __param(1, (0, typeorm_1.InjectRepository)(transaction_entity_1.Transaction)), + __param(2, (0, typeorm_1.InjectRepository)(tenant_entity_1.Tenant)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof config_1.ConfigService !== "undefined" && config_1.ConfigService) === "function" ? _d : Object, mail_service_1.MailService]) +], BillingService); +//# sourceMappingURL=billing.service.js.map \ No newline at end of file diff --git a/apps/api/dist/billing/billing.service.js.map b/apps/api/dist/billing/billing.service.js.map new file mode 100644 index 0000000..bdf8f94 --- /dev/null +++ b/apps/api/dist/billing/billing.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"billing.service.js","sourceRoot":"","sources":["../../src/billing/billing.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/billing/entities/subscription.entity.d.ts b/apps/api/dist/billing/entities/subscription.entity.d.ts new file mode 100644 index 0000000..419dd96 --- /dev/null +++ b/apps/api/dist/billing/entities/subscription.entity.d.ts @@ -0,0 +1,18 @@ +export declare enum SubscriptionStatus { + ACTIVE = "ACTIVE", + PAST_DUE = "PAST_DUE", + CANCELED = "CANCELED", + TRIALING = "TRIALING" +} +export declare class Subscription { + id: string; + tenantId: string; + plan: string; + status: SubscriptionStatus; + monthlyRequestLimit: number; + currentPeriodStart: Date; + currentPeriodEnd: Date; + canceledAt: Date; + createdAt: Date; + updatedAt: Date; +} diff --git a/apps/api/dist/billing/entities/subscription.entity.js b/apps/api/dist/billing/entities/subscription.entity.js new file mode 100644 index 0000000..b52b289 --- /dev/null +++ b/apps/api/dist/billing/entities/subscription.entity.js @@ -0,0 +1,82 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Subscription = exports.SubscriptionStatus = void 0; +const typeorm_1 = require("typeorm"); +var SubscriptionStatus; +(function (SubscriptionStatus) { + SubscriptionStatus["ACTIVE"] = "ACTIVE"; + SubscriptionStatus["PAST_DUE"] = "PAST_DUE"; + SubscriptionStatus["CANCELED"] = "CANCELED"; + SubscriptionStatus["TRIALING"] = "TRIALING"; +})(SubscriptionStatus || (exports.SubscriptionStatus = SubscriptionStatus = {})); +let Subscription = class Subscription { + id; + tenantId; + plan; + status; + monthlyRequestLimit; + currentPeriodStart; + currentPeriodEnd; + canceledAt; + createdAt; + updatedAt; +}; +exports.Subscription = Subscription; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), + __metadata("design:type", String) +], Subscription.prototype, "id", void 0); +__decorate([ + (0, typeorm_1.Index)(), + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], Subscription.prototype, "tenantId", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 'FREE' }), + __metadata("design:type", String) +], Subscription.prototype, "plan", void 0); +__decorate([ + (0, typeorm_1.Column)({ + type: 'enum', + enum: SubscriptionStatus, + default: SubscriptionStatus.ACTIVE, + }), + __metadata("design:type", String) +], Subscription.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'int', default: 8000 }), + __metadata("design:type", Number) +], Subscription.prototype, "monthlyRequestLimit", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'timestamp', nullable: true }), + __metadata("design:type", Date) +], Subscription.prototype, "currentPeriodStart", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'timestamp', nullable: true }), + __metadata("design:type", Date) +], Subscription.prototype, "currentPeriodEnd", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'timestamp', nullable: true }), + __metadata("design:type", Date) +], Subscription.prototype, "canceledAt", void 0); +__decorate([ + (0, typeorm_1.CreateDateColumn)(), + __metadata("design:type", Date) +], Subscription.prototype, "createdAt", void 0); +__decorate([ + (0, typeorm_1.UpdateDateColumn)(), + __metadata("design:type", Date) +], Subscription.prototype, "updatedAt", void 0); +exports.Subscription = Subscription = __decorate([ + (0, typeorm_1.Entity)('subscriptions') +], Subscription); +//# sourceMappingURL=subscription.entity.js.map \ No newline at end of file diff --git a/apps/api/dist/billing/entities/subscription.entity.js.map b/apps/api/dist/billing/entities/subscription.entity.js.map new file mode 100644 index 0000000..db958d2 --- /dev/null +++ b/apps/api/dist/billing/entities/subscription.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"subscription.entity.js","sourceRoot":"","sources":["../../../src/billing/entities/subscription.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAQiB;AAGjB,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,uCAAiB,CAAA;IACjB,2CAAqB,CAAA;IACrB,2CAAqB,CAAA;IACrB,2CAAqB,CAAA;AACvB,CAAC,EALW,kBAAkB,kCAAlB,kBAAkB,QAK7B;AAGM,IAAM,YAAY,GAAlB,MAAM,YAAY;IAEvB,EAAE,CAAS;IAIX,QAAQ,CAAS;IAGjB,IAAI,CAAS;IAOb,MAAM,CAAqB;IAG3B,mBAAmB,CAAS;IAG5B,kBAAkB,CAAO;IAGzB,gBAAgB,CAAO;IAGvB,UAAU,CAAO;IAGjB,SAAS,CAAO;IAGhB,SAAS,CAAO;CACjB,CAAA;AAnCY,oCAAY;AAEvB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;wCACpB;AAIX;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,GAAE;;8CACQ;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;;0CACf;AAOb;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,kBAAkB,CAAC,MAAM;KACnC,CAAC;;4CACyB;AAG3B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;yDACX;AAG5B;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAC1B,IAAI;wDAAC;AAGzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAC5B,IAAI;sDAAC;AAGvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAClC,IAAI;gDAAC;AAGjB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;+CAAC;AAGhB;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;+CAAC;uBAlCL,YAAY;IADxB,IAAA,gBAAM,EAAC,eAAe,CAAC;GACX,YAAY,CAmCxB"} \ No newline at end of file diff --git a/apps/api/dist/billing/entities/transaction.entity.d.ts b/apps/api/dist/billing/entities/transaction.entity.d.ts new file mode 100644 index 0000000..cd1d03f --- /dev/null +++ b/apps/api/dist/billing/entities/transaction.entity.d.ts @@ -0,0 +1,23 @@ +export declare enum PaymentStatus { + PENDING = "PENDING", + SUCCESS = "SUCCESS", + FAILED = "FAILED", + REFUNDED = "REFUNDED" +} +export declare enum PaymentProvider { + PAYMOB = "PAYMOB", + BINANCE = "BINANCE", + MANUAL = "MANUAL" +} +export declare class Transaction { + id: string; + tenantId: string; + subscriptionId: string; + amount: number; + currency: string; + provider: PaymentProvider; + externalTransactionId: string; + status: PaymentStatus; + metadata: Record; + createdAt: Date; +} diff --git a/apps/api/dist/billing/entities/transaction.entity.js b/apps/api/dist/billing/entities/transaction.entity.js new file mode 100644 index 0000000..2a79e7b --- /dev/null +++ b/apps/api/dist/billing/entities/transaction.entity.js @@ -0,0 +1,92 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Transaction = exports.PaymentProvider = exports.PaymentStatus = void 0; +const typeorm_1 = require("typeorm"); +var PaymentStatus; +(function (PaymentStatus) { + PaymentStatus["PENDING"] = "PENDING"; + PaymentStatus["SUCCESS"] = "SUCCESS"; + PaymentStatus["FAILED"] = "FAILED"; + PaymentStatus["REFUNDED"] = "REFUNDED"; +})(PaymentStatus || (exports.PaymentStatus = PaymentStatus = {})); +var PaymentProvider; +(function (PaymentProvider) { + PaymentProvider["PAYMOB"] = "PAYMOB"; + PaymentProvider["BINANCE"] = "BINANCE"; + PaymentProvider["MANUAL"] = "MANUAL"; +})(PaymentProvider || (exports.PaymentProvider = PaymentProvider = {})); +let Transaction = class Transaction { + id; + tenantId; + subscriptionId; + amount; + currency; + provider; + externalTransactionId; + status; + metadata; + createdAt; +}; +exports.Transaction = Transaction; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), + __metadata("design:type", String) +], Transaction.prototype, "id", void 0); +__decorate([ + (0, typeorm_1.Index)(), + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], Transaction.prototype, "tenantId", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: true }), + __metadata("design:type", String) +], Transaction.prototype, "subscriptionId", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'decimal', precision: 10, scale: 2 }), + __metadata("design:type", Number) +], Transaction.prototype, "amount", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 'USD' }), + __metadata("design:type", String) +], Transaction.prototype, "currency", void 0); +__decorate([ + (0, typeorm_1.Column)({ + type: 'enum', + enum: PaymentProvider, + }), + __metadata("design:type", String) +], Transaction.prototype, "provider", void 0); +__decorate([ + (0, typeorm_1.Index)(), + (0, typeorm_1.Column)({ nullable: true }), + __metadata("design:type", String) +], Transaction.prototype, "externalTransactionId", void 0); +__decorate([ + (0, typeorm_1.Column)({ + type: 'enum', + enum: PaymentStatus, + default: PaymentStatus.PENDING, + }), + __metadata("design:type", String) +], Transaction.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }), + __metadata("design:type", Object) +], Transaction.prototype, "metadata", void 0); +__decorate([ + (0, typeorm_1.CreateDateColumn)(), + __metadata("design:type", Date) +], Transaction.prototype, "createdAt", void 0); +exports.Transaction = Transaction = __decorate([ + (0, typeorm_1.Entity)('transactions') +], Transaction); +//# sourceMappingURL=transaction.entity.js.map \ No newline at end of file diff --git a/apps/api/dist/billing/entities/transaction.entity.js.map b/apps/api/dist/billing/entities/transaction.entity.js.map new file mode 100644 index 0000000..f69010b --- /dev/null +++ b/apps/api/dist/billing/entities/transaction.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"transaction.entity.js","sourceRoot":"","sources":["../../../src/billing/entities/transaction.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAMiB;AAEjB,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,oCAAmB,CAAA;IACnB,kCAAiB,CAAA;IACjB,sCAAqB,CAAA;AACvB,CAAC,EALW,aAAa,6BAAb,aAAa,QAKxB;AAED,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;IACnB,oCAAiB,CAAA;AACnB,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B;AAGM,IAAM,WAAW,GAAjB,MAAM,WAAW;IAEtB,EAAE,CAAS;IAIX,QAAQ,CAAS;IAGjB,cAAc,CAAS;IAGvB,MAAM,CAAS;IAGf,QAAQ,CAAS;IAMjB,QAAQ,CAAkB;IAI1B,qBAAqB,CAAS;IAO9B,MAAM,CAAgB;IAGtB,QAAQ,CAAsB;IAG9B,SAAS,CAAO;CACjB,CAAA;AAvCY,kCAAW;AAEtB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;uCACpB;AAIX;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,GAAE;;6CACQ;AAGjB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACJ;AAGvB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;;2CACtC;AAGf;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;;6CACV;AAMjB;IAJC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,eAAe;KACtB,CAAC;;6CACwB;AAI1B;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;0DACG;AAO9B;IALC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,aAAa,CAAC,OAAO;KAC/B,CAAC;;2CACoB;AAGtB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CACZ;AAG9B;IADC,IAAA,0BAAgB,GAAE;8BACR,IAAI;8CAAC;sBAtCL,WAAW;IADvB,IAAA,gBAAM,EAAC,cAAc,CAAC;GACV,WAAW,CAuCvB"} \ No newline at end of file diff --git a/apps/api/dist/billing/providers/binance.provider.d.ts b/apps/api/dist/billing/providers/binance.provider.d.ts new file mode 100644 index 0000000..6ad495a --- /dev/null +++ b/apps/api/dist/billing/providers/binance.provider.d.ts @@ -0,0 +1,16 @@ +import { ConfigService } from '@nestjs/config'; +export declare class BinanceProvider { + private configService; + private readonly logger; + private readonly apiUrl; + constructor(configService: ConfigService); + private get apiKey(); + private get secretKey(); + private generateSignature; + createOrder(tenantId: string, amount: number, plan: string): Promise<{ + checkoutUrl: any; + orderId: string; + prepayId: any; + }>; + verifySignature(timestamp: string, nonce: string, signature: string, payloadBody: any): boolean; +} diff --git a/apps/api/dist/billing/providers/binance.provider.js b/apps/api/dist/billing/providers/binance.provider.js new file mode 100644 index 0000000..ebbcb2b --- /dev/null +++ b/apps/api/dist/billing/providers/binance.provider.js @@ -0,0 +1,150 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var BinanceProvider_1; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.BinanceProvider = void 0; +const common_1 = require("@nestjs/common"); +const config_1 = require("@nestjs/config"); +const axios_1 = __importDefault(require("axios")); +const crypto = __importStar(require("crypto")); +let BinanceProvider = BinanceProvider_1 = class BinanceProvider { + configService; + logger = new common_1.Logger(BinanceProvider_1.name); + apiUrl = 'https://bpay.binanceapi.com/binancepay/openapi/v2/order'; + constructor(configService) { + this.configService = configService; + } + get apiKey() { + return this.configService.get('BINANCE_PAY_API_KEY') || ''; + } + get secretKey() { + return this.configService.get('BINANCE_PAY_SECRET_KEY') || ''; + } + generateSignature(timestamp, nonce, body) { + const payload = timestamp + '\n' + nonce + '\n' + JSON.stringify(body) + '\n'; + return crypto + .createHmac('sha512', this.secretKey) + .update(payload) + .digest('hex') + .toUpperCase(); + } + async createOrder(tenantId, amount, plan) { + this.logger.log(`Creating Binance Pay order for ${tenantId} - ${plan}`); + if (!this.apiKey || !this.secretKey) { + this.logger.error('Binance Pay API keys are not configured'); + throw new common_1.InternalServerErrorException('Payment provider is not configured properly'); + } + const nonce = crypto.randomBytes(16).toString('hex'); + const timestamp = Date.now().toString(); + const merchantTradeNo = `txn_${Date.now()}_${Math.floor(Math.random() * 10000)}`; + const body = { + env: { + terminalType: 'WEB', + }, + merchantTradeNo: merchantTradeNo, + orderAmount: amount, + currency: 'USDT', + goods: { + goodsType: '01', + goodsCategory: 'Z000', + referenceGoodsId: plan, + goodsName: `${plan} Plan Subscription`, + goodsDetail: `Subscription to ${plan} plan for Maps SaaS`, + }, + passThroughInfo: JSON.stringify({ tenantId, plan }), + returnUrl: `https://map-dashboard.intaleqapp.com/dashboard.html#billing`, + }; + const signature = this.generateSignature(timestamp, nonce, body); + try { + const response = await axios_1.default.post(this.apiUrl, body, { + headers: { + 'Content-Type': 'application/json', + 'BinancePay-Timestamp': timestamp, + 'BinancePay-Nonce': nonce, + 'BinancePay-Certificate-SN': this.apiKey, + 'BinancePay-Signature': signature, + }, + }); + if (response.data && response.data.status === 'SUCCESS') { + return { + checkoutUrl: response.data.data.checkoutUrl, + orderId: merchantTradeNo, + prepayId: response.data.data.prepayId, + }; + } + else { + this.logger.error(`Binance API Error: ${JSON.stringify(response.data)}`); + throw new common_1.InternalServerErrorException('Failed to create Binance order'); + } + } + catch (error) { + this.logger.error(`Error communicating with Binance API: ${error.message}`); + throw new common_1.InternalServerErrorException('Failed to communicate with payment provider'); + } + } + verifySignature(timestamp, nonce, signature, payloadBody) { + const payload = timestamp + '\n' + nonce + '\n' + JSON.stringify(payloadBody) + '\n'; + const expectedSignature = crypto + .createHmac('sha512', this.secretKey) + .update(payload) + .digest('hex') + .toUpperCase(); + try { + return crypto.timingSafeEqual(Buffer.from(signature || ''), Buffer.from(expectedSignature)); + } + catch (e) { + return false; + } + } +}; +exports.BinanceProvider = BinanceProvider; +exports.BinanceProvider = BinanceProvider = BinanceProvider_1 = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof config_1.ConfigService !== "undefined" && config_1.ConfigService) === "function" ? _a : Object]) +], BinanceProvider); +//# sourceMappingURL=binance.provider.js.map \ No newline at end of file diff --git a/apps/api/dist/billing/providers/binance.provider.js.map b/apps/api/dist/billing/providers/binance.provider.js.map new file mode 100644 index 0000000..ae1344a --- /dev/null +++ b/apps/api/dist/billing/providers/binance.provider.js.map @@ -0,0 +1 @@ +{"version":3,"file":"binance.provider.js","sourceRoot":"","sources":["../../../src/billing/providers/binance.provider.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/billing/providers/paymob.provider.d.ts b/apps/api/dist/billing/providers/paymob.provider.d.ts new file mode 100644 index 0000000..78137a5 --- /dev/null +++ b/apps/api/dist/billing/providers/paymob.provider.d.ts @@ -0,0 +1,14 @@ +import { ConfigService } from '@nestjs/config'; +export declare class PayMobProvider { + private configService; + private readonly logger; + private readonly baseUrl; + constructor(configService: ConfigService); + createPaymentKey(tenantId: string, amount: number, plan: string): Promise<{ + paymentKey: string; + orderId: string; + }>; + getTransactionDetails(transactionId: string): Promise; + private getAuthToken; + verifyHmac(payload: any, hmac: string): boolean; +} diff --git a/apps/api/dist/billing/providers/paymob.provider.js b/apps/api/dist/billing/providers/paymob.provider.js new file mode 100644 index 0000000..7853377 --- /dev/null +++ b/apps/api/dist/billing/providers/paymob.provider.js @@ -0,0 +1,179 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +var PayMobProvider_1; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.PayMobProvider = void 0; +const common_1 = require("@nestjs/common"); +const config_1 = require("@nestjs/config"); +const axios_1 = __importDefault(require("axios")); +const crypto = __importStar(require("crypto")); +let PayMobProvider = PayMobProvider_1 = class PayMobProvider { + configService; + logger = new common_1.Logger(PayMobProvider_1.name); + baseUrl = 'https://accept.paymob.com/api'; + constructor(configService) { + this.configService = configService; + } + async createPaymentKey(tenantId, amount, plan) { + try { + const authToken = await this.getAuthToken(); + const orderRes = await axios_1.default.post(`${this.baseUrl}/ecommerce/orders`, { + auth_token: authToken, + delivery_needed: "false", + amount_cents: amount * 50 * 100, + currency: "EGP", + items: [{ + name: `${plan} Subscription`, + amount_cents: amount * 50 * 100, + description: `Intaleq Maps ${plan} Plan` + }], + shipping_data: { + first_name: "Intaleq", + last_name: "User", + email: "user@intaleq.com", + phone_number: "+201000000000", + extra_description: `${tenantId}|${plan}` + } + }); + const orderId = orderRes.data.id; + const keyRes = await axios_1.default.post(`${this.baseUrl}/acceptance/payment_keys`, { + auth_token: authToken, + amount_cents: amount * 50 * 100, + expiration: 3600, + order_id: orderId, + billing_data: { + apartment: "NA", + email: "user@intaleq.com", + floor: "NA", + first_name: "Intaleq", + street: "NA", + building: "NA", + phone_number: "+201000000000", + shipping_method: "NA", + postal_code: "NA", + city: "NA", + country: "NA", + last_name: "User", + state: "NA" + }, + currency: "EGP", + integration_id: this.configService.get('PAYMOB_INTEGRATION_ID') || 4556055, + lock_order_when_paid: "false" + }); + return { + paymentKey: keyRes.data.token, + orderId: orderId.toString() + }; + } + catch (error) { + this.logger.error(`PayMob Payment Key failed: ${error.response?.data ? JSON.stringify(error.response.data) : error.message}`); + throw new common_1.BadRequestException('Failed to initialize PayMob payment'); + } + } + async getTransactionDetails(transactionId) { + try { + const authToken = await this.getAuthToken(); + const res = await axios_1.default.get(`${this.baseUrl}/acceptance/transactions/${transactionId}`, { + headers: { Authorization: `Bearer ${authToken}` } + }); + return res.data; + } + catch (error) { + this.logger.error(`Failed to fetch PayMob transaction ${transactionId}: ${error.message}`); + return null; + } + } + async getAuthToken() { + const authRes = await axios_1.default.post(`${this.baseUrl}/auth/tokens`, { + api_key: this.configService.get('PAYMOB_API_KEY'), + }); + return authRes.data.token; + } + verifyHmac(payload, hmac) { + const secret = this.configService.get('PAYMOB_HMAC_SECRET'); + if (!secret) + return false; + const { amount_cents, created_at, currency, error_occured, has_parent_transaction, id, integration_id, is_3d_secure, is_auth, is_capture, is_refunded, is_standalone_payment, is_voided, order, owner, pending, success } = payload; + const source_pan = payload.source_data?.pan || ""; + const source_sub_type = payload.source_data?.sub_type || ""; + const source_type = payload.source_data?.type || ""; + const data = [ + amount_cents, + created_at, + currency, + error_occured, + has_parent_transaction, + id, + integration_id, + is_3d_secure, + is_auth, + is_capture, + is_refunded, + is_standalone_payment, + is_voided, + order.id || order, + owner, + pending, + source_pan, + source_sub_type, + source_type, + success + ].join(""); + const hash = crypto + .createHmac('sha512', secret) + .update(data) + .digest('hex'); + return hash === hmac; + } +}; +exports.PayMobProvider = PayMobProvider; +exports.PayMobProvider = PayMobProvider = PayMobProvider_1 = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof config_1.ConfigService !== "undefined" && config_1.ConfigService) === "function" ? _a : Object]) +], PayMobProvider); +//# sourceMappingURL=paymob.provider.js.map \ No newline at end of file diff --git a/apps/api/dist/billing/providers/paymob.provider.js.map b/apps/api/dist/billing/providers/paymob.provider.js.map new file mode 100644 index 0000000..e5d3214 --- /dev/null +++ b/apps/api/dist/billing/providers/paymob.provider.js.map @@ -0,0 +1 @@ +{"version":3,"file":"paymob.provider.js","sourceRoot":"","sources":["../../../src/billing/providers/paymob.provider.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/common/cache.service.js b/apps/api/dist/common/cache.service.js index a4fc48f..bf24b3d 100644 --- a/apps/api/dist/common/cache.service.js +++ b/apps/api/dist/common/cache.service.js @@ -8,6 +8,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; +var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.CacheService = void 0; const common_1 = require("@nestjs/common"); @@ -38,6 +39,6 @@ let CacheService = class CacheService { exports.CacheService = CacheService; exports.CacheService = CacheService = __decorate([ (0, common_1.Injectable)(), - __metadata("design:paramtypes", [config_1.ConfigService]) + __metadata("design:paramtypes", [typeof (_a = typeof config_1.ConfigService !== "undefined" && config_1.ConfigService) === "function" ? _a : Object]) ], CacheService); //# sourceMappingURL=cache.service.js.map \ No newline at end of file diff --git a/apps/api/dist/common/cache.service.js.map b/apps/api/dist/common/cache.service.js.map index ceabc9b..84cf171 100644 --- a/apps/api/dist/common/cache.service.js.map +++ b/apps/api/dist/common/cache.service.js.map @@ -1 +1 @@ -{"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../src/common/cache.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAoD;AACpD,iCAAqC;AACrC,2CAA+C;AAGxC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAGH;IAFZ,MAAM,CAAC;IAEf,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,GAAG,IAAA,oBAAY,EAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,aAAqB,IAAI;QAG1D,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAChD,EAAE,EAAE,UAAU;SACf,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QAGnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF,CAAA;AA3BY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAIwB,sBAAa;GAHrC,YAAY,CA2BxB"} \ No newline at end of file +{"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../src/common/cache.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAAoD;AACpD,iCAAqC;AACrC,2CAA+C;AAGxC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAGH;IAFZ,MAAM,CAAC;IAEf,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;QAC3E,IAAI,CAAC,MAAM,GAAG,IAAA,oBAAY,EAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,aAAqB,IAAI;QAG1D,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAChD,EAAE,EAAE,UAAU;SACf,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QAGnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF,CAAA;AA3BY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;yDAIwB,sBAAa,oBAAb,sBAAa;GAHrC,YAAY,CA2BxB"} \ No newline at end of file diff --git a/apps/api/dist/common/guards/admin.guard.d.ts b/apps/api/dist/common/guards/admin.guard.d.ts new file mode 100644 index 0000000..27701a2 --- /dev/null +++ b/apps/api/dist/common/guards/admin.guard.d.ts @@ -0,0 +1,4 @@ +import { CanActivate, ExecutionContext } from '@nestjs/common'; +export declare class AdminGuard implements CanActivate { + canActivate(context: ExecutionContext): boolean; +} diff --git a/apps/api/dist/common/guards/admin.guard.js b/apps/api/dist/common/guards/admin.guard.js new file mode 100644 index 0000000..1db5e0b --- /dev/null +++ b/apps/api/dist/common/guards/admin.guard.js @@ -0,0 +1,29 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AdminGuard = void 0; +const common_1 = require("@nestjs/common"); +const tenant_entity_1 = require("../../auth/entities/tenant.entity"); +let AdminGuard = class AdminGuard { + canActivate(context) { + const request = context.switchToHttp().getRequest(); + const tenant = request['tenant']; + if (!tenant) { + throw new common_1.UnauthorizedException('Tenant not found in request'); + } + if (tenant.plan !== tenant_entity_1.TenantPlan.ENTERPRISE) { + throw new common_1.ForbiddenException('Admin access required. Your tenant plan must be ENTERPRISE.'); + } + return true; + } +}; +exports.AdminGuard = AdminGuard; +exports.AdminGuard = AdminGuard = __decorate([ + (0, common_1.Injectable)() +], AdminGuard); +//# sourceMappingURL=admin.guard.js.map \ No newline at end of file diff --git a/apps/api/dist/common/guards/admin.guard.js.map b/apps/api/dist/common/guards/admin.guard.js.map new file mode 100644 index 0000000..8e81aab --- /dev/null +++ b/apps/api/dist/common/guards/admin.guard.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admin.guard.js","sourceRoot":"","sources":["../../../src/common/guards/admin.guard.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAsH;AACtH,qEAA+D;AAGxD,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,WAAW,CAAC,OAAyB;QACnC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,8BAAqB,CAAC,6BAA6B,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,0BAAU,CAAC,UAAU,EAAE,CAAC;YAC1C,MAAM,IAAI,2BAAkB,CAAC,6DAA6D,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAfY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;GACA,UAAU,CAetB"} \ No newline at end of file diff --git a/apps/api/dist/common/guards/rate-limiter.guard.d.ts b/apps/api/dist/common/guards/rate-limiter.guard.d.ts index 0a0384a..86705ea 100644 --- a/apps/api/dist/common/guards/rate-limiter.guard.d.ts +++ b/apps/api/dist/common/guards/rate-limiter.guard.d.ts @@ -1,5 +1,6 @@ import { ThrottlerGuard, ThrottlerRequest } from '@nestjs/throttler'; export declare class TenantThrottlerGuard extends ThrottlerGuard { + private readonly logger; protected getTracker(req: Record): Promise; protected handleRequest(requestProps: ThrottlerRequest): Promise; } diff --git a/apps/api/dist/common/guards/rate-limiter.guard.js b/apps/api/dist/common/guards/rate-limiter.guard.js index d567d2a..87a103d 100644 --- a/apps/api/dist/common/guards/rate-limiter.guard.js +++ b/apps/api/dist/common/guards/rate-limiter.guard.js @@ -5,25 +5,33 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key, else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; +var TenantThrottlerGuard_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.TenantThrottlerGuard = void 0; const common_1 = require("@nestjs/common"); const throttler_1 = require("@nestjs/throttler"); -let TenantThrottlerGuard = class TenantThrottlerGuard extends throttler_1.ThrottlerGuard { +let TenantThrottlerGuard = TenantThrottlerGuard_1 = class TenantThrottlerGuard extends throttler_1.ThrottlerGuard { + logger = new common_1.Logger(TenantThrottlerGuard_1.name); async getTracker(req) { const apiKeyId = req['apiKey']?.id || req.ip; return `throttler:key:${apiKeyId}`; } async handleRequest(requestProps) { - const { context, limit } = requestProps; + const { context, limit, ttl } = requestProps; const request = context.switchToHttp().getRequest(); - const dynamicLimit = request['rateLimit'] || limit; - requestProps.limit = dynamicLimit; + const dynamicLimit = request['rateLimit']; + if (dynamicLimit) { + this.logger.debug(`Applying dynamic rate limit: ${dynamicLimit} req/min for key ${request['apiKey']?.id}`); + requestProps.limit = dynamicLimit; + } + else { + this.logger.debug(`Applying default rate limit: ${limit} req/min`); + } return super.handleRequest(requestProps); } }; exports.TenantThrottlerGuard = TenantThrottlerGuard; -exports.TenantThrottlerGuard = TenantThrottlerGuard = __decorate([ +exports.TenantThrottlerGuard = TenantThrottlerGuard = TenantThrottlerGuard_1 = __decorate([ (0, common_1.Injectable)() ], TenantThrottlerGuard); //# sourceMappingURL=rate-limiter.guard.js.map \ No newline at end of file diff --git a/apps/api/dist/common/guards/rate-limiter.guard.js.map b/apps/api/dist/common/guards/rate-limiter.guard.js.map index 62a77b4..3610eeb 100644 --- a/apps/api/dist/common/guards/rate-limiter.guard.js.map +++ b/apps/api/dist/common/guards/rate-limiter.guard.js.map @@ -1 +1 @@ -{"version":3,"file":"rate-limiter.guard.js","sourceRoot":"","sources":["../../../src/common/guards/rate-limiter.guard.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA8D;AAC9D,iDAAqE;AAG9D,IAAM,oBAAoB,GAA1B,MAAM,oBAAqB,SAAQ,0BAAc;IAK5C,KAAK,CAAC,UAAU,CAAC,GAAwB;QAEjD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,iBAAiB,QAAQ,EAAE,CAAC;IACrC,CAAC;IAKS,KAAK,CAAC,aAAa,CAC3B,YAA8B;QAE9B,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,YAAY,CAAC;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAGpD,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;QAGnD,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC;QAGlC,OAAO,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;CACF,CAAA;AA7BY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;GACA,oBAAoB,CA6BhC"} \ No newline at end of file +{"version":3,"file":"rate-limiter.guard.js","sourceRoot":"","sources":["../../../src/common/guards/rate-limiter.guard.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAsE;AACtE,iDAAqE;AAG9D,IAAM,oBAAoB,4BAA1B,MAAM,oBAAqB,SAAQ,0BAAc;IACrC,MAAM,GAAG,IAAI,eAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;IAEtD,KAAK,CAAC,UAAU,CAAC,GAAwB;QACjD,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;QAC7C,OAAO,iBAAiB,QAAQ,EAAE,CAAC;IACrC,CAAC;IAES,KAAK,CAAC,aAAa,CAC3B,YAA8B;QAE9B,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAGpD,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QAE1C,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,YAAY,oBAAoB,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3G,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,KAAK,UAAU,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;CACF,CAAA;AA1BY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;GACA,oBAAoB,CA0BhC"} \ No newline at end of file diff --git a/apps/api/dist/common/mail.module.d.ts b/apps/api/dist/common/mail.module.d.ts new file mode 100644 index 0000000..c6b47fe --- /dev/null +++ b/apps/api/dist/common/mail.module.d.ts @@ -0,0 +1,2 @@ +export declare class MailModule { +} diff --git a/apps/api/dist/common/mail.module.js b/apps/api/dist/common/mail.module.js new file mode 100644 index 0000000..b008ea5 --- /dev/null +++ b/apps/api/dist/common/mail.module.js @@ -0,0 +1,22 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MailModule = void 0; +const common_1 = require("@nestjs/common"); +const mail_service_1 = require("./mail.service"); +let MailModule = class MailModule { +}; +exports.MailModule = MailModule; +exports.MailModule = MailModule = __decorate([ + (0, common_1.Global)(), + (0, common_1.Module)({ + providers: [mail_service_1.MailService], + exports: [mail_service_1.MailService], + }) +], MailModule); +//# sourceMappingURL=mail.module.js.map \ No newline at end of file diff --git a/apps/api/dist/common/mail.module.js.map b/apps/api/dist/common/mail.module.js.map new file mode 100644 index 0000000..0035296 --- /dev/null +++ b/apps/api/dist/common/mail.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mail.module.js","sourceRoot":"","sources":["../../src/common/mail.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,iDAA6C;AAOtC,IAAM,UAAU,GAAhB,MAAM,UAAU;CAAG,CAAA;AAAb,gCAAU;qBAAV,UAAU;IALtB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,0BAAW,CAAC;QACxB,OAAO,EAAE,CAAC,0BAAW,CAAC;KACvB,CAAC;GACW,UAAU,CAAG"} \ No newline at end of file diff --git a/apps/api/dist/common/mail.service.d.ts b/apps/api/dist/common/mail.service.d.ts new file mode 100644 index 0000000..6689808 --- /dev/null +++ b/apps/api/dist/common/mail.service.d.ts @@ -0,0 +1,13 @@ +import { ConfigService } from '@nestjs/config'; +export declare class MailService { + private configService; + private readonly logger; + private transporter; + constructor(configService: ConfigService); + sendInvoiceEmail(to: string, data: { + tenantName: string; + plan: string; + amount: string; + transactionId: string; + }): Promise; +} diff --git a/apps/api/dist/common/mail.service.js b/apps/api/dist/common/mail.service.js new file mode 100644 index 0000000..9063a13 --- /dev/null +++ b/apps/api/dist/common/mail.service.js @@ -0,0 +1,122 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var MailService_1; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MailService = void 0; +const common_1 = require("@nestjs/common"); +const config_1 = require("@nestjs/config"); +const nodemailer = __importStar(require("nodemailer")); +let MailService = MailService_1 = class MailService { + configService; + logger = new common_1.Logger(MailService_1.name); + transporter; + constructor(configService) { + this.configService = configService; + const host = this.configService.get('SMTP_HOST'); + const port = this.configService.get('SMTP_PORT') || 587; + const user = this.configService.get('SMTP_USER'); + const pass = this.configService.get('SMTP_PASS'); + if (host && user && pass) { + this.transporter = nodemailer.createTransport({ + host, + port, + secure: port === 465, + auth: { + user, + pass, + }, + }); + this.logger.log(`📧 MailService initialized with host: ${host}`); + } + else { + this.logger.warn('⚠️ SMTP settings not fully configured. MailService will run in mock mode.'); + } + } + async sendInvoiceEmail(to, data) { + const from = this.configService.get('SMTP_FROM') || 'support@intaleqapp.com'; + const htmlContent = ` +
+

Intaleq Maps - Payment Successful

+

Hello ${data.tenantName},

+

Thank you for subscribing to our ${data.plan} plan. Your payment has been processed successfully.

+ +
+

Plan: ${data.plan}

+

Amount: ${data.amount}

+

Transaction ID: ${data.transactionId}

+

Date: ${new Date().toLocaleDateString()}

+
+ +

You can now access all your premium features from your dashboard.

+
+

If you have any questions, contact us at ${from}

+
+ `; + if (!this.transporter) { + this.logger.warn(`[Mock Email] To: ${to}, Plan: ${data.plan}, Amount: ${data.amount}`); + return true; + } + try { + await this.transporter.sendMail({ + from: `"Intaleq Support" <${from}>`, + to, + subject: `Invoice: ${data.plan} Subscription - Intaleq Maps`, + html: htmlContent, + }); + this.logger.log(`✅ Invoice email sent to ${to}`); + return true; + } + catch (error) { + this.logger.error(`❌ Failed to send email: ${error.message}`); + return false; + } + } +}; +exports.MailService = MailService; +exports.MailService = MailService = MailService_1 = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [typeof (_a = typeof config_1.ConfigService !== "undefined" && config_1.ConfigService) === "function" ? _a : Object]) +], MailService); +//# sourceMappingURL=mail.service.js.map \ No newline at end of file diff --git a/apps/api/dist/common/mail.service.js.map b/apps/api/dist/common/mail.service.js.map new file mode 100644 index 0000000..2d7e548 --- /dev/null +++ b/apps/api/dist/common/mail.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mail.service.js","sourceRoot":"","sources":["../../src/common/mail.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2CAA+C;AAC/C,uDAAyC;AAGlC,IAAM,WAAW,mBAAjB,MAAM,WAAW;IAIF;IAHH,MAAM,GAAG,IAAI,eAAM,CAAC,aAAW,CAAC,IAAI,CAAC,CAAC;IAC/C,WAAW,CAAyB;IAE5C,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,WAAW,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,WAAW,CAAC,IAAI,GAAG,CAAC;QAChE,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,WAAW,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,WAAW,CAAC,CAAC;QAEzD,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,eAAe,CAAC;gBAC5C,IAAI;gBACJ,IAAI;gBACJ,MAAM,EAAE,IAAI,KAAK,GAAG;gBACpB,IAAI,EAAE;oBACJ,IAAI;oBACJ,IAAI;iBACL;aACF,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yCAAyC,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,EAAU,EAAE,IAKlC;QACC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,WAAW,CAAC,IAAI,wBAAwB,CAAC;QAErF,MAAM,WAAW,GAAG;;;sBAGF,IAAI,CAAC,UAAU;iDACY,IAAI,CAAC,IAAI;;;mDAGP,IAAI,CAAC,IAAI;qDACP,IAAI,CAAC,MAAM;6DACH,IAAI,CAAC,aAAa;mDAC5B,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE;;;;;+FAKa,IAAI;;KAE9F,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,WAAW,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACvF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAC9B,IAAI,EAAE,sBAAsB,IAAI,GAAG;gBACnC,EAAE;gBACF,OAAO,EAAE,YAAY,IAAI,CAAC,IAAI,8BAA8B;gBAC5D,IAAI,EAAE,WAAW;aAClB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF,CAAA;AAxEY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;yDAKwB,sBAAa,oBAAb,sBAAa;GAJrC,WAAW,CAwEvB"} \ No newline at end of file diff --git a/apps/api/dist/common/redis.service.d.ts b/apps/api/dist/common/redis.service.d.ts index fab8831..be4c9a4 100644 --- a/apps/api/dist/common/redis.service.d.ts +++ b/apps/api/dist/common/redis.service.d.ts @@ -3,6 +3,7 @@ import type { RedisClientType } from 'redis'; export declare class RedisService implements OnModuleDestroy { private readonly redisClient; constructor(redisClient: RedisClientType); + getClient(): RedisClientType; set(key: string, value: any, ttlSeconds?: number): Promise; get(key: string): Promise; del(key: string): Promise; diff --git a/apps/api/dist/common/redis.service.js b/apps/api/dist/common/redis.service.js index 9b4f7be..a6a08e2 100644 --- a/apps/api/dist/common/redis.service.js +++ b/apps/api/dist/common/redis.service.js @@ -19,6 +19,9 @@ let RedisService = class RedisService { constructor(redisClient) { this.redisClient = redisClient; } + getClient() { + return this.redisClient; + } async set(key, value, ttlSeconds) { const stringValue = typeof value === 'string' ? value : JSON.stringify(value); if (ttlSeconds) { diff --git a/apps/api/dist/common/redis.service.js.map b/apps/api/dist/common/redis.service.js.map index ce9b923..b54670c 100644 --- a/apps/api/dist/common/redis.service.js.map +++ b/apps/api/dist/common/redis.service.js.map @@ -1 +1 @@ -{"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../src/common/redis.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAqE;AAS9D,IAAM,YAAY,GAAlB,MAAM,YAAY;IAEoB;IAD3C,YAC2C,WAA4B;QAA5B,gBAAW,GAAX,WAAW,CAAiB;IACpE,CAAC;IAMJ,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,UAAmB;QACpD,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9E,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAMD,KAAK,CAAC,GAAG,CAAI,GAAW;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAqB,CAAC;QAC/B,CAAC;IACH,CAAC;IAMD,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;CACF,CAAA;AA5CY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,cAAc,CAAC,CAAA;;GAFd,YAAY,CA4CxB"} \ No newline at end of file +{"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../src/common/redis.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAqE;AAS9D,IAAM,YAAY,GAAlB,MAAM,YAAY;IAEoB;IAD3C,YAC2C,WAA4B;QAA5B,gBAAW,GAAX,WAAW,CAAiB;IACpE,CAAC;IAKJ,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAMD,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,UAAmB;QACpD,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9E,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;QACnE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAMD,KAAK,CAAC,GAAG,CAAI,GAAW;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAqB,CAAC;QAC/B,CAAC;IACH,CAAC;IAMD,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IAChC,CAAC;CACF,CAAA;AAnDY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,cAAc,CAAC,CAAA;;GAFd,YAAY,CAmDxB"} \ No newline at end of file diff --git a/apps/api/dist/common/telegram.service.js b/apps/api/dist/common/telegram.service.js index 31a6248..c4b34f3 100644 --- a/apps/api/dist/common/telegram.service.js +++ b/apps/api/dist/common/telegram.service.js @@ -12,6 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var TelegramService_1; +var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.TelegramService = void 0; const common_1 = require("@nestjs/common"); @@ -70,6 +71,6 @@ let TelegramService = TelegramService_1 = class TelegramService { exports.TelegramService = TelegramService; exports.TelegramService = TelegramService = TelegramService_1 = __decorate([ (0, common_1.Injectable)(), - __metadata("design:paramtypes", [config_1.ConfigService]) + __metadata("design:paramtypes", [typeof (_a = typeof config_1.ConfigService !== "undefined" && config_1.ConfigService) === "function" ? _a : Object]) ], TelegramService); //# sourceMappingURL=telegram.service.js.map \ No newline at end of file diff --git a/apps/api/dist/common/telegram.service.js.map b/apps/api/dist/common/telegram.service.js.map index e8626b4..678564d 100644 --- a/apps/api/dist/common/telegram.service.js.map +++ b/apps/api/dist/common/telegram.service.js.map @@ -1 +1 @@ -{"version":3,"file":"telegram.service.js","sourceRoot":"","sources":["../../src/common/telegram.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2CAA+C;AAC/C,kDAA0B;AAGnB,IAAM,eAAe,uBAArB,MAAM,eAAe;IAKN;IAJH,MAAM,GAAG,IAAI,eAAM,CAAC,iBAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,CAAS;IACjB,MAAM,CAAS;IAEhC,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAC3E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACzE,CAAC;IAMD,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;YACzF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,+BAA+B,IAAI,CAAC,QAAQ,cAAc,CAAC;YACvE,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBACpB,OAAO,EAAE,IAAI,CAAC,MAAM;gBACpB,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE,MAAM;aACnB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,QAAQ,CAAC,MAAM,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtG,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,sBAAsB,CAAC,KAO5B;QACC,MAAM,OAAO,GAAG;;;yBAGK,KAAK,CAAC,IAAI;6BACN,KAAK,CAAC,UAAU;4BACjB,KAAK,CAAC,eAAe;4BACrB,KAAK,CAAC,eAAe;2BACtB,KAAK,CAAC,YAAY,IAAI,CAAC;4BACtB,KAAK,CAAC,WAAW;;;KAGxC,CAAC;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AAhEY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;qCAMwB,sBAAa;GALrC,eAAe,CAgE3B"} \ No newline at end of file +{"version":3,"file":"telegram.service.js","sourceRoot":"","sources":["../../src/common/telegram.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,2CAA+C;AAC/C,kDAA0B;AAGnB,IAAM,eAAe,uBAArB,MAAM,eAAe;IAKN;IAJH,MAAM,GAAG,IAAI,eAAM,CAAC,iBAAe,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,CAAS;IACjB,MAAM,CAAS;IAEhC,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,oBAAoB,CAAC,IAAI,EAAE,CAAC;QAC3E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,kBAAkB,CAAC,IAAI,EAAE,CAAC;IACzE,CAAC;IAMD,KAAK,CAAC,WAAW,CAAC,IAAY;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC/E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;YACzF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YACjD,MAAM,GAAG,GAAG,+BAA+B,IAAI,CAAC,QAAQ,cAAc,CAAC;YACvE,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,EAAE;gBACpB,OAAO,EAAE,IAAI,CAAC,MAAM;gBACpB,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE,MAAM;aACnB,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,CAAC,QAAQ,CAAC,MAAM,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtG,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,sBAAsB,CAAC,KAO5B;QACC,MAAM,OAAO,GAAG;;;yBAGK,KAAK,CAAC,IAAI;6BACN,KAAK,CAAC,UAAU;4BACjB,KAAK,CAAC,eAAe;4BACrB,KAAK,CAAC,eAAe;2BACtB,KAAK,CAAC,YAAY,IAAI,CAAC;4BACtB,KAAK,CAAC,WAAW;;;KAGxC,CAAC;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AAhEY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;yDAMwB,sBAAa,oBAAb,sBAAa;GALrC,eAAe,CAgE3B"} \ No newline at end of file diff --git a/apps/api/dist/geocoding/admin-boundaries.service.js b/apps/api/dist/geocoding/admin-boundaries.service.js index 96949b9..9db3856 100644 --- a/apps/api/dist/geocoding/admin-boundaries.service.js +++ b/apps/api/dist/geocoding/admin-boundaries.service.js @@ -12,6 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var AdminBoundariesService_1; +var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.AdminBoundariesService = void 0; const common_1 = require("@nestjs/common"); @@ -132,6 +133,6 @@ exports.AdminBoundariesService = AdminBoundariesService; exports.AdminBoundariesService = AdminBoundariesService = AdminBoundariesService_1 = __decorate([ (0, common_1.Injectable)(), __param(0, (0, typeorm_1.InjectRepository)(admin_boundary_entity_1.AdminBoundary)), - __metadata("design:paramtypes", [typeorm_2.Repository]) + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object]) ], AdminBoundariesService); //# sourceMappingURL=admin-boundaries.service.js.map \ No newline at end of file diff --git a/apps/api/dist/geocoding/admin-boundaries.service.js.map b/apps/api/dist/geocoding/admin-boundaries.service.js.map index c31bf24..46a93a3 100644 --- a/apps/api/dist/geocoding/admin-boundaries.service.js.map +++ b/apps/api/dist/geocoding/admin-boundaries.service.js.map @@ -1 +1 @@ -{"version":3,"file":"admin-boundaries.service.js","sourceRoot":"","sources":["../../src/geocoding/admin-boundaries.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"admin-boundaries.service.js","sourceRoot":"","sources":["../../src/geocoding/admin-boundaries.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,6CAAmD;AACnD,qCAAqC;AACrC,4EAAiE;AAG1D,IAAM,sBAAsB,8BAA5B,MAAM,sBAAsB;IAKvB;IAJO,MAAM,GAAG,IAAI,eAAM,CAAC,wBAAsB,CAAC,IAAI,CAAC,CAAC;IAElE,YAEU,iBAA4C;QAA5C,sBAAiB,GAAjB,iBAAiB,CAA2B;IACnD,CAAC;IAMJ,KAAK,CAAC,aAAa,CACjB,iBAAyB,EACzB,OAAY;QAEZ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kCAAkC,iBAAiB,KAAK,CAAC,CAAC;QAE1E,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAC5C,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;gBACvC,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,iBAAiB,CAAC;gBAG7D,IAAI,iBAAiB,IAAI,WAAW,IAAI,WAAW,CAAC,WAAW,EAAE,KAAK,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC;oBACpG,OAAO,EAAE,CAAC;oBACV,SAAS;gBACb,CAAC;gBAID,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;gBACpD,IAAI,UAAkB,CAAC;gBAEvB,QAAQ,OAAO,EAAE,CAAC;oBAChB,KAAK,SAAS;wBAAE,UAAU,GAAG,CAAC,CAAC;wBAAC,MAAM;oBACtC,KAAK,QAAQ;wBAAE,UAAU,GAAG,CAAC,CAAC;wBAAC,MAAM;oBACrC,KAAK,QAAQ;wBAAE,UAAU,GAAG,CAAC,CAAC;wBAAC,MAAM;oBACrC,KAAK,YAAY;wBAAE,UAAU,GAAG,CAAC,CAAC;wBAAC,MAAM;oBACzC,KAAK,UAAU;wBAAE,UAAU,GAAG,CAAC,CAAC;wBAAC,MAAM;oBACvC,KAAK,cAAc;wBAAE,UAAU,GAAG,EAAE,CAAC;wBAAC,MAAM;oBAC5C,KAAK,WAAW;wBAAE,UAAU,GAAG,CAAC,CAAC;wBAAC,MAAM;oBACxC,KAAK,WAAW;wBAAE,UAAU,GAAG,EAAE,CAAC;wBAAC,MAAM;oBACzC;wBACE,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBACrE,CAAC;gBAED,IAAI,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;oBACtB,OAAO,EAAE,CAAC;oBACV,SAAS;gBACX,CAAC;gBAGD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC9G,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;gBAG1D,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAE9F,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1G,IAAI,CAAC,aAAa,EAAE,CAAC;wBACjB,OAAO,EAAE,CAAC;wBACV,SAAS;oBACb,CAAC;gBACL,CAAC;gBAED,IAAI,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;gBAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAC5B,IAAI,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACnE,CAAC;qBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACxC,OAAO,EAAE,CAAC;oBACV,SAAS;gBACX,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;oBAC7C,YAAY,EAAE,iBAAiB,CAAC,WAAW,EAAE;oBAC7C,WAAW,EAAE,UAAU;oBACvB,OAAO,EAAE,MAAM;oBACf,OAAO,EAAE,MAAM;oBACf,IAAI,EAAE,IAAI;iBACX,CAAC,CAAC;gBAEH,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC5C,QAAQ,EAAE,CAAC;YACb,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7D,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,8BAA8B,QAAQ,aAAa,MAAM,cAAc,OAAO,EAAE,CAAC,CAAC;QAClG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACtD,CAAC;IAKD,KAAK,CAAC,cAAc,CAAC,WAAmB,EAAE,QAAgB;QACxD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;YACjD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;IACH,CAAC;CACF,CAAA;AA3HY,wDAAsB;iCAAtB,sBAAsB;IADlC,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,0BAAgB,EAAC,qCAAa,CAAC,CAAA;yDACL,oBAAU,oBAAV,oBAAU;GAL5B,sBAAsB,CA2HlC"} \ No newline at end of file diff --git a/apps/api/dist/geocoding/administrative-linking.service.js b/apps/api/dist/geocoding/administrative-linking.service.js index 536534f..d429837 100644 --- a/apps/api/dist/geocoding/administrative-linking.service.js +++ b/apps/api/dist/geocoding/administrative-linking.service.js @@ -15,6 +15,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var AdministrativeLinkingService_1; +var _a, _b, _c, _d; Object.defineProperty(exports, "__esModule", { value: true }); exports.AdministrativeLinkingService = void 0; const common_1 = require("@nestjs/common"); @@ -277,9 +278,6 @@ exports.AdministrativeLinkingService = AdministrativeLinkingService = Administra __param(1, (0, typeorm_1.InjectRepository)(neighborhood_point_entity_1.NeighborhoodPoint)), __param(2, (0, typeorm_1.InjectRepository)(neighborhood_polygon_entity_1.NeighborhoodPolygon)), __param(3, (0, typeorm_1.InjectRepository)(admin_boundary_entity_1.AdminBoundary)), - __metadata("design:paramtypes", [typeorm_2.DataSource, - typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository]) + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.DataSource !== "undefined" && typeorm_2.DataSource) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _d : Object]) ], AdministrativeLinkingService); //# sourceMappingURL=administrative-linking.service.js.map \ No newline at end of file diff --git a/apps/api/dist/geocoding/administrative-linking.service.js.map b/apps/api/dist/geocoding/administrative-linking.service.js.map index c6a78b7..4d7f83f 100644 --- a/apps/api/dist/geocoding/administrative-linking.service.js.map +++ b/apps/api/dist/geocoding/administrative-linking.service.js.map @@ -1 +1 @@ -{"version":3,"file":"administrative-linking.service.js","sourceRoot":"","sources":["../../src/geocoding/administrative-linking.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"administrative-linking.service.js","sourceRoot":"","sources":["../../src/geocoding/administrative-linking.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/geocoding/entities/map-candidate.entity.d.ts b/apps/api/dist/geocoding/entities/map-candidate.entity.d.ts new file mode 100644 index 0000000..132fe78 --- /dev/null +++ b/apps/api/dist/geocoding/entities/map-candidate.entity.d.ts @@ -0,0 +1,21 @@ +import { BasePlace } from './base-place.entity'; +export declare enum CandidateStatus { + PENDING = "PENDING", + APPROVED = "APPROVED", + REJECTED = "REJECTED" +} +export declare enum CountryCode { + JORDAN = "JORDAN", + SYRIA = "SYRIA", + EGYPT = "EGYPT" +} +export declare class MapCandidate extends BasePlace { + status: CandidateStatus; + submittedBy: string; + rejectionReason: string; + country: CountryCode; + metadata: any; + verified_name: string; + confidence_score: number; + verification_metadata: any; +} diff --git a/apps/api/dist/geocoding/entities/map-candidate.entity.js b/apps/api/dist/geocoding/entities/map-candidate.entity.js new file mode 100644 index 0000000..81d96c2 --- /dev/null +++ b/apps/api/dist/geocoding/entities/map-candidate.entity.js @@ -0,0 +1,84 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MapCandidate = exports.CountryCode = exports.CandidateStatus = void 0; +const typeorm_1 = require("typeorm"); +const base_place_entity_1 = require("./base-place.entity"); +var CandidateStatus; +(function (CandidateStatus) { + CandidateStatus["PENDING"] = "PENDING"; + CandidateStatus["APPROVED"] = "APPROVED"; + CandidateStatus["REJECTED"] = "REJECTED"; +})(CandidateStatus || (exports.CandidateStatus = CandidateStatus = {})); +var CountryCode; +(function (CountryCode) { + CountryCode["JORDAN"] = "JORDAN"; + CountryCode["SYRIA"] = "SYRIA"; + CountryCode["EGYPT"] = "EGYPT"; +})(CountryCode || (exports.CountryCode = CountryCode = {})); +let MapCandidate = class MapCandidate extends base_place_entity_1.BasePlace { + status; + submittedBy; + rejectionReason; + country; + metadata; + verified_name; + confidence_score; + verification_metadata; +}; +exports.MapCandidate = MapCandidate; +__decorate([ + (0, typeorm_1.Column)({ + type: 'enum', + enum: CandidateStatus, + default: CandidateStatus.PENDING + }), + (0, typeorm_1.Index)(), + __metadata("design:type", String) +], MapCandidate.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: true }), + (0, typeorm_1.Index)(), + __metadata("design:type", String) +], MapCandidate.prototype, "submittedBy", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'text', nullable: true }), + __metadata("design:type", String) +], MapCandidate.prototype, "rejectionReason", void 0); +__decorate([ + (0, typeorm_1.Column)({ + type: 'enum', + enum: CountryCode, + default: CountryCode.JORDAN + }), + (0, typeorm_1.Index)(), + __metadata("design:type", String) +], MapCandidate.prototype, "country", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }), + __metadata("design:type", Object) +], MapCandidate.prototype, "metadata", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: true }), + __metadata("design:type", String) +], MapCandidate.prototype, "verified_name", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'int', default: 0 }), + __metadata("design:type", Number) +], MapCandidate.prototype, "confidence_score", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'jsonb', nullable: true }), + __metadata("design:type", Object) +], MapCandidate.prototype, "verification_metadata", void 0); +exports.MapCandidate = MapCandidate = __decorate([ + (0, typeorm_1.Entity)('map_candidates') +], MapCandidate); +//# sourceMappingURL=map-candidate.entity.js.map \ No newline at end of file diff --git a/apps/api/dist/geocoding/entities/map-candidate.entity.js.map b/apps/api/dist/geocoding/entities/map-candidate.entity.js.map new file mode 100644 index 0000000..61203f0 --- /dev/null +++ b/apps/api/dist/geocoding/entities/map-candidate.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"map-candidate.entity.js","sourceRoot":"","sources":["../../../src/geocoding/entities/map-candidate.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAAgD;AAChD,2DAAgD;AAEhD,IAAY,eAIX;AAJD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;IACrB,wCAAqB,CAAA;AACvB,CAAC,EAJW,eAAe,+BAAf,eAAe,QAI1B;AAED,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,8BAAe,CAAA;IACf,8BAAe,CAAA;AACjB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAGM,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,6BAAS;IAOzC,MAAM,CAAkB;IAIxB,WAAW,CAAS;IAGpB,eAAe,CAAS;IAQxB,OAAO,CAAc;IAGrB,QAAQ,CAAM;IAGd,aAAa,CAAS;IAGtB,gBAAgB,CAAS;IAGzB,qBAAqB,CAAM;CAC5B,CAAA;AAnCY,oCAAY;AAOvB;IANC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,eAAe,CAAC,OAAO;KACjC,CAAC;IACD,IAAA,eAAK,GAAE;;4CACgB;AAIxB;IAFC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1B,IAAA,eAAK,GAAE;;iDACY;AAGpB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;qDACjB;AAQxB;IANC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,WAAW,CAAC,MAAM;KAC5B,CAAC;IACD,IAAA,eAAK,GAAE;;6CACa;AAGrB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CAC5B;AAGd;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;mDACL;AAGtB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;sDACX;AAGzB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2DACf;uBAlChB,YAAY;IADxB,IAAA,gBAAM,EAAC,gBAAgB,CAAC;GACZ,YAAY,CAmCxB"} \ No newline at end of file diff --git a/apps/api/dist/geocoding/geocoding-init.service.js b/apps/api/dist/geocoding/geocoding-init.service.js index fe2c805..34fdd9f 100644 --- a/apps/api/dist/geocoding/geocoding-init.service.js +++ b/apps/api/dist/geocoding/geocoding-init.service.js @@ -12,6 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var GeocodingInitService_1; +var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.GeocodingInitService = void 0; const common_1 = require("@nestjs/common"); @@ -99,6 +100,6 @@ exports.GeocodingInitService = GeocodingInitService; exports.GeocodingInitService = GeocodingInitService = GeocodingInitService_1 = __decorate([ (0, common_1.Injectable)(), __param(0, (0, typeorm_1.InjectRepository)(place_syria_entity_1.PlaceSyria)), - __metadata("design:paramtypes", [typeorm_2.Repository]) + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object]) ], GeocodingInitService); //# sourceMappingURL=geocoding-init.service.js.map \ No newline at end of file diff --git a/apps/api/dist/geocoding/geocoding-init.service.js.map b/apps/api/dist/geocoding/geocoding-init.service.js.map index 86f585f..f0cf7ea 100644 --- a/apps/api/dist/geocoding/geocoding-init.service.js.map +++ b/apps/api/dist/geocoding/geocoding-init.service.js.map @@ -1 +1 @@ -{"version":3,"file":"geocoding-init.service.js","sourceRoot":"","sources":["../../src/geocoding/geocoding-init.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAkE;AAClE,6CAAmD;AACnD,qCAAqC;AACrC,sEAA2D;AAGpD,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAKZ;IAJF,MAAM,GAAG,IAAI,eAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;IAEhE,YAEmB,IAA4B;QAA5B,SAAI,GAAJ,IAAI,CAAwB;IAC5C,CAAC;IAEJ,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QACnE,IAAI,CAAC;YAEH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAGjE,MAAM,MAAM,GAAG,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG;gBACpB,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,gBAAgB,EAAE;gBACjD,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,aAAa,EAAE;gBAC9C,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE;gBAClD,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,iBAAiB,EAAE;aACpD,CAAC;YAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;oBACpC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;wFAGwD,KAAK,wBAAwB,OAAO,CAAC,GAAG;8BAClG,KAAK,kBAAkB,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC,GAAG;;;WAGvE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAGD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;OAiBrB,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;OAKrB,CAAC,CAAC;YAGH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;OAKrB,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;OAKrB,CAAC,CAAC;YAGH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAC;YACvH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,6FAA6F,CAAC,CAAC;YAGrH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,qIAAqI,CAAC,CAAC;YAC7J,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mIAAmI,CAAC,CAAC;YAE3J,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC;QACjH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;CACF,CAAA;AA5FY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,0BAAgB,EAAC,+BAAU,CAAC,CAAA;qCACN,oBAAU;GALxB,oBAAoB,CA4FhC"} \ No newline at end of file +{"version":3,"file":"geocoding-init.service.js","sourceRoot":"","sources":["../../src/geocoding/geocoding-init.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAkE;AAClE,6CAAmD;AACnD,qCAAqC;AACrC,sEAA2D;AAGpD,IAAM,oBAAoB,4BAA1B,MAAM,oBAAoB;IAKZ;IAJF,MAAM,GAAG,IAAI,eAAM,CAAC,sBAAoB,CAAC,IAAI,CAAC,CAAC;IAEhE,YAEmB,IAA4B;QAA5B,SAAI,GAAJ,IAAI,CAAwB;IAC5C,CAAC;IAEJ,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QACnE,IAAI,CAAC;YAEH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAGjE,MAAM,MAAM,GAAG,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;YACjE,MAAM,aAAa,GAAG;gBACpB,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,gBAAgB,EAAE;gBACjD,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,aAAa,EAAE;gBAC9C,EAAE,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,iBAAiB,EAAE;gBAClD,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,iBAAiB,EAAE;aACpD,CAAC;YAEF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;oBACpC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;wFAGwD,KAAK,wBAAwB,OAAO,CAAC,GAAG;8BAClG,KAAK,kBAAkB,OAAO,CAAC,GAAG,OAAO,OAAO,CAAC,GAAG;;;WAGvE,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAGD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;OAiBrB,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;OAKrB,CAAC,CAAC;YAGH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;OAKrB,CAAC,CAAC;YAEH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;;;;;OAKrB,CAAC,CAAC;YAGH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAC;YACvH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,6FAA6F,CAAC,CAAC;YAGrH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,qIAAqI,CAAC,CAAC;YAC7J,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mIAAmI,CAAC,CAAC;YAE3J,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC;QACjH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,EAAE,GAAG,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;CACF,CAAA;AA5FY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,0BAAgB,EAAC,+BAAU,CAAC,CAAA;yDACN,oBAAU,oBAAV,oBAAU;GALxB,oBAAoB,CA4FhC"} \ No newline at end of file diff --git a/apps/api/dist/geocoding/geocoding.controller.d.ts b/apps/api/dist/geocoding/geocoding.controller.d.ts index ded8d37..b1ef850 100644 --- a/apps/api/dist/geocoding/geocoding.controller.d.ts +++ b/apps/api/dist/geocoding/geocoding.controller.d.ts @@ -2,6 +2,7 @@ import { GeocodingService } from './geocoding.service'; import { AdminBoundariesService } from './admin-boundaries.service'; import { JordanResearchService } from './jordan-research.service'; import { AdministrativeLinkingService } from './administrative-linking.service'; +import { MapRefinementService } from './map-refinement.service'; import { SearchQueryDto } from './dto/search-query.dto'; import { ReverseGeocodeDto } from './dto/reverse-geocode.dto'; export declare class GeocodingController { @@ -9,38 +10,33 @@ export declare class GeocodingController { private readonly adminBoundariesService; private readonly jordanResearchService; private readonly adminLinkingService; - constructor(geocodingService: GeocodingService, adminBoundariesService: AdminBoundariesService, jordanResearchService: JordanResearchService, adminLinkingService: AdministrativeLinkingService); + private readonly refinementService; + constructor(geocodingService: GeocodingService, adminBoundariesService: AdminBoundariesService, jordanResearchService: JordanResearchService, adminLinkingService: AdministrativeLinkingService, refinementService: MapRefinementService); search(queryDto: SearchQueryDto): Promise<{ results: any; source: string; + did_you_mean?: undefined; + } | { + results: never[]; + did_you_mean: any; + source?: undefined; } | { results: any[]; source?: undefined; + did_you_mean?: undefined; }>; - reverse(reverseDto: ReverseGeocodeDto): Promise; - addPlace(placeData: any): Promise<{ - latitude: number; - longitude: number; - location: string; - id: number; - name: string; - name_ar: string; - name_en: string; - address: string; - category: string; - neighbourhood: string; - city: string; - description: string; - created_at: Date; + autocomplete(q: string, country?: string): Promise<{ + results: any; source: string; - governorate_id: number; - district_id: number; - sub_district_id: number; - neighborhood_id: number; + } | { + results: any; + source?: undefined; }>; + reverse(reverseDto: ReverseGeocodeDto): Promise; + addPlace(req: any, placeData: any): Promise; deletePlace(country: string, name?: string, id?: string): Promise<{ success: boolean; - affected: number | null | undefined; + affected: any; }>; upsertPlace(placeData: any): Promise<{ id: any; @@ -54,7 +50,7 @@ export declare class GeocodingController { created: number; updated: number; }>; - getPlaces(limit?: string): Promise<(import("./entities/place-syria.entity").PlaceSyria | import("./entities/place-jordan.entity").PlaceJordan | import("./entities/place-egypt.entity").PlaceEgypt)[]>; + getPlaces(limit?: string): Promise; getGeoJSON(): Promise<{ type: string; features: any; @@ -72,7 +68,7 @@ export declare class GeocodingController { osm: any; overture: any; wikidata: any; - static_files: {}; + static_files: any; hdx: string; gadm: string; }; diff --git a/apps/api/dist/geocoding/geocoding.controller.js b/apps/api/dist/geocoding/geocoding.controller.js index 84d17ca..43a8a4e 100644 --- a/apps/api/dist/geocoding/geocoding.controller.js +++ b/apps/api/dist/geocoding/geocoding.controller.js @@ -19,7 +19,9 @@ const geocoding_service_1 = require("./geocoding.service"); const admin_boundaries_service_1 = require("./admin-boundaries.service"); const jordan_research_service_1 = require("./jordan-research.service"); const administrative_linking_service_1 = require("./administrative-linking.service"); +const map_refinement_service_1 = require("./map-refinement.service"); const api_key_guard_1 = require("../common/guards/api-key.guard"); +const admin_guard_1 = require("../common/guards/admin.guard"); const rate_limiter_guard_1 = require("../common/guards/rate-limiter.guard"); const search_query_dto_1 = require("./dto/search-query.dto"); const reverse_geocode_dto_1 = require("./dto/reverse-geocode.dto"); @@ -28,22 +30,30 @@ let GeocodingController = class GeocodingController { adminBoundariesService; jordanResearchService; adminLinkingService; - constructor(geocodingService, adminBoundariesService, jordanResearchService, adminLinkingService) { + refinementService; + constructor(geocodingService, adminBoundariesService, jordanResearchService, adminLinkingService, refinementService) { this.geocodingService = geocodingService; this.adminBoundariesService = adminBoundariesService; this.jordanResearchService = jordanResearchService; this.adminLinkingService = adminLinkingService; + this.refinementService = refinementService; } async search(queryDto) { const { q, lat, lng, radius, country } = queryDto; return this.geocodingService.searchPlaces(q, lat, lng, radius, country); } + async autocomplete(q, country) { + if (!q || q.trim().length < 2) + return { results: [] }; + return this.geocodingService.autocomplete(q, country); + } async reverse(reverseDto) { const { lat, lng } = reverseDto; return this.geocodingService.reverseGeocode(lat, lng); } - async addPlace(placeData) { - return this.geocodingService.addPlace(placeData); + async addPlace(req, placeData) { + const userId = req.user?.uid || req.tenant?.id || 'api_key_user'; + return this.refinementService.suggestPlace(placeData, userId); } async deletePlace(country, name, id) { if (id) { @@ -91,6 +101,17 @@ __decorate([ __metadata("design:paramtypes", [search_query_dto_1.SearchQueryDto]), __metadata("design:returntype", Promise) ], GeocodingController.prototype, "search", null); +__decorate([ + (0, common_1.Get)('autocomplete'), + (0, swagger_1.ApiOperation)({ summary: 'Fast autocomplete for live typing' }), + (0, swagger_1.ApiQuery)({ name: 'q', required: true }), + (0, swagger_1.ApiQuery)({ name: 'country', required: false }), + __param(0, (0, common_1.Query)('q')), + __param(1, (0, common_1.Query)('country')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String, String]), + __metadata("design:returntype", Promise) +], GeocodingController.prototype, "autocomplete", null); __decorate([ (0, common_1.Get)('reverse'), (0, swagger_1.ApiOperation)({ summary: 'Reverse Geocoding (Lat/Lng to Address)' }), @@ -101,14 +122,16 @@ __decorate([ ], GeocodingController.prototype, "reverse", null); __decorate([ (0, common_1.Post)('places'), - (0, swagger_1.ApiOperation)({ summary: 'Add a new location (User Submitted)' }), - __param(0, (0, common_1.Body)()), + (0, swagger_1.ApiOperation)({ summary: 'Add a new location (User Submitted - Goes to Audit)' }), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), __metadata("design:type", Function), - __metadata("design:paramtypes", [Object]), + __metadata("design:paramtypes", [Object, Object]), __metadata("design:returntype", Promise) ], GeocodingController.prototype, "addPlace", null); __decorate([ (0, common_1.Delete)('places'), + (0, common_1.UseGuards)(admin_guard_1.AdminGuard), (0, swagger_1.ApiOperation)({ summary: 'Delete a place by name or ID' }), (0, swagger_1.ApiQuery)({ name: 'name', required: false }), (0, swagger_1.ApiQuery)({ name: 'id', required: false, type: Number }), @@ -122,6 +145,7 @@ __decorate([ ], GeocodingController.prototype, "deletePlace", null); __decorate([ (0, common_1.Post)('upsert-place'), + (0, common_1.UseGuards)(admin_guard_1.AdminGuard), (0, swagger_1.ApiOperation)({ summary: 'Add or Update a location (Automated Scraper)' }), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), @@ -130,6 +154,7 @@ __decorate([ ], GeocodingController.prototype, "upsertPlace", null); __decorate([ (0, common_1.Post)('upsert-batch'), + (0, common_1.UseGuards)(admin_guard_1.AdminGuard), (0, swagger_1.ApiOperation)({ summary: 'Add or Update multiple locations in bulk' }), __param(0, (0, common_1.Body)()), __metadata("design:type", Function), @@ -153,6 +178,7 @@ __decorate([ ], GeocodingController.prototype, "getGeoJSON", null); __decorate([ (0, common_1.Post)('import-boundaries'), + (0, common_1.UseGuards)(admin_guard_1.AdminGuard), (0, swagger_1.ApiOperation)({ summary: 'Import administrative boundaries from a local GeoJSON file on the server' }), (0, swagger_1.ApiQuery)({ name: 'country', required: true }), (0, swagger_1.ApiQuery)({ name: 'filePath', required: true }), @@ -171,6 +197,7 @@ __decorate([ ], GeocodingController.prototype, "zarqaResearch", null); __decorate([ (0, common_1.Post)('admin/sync-neighborhoods'), + (0, common_1.UseGuards)(admin_guard_1.AdminGuard), (0, swagger_1.ApiOperation)({ summary: 'Sync neighborhood points from OSM for a bbox' }), (0, swagger_1.ApiQuery)({ name: 'bbox', required: false }), (0, swagger_1.ApiQuery)({ name: 'country', required: false, enum: ['jordan', 'syria', 'egypt'] }), @@ -182,6 +209,7 @@ __decorate([ ], GeocodingController.prototype, "syncNeighborhoods", null); __decorate([ (0, common_1.Post)('admin/generate-voronoi'), + (0, common_1.UseGuards)(admin_guard_1.AdminGuard), (0, swagger_1.ApiOperation)({ summary: 'Generate Voronoi polygons for neighborhoods' }), (0, swagger_1.ApiQuery)({ name: 'country', required: false, enum: ['jordan', 'syria', 'egypt'] }), __param(0, (0, common_1.Query)('country')), @@ -191,6 +219,7 @@ __decorate([ ], GeocodingController.prototype, "generateVoronoi", null); __decorate([ (0, common_1.Post)('admin/link-places'), + (0, common_1.UseGuards)(admin_guard_1.AdminGuard), (0, swagger_1.ApiOperation)({ summary: 'Link places to administrative hierarchy' }), (0, swagger_1.ApiQuery)({ name: 'country', required: true, enum: ['jordan', 'syria', 'egypt'] }), __param(0, (0, common_1.Query)('country')), @@ -206,6 +235,7 @@ exports.GeocodingController = GeocodingController = __decorate([ __metadata("design:paramtypes", [geocoding_service_1.GeocodingService, admin_boundaries_service_1.AdminBoundariesService, jordan_research_service_1.JordanResearchService, - administrative_linking_service_1.AdministrativeLinkingService]) + administrative_linking_service_1.AdministrativeLinkingService, + map_refinement_service_1.MapRefinementService]) ], GeocodingController); //# sourceMappingURL=geocoding.controller.js.map \ No newline at end of file diff --git a/apps/api/dist/geocoding/geocoding.controller.js.map b/apps/api/dist/geocoding/geocoding.controller.js.map index 65ffb2c..2b5d323 100644 --- a/apps/api/dist/geocoding/geocoding.controller.js.map +++ b/apps/api/dist/geocoding/geocoding.controller.js.map @@ -1 +1 @@ -{"version":3,"file":"geocoding.controller.js","sourceRoot":"","sources":["../../src/geocoding/geocoding.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"geocoding.controller.js","sourceRoot":"","sources":["../../src/geocoding/geocoding.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/geocoding/geocoding.module.js b/apps/api/dist/geocoding/geocoding.module.js index 76a0ee0..ab5a711 100644 --- a/apps/api/dist/geocoding/geocoding.module.js +++ b/apps/api/dist/geocoding/geocoding.module.js @@ -56,8 +56,12 @@ const jordan_research_service_1 = require("./jordan-research.service"); const administrative_linking_service_1 = require("./administrative-linking.service"); const neighborhood_point_entity_1 = require("./entities/neighborhood-point.entity"); const neighborhood_polygon_entity_1 = require("./entities/neighborhood-polygon.entity"); +const map_candidate_entity_1 = require("./entities/map-candidate.entity"); +const map_refinement_service_1 = require("./map-refinement.service"); +const map_refinement_controller_1 = require("./map-refinement.controller"); const cache_manager_1 = require("@nestjs/cache-manager"); const redisStore = __importStar(require("cache-manager-redis-store")); +const index_refresh_service_1 = require("./index-refresh.service"); let GeocodingModule = class GeocodingModule { }; exports.GeocodingModule = GeocodingModule; @@ -72,7 +76,8 @@ exports.GeocodingModule = GeocodingModule = __decorate([ osm_point_with_area_entity_1.OsmPointWithArea, admin_boundary_entity_1.AdminBoundary, neighborhood_point_entity_1.NeighborhoodPoint, - neighborhood_polygon_entity_1.NeighborhoodPolygon + neighborhood_polygon_entity_1.NeighborhoodPolygon, + map_candidate_entity_1.MapCandidate ]), cache_manager_1.CacheModule.register({ store: redisStore, @@ -81,15 +86,17 @@ exports.GeocodingModule = GeocodingModule = __decorate([ ttl: 3600, }), ], - controllers: [geocoding_controller_1.GeocodingController], + controllers: [geocoding_controller_1.GeocodingController, map_refinement_controller_1.MapRefinementController], providers: [ geocoding_service_1.GeocodingService, geocoding_init_service_1.GeocodingInitService, admin_boundaries_service_1.AdminBoundariesService, jordan_research_service_1.JordanResearchService, - administrative_linking_service_1.AdministrativeLinkingService + administrative_linking_service_1.AdministrativeLinkingService, + map_refinement_service_1.MapRefinementService, + index_refresh_service_1.IndexRefreshService ], - exports: [geocoding_service_1.GeocodingService], + exports: [geocoding_service_1.GeocodingService, map_refinement_service_1.MapRefinementService], }) ], GeocodingModule); //# sourceMappingURL=geocoding.module.js.map \ No newline at end of file diff --git a/apps/api/dist/geocoding/geocoding.module.js.map b/apps/api/dist/geocoding/geocoding.module.js.map index 83fc956..afd3e30 100644 --- a/apps/api/dist/geocoding/geocoding.module.js.map +++ b/apps/api/dist/geocoding/geocoding.module.js.map @@ -1 +1 @@ -{"version":3,"file":"geocoding.module.js","sourceRoot":"","sources":["../../src/geocoding/geocoding.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,2DAAuD;AACvD,qEAAgE;AAChE,iEAA6D;AAC7D,sEAA2D;AAC3D,wEAA6D;AAC7D,sEAA2D;AAC3D,gEAAqD;AACrD,sFAAyE;AACzE,4EAAiE;AACjE,yEAAoE;AACpE,uEAAkE;AAClE,qFAAgF;AAChF,oFAAyE;AACzE,wFAA6E;AAC7E,yDAAoD;AACpD,sEAAwD;AA+BjD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IA7B3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC;gBACvB,+BAAU;gBACV,iCAAW;gBACX,+BAAU;gBACV,yBAAO;gBACP,6CAAgB;gBAChB,qCAAa;gBACb,6CAAiB;gBACjB,iDAAmB;aACpB,CAAC;YACF,2BAAW,CAAC,QAAQ,CAAC;gBACnB,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;gBAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,EAAE,EAAE,CAAC;gBACpD,GAAG,EAAE,IAAI;aACV,CAAC;SACH;QACD,WAAW,EAAE,CAAC,0CAAmB,CAAC;QAClC,SAAS,EAAE;YACT,oCAAgB;YAChB,6CAAoB;YACpB,iDAAsB;YACtB,+CAAqB;YACrB,6DAA4B;SAC7B;QACD,OAAO,EAAE,CAAC,oCAAgB,CAAC;KAC5B,CAAC;GACW,eAAe,CAAG"} \ No newline at end of file +{"version":3,"file":"geocoding.module.js","sourceRoot":"","sources":["../../src/geocoding/geocoding.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,2DAAuD;AACvD,qEAAgE;AAChE,iEAA6D;AAC7D,sEAA2D;AAC3D,wEAA6D;AAC7D,sEAA2D;AAC3D,gEAAqD;AACrD,sFAAyE;AACzE,4EAAiE;AACjE,yEAAoE;AACpE,uEAAkE;AAClE,qFAAgF;AAChF,oFAAyE;AACzE,wFAA6E;AAC7E,0EAA+D;AAC/D,qEAAgE;AAChE,2EAAsE;AACtE,yDAAoD;AACpD,sEAAwD;AACxD,mEAA8D;AAkCvD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,0CAAe;0BAAf,eAAe;IAhC3B,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC;gBACvB,+BAAU;gBACV,iCAAW;gBACX,+BAAU;gBACV,yBAAO;gBACP,6CAAgB;gBAChB,qCAAa;gBACb,6CAAiB;gBACjB,iDAAmB;gBACnB,mCAAY;aACb,CAAC;YACF,2BAAW,CAAC,QAAQ,CAAC;gBACnB,KAAK,EAAE,UAAU;gBACjB,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;gBAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,EAAE,EAAE,CAAC;gBACpD,GAAG,EAAE,IAAI;aACV,CAAC;SACH;QACD,WAAW,EAAE,CAAC,0CAAmB,EAAE,mDAAuB,CAAC;QAC3D,SAAS,EAAE;YACT,oCAAgB;YAChB,6CAAoB;YACpB,iDAAsB;YACtB,+CAAqB;YACrB,6DAA4B;YAC5B,6CAAoB;YACpB,2CAAmB;SACpB;QACD,OAAO,EAAE,CAAC,oCAAgB,EAAE,6CAAoB,CAAC;KAClD,CAAC;GACW,eAAe,CAAG"} \ No newline at end of file diff --git a/apps/api/dist/geocoding/geocoding.service.d.ts b/apps/api/dist/geocoding/geocoding.service.d.ts index 633ed74..7cf6565 100644 --- a/apps/api/dist/geocoding/geocoding.service.d.ts +++ b/apps/api/dist/geocoding/geocoding.service.d.ts @@ -22,33 +22,28 @@ export declare class GeocodingService { searchPlaces(query: string, lat?: number, lon?: number, radius?: number, country?: string): Promise<{ results: any; source: string; + did_you_mean?: undefined; + } | { + results: never[]; + did_you_mean: any; + source?: undefined; } | { results: any[]; source?: undefined; + did_you_mean?: undefined; }>; private formatResults; private getRepoByTableName; - reverseGeocode(lat: number, lng: number): Promise; - addPlace(data: Partial): Promise<{ - latitude: number; - longitude: number; - location: string; - id: number; - name: string; - name_ar: string; - name_en: string; - address: string; - category: string; - neighbourhood: string; - city: string; - description: string; - created_at: Date; + private logFailedSearch; + autocomplete(query: string, country?: string): Promise<{ + results: any; source: string; - governorate_id: number; - district_id: number; - sub_district_id: number; - neighborhood_id: number; + } | { + results: any; + source?: undefined; }>; + reverseGeocode(lat: number, lng: number): Promise; + addPlace(data: Partial): Promise; upsertPlace(data: Partial): Promise<{ id: any; action: string; @@ -59,18 +54,18 @@ export declare class GeocodingService { created: number; updated: number; }>; - getRecentPlaces(limit?: number): Promise<(PlaceSyria | PlaceJordan | PlaceEgypt)[]>; + getRecentPlaces(limit?: number): Promise; getAllPlacesGeoJSON(): Promise<{ type: string; features: any; }>; deletePlacesByName(name: string, country: string): Promise<{ success: boolean; - affected: number; + affected: any; }>; deletePlaceById(id: number, country: string): Promise<{ success: boolean; - affected: number | null | undefined; + affected: any; }>; private getRepoByCountry; } diff --git a/apps/api/dist/geocoding/geocoding.service.js b/apps/api/dist/geocoding/geocoding.service.js index f9f946e..0b50068 100644 --- a/apps/api/dist/geocoding/geocoding.service.js +++ b/apps/api/dist/geocoding/geocoding.service.js @@ -12,6 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; var GeocodingService_1; +var _a, _b, _c, _d, _e; Object.defineProperty(exports, "__esModule", { value: true }); exports.GeocodingService = void 0; const common_1 = require("@nestjs/common"); @@ -73,9 +74,16 @@ let GeocodingService = GeocodingService_1 = class GeocodingService { } async searchPlaces(query, lat, lon, radius = 20000, country) { try { - const cleanQuery = query.trim(); + let cleanQuery = query.trim(); if (!cleanQuery) return { results: [] }; + let relativePrefix = ''; + const relativeQueryRegex = /^(قرب|بالقرب من|قريب من|عند|بجانب|جنب|حد|بجوار|مقابل|قبال|خلف|ورا|وراء)\s+(.+)$/i; + const match = cleanQuery.match(relativeQueryRegex); + if (match) { + relativePrefix = match[1]; + cleanQuery = match[2]; + } const hasLocation = lat !== undefined && lon !== undefined; const geoSegment = hasLocation ? `${lat.toFixed(2)}_${lon.toFixed(2)}` : 'global'; const cacheKey = `geo_search:${country || 'auto'}:${geoSegment}:${cleanQuery.toLowerCase()}`; @@ -83,56 +91,93 @@ let GeocodingService = GeocodingService_1 = class GeocodingService { if (cached) return { results: cached, source: 'cache_hit' }; let targetRegion = country?.toLowerCase() || this.identifyRegion(lat, lon); - const primaryTables = targetRegion && ['syria', 'egypt', 'jordan'].includes(targetRegion) - ? [`places_${targetRegion}`] : ['places_jordan', 'places_syria', 'places_egypt']; - const queryPromises = []; - primaryTables.forEach(tableName => { - const repo = this.getRepoByTableName(tableName); - queryPromises.push(repo.query(` - SELECT - p.id, p.name, p.name_ar, p.name_en, p.category, - n.name_ar as neighbourhood, d.name_ar as district, g.name_ar as governorate, - p.latitude, p.longitude, p.address, '${tableName.replace('places_', '')}' as region, 'user_place' as source, - CASE WHEN $2::float IS NOT NULL THEN ST_DistanceSphere(p.location, ST_SetSRID(ST_MakePoint($3::float, $2::float), 4326)) ELSE 0 END as distance, - GREATEST(similarity(COALESCE(p.name_ar, ''), $1), similarity(COALESCE(p.name, ''), $1)) as relevance - FROM ${tableName} p - LEFT JOIN neighborhood_polygons n ON p.neighborhood_id = n.id - LEFT JOIN admin_boundaries d ON p.district_id = d.id - LEFT JOIN admin_boundaries g ON p.governorate_id = g.id - WHERE (p.name_ar % $1 OR p.name % $1) - AND ($2::float IS NULL OR ST_DistanceSphere(p.location, ST_SetSRID(ST_MakePoint($3::float, $2::float), 4326)) <= $4) - ORDER BY (p.name_ar <-> $1) ASC LIMIT 10 - `, [cleanQuery, lat || null, lon || null, radius])); - }); - queryPromises.push(this.osmPointsRepository.query(` + const [normalizedQueryRes] = await this.osmPointsRepository.query(`SELECT normalize_arabic($1) as nq`, [cleanQuery]); + const normalizedQuery = normalizedQueryRes?.nq || cleanQuery.toLowerCase(); + let queryParams = [normalizedQuery]; + let locationCondition = ''; + if (hasLocation) { + locationCondition = `AND ST_DistanceSphere(location, ST_SetSRID(ST_MakePoint($3::float, $2::float), 4326)) <= $4`; + queryParams.push(lat, lon, radius); + } + let regionCondition = ''; + if (targetRegion && ['syria', 'jordan', 'egypt'].includes(targetRegion)) { + regionCondition = `AND (region = '${targetRegion}' OR region = 'global')`; + } + const sqlQuery = ` SELECT - o.osm_id as id, o.name, o.name_ar, o.name_en, COALESCE(o.amenity, o.shop, 'place') as category, - o.latitude, o.longitude, o.addr_street as address, 'osm_global' as source, - CASE WHEN $2::float IS NOT NULL THEN ST_DistanceSphere(o.geom, ST_SetSRID(ST_MakePoint($3::float, $2::float), 4326)) ELSE 0 END as distance, - GREATEST(similarity(COALESCE(o.name, ''), $1), similarity(COALESCE(o.name_ar, ''), $1)) as relevance - FROM osm_points_with_area o - WHERE (o.name % $1 OR o.name_ar % $1) - AND ($2::float IS NULL OR ST_DistanceSphere(o.geom, ST_SetSRID(ST_MakePoint($3::float, $2::float), 4326)) <= $4) - ORDER BY (o.name <-> $1) ASC LIMIT 10 - `, [cleanQuery, lat || null, lon || null, radius])); - const executionResults = await Promise.race([ - Promise.allSettled(queryPromises), + id, name, name_ar, category, + '' as neighbourhood, '' as district, '' as governorate, + latitude, longitude, address, region, source, popularity_score, + ${hasLocation ? 'ST_DistanceSphere(location, ST_SetSRID(ST_MakePoint($3::float, $2::float), 4326))' : '0'} as distance, + similarity(normalized_name, $1) as relevance + FROM unified_search_index + WHERE normalized_name % $1 + ${locationCondition} + ${regionCondition} + ORDER BY (normalized_name <-> $1) ASC + LIMIT 50 + `; + const allResults = await Promise.race([ + this.osmPointsRepository.query(sqlQuery, queryParams), new Promise((_, reject) => setTimeout(() => reject(new Error('QUERY_TIMEOUT')), this.DB_TIMEOUT_MS)) ]).catch(e => { this.logger.warn(`Search optimization threshold hit: ${e.message}`); return []; }); - let allResults = []; - if (Array.isArray(executionResults)) { - executionResults.forEach(res => { - if (res.status === 'fulfilled' && res.value) - allResults.push(...res.value); - }); + const formatted = this.formatResults(allResults, hasLocation, relativePrefix); + const placeIds = formatted.map(r => r.id); + if (placeIds.length > 0) { + try { + const gates = await this.osmPointsRepository.query(`SELECT place_id, gate_name_ar, gate_name_en, latitude, longitude, is_main_gate + FROM place_gates + WHERE place_id = ANY($1)`, [placeIds]); + if (gates.length > 0) { + formatted.forEach(r => { + const placeGates = gates.filter((g) => g.place_id === r.id).map((g) => ({ + name_ar: g.gate_name_ar, + name_en: g.gate_name_en, + latitude: parseFloat(g.latitude), + longitude: parseFloat(g.longitude), + is_main_gate: g.is_main_gate + })); + if (placeGates.length > 0) { + r.gates = placeGates; + } + }); + } + } + catch (err) { + this.logger.warn('Failed to fetch POI gates, table might not exist yet.'); + } } - const formatted = this.formatResults(allResults, hasLocation); if (formatted.length > 0) { await this.cacheManager.set(cacheKey, formatted, 3600000); } + else { + this.logFailedSearch(cleanQuery, normalizedQuery, targetRegion, lat, lon).catch(err => { + this.logger.error('Failed to log zero-result search:', err); + }); + try { + const whereClause = regionCondition ? `WHERE ${regionCondition.substring(4)}` : ''; + const fallbackQuery = ` + SELECT name_ar, name, (normalized_name <-> $1) as dist + FROM unified_search_index + ${whereClause} + ORDER BY normalized_name <-> $1 ASC + LIMIT 1 + `; + const suggestions = await this.osmPointsRepository.query(fallbackQuery, [normalizedQuery]); + if (suggestions.length > 0 && suggestions[0].dist < 0.6) { + return { + results: [], + did_you_mean: suggestions[0].name_ar || suggestions[0].name + }; + } + } + catch (err) { + this.logger.warn('Did You Mean fallback failed: ' + err.message); + } + } return { results: formatted }; } catch (e) { @@ -140,12 +185,15 @@ let GeocodingService = GeocodingService_1 = class GeocodingService { return { results: [] }; } } - formatResults(results, hasLocation) { + formatResults(results, hasLocation, relativePrefix = '') { const seenStreets = new Set(); + const maxPopularity = Math.max(...results.map(r => r.popularity_score || 10), 100); return results .map(r => { + const textScore = Number(r.relevance); + const popularityScore = (r.popularity_score || 10) / maxPopularity; const proximityBonus = hasLocation ? Math.max(0, 1 - (Number(r.distance) / 10000)) : 0; - const totalScore = (Number(r.relevance) * 0.7) + (proximityBonus * 0.3); + const totalScore = (textScore * 0.5) + (popularityScore * 0.3) + (proximityBonus * 0.2); return { ...r, totalScore }; }) .sort((a, b) => b.totalScore - a.totalScore) @@ -162,8 +210,12 @@ let GeocodingService = GeocodingService_1 = class GeocodingService { .map(r => { const addressParts = [r.neighbourhood, r.district, r.governorate].filter(Boolean); const full_address = addressParts.length > 0 ? addressParts.join('، ') : (r.address || ''); + const nameAr = r.name_ar || r.name; + const displayName = relativePrefix ? `${relativePrefix} ${nameAr}` : nameAr; return { ...r, + name: displayName, + name_ar: displayName, latitude: parseFloat(r.latitude), longitude: parseFloat(r.longitude), distance_km: r.distance ? (Number(r.distance) / 1000).toFixed(2) : null, @@ -179,11 +231,78 @@ let GeocodingService = GeocodingService_1 = class GeocodingService { return this.placesJordanRepository; return this.placesSyriaRepository; } + async logFailedSearch(query, normalizedQuery, country, lat, lon) { + const q = ` + INSERT INTO failed_searches (query_text, normalized_query, country, latitude, longitude) + VALUES ($1, $2, $3, $4, $5) + ON CONFLICT (normalized_query, COALESCE(country, 'global')) + DO UPDATE SET search_count = failed_searches.search_count + 1, last_seen_at = CURRENT_TIMESTAMP; + `; + await this.osmPointsRepository.query(q, [query, normalizedQuery, country || null, lat || null, lon || null]); + } + async autocomplete(query, country) { + try { + let cleanQuery = query.trim(); + if (cleanQuery.length < 2) + return { results: [] }; + let relativePrefix = ''; + const relativeQueryRegex = /^(قرب|بالقرب من|قريب من|عند|بجانب|جنب|حد|بجوار|مقابل|قبال|خلف|ورا|وراء)\s+(.+)$/i; + const match = cleanQuery.match(relativeQueryRegex); + if (match) { + relativePrefix = match[1]; + cleanQuery = match[2]; + if (cleanQuery.length < 2) + return { results: [] }; + } + const targetRegion = country?.toLowerCase(); + const cacheKey = `geo_auto:${targetRegion || 'auto'}:${cleanQuery.toLowerCase()}`; + const cached = await this.cacheManager.get(cacheKey); + if (cached) + return { results: cached, source: 'cache_hit' }; + const [normalizedQueryRes] = await this.osmPointsRepository.query(`SELECT normalize_arabic($1) as nq`, [cleanQuery]); + const normalizedQuery = normalizedQueryRes?.nq || cleanQuery.toLowerCase(); + let queryParams = [`${normalizedQuery}%`]; + let regionCondition = ''; + if (targetRegion && ['syria', 'jordan', 'egypt'].includes(targetRegion)) { + regionCondition = `AND (region = '${targetRegion}' OR region = 'global')`; + } + const sqlQuery = ` + SELECT + id, name, name_ar, category, region, source, address + FROM unified_search_index + WHERE normalized_name LIKE $1 + ${regionCondition} + ORDER BY LENGTH(normalized_name) ASC + LIMIT 7 + `; + const results = await this.osmPointsRepository.query(sqlQuery, queryParams); + const formatted = results.map(r => { + const nameAr = r.name_ar || r.name; + const displayName = relativePrefix ? `${relativePrefix} ${nameAr}` : nameAr; + return { + id: r.id, + name: displayName, + category: r.category, + region: r.region, + address: r.address + }; + }); + if (formatted.length > 0) { + await this.cacheManager.set(cacheKey, formatted, 3600000); + } + return { results: formatted }; + } + catch (e) { + this.logger.error('Autocomplete failed:', e); + return { results: [] }; + } + } async reverseGeocode(lat, lng) { try { const repo = this.getRepositoryForCoords(lat, lng); const tableName = this.getTableNameForRepo(repo); - const query = ` + const queryPromises = []; + queryPromises.push(repo.query(` SELECT p.id, p.name, p.name_ar, p.category, n.name_ar as neighbourhood, @@ -196,9 +315,81 @@ let GeocodingService = GeocodingService_1 = class GeocodingService { LEFT JOIN admin_boundaries d ON p.sub_district_id = d.id LEFT JOIN admin_boundaries g ON p.governorate_id = g.id WHERE p.location IS NOT NULL - ORDER BY p.location::geometry <-> ST_SetSRID(ST_MakePoint($1::float, $2::float), 4326) ASC LIMIT 3 - `; - return await repo.query(query, [lng, lat]); + ORDER BY p.location::geometry <-> ST_SetSRID(ST_MakePoint($1::float, $2::float), 4326) ASC LIMIT 5 + `, [lng, lat])); + queryPromises.push(repo.query(` + SELECT + o.osm_id::text as id, o.name, o.name_ar, COALESCE(o.amenity, o.shop, 'place') as category, + '' as neighbourhood, '' as district, '' as governorate, + o.latitude, o.longitude, o.addr_street as address, 'osm_global' as source, + ST_DistanceSphere(o.geom, ST_SetSRID(ST_MakePoint($1::float, $2::float), 4326)) as distance + FROM osm_points_with_area o + WHERE o.geom IS NOT NULL AND (o.name IS NOT NULL OR o.name_ar IS NOT NULL) + ORDER BY o.geom <-> ST_SetSRID(ST_MakePoint($1::float, $2::float), 4326) ASC LIMIT 5 + `, [lng, lat])); + queryPromises.push(repo.query(` + SELECT + id::text, COALESCE(names->>'primary', names->>'common', 'Street') as name, COALESCE(names->>'primary', names->>'common', 'Street') as name_ar, 'street' as category, + '' as neighbourhood, '' as district, '' as governorate, + ST_Y(ST_Centroid(location))::text as latitude, ST_X(ST_Centroid(location))::text as longitude, '' as address, 'overture_global' as source, + ST_DistanceSphere(location, ST_SetSRID(ST_MakePoint($1::float, $2::float), 4326)) as distance + FROM overture_segment + WHERE location IS NOT NULL AND (names->>'primary' IS NOT NULL OR names->>'common' IS NOT NULL) + ORDER BY location <-> ST_SetSRID(ST_MakePoint($1::float, $2::float), 4326) ASC LIMIT 5 + `, [lng, lat])); + queryPromises.push(repo.query(` + SELECT + id::text, COALESCE(names->>'primary', names->>'common', 'Building') as name, COALESCE(names->>'primary', names->>'common', 'Building') as name_ar, 'building' as category, + '' as neighbourhood, '' as district, '' as governorate, + ST_Y(ST_Centroid(location))::text as latitude, ST_X(ST_Centroid(location))::text as longitude, '' as address, 'overture_global' as source, + ST_DistanceSphere(location, ST_SetSRID(ST_MakePoint($1::float, $2::float), 4326)) as distance + FROM overture_building + WHERE location IS NOT NULL AND (names->>'primary' IS NOT NULL OR names->>'common' IS NOT NULL) + ORDER BY location <-> ST_SetSRID(ST_MakePoint($1::float, $2::float), 4326) ASC LIMIT 5 + `, [lng, lat])); + queryPromises.push(repo.query(` + SELECT + id::text, COALESCE(names->>'primary', names->>'common', 'Place') as name, COALESCE(names->>'primary', names->>'common', 'Place') as name_ar, 'place' as category, + '' as neighbourhood, '' as district, '' as governorate, + ST_Y(ST_Centroid(location))::text as latitude, ST_X(ST_Centroid(location))::text as longitude, '' as address, 'overture_global' as source, + ST_DistanceSphere(location, ST_SetSRID(ST_MakePoint($1::float, $2::float), 4326)) as distance + FROM overture_place + WHERE location IS NOT NULL AND (names->>'primary' IS NOT NULL OR names->>'common' IS NOT NULL) + ORDER BY location <-> ST_SetSRID(ST_MakePoint($1::float, $2::float), 4326) ASC LIMIT 5 + `, [lng, lat])); + const results = await Promise.allSettled(queryPromises); + let allResults = []; + results.forEach(res => { + if (res.status === 'fulfilled' && res.value) + allResults.push(...res.value); + }); + return allResults + .sort((a, b) => Number(a.distance) - Number(b.distance)) + .slice(0, 5) + .map(r => { + const distance = Number(r.distance); + const fullAddressParts = [r.name_ar || r.name, r.address, r.neighbourhood, r.district, r.governorate].filter(Boolean); + let humanReadable = r.name_ar || r.name; + if (distance <= 20) { + humanReadable = r.name_ar || r.name; + } + else if (distance <= 70 && r.category !== 'street') { + const streetName = r.address ? `، ${r.address}` : ''; + humanReadable = `أمام ${r.name_ar || r.name}${streetName}`; + } + else if (r.category === 'street' || distance > 70) { + const streetPart = r.category === 'street' ? (r.name_ar || r.name) : (r.address || r.name_ar || r.name); + const districtPart = r.neighbourhood || r.district || ''; + humanReadable = [streetPart, districtPart].filter(Boolean).join('، '); + } + return { + ...r, + latitude: parseFloat(r.latitude), + longitude: parseFloat(r.longitude), + human_readable_address: humanReadable, + full_address: fullAddressParts.join('، ') + }; + }); } catch (error) { this.logger.error('Reverse geocoding error:', error); @@ -259,6 +450,7 @@ let GeocodingService = GeocodingService_1 = class GeocodingService { UNION ALL SELECT id::text, name_ar as name, category, latitude, longitude, address, 'user' as region FROM places_egypt UNION ALL SELECT id::text, COALESCE(names->>'primary', names->>'common', 'Building') as name, 'building' as category, ST_Y(ST_Centroid(location)) as latitude, ST_X(ST_Centroid(location)) as longitude, '' as address, 'overture' as region FROM overture_building WHERE names->>'primary' IS NOT NULL LIMIT 500 UNION ALL SELECT id::text, COALESCE(names->>'primary', names->>'common', 'Street') as name, 'street' as category, ST_Y(ST_Centroid(location)) as latitude, ST_X(ST_Centroid(location)) as longitude, '' as address, 'overture' as region FROM overture_segment WHERE names->>'primary' IS NOT NULL LIMIT 500 + UNION ALL SELECT id::text, COALESCE(names->>'primary', names->>'common', 'Place') as name, 'place' as category, ST_Y(ST_Centroid(location)) as latitude, ST_X(ST_Centroid(location)) as longitude, '' as address, 'overture' as region FROM overture_place WHERE names->>'primary' IS NOT NULL LIMIT 500 `; const res = await this.placesSyriaRepository.query(q); const features = res.map(p => ({ @@ -299,10 +491,6 @@ exports.GeocodingService = GeocodingService = GeocodingService_1 = __decorate([ __param(3, (0, typeorm_1.InjectRepository)(osm_area_entity_1.OsmArea)), __param(4, (0, typeorm_1.InjectRepository)(osm_point_with_area_entity_1.OsmPointWithArea)), __param(5, (0, common_1.Inject)(cache_manager_1.CACHE_MANAGER)), - __metadata("design:paramtypes", [typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, - typeorm_2.Repository, Object]) + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _d : Object, typeof (_e = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _e : Object, Object]) ], GeocodingService); //# sourceMappingURL=geocoding.service.js.map \ No newline at end of file diff --git a/apps/api/dist/geocoding/geocoding.service.js.map b/apps/api/dist/geocoding/geocoding.service.js.map index 12d4cdd..c347a14 100644 --- a/apps/api/dist/geocoding/geocoding.service.js.map +++ b/apps/api/dist/geocoding/geocoding.service.js.map @@ -1 +1 @@ -{"version":3,"file":"geocoding.service.js","sourceRoot":"","sources":["../../src/geocoding/geocoding.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"geocoding.service.js","sourceRoot":"","sources":["../../src/geocoding/geocoding.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/geocoding/index-refresh.service.d.ts b/apps/api/dist/geocoding/index-refresh.service.d.ts new file mode 100644 index 0000000..f0fab3c --- /dev/null +++ b/apps/api/dist/geocoding/index-refresh.service.d.ts @@ -0,0 +1,8 @@ +import { Repository } from 'typeorm'; +import { OsmPointWithArea } from './entities/osm-point-with-area.entity'; +export declare class IndexRefreshService { + private readonly repo; + private readonly logger; + constructor(repo: Repository); + handleCron(): Promise; +} diff --git a/apps/api/dist/geocoding/index-refresh.service.js b/apps/api/dist/geocoding/index-refresh.service.js new file mode 100644 index 0000000..90eb865 --- /dev/null +++ b/apps/api/dist/geocoding/index-refresh.service.js @@ -0,0 +1,60 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var IndexRefreshService_1; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.IndexRefreshService = void 0; +const common_1 = require("@nestjs/common"); +const schedule_1 = require("@nestjs/schedule"); +const typeorm_1 = require("@nestjs/typeorm"); +const typeorm_2 = require("typeorm"); +const osm_point_with_area_entity_1 = require("./entities/osm-point-with-area.entity"); +let IndexRefreshService = IndexRefreshService_1 = class IndexRefreshService { + repo; + logger = new common_1.Logger(IndexRefreshService_1.name); + constructor(repo) { + this.repo = repo; + } + async handleCron() { + this.logger.log('Starting background refresh for unified_search_index...'); + try { + await this.repo.query('REFRESH MATERIALIZED VIEW CONCURRENTLY unified_search_index;'); + this.logger.log('Successfully refreshed unified_search_index.'); + } + catch (error) { + this.logger.error('Failed to refresh unified_search_index', error); + try { + this.logger.log('Attempting standard refresh (blocking)...'); + await this.repo.query('REFRESH MATERIALIZED VIEW unified_search_index;'); + this.logger.log('Successfully refreshed unified_search_index (standard).'); + } + catch (fallbackError) { + this.logger.error('Fallback standard refresh also failed', fallbackError); + } + } + } +}; +exports.IndexRefreshService = IndexRefreshService; +__decorate([ + (0, schedule_1.Cron)(schedule_1.CronExpression.EVERY_5_MINUTES), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", Promise) +], IndexRefreshService.prototype, "handleCron", null); +exports.IndexRefreshService = IndexRefreshService = IndexRefreshService_1 = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(osm_point_with_area_entity_1.OsmPointWithArea)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object]) +], IndexRefreshService); +//# sourceMappingURL=index-refresh.service.js.map \ No newline at end of file diff --git a/apps/api/dist/geocoding/index-refresh.service.js.map b/apps/api/dist/geocoding/index-refresh.service.js.map new file mode 100644 index 0000000..19bfccd --- /dev/null +++ b/apps/api/dist/geocoding/index-refresh.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index-refresh.service.js","sourceRoot":"","sources":["../../src/geocoding/index-refresh.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,+CAAwD;AACxD,6CAAmD;AACnD,qCAAqC;AACrC,sFAAyE;AAGlE,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAKX;IAJF,MAAM,GAAG,IAAI,eAAM,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;IAE/D,YAEmB,IAAkC;QAAlC,SAAI,GAAJ,IAAI,CAA8B;IAClD,CAAC;IAIE,AAAN,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QAC3E,IAAI,CAAC;YAEH,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;YACtF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;YAGnE,IAAI,CAAC;gBACH,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;gBAC7D,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACzE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YAC7E,CAAC;YAAC,OAAO,aAAa,EAAE,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,aAAa,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;IACH,CAAC;CACF,CAAA;AA7BY,kDAAmB;AAUxB;IADL,IAAA,eAAI,EAAC,yBAAc,CAAC,eAAe,CAAC;;;;qDAmBpC;8BA5BU,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,0BAAgB,EAAC,6CAAgB,CAAC,CAAA;yDACZ,oBAAU,oBAAV,oBAAU;GALxB,mBAAmB,CA6B/B"} \ No newline at end of file diff --git a/apps/api/dist/geocoding/jordan-research.service.d.ts b/apps/api/dist/geocoding/jordan-research.service.d.ts index 84900ab..6f3b456 100644 --- a/apps/api/dist/geocoding/jordan-research.service.d.ts +++ b/apps/api/dist/geocoding/jordan-research.service.d.ts @@ -16,7 +16,7 @@ export declare class JordanResearchService { osm: any; overture: any; wikidata: any; - static_files: {}; + static_files: any; hdx: string; gadm: string; }; diff --git a/apps/api/dist/geocoding/jordan-research.service.js b/apps/api/dist/geocoding/jordan-research.service.js index e0c3d33..9b53b73 100644 --- a/apps/api/dist/geocoding/jordan-research.service.js +++ b/apps/api/dist/geocoding/jordan-research.service.js @@ -48,6 +48,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var JordanResearchService_1; +var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.JordanResearchService = void 0; const common_1 = require("@nestjs/common"); @@ -178,6 +179,6 @@ exports.JordanResearchService = JordanResearchService; exports.JordanResearchService = JordanResearchService = JordanResearchService_1 = __decorate([ (0, common_1.Injectable)(), __param(0, (0, typeorm_1.InjectRepository)(place_jordan_entity_1.PlaceJordan)), - __metadata("design:paramtypes", [typeorm_2.Repository]) + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object]) ], JordanResearchService); //# sourceMappingURL=jordan-research.service.js.map \ No newline at end of file diff --git a/apps/api/dist/geocoding/jordan-research.service.js.map b/apps/api/dist/geocoding/jordan-research.service.js.map index 1f93897..69e4f72 100644 --- a/apps/api/dist/geocoding/jordan-research.service.js.map +++ b/apps/api/dist/geocoding/jordan-research.service.js.map @@ -1 +1 @@ -{"version":3,"file":"jordan-research.service.js","sourceRoot":"","sources":["../../src/geocoding/jordan-research.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,6CAAmD;AACnD,qCAAqC;AACrC,wEAA6D;AAC7D,kDAA0B;AAC1B,uCAAyB;AACzB,2CAA6B;AAGtB,IAAM,qBAAqB,6BAA3B,MAAM,qBAAqB;IAKb;IAJF,MAAM,GAAG,IAAI,eAAM,CAAC,uBAAqB,CAAC,IAAI,CAAC,CAAC;IAEjE,YAEmB,SAAkC;QAAlC,cAAS,GAAT,SAAS,CAAyB;IAClD,CAAC;IAEI,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,IAAa,EAAE,SAAyB,KAAK,EAAE,OAAO,GAAG,CAAC;QAClG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACD,MAAM,MAAM,GAAG;oBACX,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE;wBACL,YAAY,EAAE,mEAAmE;wBACjF,QAAQ,EAAE,mDAAmD;qBAChE;iBACJ,CAAC;gBACF,MAAM,QAAQ,GAAG,MAAM,KAAK,MAAM;oBAC9B,CAAC,CAAC,MAAM,eAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;oBACrC,CAAC,CAAC,MAAM,eAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/F,OAAO,QAAQ,CAAC,IAAI,CAAC;YACzB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;oBAChB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,GAAG,UAAU,OAAO,aAAa,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC5F,MAAM,KAAK,CAAC;gBAChB,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;IACP,CAAC;IAKD,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,mLAAmL,CAAC;QAClM,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,yCAAyC,EAAE,QAAQ,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YAC/H,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC7B,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC5C,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBACjG,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAC7G,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,KAAK,EAAE,qBAAqB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAAC,CAAC;IACrE,CAAC;IAKD,KAAK,CAAC,kBAAkB;QACtB,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,sFAAsF,CAAC,CAAC;YACtI,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,OAAO,EAAE,KAAK,EAAE,wDAAwD,EAAE,CAAC;YAGpH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,0FAA0F,CAAC,CAAC;YACvI,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAChD,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAEpH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;oFAC4C,YAAY;;;;;;OAMzF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,KAAK,EAAE,0BAA0B,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAAC,CAAC;IAC1E,CAAC;IAKD,KAAK,CAAC,kBAAkB;QACtB,MAAM,MAAM,GAAG,6IAA6I,CAAC;QAC7J,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,mCAAmC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YAC3F,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7G,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,KAAK,EAAE,0BAA0B,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAAC,CAAC;IAC1E,CAAC;IAKD,KAAK,CAAC,gBAAgB;QAEpB,MAAM,KAAK,GAAG,CAAC,gCAAgC,EAAE,SAAS,EAAE,4BAA4B,CAAC,CAAC;QAC1F,MAAM,KAAK,GAAG,CAAC,gCAAgC,EAAE,mBAAmB,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,EAAE,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACpB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;oBAChC,KAAK,GAAG,IAAI,CAAC;oBACb,MAAM;gBACV,CAAC;YACL,CAAC;YACD,IAAI,CAAC,KAAK;gBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,2EAA2E,CAAC;QAC5G,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC/D,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,gBAAgB,EAAE;SACxB,CAAC,CAAC;QAEH,OAAO;YACL,IAAI,EAAE,2BAA2B;YACjC,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC1C,OAAO,EAAE;gBACP,GAAG;gBACH,QAAQ;gBACR,QAAQ;gBACR,YAAY,EAAE,WAAW;gBACzB,GAAG,EAAE,wDAAwD;gBAC7D,IAAI,EAAE,kCAAkC;aACzC;YACD,kBAAkB,EAAE,oLAAoL;SACzM,CAAC;IACJ,CAAC;CACF,CAAA;AAjIY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,0BAAgB,EAAC,iCAAW,CAAC,CAAA;qCACF,oBAAU;GAL7B,qBAAqB,CAiIjC"} \ No newline at end of file +{"version":3,"file":"jordan-research.service.js","sourceRoot":"","sources":["../../src/geocoding/jordan-research.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/geocoding/map-refinement.controller.d.ts b/apps/api/dist/geocoding/map-refinement.controller.d.ts new file mode 100644 index 0000000..68359ed --- /dev/null +++ b/apps/api/dist/geocoding/map-refinement.controller.d.ts @@ -0,0 +1,12 @@ +import { MapRefinementService } from './map-refinement.service'; +import { CandidateStatus } from './entities/map-candidate.entity'; +export declare class MapRefinementController { + private readonly refinementService; + constructor(refinementService: MapRefinementService); + suggest(req: any, dto: any): Promise; + list(status?: CandidateStatus): Promise; + approve(id: string): Promise; + reject(id: string, body: { + reason: string; + }): Promise; +} diff --git a/apps/api/dist/geocoding/map-refinement.controller.js b/apps/api/dist/geocoding/map-refinement.controller.js new file mode 100644 index 0000000..3da32de --- /dev/null +++ b/apps/api/dist/geocoding/map-refinement.controller.js @@ -0,0 +1,87 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MapRefinementController = void 0; +const common_1 = require("@nestjs/common"); +const map_refinement_service_1 = require("./map-refinement.service"); +const firebase_auth_guard_1 = require("../auth/guards/firebase-auth.guard"); +const swagger_1 = require("@nestjs/swagger"); +const map_candidate_entity_1 = require("./entities/map-candidate.entity"); +let MapRefinementController = class MapRefinementController { + refinementService; + constructor(refinementService) { + this.refinementService = refinementService; + } + async suggest(req, dto) { + const userId = req.user?.uid || req.tenant?.id || 'anonymous'; + return this.refinementService.suggestPlace(dto, userId); + } + async list(status) { + return this.refinementService.getCandidates(status); + } + async approve(id) { + return this.refinementService.approveCandidate(parseInt(id, 10)); + } + async reject(id, body) { + return this.refinementService.rejectCandidate(parseInt(id, 10), body.reason); + } +}; +exports.MapRefinementController = MapRefinementController; +__decorate([ + (0, common_1.Post)('suggest'), + (0, swagger_1.ApiOperation)({ summary: 'Suggest a new location for the map (Client App)' }), + (0, swagger_1.ApiHeader)({ name: 'x-api-key', description: 'API Key for usage tracking' }), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, Object]), + __metadata("design:returntype", Promise) +], MapRefinementController.prototype, "suggest", null); +__decorate([ + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(firebase_auth_guard_1.FirebaseAuthGuard), + (0, common_1.Get)('candidates'), + (0, swagger_1.ApiOperation)({ summary: 'List suggested places for review (Dashboard)' }), + __param(0, (0, common_1.Query)('status')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", Promise) +], MapRefinementController.prototype, "list", null); +__decorate([ + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(firebase_auth_guard_1.FirebaseAuthGuard), + (0, common_1.Patch)('candidates/:id/approve'), + (0, swagger_1.ApiOperation)({ summary: 'Approve a candidate and move to production (Dashboard)' }), + __param(0, (0, common_1.Param)('id')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", Promise) +], MapRefinementController.prototype, "approve", null); +__decorate([ + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(firebase_auth_guard_1.FirebaseAuthGuard), + (0, common_1.Patch)('candidates/:id/reject'), + (0, swagger_1.ApiOperation)({ summary: 'Reject a candidate (Dashboard)' }), + __param(0, (0, common_1.Param)('id')), + __param(1, (0, common_1.Body)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String, Object]), + __metadata("design:returntype", Promise) +], MapRefinementController.prototype, "reject", null); +exports.MapRefinementController = MapRefinementController = __decorate([ + (0, swagger_1.ApiTags)('map-refinement-places'), + (0, common_1.Controller)('map-refinement/places'), + __metadata("design:paramtypes", [map_refinement_service_1.MapRefinementService]) +], MapRefinementController); +//# sourceMappingURL=map-refinement.controller.js.map \ No newline at end of file diff --git a/apps/api/dist/geocoding/map-refinement.controller.js.map b/apps/api/dist/geocoding/map-refinement.controller.js.map new file mode 100644 index 0000000..89b66d6 --- /dev/null +++ b/apps/api/dist/geocoding/map-refinement.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"map-refinement.controller.js","sourceRoot":"","sources":["../../src/geocoding/map-refinement.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAkG;AAClG,qEAAgE;AAChE,4EAAuE;AACvE,6CAAkF;AAClF,0EAAkE;AAI3D,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IACL;IAA7B,YAA6B,iBAAuC;QAAvC,sBAAiB,GAAjB,iBAAiB,CAAsB;IAAG,CAAC;IAKlE,AAAN,KAAK,CAAC,OAAO,CAAQ,GAAQ,EAAU,GAAQ;QAE7C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,WAAW,CAAC;QAC9D,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAMK,AAAN,KAAK,CAAC,IAAI,CAAkB,MAAwB;QAClD,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAMK,AAAN,KAAK,CAAC,OAAO,CAAc,EAAU;QACnC,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;IAMK,AAAN,KAAK,CAAC,MAAM,CAAc,EAAU,EAAU,IAAwB;QACpE,OAAO,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/E,CAAC;CACF,CAAA;AAnCY,0DAAuB;AAM5B;IAHL,IAAA,aAAI,EAAC,SAAS,CAAC;IACf,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,iDAAiD,EAAE,CAAC;IAC5E,IAAA,mBAAS,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,4BAA4B,EAAE,CAAC;IAC7D,WAAA,IAAA,YAAG,GAAE,CAAA;IAAY,WAAA,IAAA,aAAI,GAAE,CAAA;;;;sDAIrC;AAMK;IAJL,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,uCAAiB,CAAC;IAC5B,IAAA,YAAG,EAAC,YAAY,CAAC;IACjB,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;IAC9D,WAAA,IAAA,cAAK,EAAC,QAAQ,CAAC,CAAA;;;;mDAE1B;AAMK;IAJL,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,uCAAiB,CAAC;IAC5B,IAAA,cAAK,EAAC,wBAAwB,CAAC;IAC/B,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,wDAAwD,EAAE,CAAC;IACrE,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;sDAEzB;AAMK;IAJL,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,uCAAiB,CAAC;IAC5B,IAAA,cAAK,EAAC,uBAAuB,CAAC;IAC9B,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,gCAAgC,EAAE,CAAC;IAC9C,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;IAAc,WAAA,IAAA,aAAI,GAAE,CAAA;;;;qDAE5C;kCAlCU,uBAAuB;IAFnC,IAAA,iBAAO,EAAC,uBAAuB,CAAC;IAChC,IAAA,mBAAU,EAAC,uBAAuB,CAAC;qCAEc,6CAAoB;GADzD,uBAAuB,CAmCnC"} \ No newline at end of file diff --git a/apps/api/dist/geocoding/map-refinement.service.d.ts b/apps/api/dist/geocoding/map-refinement.service.d.ts new file mode 100644 index 0000000..a4e3082 --- /dev/null +++ b/apps/api/dist/geocoding/map-refinement.service.d.ts @@ -0,0 +1,19 @@ +import { Repository, DataSource } from 'typeorm'; +import { MapCandidate, CandidateStatus } from './entities/map-candidate.entity'; +import { PlaceJordan } from './entities/place-jordan.entity'; +import { PlaceSyria } from './entities/place-syria.entity'; +import { PlaceEgypt } from './entities/place-egypt.entity'; +export declare class MapRefinementService { + private dataSource; + private candidateRepository; + private jordanRepository; + private syriaRepository; + private egyptRepository; + private readonly logger; + constructor(dataSource: DataSource, candidateRepository: Repository, jordanRepository: Repository, syriaRepository: Repository, egyptRepository: Repository); + suggestPlace(dto: any, submittedBy: string): Promise; + runExternalVerification(candidateId: number): Promise; + getCandidates(status?: CandidateStatus): Promise; + approveCandidate(id: number): Promise; + rejectCandidate(id: number, reason: string): Promise; +} diff --git a/apps/api/dist/geocoding/map-refinement.service.js b/apps/api/dist/geocoding/map-refinement.service.js new file mode 100644 index 0000000..84fb669 --- /dev/null +++ b/apps/api/dist/geocoding/map-refinement.service.js @@ -0,0 +1,208 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var MapRefinementService_1; +var _a, _b, _c, _d, _e; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MapRefinementService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const typeorm_2 = require("typeorm"); +const map_candidate_entity_1 = require("./entities/map-candidate.entity"); +const place_jordan_entity_1 = require("./entities/place-jordan.entity"); +const place_syria_entity_1 = require("./entities/place-syria.entity"); +const place_egypt_entity_1 = require("./entities/place-egypt.entity"); +let MapRefinementService = MapRefinementService_1 = class MapRefinementService { + dataSource; + candidateRepository; + jordanRepository; + syriaRepository; + egyptRepository; + logger = new common_1.Logger(MapRefinementService_1.name); + constructor(dataSource, candidateRepository, jordanRepository, syriaRepository, egyptRepository) { + this.dataSource = dataSource; + this.candidateRepository = candidateRepository; + this.jordanRepository = jordanRepository; + this.syriaRepository = syriaRepository; + this.egyptRepository = egyptRepository; + } + async suggestPlace(dto, submittedBy) { + const lat = parseFloat(dto.lat || dto.latitude); + const lng = parseFloat(dto.lng || dto.longitude); + const country = (dto.country || 'JORDAN').toUpperCase(); + if (isNaN(lat) || isNaN(lng)) { + throw new Error('Invalid coordinates: Latitude and Longitude must be numbers'); + } + this.logger.log(`📍 Suggesting place: ${dto.name} at [${lat}, ${lng}]. Performing spatial enrichment...`); + const enrichment = await this.dataSource.query(` + SELECT + g.id as gov_id, g.name_ar as gov_name, + d.id as dist_id, d.name_ar as dist_name, + s.id as sub_id, s.name_ar as sub_name, + n.id as neigh_id, n.name_ar as neigh_name + FROM (SELECT ST_SetSRID(ST_MakePoint($1, $2), 4326) as p) p + LEFT JOIN admin_boundaries g ON g.admin_level = 4 AND ST_Within(p.p::geometry, g.geom::geometry) + LEFT JOIN admin_boundaries d ON d.admin_level = 6 AND ST_Within(p.p::geometry, d.geom::geometry) + LEFT JOIN admin_boundaries s ON s.admin_level = 8 AND ST_Within(p.p::geometry, s.geom::geometry) + LEFT JOIN neighborhood_polygons n ON ST_Within(p.p::geometry, n.geometry::geometry) + LIMIT 1 + `, [lng, lat]); + const spatialData = enrichment[0] || {}; + const isArabic = (text) => /[\u0600-\u06FF]/.test(text); + const nameAr = dto.name_ar || (isArabic(dto.name) ? dto.name : null); + const nameEn = dto.name_en || (!isArabic(dto.name) ? dto.name : null); + const candidate = this.candidateRepository.create({ + name: dto.name, + name_ar: nameAr, + name_en: nameEn, + category: dto.category, + address: dto.address, + latitude: lat, + longitude: lng, + submittedBy, + status: map_candidate_entity_1.CandidateStatus.PENDING, + country: country, + location: { + type: 'Point', + coordinates: [lng, lat], + }, + governorate_id: spatialData.gov_id, + district_id: spatialData.dist_id, + sub_district_id: spatialData.sub_id, + neighborhood_id: spatialData.neigh_id + }); + const saved = await this.candidateRepository.save(candidate); + this.logger.log(`✅ Success: Candidate ${saved.id} enriched with Gov:${saved.governorate_id}, Neigh:${spatialData.neigh_id}`); + this.runExternalVerification(saved.id).catch(err => this.logger.error(`❌ Verification failed for ${saved.id}: ${err.message}`)); + return { + ...saved, + governorate_name: spatialData.gov_name, + district_name: spatialData.dist_name, + neighborhood_name: spatialData.neigh_name, + location_wkt: `POINT(${lng} ${lat})` + }; + } + async runExternalVerification(candidateId) { + const candidate = await this.candidateRepository.findOne({ where: { id: candidateId } }); + if (!candidate) + return; + this.logger.log(`🔍 Starting automated verification for candidate ${candidate.id}...`); + try { + const axios = require('axios'); + const searchUrl = `https://duckduckgo.com/html/?q=${candidate.latitude},${candidate.longitude}`; + const response = await axios.get(searchUrl, { + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' + }, + timeout: 10000 + }); + const html = response.data; + const titleMatch = html.match(/([^<]+)<\/title>/); + if (titleMatch) { + let officialName = titleMatch[1].replace(' at DuckDuckGo', '').replace(' - DuckDuckGo', '').trim(); + const isCoordinates = /^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/.test(officialName); + if (!isCoordinates && officialName.length > 5) { + candidate.verified_name = officialName; + const cleanUser = candidate.name.toLowerCase().trim(); + const cleanOfficial = officialName.toLowerCase(); + if (cleanOfficial.includes(cleanUser) || cleanUser.includes(cleanOfficial)) { + candidate.confidence_score = 90; + } + else { + candidate.confidence_score = 60; + } + this.logger.log(`🎯 Verified: Found "${officialName}" near suggestion. Trust: ${candidate.confidence_score}%`); + } + else { + candidate.confidence_score = 10; + this.logger.log(`⚠️ No specific POI name found for coordinates ${candidate.latitude},${candidate.longitude}`); + } + } + candidate.verification_metadata = { + last_check: new Date().toISOString(), + source: 'DDG_SCRAPE' + }; + await this.candidateRepository.save(candidate); + } + catch (error) { + this.logger.error(`Automated verification error: ${error.message}`); + } + } + async getCandidates(status) { + const query = ` + SELECT + c.*, + g.name_ar as governorate_name, + d.name_ar as district_name, + n.name_ar as neighborhood_name + FROM map_candidates c + LEFT JOIN admin_boundaries g ON c.governorate_id = g.id + LEFT JOIN admin_boundaries d ON c.district_id = d.id + LEFT JOIN neighborhood_polygons n ON c.neighborhood_id = n.id + ${status ? 'WHERE c.status = $1' : ''} + ORDER BY c.created_at DESC + `; + return this.candidateRepository.query(query, status ? [status] : []); + } + async approveCandidate(id) { + const candidate = await this.candidateRepository.findOne({ where: { id } }); + if (!candidate) + throw new common_1.NotFoundException('Candidate not found'); + const placeData = { + latitude: candidate.latitude, + longitude: candidate.longitude, + name: candidate.name, + name_ar: candidate.name_ar, + name_en: candidate.name_en, + category: candidate.category, + address: candidate.address, + description: candidate.description, + location: candidate.location, + source: `suggested_by_${candidate.submittedBy}`, + }; + let repo; + switch (candidate.country) { + case map_candidate_entity_1.CountryCode.SYRIA: + repo = this.syriaRepository; + break; + case map_candidate_entity_1.CountryCode.EGYPT: + repo = this.egyptRepository; + break; + default: repo = this.jordanRepository; + } + const approvedPlace = repo.create(placeData); + await repo.save(approvedPlace); + candidate.status = map_candidate_entity_1.CandidateStatus.APPROVED; + await this.candidateRepository.save(candidate); + this.logger.log(`✅ Approved candidate ${id}: ${candidate.name} moved to production.`); + return { success: true, place: approvedPlace }; + } + async rejectCandidate(id, reason) { + const candidate = await this.candidateRepository.findOne({ where: { id } }); + if (!candidate) + throw new common_1.NotFoundException('Candidate not found'); + candidate.status = map_candidate_entity_1.CandidateStatus.REJECTED; + candidate.rejectionReason = reason; + return this.candidateRepository.save(candidate); + } +}; +exports.MapRefinementService = MapRefinementService; +exports.MapRefinementService = MapRefinementService = MapRefinementService_1 = __decorate([ + (0, common_1.Injectable)(), + __param(1, (0, typeorm_1.InjectRepository)(map_candidate_entity_1.MapCandidate)), + __param(2, (0, typeorm_1.InjectRepository)(place_jordan_entity_1.PlaceJordan)), + __param(3, (0, typeorm_1.InjectRepository)(place_syria_entity_1.PlaceSyria)), + __param(4, (0, typeorm_1.InjectRepository)(place_egypt_entity_1.PlaceEgypt)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.DataSource !== "undefined" && typeorm_2.DataSource) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, typeof (_c = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _c : Object, typeof (_d = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _d : Object, typeof (_e = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _e : Object]) +], MapRefinementService); +//# sourceMappingURL=map-refinement.service.js.map \ No newline at end of file diff --git a/apps/api/dist/geocoding/map-refinement.service.js.map b/apps/api/dist/geocoding/map-refinement.service.js.map new file mode 100644 index 0000000..e8b0921 --- /dev/null +++ b/apps/api/dist/geocoding/map-refinement.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"map-refinement.service.js","sourceRoot":"","sources":["../../src/geocoding/map-refinement.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/main.js b/apps/api/dist/main.js index b92f9fc..f117e82 100644 --- a/apps/api/dist/main.js +++ b/apps/api/dist/main.js @@ -9,9 +9,21 @@ const swagger_1 = require("@nestjs/swagger"); const helmet_1 = __importDefault(require("helmet")); const app_module_1 = require("./app.module"); async function bootstrap() { - const app = await core_1.NestFactory.create(app_module_1.AppModule); + const app = await core_1.NestFactory.create(app_module_1.AppModule, { + logger: ['error', 'warn', 'log', 'debug', 'verbose'], + }); + const httpAdapter = app.getHttpAdapter(); + if (httpAdapter && httpAdapter.getInstance && typeof httpAdapter.getInstance().set === 'function') { + httpAdapter.getInstance().set('trust proxy', 1); + } app.use((0, helmet_1.default)()); - app.enableCors(); + app.enableCors({ + origin: process.env.ALLOWED_ORIGINS + ? process.env.ALLOWED_ORIGINS.split(',') + : ['http://localhost:3204', 'http://localhost:5173', 'https://map-saas.intaleqapp.com'], + methods: 'GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS', + credentials: true, + }); app.setGlobalPrefix('api'); app.useGlobalPipes(new common_1.ValidationPipe({ whitelist: true, diff --git a/apps/api/dist/main.js.map b/apps/api/dist/main.js.map index 030e093..18cada9 100644 --- a/apps/api/dist/main.js.map +++ b/apps/api/dist/main.js.map @@ -1 +1 @@ -{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;AAAA,uCAAsD;AACtD,2CAAgD;AAChD,6CAAiE;AACjE,oDAA4B;AAC5B,6CAAyC;AAEzC,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IAGhD,GAAG,CAAC,GAAG,CAAC,IAAA,gBAAM,GAAE,CAAC,CAAC;IAGlB,GAAG,CAAC,UAAU,EAAE,CAAC;IAGjB,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAG3B,GAAG,CAAC,cAAc,CAAC,IAAI,uBAAc,CAAC;QACpC,SAAS,EAAE,IAAI;QACf,oBAAoB,EAAE,IAAI;QAC1B,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC,CAAC;IAGJ,MAAM,MAAM,GAAG,IAAI,yBAAe,EAAE;SACjC,QAAQ,CAAC,yBAAyB,CAAC;SACnC,cAAc,CAAC,wEAAwE,CAAC;SACxF,UAAU,CAAC,KAAK,CAAC;SACjB,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC;SAC3E,MAAM,CAAC,MAAM,CAAC;SACd,MAAM,CAAC,WAAW,CAAC;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,KAAK,EAAE,CAAC;IAEX,MAAM,QAAQ,GAAG,uBAAa,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3D,uBAAa,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC1C,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,qDAAqD,IAAI,MAAM,CAAC,CAAC;AAC/E,CAAC;AACD,SAAS,EAAE,CAAC"} \ No newline at end of file +{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";;;;;AAAA,uCAA2C;AAC3C,2CAAgD;AAChD,6CAAiE;AACjE,oDAA4B;AAE5B,6CAAyC;AAEzC,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,EAAE;QAC9C,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC;KACrD,CAAC,CAAC;IAGH,MAAM,WAAW,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;IACzC,IAAI,WAAW,IAAI,WAAW,CAAC,WAAW,IAAI,OAAO,WAAW,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;QAClG,WAAW,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAGD,GAAG,CAAC,GAAG,CAAC,IAAA,gBAAM,GAAE,CAAC,CAAC;IAGlB,GAAG,CAAC,UAAU,CAAC;QACb,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;YACjC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC;YACxC,CAAC,CAAC,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,iCAAiC,CAAC;QACzF,OAAO,EAAE,wCAAwC;QACjD,WAAW,EAAE,IAAI;KAClB,CAAC,CAAC;IAGH,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IAG3B,GAAG,CAAC,cAAc,CAAC,IAAI,uBAAc,CAAC;QACpC,SAAS,EAAE,IAAI;QACf,oBAAoB,EAAE,IAAI;QAC1B,SAAS,EAAE,IAAI;KAChB,CAAC,CAAC,CAAC;IAGJ,MAAM,MAAM,GAAG,IAAI,yBAAe,EAAE;SACjC,QAAQ,CAAC,yBAAyB,CAAC;SACnC,cAAc,CAAC,wEAAwE,CAAC;SACxF,UAAU,CAAC,KAAK,CAAC;SACjB,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,WAAW,CAAC;SAC3E,MAAM,CAAC,MAAM,CAAC;SACd,MAAM,CAAC,WAAW,CAAC;SACnB,MAAM,CAAC,WAAW,CAAC;SACnB,KAAK,EAAE,CAAC;IAEX,MAAM,QAAQ,GAAG,uBAAa,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3D,uBAAa,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE3C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC1C,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,qDAAqD,IAAI,MAAM,CAAC,CAAC;AAC/E,CAAC;AACD,SAAS,EAAE,CAAC"} \ No newline at end of file diff --git a/apps/api/dist/maps/candidate-road.entity.d.ts b/apps/api/dist/maps/candidate-road.entity.d.ts index df55765..e81adbf 100644 --- a/apps/api/dist/maps/candidate-road.entity.d.ts +++ b/apps/api/dist/maps/candidate-road.entity.d.ts @@ -7,6 +7,10 @@ export declare class CandidateRoad { lengthMeters: number; confidence: number; status: string; + source: string; + name: string; + highway: string; + oneway: number; discoveredAt: Date; reviewedAt: Date; } diff --git a/apps/api/dist/maps/candidate-road.entity.js b/apps/api/dist/maps/candidate-road.entity.js index 72a2fc6..8321d49 100644 --- a/apps/api/dist/maps/candidate-road.entity.js +++ b/apps/api/dist/maps/candidate-road.entity.js @@ -20,6 +20,10 @@ let CandidateRoad = class CandidateRoad { lengthMeters; confidence; status; + source; + name; + highway; + oneway; discoveredAt; reviewedAt; }; @@ -62,6 +66,22 @@ __decorate([ (0, typeorm_1.Column)({ default: 'pending' }), __metadata("design:type", String) ], CandidateRoad.prototype, "status", void 0); +__decorate([ + (0, typeorm_1.Column)({ default: 'telemetry' }), + __metadata("design:type", String) +], CandidateRoad.prototype, "source", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'varchar', length: 255, nullable: true }), + __metadata("design:type", String) +], CandidateRoad.prototype, "name", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'varchar', length: 32, nullable: true }), + __metadata("design:type", String) +], CandidateRoad.prototype, "highway", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'smallint', default: 0 }), + __metadata("design:type", Number) +], CandidateRoad.prototype, "oneway", void 0); __decorate([ (0, typeorm_1.CreateDateColumn)(), __metadata("design:type", Date) diff --git a/apps/api/dist/maps/candidate-road.entity.js.map b/apps/api/dist/maps/candidate-road.entity.js.map index 8288d6f..623e0f9 100644 --- a/apps/api/dist/maps/candidate-road.entity.js.map +++ b/apps/api/dist/maps/candidate-road.entity.js.map @@ -1 +1 @@ -{"version":3,"file":"candidate-road.entity.js","sourceRoot":"","sources":["../../src/maps/candidate-road.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA0F;AASnF,IAAM,aAAa,GAAnB,MAAM,aAAa;IAExB,EAAE,CAAS;IAWX,QAAQ,CAAM;IAKd,iBAAiB,CAAS;IAK1B,WAAW,CAAS;IAKpB,YAAY,CAAS;IAKrB,YAAY,CAAS;IAKrB,UAAU,CAAS;IAKnB,MAAM,CAAS;IAGf,YAAY,CAAO;IAGnB,UAAU,CAAO;CAClB,CAAA;AAlDY,sCAAa;AAExB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;yCACpB;AAWX;IAPC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,WAAW;QACjB,kBAAkB,EAAE,YAAY;QAChC,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,KAAK;KAChB,CAAC;IACD,IAAA,eAAK,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;+CACX;AAKd;IADC,IAAA,gBAAM,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;wDACJ;AAK1B;IADC,IAAA,gBAAM,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;kDACV;AAKpB;IADC,IAAA,gBAAM,EAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;mDACX;AAKrB;IADC,IAAA,gBAAM,EAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;mDACX;AAKrB;IADC,IAAA,gBAAM,EAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;iDACb;AAKnB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;;6CAChB;AAGf;IADC,IAAA,0BAAgB,GAAE;8BACL,IAAI;mDAAC;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAClC,IAAI;iDAAC;wBAjDN,aAAa;IADzB,IAAA,gBAAM,EAAC,iBAAiB,CAAC;GACb,aAAa,CAkDzB"} \ No newline at end of file +{"version":3,"file":"candidate-road.entity.js","sourceRoot":"","sources":["../../src/maps/candidate-road.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA0F;AASnF,IAAM,aAAa,GAAnB,MAAM,aAAa;IAExB,EAAE,CAAS;IAWX,QAAQ,CAAM;IAKd,iBAAiB,CAAS;IAK1B,WAAW,CAAS;IAKpB,YAAY,CAAS;IAKrB,YAAY,CAAS;IAKrB,UAAU,CAAS;IAKnB,MAAM,CAAS;IAKf,MAAM,CAAS;IAKf,IAAI,CAAS;IAKb,OAAO,CAAS;IAMhB,MAAM,CAAS;IAGf,YAAY,CAAO;IAGnB,UAAU,CAAO;CAClB,CAAA;AAvEY,sCAAa;AAExB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;yCACpB;AAWX;IAPC,IAAA,gBAAM,EAAC;QACN,IAAI,EAAE,WAAW;QACjB,kBAAkB,EAAE,YAAY;QAChC,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,KAAK;KAChB,CAAC;IACD,IAAA,eAAK,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;;+CACX;AAKd;IADC,IAAA,gBAAM,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;wDACJ;AAK1B;IADC,IAAA,gBAAM,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;kDACV;AAKpB;IADC,IAAA,gBAAM,EAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;mDACX;AAKrB;IADC,IAAA,gBAAM,EAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;mDACX;AAKrB;IADC,IAAA,gBAAM,EAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;iDACb;AAKnB;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;;6CAChB;AAKf;IADC,IAAA,gBAAM,EAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;;6CAClB;AAKf;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CAC5C;AAKb;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;8CACxC;AAMhB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;6CAC1B;AAGf;IADC,IAAA,0BAAgB,GAAE;8BACL,IAAI;mDAAC;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BAClC,IAAI;iDAAC;wBAtEN,aAAa;IADzB,IAAA,gBAAM,EAAC,iBAAiB,CAAC;GACb,aAAa,CAuEzB"} \ No newline at end of file diff --git a/apps/api/dist/maps/maps.controller.d.ts b/apps/api/dist/maps/maps.controller.d.ts index c3ca4a2..dc8d8c0 100644 --- a/apps/api/dist/maps/maps.controller.d.ts +++ b/apps/api/dist/maps/maps.controller.d.ts @@ -1,16 +1,24 @@ +import type { Response } from 'express'; import { MapsService } from './maps.service'; export declare class MapsController { private readonly mapsService; constructor(mapsService: MapsService); + syncRoutes(): Promise<{ + success: boolean; + message: string; + }>; + getStyleJson(theme: string, res: Response): Promise<any>; getRoute(query: any): Promise<{ + routeName: any; + tags: any; distance: any; - duration: number; - trafficAwareDuration: number; + duration: any; trafficFactor: number; startName: string; endName: string; points: any; bbox: any; + instructions: any; alternatives: any; }>; getConfig(): Promise<{ diff --git a/apps/api/dist/maps/maps.controller.js b/apps/api/dist/maps/maps.controller.js index d7a3931..06ae00b 100644 --- a/apps/api/dist/maps/maps.controller.js +++ b/apps/api/dist/maps/maps.controller.js @@ -1,10 +1,43 @@ "use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; @@ -15,6 +48,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.MapsController = void 0; const common_1 = require("@nestjs/common"); const swagger_1 = require("@nestjs/swagger"); +const fs = __importStar(require("fs")); +const path = __importStar(require("path")); const maps_service_1 = require("./maps.service"); const api_key_guard_1 = require("../common/guards/api-key.guard"); let MapsController = class MapsController { @@ -22,6 +57,55 @@ let MapsController = class MapsController { constructor(mapsService) { this.mapsService = mapsService; } + async syncRoutes() { + return this.mapsService.requestRoutingSync(); + } + async getStyleJson(theme, res) { + const isDark = theme === 'obsidian'; + const filename = isDark ? 'style-dark.json' : 'style.json'; + const fallbackFilename = 'style.json'; + const pathsToCheck = [ + path.join('/data', filename), + path.join(process.cwd(), '../../', filename), + path.join(process.cwd(), filename), + path.join('/data', fallbackFilename), + path.join(process.cwd(), '../../', fallbackFilename), + path.join(process.cwd(), fallbackFilename), + ]; + let stylePath = ''; + for (const p of pathsToCheck) { + if (fs.existsSync(p)) { + stylePath = p; + break; + } + } + if (!stylePath) { + return res.status(404).send('Style not found'); + } + try { + const styleRaw = fs.readFileSync(stylePath, 'utf8'); + const styleObj = JSON.parse(styleRaw); + if (theme === 'light') { + styleObj.layers.forEach((layer) => { + if (layer.id === 'background') { + layer.paint['background-color'] = '#FFFFFF'; + } + }); + } + else if (theme === 'obsidian') { + styleObj.layers.forEach((layer) => { + if (layer.id === 'background') { + layer.paint['background-color'] = '#101014'; + } + }); + } + res.setHeader('Content-Type', 'application/json'); + res.send(styleObj); + } + catch (e) { + res.status(500).send('Error parsing style.json'); + } + } async getRoute(query) { const waypoints = []; if (query.fromLat && query.fromLng) { @@ -45,13 +129,32 @@ let MapsController = class MapsController { waypoints.push([parseFloat(query.toLat), parseFloat(query.toLng)]); } const profile = query.profile || 'car'; - return this.mapsService.getRoute(waypoints, profile); + const steps = query.steps === 'true'; + const locale = query.locale || 'en'; + const alternatives = query.alternatives === 'true'; + return this.mapsService.getRoute(waypoints, profile, steps, locale, alternatives); } async getConfig() { return this.mapsService.getMapConfig(); } }; exports.MapsController = MapsController; +__decorate([ + (0, common_1.Post)('sync-routes'), + (0, swagger_1.ApiOperation)({ summary: 'Request GraphHopper routing sync 🔄' }), + __metadata("design:type", Function), + __metadata("design:paramtypes", []), + __metadata("design:returntype", Promise) +], MapsController.prototype, "syncRoutes", null); +__decorate([ + (0, common_1.Get)('style.json'), + (0, swagger_1.ApiOperation)({ summary: 'Get MapLibre style JSON 🎨' }), + __param(0, (0, common_1.Query)('theme')), + __param(1, (0, common_1.Res)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String, Object]), + __metadata("design:returntype", Promise) +], MapsController.prototype, "getStyleJson", null); __decorate([ (0, common_1.Get)('route'), (0, swagger_1.ApiOperation)({ summary: 'Calculate a route with dynamic waypoints 🚗' }), diff --git a/apps/api/dist/maps/maps.controller.js.map b/apps/api/dist/maps/maps.controller.js.map index a3a2199..611559d 100644 --- a/apps/api/dist/maps/maps.controller.js.map +++ b/apps/api/dist/maps/maps.controller.js.map @@ -1 +1 @@ -{"version":3,"file":"maps.controller.js","sourceRoot":"","sources":["../../src/maps/maps.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"maps.controller.js","sourceRoot":"","sources":["../../src/maps/maps.controller.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/maps/maps.service.d.ts b/apps/api/dist/maps/maps.service.d.ts index 65b4fb9..22e1bb3 100644 --- a/apps/api/dist/maps/maps.service.d.ts +++ b/apps/api/dist/maps/maps.service.d.ts @@ -1,26 +1,36 @@ import { ConfigService } from '@nestjs/config'; -import { Repository } from 'typeorm'; +import { Repository, DataSource } from 'typeorm'; import { RoadSegmentStat } from './road-stat.entity'; import { TrafficGridService } from './traffic-grid.service'; import { GeocodingService } from '../geocoding/geocoding.service'; +import { RedisService } from '../common/redis.service'; export declare class MapsService { private configService; private roadStatRepo; private trafficGrid; private geocodingService; + private dataSource; + private redisService; private readonly graphHopperUrl; - constructor(configService: ConfigService, roadStatRepo: Repository<RoadSegmentStat>, trafficGrid: TrafficGridService, geocodingService: GeocodingService); - getRoute(waypoints: [number, number][], profile?: string): Promise<{ + constructor(configService: ConfigService, roadStatRepo: Repository<RoadSegmentStat>, trafficGrid: TrafficGridService, geocodingService: GeocodingService, dataSource: DataSource, redisService: RedisService); + requestRoutingSync(): Promise<{ + success: boolean; + message: string; + }>; + getRoute(waypoints: [number, number][], profile?: string, steps?: boolean, locale?: string, alternatives?: boolean): Promise<{ + routeName: any; + tags: any; distance: any; - duration: number; - trafficAwareDuration: number; + duration: any; trafficFactor: number; startName: string; endName: string; points: any; bbox: any; + instructions: any; alternatives: any; }>; + private getRouteName; private decodePolyline; getMapConfig(): Promise<{ center: number[]; diff --git a/apps/api/dist/maps/maps.service.js b/apps/api/dist/maps/maps.service.js index a4da01f..a2a5bde 100644 --- a/apps/api/dist/maps/maps.service.js +++ b/apps/api/dist/maps/maps.service.js @@ -14,6 +14,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) { var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; +var _a, _b, _c; Object.defineProperty(exports, "__esModule", { value: true }); exports.MapsService = void 0; const common_1 = require("@nestjs/common"); @@ -24,20 +25,29 @@ const axios_1 = __importDefault(require("axios")); const road_stat_entity_1 = require("./road-stat.entity"); const traffic_grid_service_1 = require("./traffic-grid.service"); const geocoding_service_1 = require("../geocoding/geocoding.service"); +const redis_service_1 = require("../common/redis.service"); let MapsService = class MapsService { configService; roadStatRepo; trafficGrid; geocodingService; + dataSource; + redisService; graphHopperUrl; - constructor(configService, roadStatRepo, trafficGrid, geocodingService) { + constructor(configService, roadStatRepo, trafficGrid, geocodingService, dataSource, redisService) { this.configService = configService; this.roadStatRepo = roadStatRepo; this.trafficGrid = trafficGrid; this.geocodingService = geocodingService; + this.dataSource = dataSource; + this.redisService = redisService; this.graphHopperUrl = this.configService.get('GRAPH_HOPPER_URL', 'http://routing:8080'); } - async getRoute(waypoints, profile = 'car') { + async requestRoutingSync() { + await this.redisService.set('routing_sync_requested', '1'); + return { success: true, message: 'Routing sync requested and scheduled for the next minute.' }; + } + async getRoute(waypoints, profile = 'car', steps = false, locale = 'en', alternatives = false) { if (waypoints.length < 2) { throw new common_1.HttpException('At least two waypoints are required', common_1.HttpStatus.BAD_REQUEST); } @@ -68,19 +78,69 @@ let MapsService = class MapsService { const payload = { points: ghPoints, profile: profile, - locale: 'en', + locale: locale === 'en' ? 'ar' : locale, calc_points: true, points_encoded: true, + instructions: steps || true, }; - if (waypoints.length === 2) { + let closureCount = 0; + try { + const closedSegments = await this.dataSource.query(` + SELECT ST_AsGeoJSON( + ST_Transform(ST_Buffer(ST_Transform(geometry::geometry, 3857), 15), 4326), 6 + ) AS geojson + FROM road_segment_stats + WHERE "isClosed" = true AND geometry IS NOT NULL + LIMIT 50 + `); + const features = closedSegments + .map((s, i) => { + try { + return { type: 'Feature', id: `closed_${i}`, geometry: JSON.parse(s.geojson), properties: {} }; + } + catch { + return null; + } + }) + .filter(Boolean); + if (features.length > 0) { + payload['custom_model'] = { + priority: features.map((f) => ({ if: `in_${f.id}`, multiply_by: '0' })), + areas: { type: 'FeatureCollection', features }, + }; + payload['ch.disable'] = true; + closureCount = features.length; + console.log(`🚧 Routing: avoiding ${closureCount} closed segment(s).`); + } + } + catch (closureError) { + console.warn('⚠️ Could not load road closures for routing:', closureError.message); + } + if (alternatives && waypoints.length === 2) { payload.algorithm = 'alternative_route'; payload['ch.disable'] = true; payload['alternative_route.max_paths'] = 2; payload['alternative_route.max_weight_factor'] = 1.6; payload['alternative_route.max_share_factor'] = 0.6; } - console.log(`Routing Request: ${waypoints.length} points via ${profile} on ${this.graphHopperUrl}`); - const response = await axios_1.default.post(`${this.graphHopperUrl}/route`, payload, { timeout: 10000 }); + console.log(`Routing Request: ${waypoints.length} points via ${profile} on ${this.graphHopperUrl} | Steps: ${steps} | Locale: ${locale}`); + let response; + try { + response = await axios_1.default.post(`${this.graphHopperUrl}/route`, payload, { timeout: 10000 }); + } + catch (routeErr) { + if (closureCount > 0 && payload['custom_model']) { + const detail = routeErr.response ? JSON.stringify(routeErr.response.data) : routeErr.message; + console.warn(`⚠️ Closure-aware routing failed (${detail}). Retrying without closures...`); + delete payload['custom_model']; + if (!(alternatives && waypoints.length === 2)) + delete payload['ch.disable']; + response = await axios_1.default.post(`${this.graphHopperUrl}/route`, payload, { timeout: 10000 }); + } + else { + throw routeErr; + } + } console.log('Routing SUCCESS'); const paths = response.data.paths; if (!paths || paths.length === 0) @@ -93,22 +153,45 @@ let MapsService = class MapsService { const trafficFactor = this.trafficGrid.getTrafficFactor(coords, hr, dow); const baseDuration = route.time / 1000; const trafficAwareDuration = baseDuration * trafficFactor; - const alternatives = paths.slice(1).map(alt => ({ - distance: alt.distance, - duration: Math.round(alt.time / 1000), - points: alt.points, - bbox: alt.bbox - })); + const processedPaths = paths.map((p, index) => { + const pCoords = this.decodePolyline(p.points); + const pTrafficFactor = this.trafficGrid.getTrafficFactor(pCoords, hr, dow); + const pDuration = Math.round((p.time / 1000) * pTrafficFactor); + const routeName = this.getRouteName(p.instructions); + const tags = []; + if (index === 0) + tags.push('FASTEST'); + if (paths.length > 1) { + const isShortest = paths.every((other) => p.distance <= other.distance); + if (isShortest) + tags.push('SHORTEST'); + if (index > 0 && !isShortest) + tags.push('ALTERNATIVE'); + } + return { + routeName: routeName ? `عبر ${routeName}` : `المسار ${index + 1}`, + tags, + distance: p.distance, + duration: pDuration, + points: p.points, + bbox: p.bbox, + instructions: steps ? p.instructions : undefined + }; + }); + const mainRoute = processedPaths[0]; + const altRoutes = processedPaths.slice(1); return { - distance: route.distance, - duration: Math.round(baseDuration), - trafficAwareDuration: Math.round(trafficAwareDuration), + routeName: mainRoute.routeName, + tags: mainRoute.tags, + distance: mainRoute.distance, + duration: mainRoute.duration, trafficFactor: Math.round(trafficFactor * 100) / 100, startName, endName, - points: route.points, - bbox: route.bbox, - alternatives: alternatives + points: mainRoute.points, + bbox: mainRoute.bbox, + instructions: mainRoute.instructions, + alternatives: altRoutes }; } catch (error) { @@ -117,6 +200,25 @@ let MapsService = class MapsService { throw new common_1.HttpException(`Routing Failure: ${msg}`, common_1.HttpStatus.BAD_GATEWAY); } } + getRouteName(instructions) { + if (!instructions || instructions.length === 0) + return null; + const streetDistances = {}; + for (const inst of instructions) { + if (inst.street_name && inst.street_name.trim() !== '') { + streetDistances[inst.street_name] = (streetDistances[inst.street_name] || 0) + (inst.distance || 0); + } + } + let longestStreet = null; + let maxDist = 0; + for (const [street, dist] of Object.entries(streetDistances)) { + if (dist > maxDist) { + maxDist = dist; + longestStreet = street; + } + } + return longestStreet; + } decodePolyline(encoded) { const points = []; let index = 0, len = encoded.length; @@ -155,9 +257,7 @@ exports.MapsService = MapsService; exports.MapsService = MapsService = __decorate([ (0, common_1.Injectable)(), __param(1, (0, typeorm_1.InjectRepository)(road_stat_entity_1.RoadSegmentStat)), - __metadata("design:paramtypes", [config_1.ConfigService, - typeorm_2.Repository, - traffic_grid_service_1.TrafficGridService, - geocoding_service_1.GeocodingService]) + __metadata("design:paramtypes", [typeof (_a = typeof config_1.ConfigService !== "undefined" && config_1.ConfigService) === "function" ? _a : Object, typeof (_b = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _b : Object, traffic_grid_service_1.TrafficGridService, + geocoding_service_1.GeocodingService, typeof (_c = typeof typeorm_2.DataSource !== "undefined" && typeorm_2.DataSource) === "function" ? _c : Object, redis_service_1.RedisService]) ], MapsService); //# sourceMappingURL=maps.service.js.map \ No newline at end of file diff --git a/apps/api/dist/maps/maps.service.js.map b/apps/api/dist/maps/maps.service.js.map index 6c015cd..c8ba2b5 100644 --- a/apps/api/dist/maps/maps.service.js.map +++ b/apps/api/dist/maps/maps.service.js.map @@ -1 +1 @@ -{"version":3,"file":"maps.service.js","sourceRoot":"","sources":["../../src/maps/maps.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"maps.service.js","sourceRoot":"","sources":["../../src/maps/maps.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/maps/traffic-grid.service.js b/apps/api/dist/maps/traffic-grid.service.js index ba86402..d165fc1 100644 --- a/apps/api/dist/maps/traffic-grid.service.js +++ b/apps/api/dist/maps/traffic-grid.service.js @@ -9,6 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var TrafficGridService_1; +var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.TrafficGridService = void 0; const common_1 = require("@nestjs/common"); @@ -118,6 +119,6 @@ let TrafficGridService = TrafficGridService_1 = class TrafficGridService { exports.TrafficGridService = TrafficGridService; exports.TrafficGridService = TrafficGridService = TrafficGridService_1 = __decorate([ (0, common_1.Injectable)(), - __metadata("design:paramtypes", [typeorm_1.DataSource]) + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_1.DataSource !== "undefined" && typeorm_1.DataSource) === "function" ? _a : Object]) ], TrafficGridService); //# sourceMappingURL=traffic-grid.service.js.map \ No newline at end of file diff --git a/apps/api/dist/maps/traffic-grid.service.js.map b/apps/api/dist/maps/traffic-grid.service.js.map index eedf3a2..207b02d 100644 --- a/apps/api/dist/maps/traffic-grid.service.js.map +++ b/apps/api/dist/maps/traffic-grid.service.js.map @@ -1 +1 @@ -{"version":3,"file":"traffic-grid.service.js","sourceRoot":"","sources":["../../src/maps/traffic-grid.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"traffic-grid.service.js","sourceRoot":"","sources":["../../src/maps/traffic-grid.service.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/telemetry/telemetry-analyzer.service.js b/apps/api/dist/telemetry/telemetry-analyzer.service.js index 864e778..cc91f48 100644 --- a/apps/api/dist/telemetry/telemetry-analyzer.service.js +++ b/apps/api/dist/telemetry/telemetry-analyzer.service.js @@ -270,17 +270,50 @@ let TelemetryAnalyzerService = TelemetryAnalyzerService_1 = class TelemetryAnaly FROM cluster_stats s JOIN cluster_path p ON s.cid = p.cid GROUP BY s.cid, s.drv_count, s.pt_count, s.avg_spd + ), + oneway_detect AS ( + -- 4. Detect one-way direction from telemetry heading data + SELECT + fc.cid, + DEGREES(ST_Azimuth( + ST_StartPoint(fc.geom::geometry), + ST_EndPoint(fc.geom::geometry) + )) AS geom_bearing, + AVG(tl.heading) AS avg_heading, + COUNT(*) AS heading_samples + FROM final_candidates fc + JOIN telemetry_logs tl ON ST_DWithin( + tl.location::geometry, + fc.geom::geometry, + 30 + ) + WHERE tl.speed > 3 + GROUP BY fc.cid, fc.geom + HAVING COUNT(*) >= 5 + ), + oneway_scored AS ( + SELECT + od.cid, + CASE + WHEN LEAST(ABS(od.avg_heading - od.geom_bearing), 360 - ABS(od.avg_heading - od.geom_bearing)) < 45 + AND od.heading_samples >= 10 THEN 1 + WHEN LEAST(ABS(od.avg_heading - (od.geom_bearing + 180) % 360), 360 - ABS(od.avg_heading - (od.geom_bearing + 180) % 360)) < 45 + AND od.heading_samples >= 10 THEN -1 + ELSE 0 + END AS oneway_val + FROM oneway_detect od ) - INSERT INTO candidate_roads (geometry, "uniqueDriverCount", "totalPoints", "averageSpeed", "lengthMeters", confidence, status) - SELECT geom, drv_count, pt_count, avg_spd, len, - -- SQL port of calculateConfidence logic + INSERT INTO candidate_roads (geometry, "uniqueDriverCount", "totalPoints", "averageSpeed", "lengthMeters", confidence, status, oneway) + SELECT fc.geom, fc.drv_count, fc.pt_count, fc.avg_spd, fc.len, ROUND(( - LEAST(drv_count::float / 5, 1.0) * 0.4 + - LEAST(pt_count::float / 50, 1.0) * 0.3 + - CASE WHEN len BETWEEN 50 AND 2000 THEN 0.3 ELSE 0.1 END + LEAST(fc.drv_count::float / 5, 1.0) * 0.4 + + LEAST(fc.pt_count::float / 50, 1.0) * 0.3 + + CASE WHEN fc.len BETWEEN 50 AND 2000 THEN 0.3 ELSE 0.1 END )::numeric, 2) as conf, - 'pending' - FROM final_candidates + 'pending', + COALESCE(os.oneway_val, 0) + FROM final_candidates fc + LEFT JOIN oneway_scored os ON os.cid = fc.cid RETURNING id; `; const result = await this.dataSource.query(query); diff --git a/apps/api/dist/tsconfig.build.tsbuildinfo b/apps/api/dist/tsconfig.build.tsbuildinfo index 6b920c8..d922536 100644 --- a/apps/api/dist/tsconfig.build.tsbuildinfo +++ b/apps/api/dist/tsconfig.build.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.dom.iterable.d.ts","../node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../node_modules/typescript/lib/lib.scripthost.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2016.intl.d.ts","../node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/typescript/lib/lib.es2023.intl.d.ts","../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/typescript/lib/lib.es2023.full.d.ts","../node_modules/reflect-metadata/index.d.ts","../node_modules/@nestjs/common/decorators/core/bind.decorator.d.ts","../node_modules/@nestjs/common/interfaces/abstract.interface.d.ts","../node_modules/@nestjs/common/interfaces/controllers/controller-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/controllers/controller.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/arguments-host.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/exception-filter.interface.d.ts","../node_modules/rxjs/dist/types/internal/subscription.d.ts","../node_modules/rxjs/dist/types/internal/subscriber.d.ts","../node_modules/rxjs/dist/types/internal/operator.d.ts","../node_modules/rxjs/dist/types/internal/observable.d.ts","../node_modules/rxjs/dist/types/internal/types.d.ts","../node_modules/rxjs/dist/types/internal/operators/audit.d.ts","../node_modules/rxjs/dist/types/internal/operators/audittime.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffer.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffercount.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffertime.d.ts","../node_modules/rxjs/dist/types/internal/operators/buffertoggle.d.ts","../node_modules/rxjs/dist/types/internal/operators/bufferwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/catcherror.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatestall.d.ts","../node_modules/rxjs/dist/types/internal/operators/combineall.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatest.d.ts","../node_modules/rxjs/dist/types/internal/operators/combinelatestwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/concat.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatall.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatmapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/concatwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/connect.d.ts","../node_modules/rxjs/dist/types/internal/operators/count.d.ts","../node_modules/rxjs/dist/types/internal/operators/debounce.d.ts","../node_modules/rxjs/dist/types/internal/operators/debouncetime.d.ts","../node_modules/rxjs/dist/types/internal/operators/defaultifempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/delay.d.ts","../node_modules/rxjs/dist/types/internal/operators/delaywhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/dematerialize.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinct.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinctuntilchanged.d.ts","../node_modules/rxjs/dist/types/internal/operators/distinctuntilkeychanged.d.ts","../node_modules/rxjs/dist/types/internal/operators/elementat.d.ts","../node_modules/rxjs/dist/types/internal/operators/endwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/every.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaustall.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaust.d.ts","../node_modules/rxjs/dist/types/internal/operators/exhaustmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/expand.d.ts","../node_modules/rxjs/dist/types/internal/operators/filter.d.ts","../node_modules/rxjs/dist/types/internal/operators/finalize.d.ts","../node_modules/rxjs/dist/types/internal/operators/find.d.ts","../node_modules/rxjs/dist/types/internal/operators/findindex.d.ts","../node_modules/rxjs/dist/types/internal/operators/first.d.ts","../node_modules/rxjs/dist/types/internal/subject.d.ts","../node_modules/rxjs/dist/types/internal/operators/groupby.d.ts","../node_modules/rxjs/dist/types/internal/operators/ignoreelements.d.ts","../node_modules/rxjs/dist/types/internal/operators/isempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/last.d.ts","../node_modules/rxjs/dist/types/internal/operators/map.d.ts","../node_modules/rxjs/dist/types/internal/operators/mapto.d.ts","../node_modules/rxjs/dist/types/internal/notification.d.ts","../node_modules/rxjs/dist/types/internal/operators/materialize.d.ts","../node_modules/rxjs/dist/types/internal/operators/max.d.ts","../node_modules/rxjs/dist/types/internal/operators/merge.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergeall.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergemap.d.ts","../node_modules/rxjs/dist/types/internal/operators/flatmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergemapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergescan.d.ts","../node_modules/rxjs/dist/types/internal/operators/mergewith.d.ts","../node_modules/rxjs/dist/types/internal/operators/min.d.ts","../node_modules/rxjs/dist/types/internal/observable/connectableobservable.d.ts","../node_modules/rxjs/dist/types/internal/operators/multicast.d.ts","../node_modules/rxjs/dist/types/internal/operators/observeon.d.ts","../node_modules/rxjs/dist/types/internal/operators/onerrorresumenextwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/pairwise.d.ts","../node_modules/rxjs/dist/types/internal/operators/partition.d.ts","../node_modules/rxjs/dist/types/internal/operators/pluck.d.ts","../node_modules/rxjs/dist/types/internal/operators/publish.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishbehavior.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishlast.d.ts","../node_modules/rxjs/dist/types/internal/operators/publishreplay.d.ts","../node_modules/rxjs/dist/types/internal/operators/race.d.ts","../node_modules/rxjs/dist/types/internal/operators/racewith.d.ts","../node_modules/rxjs/dist/types/internal/operators/reduce.d.ts","../node_modules/rxjs/dist/types/internal/operators/repeat.d.ts","../node_modules/rxjs/dist/types/internal/operators/repeatwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/retry.d.ts","../node_modules/rxjs/dist/types/internal/operators/retrywhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/refcount.d.ts","../node_modules/rxjs/dist/types/internal/operators/sample.d.ts","../node_modules/rxjs/dist/types/internal/operators/sampletime.d.ts","../node_modules/rxjs/dist/types/internal/operators/scan.d.ts","../node_modules/rxjs/dist/types/internal/operators/sequenceequal.d.ts","../node_modules/rxjs/dist/types/internal/operators/share.d.ts","../node_modules/rxjs/dist/types/internal/operators/sharereplay.d.ts","../node_modules/rxjs/dist/types/internal/operators/single.d.ts","../node_modules/rxjs/dist/types/internal/operators/skip.d.ts","../node_modules/rxjs/dist/types/internal/operators/skiplast.d.ts","../node_modules/rxjs/dist/types/internal/operators/skipuntil.d.ts","../node_modules/rxjs/dist/types/internal/operators/skipwhile.d.ts","../node_modules/rxjs/dist/types/internal/operators/startwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/subscribeon.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchall.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchmap.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchmapto.d.ts","../node_modules/rxjs/dist/types/internal/operators/switchscan.d.ts","../node_modules/rxjs/dist/types/internal/operators/take.d.ts","../node_modules/rxjs/dist/types/internal/operators/takelast.d.ts","../node_modules/rxjs/dist/types/internal/operators/takeuntil.d.ts","../node_modules/rxjs/dist/types/internal/operators/takewhile.d.ts","../node_modules/rxjs/dist/types/internal/operators/tap.d.ts","../node_modules/rxjs/dist/types/internal/operators/throttle.d.ts","../node_modules/rxjs/dist/types/internal/operators/throttletime.d.ts","../node_modules/rxjs/dist/types/internal/operators/throwifempty.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeinterval.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeout.d.ts","../node_modules/rxjs/dist/types/internal/operators/timeoutwith.d.ts","../node_modules/rxjs/dist/types/internal/operators/timestamp.d.ts","../node_modules/rxjs/dist/types/internal/operators/toarray.d.ts","../node_modules/rxjs/dist/types/internal/operators/window.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowcount.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowtime.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowtoggle.d.ts","../node_modules/rxjs/dist/types/internal/operators/windowwhen.d.ts","../node_modules/rxjs/dist/types/internal/operators/withlatestfrom.d.ts","../node_modules/rxjs/dist/types/internal/operators/zip.d.ts","../node_modules/rxjs/dist/types/internal/operators/zipall.d.ts","../node_modules/rxjs/dist/types/internal/operators/zipwith.d.ts","../node_modules/rxjs/dist/types/operators/index.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/action.d.ts","../node_modules/rxjs/dist/types/internal/scheduler.d.ts","../node_modules/rxjs/dist/types/internal/testing/testmessage.d.ts","../node_modules/rxjs/dist/types/internal/testing/subscriptionlog.d.ts","../node_modules/rxjs/dist/types/internal/testing/subscriptionloggable.d.ts","../node_modules/rxjs/dist/types/internal/testing/coldobservable.d.ts","../node_modules/rxjs/dist/types/internal/testing/hotobservable.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asyncscheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/timerhandle.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asyncaction.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/virtualtimescheduler.d.ts","../node_modules/rxjs/dist/types/internal/testing/testscheduler.d.ts","../node_modules/rxjs/dist/types/testing/index.d.ts","../node_modules/rxjs/dist/types/internal/symbol/observable.d.ts","../node_modules/rxjs/dist/types/internal/observable/dom/animationframes.d.ts","../node_modules/rxjs/dist/types/internal/behaviorsubject.d.ts","../node_modules/rxjs/dist/types/internal/replaysubject.d.ts","../node_modules/rxjs/dist/types/internal/asyncsubject.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asapscheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/asap.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/async.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/queuescheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/queue.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/animationframescheduler.d.ts","../node_modules/rxjs/dist/types/internal/scheduler/animationframe.d.ts","../node_modules/rxjs/dist/types/internal/util/identity.d.ts","../node_modules/rxjs/dist/types/internal/util/pipe.d.ts","../node_modules/rxjs/dist/types/internal/util/noop.d.ts","../node_modules/rxjs/dist/types/internal/util/isobservable.d.ts","../node_modules/rxjs/dist/types/internal/lastvaluefrom.d.ts","../node_modules/rxjs/dist/types/internal/firstvaluefrom.d.ts","../node_modules/rxjs/dist/types/internal/util/argumentoutofrangeerror.d.ts","../node_modules/rxjs/dist/types/internal/util/emptyerror.d.ts","../node_modules/rxjs/dist/types/internal/util/notfounderror.d.ts","../node_modules/rxjs/dist/types/internal/util/objectunsubscribederror.d.ts","../node_modules/rxjs/dist/types/internal/util/sequenceerror.d.ts","../node_modules/rxjs/dist/types/internal/util/unsubscriptionerror.d.ts","../node_modules/rxjs/dist/types/internal/observable/bindcallback.d.ts","../node_modules/rxjs/dist/types/internal/observable/bindnodecallback.d.ts","../node_modules/rxjs/dist/types/internal/anycatcher.d.ts","../node_modules/rxjs/dist/types/internal/observable/combinelatest.d.ts","../node_modules/rxjs/dist/types/internal/observable/concat.d.ts","../node_modules/rxjs/dist/types/internal/observable/connectable.d.ts","../node_modules/rxjs/dist/types/internal/observable/defer.d.ts","../node_modules/rxjs/dist/types/internal/observable/empty.d.ts","../node_modules/rxjs/dist/types/internal/observable/forkjoin.d.ts","../node_modules/rxjs/dist/types/internal/observable/from.d.ts","../node_modules/rxjs/dist/types/internal/observable/fromevent.d.ts","../node_modules/rxjs/dist/types/internal/observable/fromeventpattern.d.ts","../node_modules/rxjs/dist/types/internal/observable/generate.d.ts","../node_modules/rxjs/dist/types/internal/observable/iif.d.ts","../node_modules/rxjs/dist/types/internal/observable/interval.d.ts","../node_modules/rxjs/dist/types/internal/observable/merge.d.ts","../node_modules/rxjs/dist/types/internal/observable/never.d.ts","../node_modules/rxjs/dist/types/internal/observable/of.d.ts","../node_modules/rxjs/dist/types/internal/observable/onerrorresumenext.d.ts","../node_modules/rxjs/dist/types/internal/observable/pairs.d.ts","../node_modules/rxjs/dist/types/internal/observable/partition.d.ts","../node_modules/rxjs/dist/types/internal/observable/race.d.ts","../node_modules/rxjs/dist/types/internal/observable/range.d.ts","../node_modules/rxjs/dist/types/internal/observable/throwerror.d.ts","../node_modules/rxjs/dist/types/internal/observable/timer.d.ts","../node_modules/rxjs/dist/types/internal/observable/using.d.ts","../node_modules/rxjs/dist/types/internal/observable/zip.d.ts","../node_modules/rxjs/dist/types/internal/scheduled/scheduled.d.ts","../node_modules/rxjs/dist/types/internal/config.d.ts","../node_modules/rxjs/dist/types/index.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/ws-exception-filter.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validation-error.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/execution-context.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/can-activate.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/custom-route-param-factory.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/nest-interceptor.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/paramtype.interface.d.ts","../node_modules/@nestjs/common/interfaces/type.interface.d.ts","../node_modules/@nestjs/common/interfaces/features/pipe-transform.interface.d.ts","../node_modules/@nestjs/common/enums/request-method.enum.d.ts","../node_modules/@nestjs/common/enums/http-status.enum.d.ts","../node_modules/@nestjs/common/enums/shutdown-signal.enum.d.ts","../node_modules/@nestjs/common/enums/version-type.enum.d.ts","../node_modules/@nestjs/common/enums/index.d.ts","../node_modules/@nestjs/common/interfaces/version-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-configuration.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-consumer.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/middleware-config-proxy.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/nest-middleware.interface.d.ts","../node_modules/@nestjs/common/interfaces/middleware/index.d.ts","../node_modules/@nestjs/common/interfaces/global-prefix-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/before-application-shutdown.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-application-bootstrap.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-application-shutdown.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-destroy.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/on-init.interface.d.ts","../node_modules/@nestjs/common/interfaces/hooks/index.d.ts","../node_modules/@nestjs/common/interfaces/http/http-exception-body.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/http-redirect-response.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/cors-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/https-options.interface.d.ts","../node_modules/@nestjs/common/services/logger.service.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-context-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/http-server.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/message-event.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/raw-body-request.interface.d.ts","../node_modules/@nestjs/common/interfaces/http/index.d.ts","../node_modules/@nestjs/common/interfaces/injectable.interface.d.ts","../node_modules/@nestjs/common/interfaces/microservices/nest-hybrid-application-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/forward-reference.interface.d.ts","../node_modules/@nestjs/common/interfaces/scope-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/injection-token.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/optional-factory-dependency.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/provider.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/module-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/dynamic-module.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/introspection-result.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/nest-module.interface.d.ts","../node_modules/@nestjs/common/interfaces/modules/index.d.ts","../node_modules/@nestjs/common/interfaces/shutdown-hooks-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-application-context.interface.d.ts","../node_modules/@nestjs/common/interfaces/websockets/web-socket-adapter.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-application.interface.d.ts","../node_modules/@nestjs/common/interfaces/nest-microservice.interface.d.ts","../node_modules/@nestjs/common/interfaces/index.d.ts","../node_modules/@nestjs/common/decorators/core/catch.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/controller.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/dependencies.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/exception-filters.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/inject.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/injectable.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/optional.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/set-metadata.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-guards.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-interceptors.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/use-pipes.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/apply-decorators.d.ts","../node_modules/@nestjs/common/decorators/core/version.decorator.d.ts","../node_modules/@nestjs/common/decorators/core/index.d.ts","../node_modules/@nestjs/common/decorators/modules/global.decorator.d.ts","../node_modules/@nestjs/common/decorators/modules/module.decorator.d.ts","../node_modules/@nestjs/common/decorators/modules/index.d.ts","../node_modules/@nestjs/common/decorators/http/request-mapping.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/route-params.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/http-code.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/create-route-param-metadata.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/render.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/header.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/redirect.decorator.d.ts","../node_modules/@nestjs/common/constants.d.ts","../node_modules/@nestjs/common/decorators/http/sse.decorator.d.ts","../node_modules/@nestjs/common/decorators/http/index.d.ts","../node_modules/@nestjs/common/decorators/index.d.ts","../node_modules/@nestjs/common/exceptions/intrinsic.exception.d.ts","../node_modules/@nestjs/common/exceptions/http.exception.d.ts","../node_modules/@nestjs/common/exceptions/bad-gateway.exception.d.ts","../node_modules/@nestjs/common/exceptions/bad-request.exception.d.ts","../node_modules/@nestjs/common/exceptions/conflict.exception.d.ts","../node_modules/@nestjs/common/exceptions/forbidden.exception.d.ts","../node_modules/@nestjs/common/exceptions/gateway-timeout.exception.d.ts","../node_modules/@nestjs/common/exceptions/gone.exception.d.ts","../node_modules/@nestjs/common/exceptions/http-version-not-supported.exception.d.ts","../node_modules/@nestjs/common/exceptions/im-a-teapot.exception.d.ts","../node_modules/@nestjs/common/exceptions/internal-server-error.exception.d.ts","../node_modules/@nestjs/common/exceptions/method-not-allowed.exception.d.ts","../node_modules/@nestjs/common/exceptions/misdirected.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-acceptable.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-found.exception.d.ts","../node_modules/@nestjs/common/exceptions/not-implemented.exception.d.ts","../node_modules/@nestjs/common/exceptions/payload-too-large.exception.d.ts","../node_modules/@nestjs/common/exceptions/precondition-failed.exception.d.ts","../node_modules/@nestjs/common/exceptions/request-timeout.exception.d.ts","../node_modules/@nestjs/common/exceptions/service-unavailable.exception.d.ts","../node_modules/@nestjs/common/exceptions/unauthorized.exception.d.ts","../node_modules/@nestjs/common/exceptions/unprocessable-entity.exception.d.ts","../node_modules/@nestjs/common/exceptions/unsupported-media-type.exception.d.ts","../node_modules/@nestjs/common/exceptions/index.d.ts","../node_modules/@nestjs/common/services/console-logger.service.d.ts","../node_modules/@nestjs/common/services/utils/filter-log-levels.util.d.ts","../node_modules/@nestjs/common/services/index.d.ts","../node_modules/@nestjs/common/file-stream/interfaces/streamable-options.interface.d.ts","../node_modules/@nestjs/common/file-stream/interfaces/streamable-handler-response.interface.d.ts","../node_modules/@nestjs/common/file-stream/interfaces/index.d.ts","../node_modules/@nestjs/common/file-stream/streamable-file.d.ts","../node_modules/@nestjs/common/file-stream/index.d.ts","../node_modules/@nestjs/common/module-utils/constants.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/configurable-module-async-options.interface.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/configurable-module-cls.interface.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/configurable-module-host.interface.d.ts","../node_modules/@nestjs/common/module-utils/interfaces/index.d.ts","../node_modules/@nestjs/common/module-utils/configurable-module.builder.d.ts","../node_modules/@nestjs/common/module-utils/index.d.ts","../node_modules/@nestjs/common/pipes/default-value.pipe.d.ts","../node_modules/@nestjs/common/pipes/file/interfaces/file.interface.d.ts","../node_modules/@nestjs/common/pipes/file/interfaces/index.d.ts","../node_modules/@nestjs/common/pipes/file/file-validator-context.interface.d.ts","../node_modules/@nestjs/common/pipes/file/file-validator.interface.d.ts","../node_modules/@nestjs/common/pipes/file/file-type.validator.d.ts","../node_modules/@nestjs/common/pipes/file/max-file-size.validator.d.ts","../node_modules/@nestjs/common/utils/http-error-by-code.util.d.ts","../node_modules/@nestjs/common/pipes/file/parse-file-options.interface.d.ts","../node_modules/@nestjs/common/pipes/file/parse-file.pipe.d.ts","../node_modules/@nestjs/common/pipes/file/parse-file-pipe.builder.d.ts","../node_modules/@nestjs/common/pipes/file/index.d.ts","../node_modules/@nestjs/common/interfaces/external/class-transform-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/transformer-package.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validator-options.interface.d.ts","../node_modules/@nestjs/common/interfaces/external/validator-package.interface.d.ts","../node_modules/@nestjs/common/pipes/validation.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-array.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-bool.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-date.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-enum.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-float.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-int.pipe.d.ts","../node_modules/@nestjs/common/pipes/parse-uuid.pipe.d.ts","../node_modules/@nestjs/common/pipes/index.d.ts","../node_modules/@nestjs/common/serializer/class-serializer.interfaces.d.ts","../node_modules/@nestjs/common/serializer/class-serializer.interceptor.d.ts","../node_modules/@nestjs/common/serializer/decorators/serialize-options.decorator.d.ts","../node_modules/@nestjs/common/serializer/decorators/index.d.ts","../node_modules/@nestjs/common/serializer/index.d.ts","../node_modules/@nestjs/common/utils/forward-ref.util.d.ts","../node_modules/@nestjs/common/utils/index.d.ts","../node_modules/@nestjs/common/index.d.ts","../src/app.service.ts","../src/app.controller.ts","../node_modules/@nestjs/config/dist/conditional.module.d.ts","../node_modules/@nestjs/config/dist/interfaces/config-change-event.interface.d.ts","../node_modules/@nestjs/config/dist/types/config-object.type.d.ts","../node_modules/@nestjs/config/dist/types/config.type.d.ts","../node_modules/@nestjs/config/dist/types/no-infer.type.d.ts","../node_modules/@nestjs/config/dist/types/path-value.type.d.ts","../node_modules/@nestjs/config/dist/types/index.d.ts","../node_modules/@nestjs/config/dist/interfaces/config-factory.interface.d.ts","../node_modules/@types/node/compatibility/disposable.d.ts","../node_modules/@types/node/compatibility/indexable.d.ts","../node_modules/@types/node/compatibility/iterators.d.ts","../node_modules/@types/node/compatibility/index.d.ts","../node_modules/@types/node/globals.typedarray.d.ts","../node_modules/@types/node/buffer.buffer.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/web-globals/abortcontroller.d.ts","../node_modules/@types/node/web-globals/domexception.d.ts","../node_modules/@types/node/web-globals/events.d.ts","../node_modules/buffer/index.d.ts","../node_modules/undici-types/header.d.ts","../node_modules/undici-types/readable.d.ts","../node_modules/undici-types/file.d.ts","../node_modules/undici-types/fetch.d.ts","../node_modules/undici-types/formdata.d.ts","../node_modules/undici-types/connector.d.ts","../node_modules/undici-types/client.d.ts","../node_modules/undici-types/errors.d.ts","../node_modules/undici-types/dispatcher.d.ts","../node_modules/undici-types/global-dispatcher.d.ts","../node_modules/undici-types/global-origin.d.ts","../node_modules/undici-types/pool-stats.d.ts","../node_modules/undici-types/pool.d.ts","../node_modules/undici-types/handlers.d.ts","../node_modules/undici-types/balanced-pool.d.ts","../node_modules/undici-types/agent.d.ts","../node_modules/undici-types/mock-interceptor.d.ts","../node_modules/undici-types/mock-agent.d.ts","../node_modules/undici-types/mock-client.d.ts","../node_modules/undici-types/mock-pool.d.ts","../node_modules/undici-types/mock-errors.d.ts","../node_modules/undici-types/proxy-agent.d.ts","../node_modules/undici-types/env-http-proxy-agent.d.ts","../node_modules/undici-types/retry-handler.d.ts","../node_modules/undici-types/retry-agent.d.ts","../node_modules/undici-types/api.d.ts","../node_modules/undici-types/interceptors.d.ts","../node_modules/undici-types/util.d.ts","../node_modules/undici-types/cookies.d.ts","../node_modules/undici-types/patch.d.ts","../node_modules/undici-types/websocket.d.ts","../node_modules/undici-types/eventsource.d.ts","../node_modules/undici-types/filereader.d.ts","../node_modules/undici-types/diagnostics-channel.d.ts","../node_modules/undici-types/content-type.d.ts","../node_modules/undici-types/cache.d.ts","../node_modules/undici-types/index.d.ts","../node_modules/@types/node/web-globals/fetch.d.ts","../node_modules/@types/node/web-globals/navigator.d.ts","../node_modules/@types/node/web-globals/storage.d.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/inspector.generated.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/sea.d.ts","../node_modules/@types/node/sqlite.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/dotenv-expand/lib/main.d.ts","../node_modules/@nestjs/config/dist/interfaces/config-module-options.interface.d.ts","../node_modules/@nestjs/config/dist/interfaces/index.d.ts","../node_modules/@nestjs/config/dist/config.module.d.ts","../node_modules/@nestjs/config/dist/config.service.d.ts","../node_modules/@nestjs/config/dist/utils/register-as.util.d.ts","../node_modules/@nestjs/config/dist/utils/get-config-token.util.d.ts","../node_modules/@nestjs/config/dist/utils/index.d.ts","../node_modules/@nestjs/config/dist/index.d.ts","../node_modules/@nestjs/config/index.d.ts","../node_modules/typeorm/metadata/types/relationtypes.d.ts","../node_modules/typeorm/metadata/types/deferrabletype.d.ts","../node_modules/typeorm/metadata/types/ondeletetype.d.ts","../node_modules/typeorm/metadata/types/onupdatetype.d.ts","../node_modules/typeorm/decorator/options/relationoptions.d.ts","../node_modules/typeorm/metadata/types/propertytypeinfunction.d.ts","../node_modules/typeorm/common/objecttype.d.ts","../node_modules/typeorm/common/entitytarget.d.ts","../node_modules/typeorm/metadata/types/relationtypeinfunction.d.ts","../node_modules/typeorm/metadata-args/relationmetadataargs.d.ts","../node_modules/typeorm/driver/types/columntypes.d.ts","../node_modules/typeorm/decorator/options/valuetransformer.d.ts","../node_modules/typeorm/decorator/options/columncommonoptions.d.ts","../node_modules/typeorm/decorator/options/columnoptions.d.ts","../node_modules/typeorm/metadata-args/types/columnmode.d.ts","../node_modules/typeorm/metadata-args/columnmetadataargs.d.ts","../node_modules/typeorm/common/objectliteral.d.ts","../node_modules/typeorm/schema-builder/options/tablecolumnoptions.d.ts","../node_modules/typeorm/schema-builder/table/tablecolumn.d.ts","../node_modules/typeorm/schema-builder/options/viewoptions.d.ts","../node_modules/typeorm/schema-builder/view/view.d.ts","../node_modules/typeorm/naming-strategy/namingstrategyinterface.d.ts","../node_modules/typeorm/metadata/foreignkeymetadata.d.ts","../node_modules/typeorm/metadata/relationmetadata.d.ts","../node_modules/typeorm/metadata-args/embeddedmetadataargs.d.ts","../node_modules/typeorm/metadata-args/relationidmetadataargs.d.ts","../node_modules/typeorm/metadata/relationidmetadata.d.ts","../node_modules/typeorm/metadata/relationcountmetadata.d.ts","../node_modules/typeorm/metadata/types/eventlistenertypes.d.ts","../node_modules/typeorm/metadata-args/entitylistenermetadataargs.d.ts","../node_modules/typeorm/metadata/entitylistenermetadata.d.ts","../node_modules/typeorm/metadata-args/uniquemetadataargs.d.ts","../node_modules/typeorm/metadata/uniquemetadata.d.ts","../node_modules/typeorm/metadata/embeddedmetadata.d.ts","../node_modules/typeorm/metadata/columnmetadata.d.ts","../node_modules/typeorm/driver/types/ctecapabilities.d.ts","../node_modules/typeorm/driver/types/mappedcolumntypes.d.ts","../node_modules/typeorm/driver/query.d.ts","../node_modules/typeorm/driver/sqlinmemory.d.ts","../node_modules/typeorm/schema-builder/schemabuilder.d.ts","../node_modules/typeorm/driver/types/datatypedefaults.d.ts","../node_modules/typeorm/entity-schema/entityschemaindexoptions.d.ts","../node_modules/typeorm/driver/types/geojsontypes.d.ts","../node_modules/typeorm/decorator/options/spatialcolumnoptions.d.ts","../node_modules/typeorm/decorator/options/foreignkeyoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemacolumnforeignkeyoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemacolumnoptions.d.ts","../node_modules/typeorm/decorator/options/joincolumnoptions.d.ts","../node_modules/typeorm/decorator/options/jointablemultiplecolumnsoptions.d.ts","../node_modules/typeorm/decorator/options/jointableoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemarelationoptions.d.ts","../node_modules/typeorm/find-options/orderbycondition.d.ts","../node_modules/typeorm/metadata/types/tabletypes.d.ts","../node_modules/typeorm/entity-schema/entityschemauniqueoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemacheckoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemaexclusionoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemainheritanceoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemarelationidoptions.d.ts","../node_modules/typeorm/entity-schema/entityschemaforeignkeyoptions.d.ts","../node_modules/typeorm/metadata/types/treetypes.d.ts","../node_modules/typeorm/metadata/types/closuretreeoptions.d.ts","../node_modules/typeorm/metadata-args/treemetadataargs.d.ts","../node_modules/typeorm/entity-schema/entityschemaoptions.d.ts","../node_modules/typeorm/entity-schema/entityschema.d.ts","../node_modules/typeorm/logger/logger.d.ts","../node_modules/typeorm/logger/loggeroptions.d.ts","../node_modules/typeorm/driver/types/databasetype.d.ts","../node_modules/typeorm/cache/queryresultcacheoptions.d.ts","../node_modules/typeorm/cache/queryresultcache.d.ts","../node_modules/typeorm/common/mixedlist.d.ts","../node_modules/typeorm/data-source/basedatasourceoptions.d.ts","../node_modules/typeorm/driver/types/replicationmode.d.ts","../node_modules/typeorm/schema-builder/options/tableforeignkeyoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableforeignkey.d.ts","../node_modules/typeorm/driver/types/upserttype.d.ts","../node_modules/typeorm/driver/driver.d.ts","../node_modules/typeorm/find-options/joinoptions.d.ts","../node_modules/typeorm/find-options/findoperatortype.d.ts","../node_modules/typeorm/find-options/findoperator.d.ts","../node_modules/typeorm/platform/platformtools.d.ts","../node_modules/typeorm/driver/mongodb/bson.typings.d.ts","../node_modules/typeorm/driver/mongodb/typings.d.ts","../node_modules/typeorm/find-options/equaloperator.d.ts","../node_modules/typeorm/find-options/findoptionswhere.d.ts","../node_modules/typeorm/find-options/findoptionsselect.d.ts","../node_modules/typeorm/find-options/findoptionsrelations.d.ts","../node_modules/typeorm/find-options/findoptionsorder.d.ts","../node_modules/typeorm/find-options/findoneoptions.d.ts","../node_modules/typeorm/find-options/findmanyoptions.d.ts","../node_modules/typeorm/common/deeppartial.d.ts","../node_modules/typeorm/repository/saveoptions.d.ts","../node_modules/typeorm/repository/removeoptions.d.ts","../node_modules/typeorm/find-options/mongodb/mongofindoneoptions.d.ts","../node_modules/typeorm/find-options/mongodb/mongofindmanyoptions.d.ts","../node_modules/typeorm/schema-builder/options/tableuniqueoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableunique.d.ts","../node_modules/typeorm/subscriber/broadcasterresult.d.ts","../node_modules/typeorm/subscriber/event/transactioncommitevent.d.ts","../node_modules/typeorm/subscriber/event/transactionrollbackevent.d.ts","../node_modules/typeorm/subscriber/event/transactionstartevent.d.ts","../node_modules/typeorm/subscriber/event/updateevent.d.ts","../node_modules/typeorm/subscriber/event/removeevent.d.ts","../node_modules/typeorm/subscriber/event/insertevent.d.ts","../node_modules/typeorm/subscriber/event/loadevent.d.ts","../node_modules/typeorm/subscriber/event/softremoveevent.d.ts","../node_modules/typeorm/subscriber/event/recoverevent.d.ts","../node_modules/typeorm/subscriber/event/queryevent.d.ts","../node_modules/typeorm/subscriber/entitysubscriberinterface.d.ts","../node_modules/typeorm/subscriber/broadcaster.d.ts","../node_modules/typeorm/schema-builder/options/tablecheckoptions.d.ts","../node_modules/typeorm/metadata-args/checkmetadataargs.d.ts","../node_modules/typeorm/metadata/checkmetadata.d.ts","../node_modules/typeorm/schema-builder/table/tablecheck.d.ts","../node_modules/typeorm/schema-builder/options/tableexclusionoptions.d.ts","../node_modules/typeorm/metadata-args/exclusionmetadataargs.d.ts","../node_modules/typeorm/metadata/exclusionmetadata.d.ts","../node_modules/typeorm/schema-builder/table/tableexclusion.d.ts","../node_modules/typeorm/driver/mongodb/mongoqueryrunner.d.ts","../node_modules/typeorm/query-builder/querypartialentity.d.ts","../node_modules/typeorm/query-runner/queryresult.d.ts","../node_modules/typeorm/query-builder/result/insertresult.d.ts","../node_modules/typeorm/query-builder/result/updateresult.d.ts","../node_modules/typeorm/query-builder/result/deleteresult.d.ts","../node_modules/typeorm/entity-manager/mongoentitymanager.d.ts","../node_modules/typeorm/repository/mongorepository.d.ts","../node_modules/typeorm/find-options/findtreeoptions.d.ts","../node_modules/typeorm/repository/treerepository.d.ts","../node_modules/typeorm/query-builder/transformer/plainobjecttonewentitytransformer.d.ts","../node_modules/typeorm/driver/types/isolationlevel.d.ts","../node_modules/typeorm/query-builder/whereexpressionbuilder.d.ts","../node_modules/typeorm/query-builder/brackets.d.ts","../node_modules/typeorm/query-builder/insertorupdateoptions.d.ts","../node_modules/typeorm/repository/upsertoptions.d.ts","../node_modules/typeorm/common/pickkeysbytype.d.ts","../node_modules/typeorm/entity-manager/entitymanager.d.ts","../node_modules/typeorm/repository/repository.d.ts","../node_modules/typeorm/migration/migrationinterface.d.ts","../node_modules/typeorm/migration/migration.d.ts","../node_modules/typeorm/driver/cockroachdb/cockroachconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/cockroachdb/cockroachconnectionoptions.d.ts","../node_modules/typeorm/driver/mysql/mysqlconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/mysql/mysqlconnectionoptions.d.ts","../node_modules/typeorm/driver/postgres/postgresconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/postgres/postgresconnectionoptions.d.ts","../node_modules/typeorm/driver/sqlite/sqliteconnectionoptions.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/defaultauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectoryaccesstokenauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorydefaultauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorymsiappserviceauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorymsivmauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectorypasswordauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/azureactivedirectoryserviceprincipalsecret.d.ts","../node_modules/typeorm/driver/sqlserver/authentication/ntlmauthentication.d.ts","../node_modules/typeorm/driver/sqlserver/sqlserverconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/sqlserver/sqlserverconnectionoptions.d.ts","../node_modules/typeorm/driver/oracle/oracleconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/oracle/oracleconnectionoptions.d.ts","../node_modules/typeorm/driver/mongodb/mongoconnectionoptions.d.ts","../node_modules/typeorm/driver/cordova/cordovaconnectionoptions.d.ts","../node_modules/typeorm/driver/sqljs/sqljsconnectionoptions.d.ts","../node_modules/typeorm/driver/react-native/reactnativeconnectionoptions.d.ts","../node_modules/typeorm/driver/nativescript/nativescriptconnectionoptions.d.ts","../node_modules/typeorm/driver/expo/expoconnectionoptions.d.ts","../node_modules/typeorm/driver/aurora-mysql/auroramysqlconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/aurora-mysql/auroramysqlconnectionoptions.d.ts","../node_modules/typeorm/driver/sap/sapconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/sap/sapconnectionoptions.d.ts","../node_modules/typeorm/driver/aurora-postgres/aurorapostgresconnectionoptions.d.ts","../node_modules/typeorm/driver/better-sqlite3/bettersqlite3connectionoptions.d.ts","../node_modules/typeorm/driver/capacitor/capacitorconnectionoptions.d.ts","../node_modules/typeorm/connection/baseconnectionoptions.d.ts","../node_modules/typeorm/driver/spanner/spannerconnectioncredentialsoptions.d.ts","../node_modules/typeorm/driver/spanner/spannerconnectionoptions.d.ts","../node_modules/typeorm/data-source/datasourceoptions.d.ts","../node_modules/typeorm/entity-manager/sqljsentitymanager.d.ts","../node_modules/typeorm/query-builder/relationloader.d.ts","../node_modules/typeorm/query-builder/relationidloader.d.ts","../node_modules/typeorm/data-source/datasource.d.ts","../node_modules/typeorm/metadata-args/tablemetadataargs.d.ts","../node_modules/typeorm/metadata/entitymetadata.d.ts","../node_modules/typeorm/metadata-args/indexmetadataargs.d.ts","../node_modules/typeorm/metadata/indexmetadata.d.ts","../node_modules/typeorm/schema-builder/options/tableindexoptions.d.ts","../node_modules/typeorm/schema-builder/table/tableindex.d.ts","../node_modules/typeorm/schema-builder/options/tableoptions.d.ts","../node_modules/typeorm/schema-builder/table/table.d.ts","../node_modules/typeorm/query-runner/queryrunner.d.ts","../node_modules/typeorm/query-builder/querybuildercte.d.ts","../node_modules/typeorm/query-builder/alias.d.ts","../node_modules/typeorm/query-builder/joinattribute.d.ts","../node_modules/typeorm/query-builder/relation-id/relationidattribute.d.ts","../node_modules/typeorm/query-builder/relation-count/relationcountattribute.d.ts","../node_modules/typeorm/query-builder/selectquery.d.ts","../node_modules/typeorm/query-builder/selectquerybuilderoption.d.ts","../node_modules/typeorm/query-builder/whereclause.d.ts","../node_modules/typeorm/query-builder/queryexpressionmap.d.ts","../node_modules/typeorm/query-builder/updatequerybuilder.d.ts","../node_modules/typeorm/query-builder/deletequerybuilder.d.ts","../node_modules/typeorm/query-builder/softdeletequerybuilder.d.ts","../node_modules/typeorm/query-builder/insertquerybuilder.d.ts","../node_modules/typeorm/query-builder/relationquerybuilder.d.ts","../node_modules/typeorm/query-builder/notbrackets.d.ts","../node_modules/typeorm/query-builder/querybuilder.d.ts","../node_modules/typeorm/query-builder/selectquerybuilder.d.ts","../node_modules/typeorm/metadata-args/relationcountmetadataargs.d.ts","../node_modules/typeorm/metadata-args/namingstrategymetadataargs.d.ts","../node_modules/typeorm/metadata-args/joincolumnmetadataargs.d.ts","../node_modules/typeorm/metadata-args/jointablemetadataargs.d.ts","../node_modules/typeorm/metadata-args/entitysubscribermetadataargs.d.ts","../node_modules/typeorm/metadata-args/inheritancemetadataargs.d.ts","../node_modules/typeorm/metadata-args/discriminatorvaluemetadataargs.d.ts","../node_modules/typeorm/metadata-args/entityrepositorymetadataargs.d.ts","../node_modules/typeorm/metadata-args/transactionentitymetadataargs.d.ts","../node_modules/typeorm/metadata-args/transactionrepositorymetadataargs.d.ts","../node_modules/typeorm/metadata-args/generatedmetadataargs.d.ts","../node_modules/typeorm/metadata-args/foreignkeymetadataargs.d.ts","../node_modules/typeorm/metadata-args/metadataargsstorage.d.ts","../node_modules/typeorm/connection/connectionmanager.d.ts","../node_modules/typeorm/globals.d.ts","../node_modules/typeorm/container.d.ts","../node_modules/typeorm/common/relationtype.d.ts","../node_modules/typeorm/error/typeormerror.d.ts","../node_modules/typeorm/error/cannotreflectmethodparametertypeerror.d.ts","../node_modules/typeorm/error/alreadyhasactiveconnectionerror.d.ts","../node_modules/typeorm/persistence/subjectchangemap.d.ts","../node_modules/typeorm/persistence/subject.d.ts","../node_modules/typeorm/error/subjectwithoutidentifiererror.d.ts","../node_modules/typeorm/error/cannotconnectalreadyconnectederror.d.ts","../node_modules/typeorm/error/locknotsupportedongivendrivererror.d.ts","../node_modules/typeorm/error/connectionisnotseterror.d.ts","../node_modules/typeorm/error/cannotcreateentityidmaperror.d.ts","../node_modules/typeorm/error/metadataalreadyexistserror.d.ts","../node_modules/typeorm/error/cannotdetermineentityerror.d.ts","../node_modules/typeorm/error/updatevaluesmissingerror.d.ts","../node_modules/typeorm/error/treerepositorynotsupportederror.d.ts","../node_modules/typeorm/error/customrepositorynotfounderror.d.ts","../node_modules/typeorm/error/transactionnotstartederror.d.ts","../node_modules/typeorm/error/transactionalreadystartederror.d.ts","../node_modules/typeorm/error/entitynotfounderror.d.ts","../node_modules/typeorm/error/entitymetadatanotfounderror.d.ts","../node_modules/typeorm/error/mustbeentityerror.d.ts","../node_modules/typeorm/error/optimisticlockversionmismatcherror.d.ts","../node_modules/typeorm/error/limitonupdatenotsupportederror.d.ts","../node_modules/typeorm/error/primarycolumncannotbenullableerror.d.ts","../node_modules/typeorm/error/customrepositorycannotinheritrepositoryerror.d.ts","../node_modules/typeorm/error/queryrunnerprovideralreadyreleasederror.d.ts","../node_modules/typeorm/error/cannotattachtreechildrenentityerror.d.ts","../node_modules/typeorm/error/customrepositorydoesnothaveentityerror.d.ts","../node_modules/typeorm/error/missingdeletedatecolumnerror.d.ts","../node_modules/typeorm/error/noconnectionforrepositoryerror.d.ts","../node_modules/typeorm/error/circularrelationserror.d.ts","../node_modules/typeorm/error/returningstatementnotsupportederror.d.ts","../node_modules/typeorm/error/usingjointableisnotallowederror.d.ts","../node_modules/typeorm/error/missingjoincolumnerror.d.ts","../node_modules/typeorm/error/missingprimarycolumnerror.d.ts","../node_modules/typeorm/error/entitypropertynotfounderror.d.ts","../node_modules/typeorm/error/missingdrivererror.d.ts","../node_modules/typeorm/error/driverpackagenotinstallederror.d.ts","../node_modules/typeorm/error/cannotgetentitymanagernotconnectederror.d.ts","../node_modules/typeorm/error/connectionnotfounderror.d.ts","../node_modules/typeorm/error/noversionorupdatedatecolumnerror.d.ts","../node_modules/typeorm/error/insertvaluesmissingerror.d.ts","../node_modules/typeorm/error/optimisticlockcannotbeusederror.d.ts","../node_modules/typeorm/error/metadatawithsuchnamealreadyexistserror.d.ts","../node_modules/typeorm/error/driveroptionnotseterror.d.ts","../node_modules/typeorm/error/findrelationsnotfounderror.d.ts","../node_modules/typeorm/error/pessimisticlocktransactionrequirederror.d.ts","../node_modules/typeorm/error/repositorynottreeerror.d.ts","../node_modules/typeorm/error/datatypenotsupportederror.d.ts","../node_modules/typeorm/error/initializedrelationerror.d.ts","../node_modules/typeorm/error/missingjointableerror.d.ts","../node_modules/typeorm/error/queryfailederror.d.ts","../node_modules/typeorm/error/noneedtoreleaseentitymanagererror.d.ts","../node_modules/typeorm/error/usingjoincolumnonlyononesideallowederror.d.ts","../node_modules/typeorm/error/usingjointableonlyononesideallowederror.d.ts","../node_modules/typeorm/error/subjectremovedandupdatederror.d.ts","../node_modules/typeorm/error/persistedentitynotfounderror.d.ts","../node_modules/typeorm/error/usingjoincolumnisnotallowederror.d.ts","../node_modules/typeorm/error/columntypeundefinederror.d.ts","../node_modules/typeorm/error/queryrunneralreadyreleasederror.d.ts","../node_modules/typeorm/error/offsetwithoutlimitnotsupportederror.d.ts","../node_modules/typeorm/error/cannotexecutenotconnectederror.d.ts","../node_modules/typeorm/error/noconnectionoptionerror.d.ts","../node_modules/typeorm/error/forbiddentransactionmodeoverrideerror.d.ts","../node_modules/typeorm/error/index.d.ts","../node_modules/typeorm/decorator/options/columnembeddedoptions.d.ts","../node_modules/typeorm/decorator/options/columnenumoptions.d.ts","../node_modules/typeorm/decorator/options/columnhstoreoptions.d.ts","../node_modules/typeorm/decorator/options/columnnumericoptions.d.ts","../node_modules/typeorm/decorator/options/columnunsignedoptions.d.ts","../node_modules/typeorm/decorator/options/columnwithlengthoptions.d.ts","../node_modules/typeorm/decorator/columns/column.d.ts","../node_modules/typeorm/decorator/columns/createdatecolumn.d.ts","../node_modules/typeorm/decorator/columns/deletedatecolumn.d.ts","../node_modules/typeorm/decorator/options/primarygeneratedcolumnnumericoptions.d.ts","../node_modules/typeorm/decorator/options/primarygeneratedcolumnuuidoptions.d.ts","../node_modules/typeorm/decorator/options/primarygeneratedcolumnidentityoptions.d.ts","../node_modules/typeorm/decorator/columns/primarygeneratedcolumn.d.ts","../node_modules/typeorm/decorator/columns/primarycolumn.d.ts","../node_modules/typeorm/decorator/columns/updatedatecolumn.d.ts","../node_modules/typeorm/decorator/columns/versioncolumn.d.ts","../node_modules/typeorm/decorator/options/virtualcolumnoptions.d.ts","../node_modules/typeorm/decorator/columns/virtualcolumn.d.ts","../node_modules/typeorm/decorator/options/viewcolumnoptions.d.ts","../node_modules/typeorm/decorator/columns/viewcolumn.d.ts","../node_modules/typeorm/decorator/columns/objectidcolumn.d.ts","../node_modules/typeorm/decorator/listeners/afterinsert.d.ts","../node_modules/typeorm/decorator/listeners/afterload.d.ts","../node_modules/typeorm/decorator/listeners/afterremove.d.ts","../node_modules/typeorm/decorator/listeners/aftersoftremove.d.ts","../node_modules/typeorm/decorator/listeners/afterrecover.d.ts","../node_modules/typeorm/decorator/listeners/afterupdate.d.ts","../node_modules/typeorm/decorator/listeners/beforeinsert.d.ts","../node_modules/typeorm/decorator/listeners/beforeremove.d.ts","../node_modules/typeorm/decorator/listeners/beforesoftremove.d.ts","../node_modules/typeorm/decorator/listeners/beforerecover.d.ts","../node_modules/typeorm/decorator/listeners/beforeupdate.d.ts","../node_modules/typeorm/decorator/listeners/eventsubscriber.d.ts","../node_modules/typeorm/decorator/options/indexoptions.d.ts","../node_modules/typeorm/decorator/options/entityoptions.d.ts","../node_modules/typeorm/decorator/relations/joincolumn.d.ts","../node_modules/typeorm/decorator/relations/jointable.d.ts","../node_modules/typeorm/decorator/relations/manytomany.d.ts","../node_modules/typeorm/decorator/relations/manytoone.d.ts","../node_modules/typeorm/decorator/relations/onetomany.d.ts","../node_modules/typeorm/decorator/relations/onetoone.d.ts","../node_modules/typeorm/decorator/relations/relationcount.d.ts","../node_modules/typeorm/decorator/relations/relationid.d.ts","../node_modules/typeorm/decorator/entity/entity.d.ts","../node_modules/typeorm/decorator/entity/childentity.d.ts","../node_modules/typeorm/decorator/entity/tableinheritance.d.ts","../node_modules/typeorm/decorator/options/viewentityoptions.d.ts","../node_modules/typeorm/decorator/entity-view/viewentity.d.ts","../node_modules/typeorm/decorator/tree/treelevelcolumn.d.ts","../node_modules/typeorm/decorator/tree/treeparent.d.ts","../node_modules/typeorm/decorator/tree/treechildren.d.ts","../node_modules/typeorm/decorator/tree/tree.d.ts","../node_modules/typeorm/decorator/index.d.ts","../node_modules/typeorm/decorator/foreignkey.d.ts","../node_modules/typeorm/decorator/options/uniqueoptions.d.ts","../node_modules/typeorm/decorator/unique.d.ts","../node_modules/typeorm/decorator/check.d.ts","../node_modules/typeorm/decorator/exclusion.d.ts","../node_modules/typeorm/decorator/generated.d.ts","../node_modules/typeorm/decorator/entityrepository.d.ts","../node_modules/typeorm/find-options/operator/and.d.ts","../node_modules/typeorm/find-options/operator/or.d.ts","../node_modules/typeorm/find-options/operator/any.d.ts","../node_modules/typeorm/find-options/operator/arraycontainedby.d.ts","../node_modules/typeorm/find-options/operator/arraycontains.d.ts","../node_modules/typeorm/find-options/operator/arrayoverlap.d.ts","../node_modules/typeorm/find-options/operator/between.d.ts","../node_modules/typeorm/find-options/operator/equal.d.ts","../node_modules/typeorm/find-options/operator/in.d.ts","../node_modules/typeorm/find-options/operator/isnull.d.ts","../node_modules/typeorm/find-options/operator/lessthan.d.ts","../node_modules/typeorm/find-options/operator/lessthanorequal.d.ts","../node_modules/typeorm/find-options/operator/ilike.d.ts","../node_modules/typeorm/find-options/operator/like.d.ts","../node_modules/typeorm/find-options/operator/morethan.d.ts","../node_modules/typeorm/find-options/operator/morethanorequal.d.ts","../node_modules/typeorm/find-options/operator/not.d.ts","../node_modules/typeorm/find-options/operator/raw.d.ts","../node_modules/typeorm/find-options/operator/jsoncontains.d.ts","../node_modules/typeorm/find-options/findoptionsutils.d.ts","../node_modules/typeorm/logger/abstractlogger.d.ts","../node_modules/typeorm/logger/advancedconsolelogger.d.ts","../node_modules/typeorm/logger/formattedconsolelogger.d.ts","../node_modules/typeorm/logger/simpleconsolelogger.d.ts","../node_modules/typeorm/logger/filelogger.d.ts","../node_modules/typeorm/repository/abstractrepository.d.ts","../node_modules/typeorm/data-source/index.d.ts","../node_modules/typeorm/repository/baseentity.d.ts","../node_modules/typeorm/driver/sqlserver/mssqlparameter.d.ts","../node_modules/typeorm/connection/connectionoptionsreader.d.ts","../node_modules/typeorm/connection/connectionoptions.d.ts","../node_modules/typeorm/connection/connection.d.ts","../node_modules/typeorm/migration/migrationexecutor.d.ts","../node_modules/typeorm/naming-strategy/defaultnamingstrategy.d.ts","../node_modules/typeorm/naming-strategy/legacyoraclenamingstrategy.d.ts","../node_modules/typeorm/entity-schema/entityschemaembeddedcolumnoptions.d.ts","../node_modules/typeorm/schema-builder/rdbmsschemabuilder.d.ts","../node_modules/typeorm/util/instancechecker.d.ts","../node_modules/typeorm/repository/findtreesoptions.d.ts","../node_modules/typeorm/util/treerepositoryutils.d.ts","../node_modules/typeorm/index.d.ts","../node_modules/@nestjs/typeorm/dist/interfaces/entity-class-or-schema.type.d.ts","../node_modules/@nestjs/typeorm/dist/common/typeorm.decorators.d.ts","../node_modules/@nestjs/typeorm/dist/common/typeorm.utils.d.ts","../node_modules/@nestjs/typeorm/dist/common/index.d.ts","../node_modules/@nestjs/typeorm/dist/interfaces/typeorm-options.interface.d.ts","../node_modules/@nestjs/typeorm/dist/interfaces/index.d.ts","../node_modules/@nestjs/typeorm/dist/typeorm.module.d.ts","../node_modules/@nestjs/typeorm/dist/index.d.ts","../node_modules/@nestjs/typeorm/index.d.ts","../node_modules/@nestjs/schedule/dist/enums/cron-expression.enum.d.ts","../node_modules/@nestjs/schedule/dist/enums/index.d.ts","../node_modules/@types/luxon/src/zone.d.ts","../node_modules/@types/luxon/src/settings.d.ts","../node_modules/@types/luxon/src/_util.d.ts","../node_modules/@types/luxon/src/misc.d.ts","../node_modules/@types/luxon/src/duration.d.ts","../node_modules/@types/luxon/src/interval.d.ts","../node_modules/@types/luxon/src/datetime.d.ts","../node_modules/@types/luxon/src/info.d.ts","../node_modules/@types/luxon/src/luxon.d.ts","../node_modules/@types/luxon/index.d.ts","../node_modules/cron/dist/errors.d.ts","../node_modules/cron/dist/constants.d.ts","../node_modules/cron/dist/job.d.ts","../node_modules/cron/dist/types/utils.d.ts","../node_modules/cron/dist/types/cron.types.d.ts","../node_modules/cron/dist/time.d.ts","../node_modules/cron/dist/index.d.ts","../node_modules/@nestjs/schedule/dist/decorators/cron.decorator.d.ts","../node_modules/@nestjs/schedule/dist/decorators/interval.decorator.d.ts","../node_modules/@nestjs/schedule/dist/decorators/timeout.decorator.d.ts","../node_modules/@nestjs/schedule/dist/decorators/index.d.ts","../node_modules/@nestjs/schedule/dist/interfaces/schedule-module-options.interface.d.ts","../node_modules/@nestjs/schedule/dist/schedule.module.d.ts","../node_modules/@nestjs/schedule/dist/scheduler.registry.d.ts","../node_modules/@nestjs/schedule/dist/index.d.ts","../node_modules/@nestjs/schedule/index.d.ts","../src/telemetry/telemetry.entity.ts","../src/telemetry/telemetry.service.ts","../src/maps/road-stat.entity.ts","../src/maps/candidate-road.entity.ts","../node_modules/axios/index.d.cts","../src/telemetry/external-telemetry.service.ts","../node_modules/@redis/client/dist/lib/commands/generic-transformers.d.ts","../node_modules/@redis/client/dist/lib/client/parser.d.ts","../node_modules/@redis/client/dist/lib/errors.d.ts","../node_modules/@redis/client/dist/lib/lua-script.d.ts","../node_modules/@redis/client/dist/lib/resp/decoder.d.ts","../node_modules/@redis/client/dist/lib/resp/verbatim-string.d.ts","../node_modules/@redis/client/dist/lib/resp/types.d.ts","../node_modules/@redis/client/dist/lib/utils/digest.d.ts","../node_modules/@redis/client/dist/lib/commands/client_kill.d.ts","../node_modules/@redis/client/dist/lib/commands/cluster_failover.d.ts","../node_modules/@redis/client/dist/lib/commands/cluster_setslot.d.ts","../node_modules/@redis/client/dist/lib/commands/command_list.d.ts","../node_modules/@redis/client/dist/lib/commands/flushall.d.ts","../node_modules/@redis/client/dist/lib/commands/set.d.ts","../node_modules/@redis/client/dist/lib/commands/acl_log.d.ts","../node_modules/@redis/client/dist/lib/commands/auth.d.ts","../node_modules/@redis/client/dist/lib/commands/bgsave.d.ts","../node_modules/@redis/client/dist/lib/commands/bitcount.d.ts","../node_modules/@redis/client/dist/lib/commands/bitfield.d.ts","../node_modules/@redis/client/dist/lib/commands/bitfield_ro.d.ts","../node_modules/@redis/client/dist/lib/commands/bitop.d.ts","../node_modules/@redis/client/dist/lib/commands/lmpop.d.ts","../node_modules/@redis/client/dist/lib/commands/zmpop.d.ts","../node_modules/@redis/client/dist/lib/commands/client_info.d.ts","../node_modules/@redis/client/dist/lib/commands/client_list.d.ts","../node_modules/@redis/client/dist/lib/commands/client_tracking.d.ts","../node_modules/@redis/client/dist/lib/commands/cluster_reset.d.ts","../node_modules/@redis/client/dist/lib/commands/copy.d.ts","../node_modules/@redis/client/dist/lib/commands/eval.d.ts","../node_modules/@redis/client/dist/lib/commands/function_list.d.ts","../node_modules/@redis/client/dist/lib/commands/function_list_withcode.d.ts","../node_modules/@redis/client/dist/lib/commands/function_load.d.ts","../node_modules/@redis/client/dist/lib/commands/function_restore.d.ts","../node_modules/@redis/client/dist/lib/commands/geosearch.d.ts","../node_modules/@redis/client/dist/lib/commands/geoadd.d.ts","../node_modules/@redis/client/dist/lib/commands/geosearch_with.d.ts","../node_modules/@redis/client/dist/lib/commands/georadius_store.d.ts","../node_modules/@redis/client/dist/lib/commands/georadiusbymember_store.d.ts","../node_modules/@redis/client/dist/lib/commands/geosearchstore.d.ts","../node_modules/@redis/client/dist/lib/commands/getex.d.ts","../node_modules/@redis/client/dist/lib/commands/hello.d.ts","../node_modules/@redis/client/dist/lib/commands/hexpire.d.ts","../node_modules/@redis/client/dist/lib/commands/hgetex.d.ts","../node_modules/@redis/client/dist/lib/commands/hrandfield_count_withvalues.d.ts","../node_modules/@redis/client/dist/lib/commands/scan.d.ts","../node_modules/@redis/client/dist/lib/commands/hset.d.ts","../node_modules/@redis/client/dist/lib/commands/hsetex.d.ts","../node_modules/@redis/client/dist/lib/commands/hotkeys_get.d.ts","../node_modules/@redis/client/dist/lib/commands/hotkeys_start.d.ts","../node_modules/@redis/client/dist/lib/commands/latency_graph.d.ts","../node_modules/@redis/client/dist/lib/commands/latency_history.d.ts","../node_modules/@redis/client/dist/lib/commands/lcs_idx.d.ts","../node_modules/@redis/client/dist/lib/commands/lcs_idx_withmatchlen.d.ts","../node_modules/@redis/client/dist/lib/commands/lpos.d.ts","../node_modules/@redis/client/dist/lib/commands/memory_stats.d.ts","../node_modules/@redis/client/dist/lib/commands/memory_usage.d.ts","../node_modules/@redis/client/dist/lib/commands/migrate.d.ts","../node_modules/@redis/client/dist/lib/commands/module_list.d.ts","../node_modules/@redis/client/dist/lib/commands/mset.d.ts","../node_modules/@redis/client/dist/lib/commands/restore.d.ts","../node_modules/@redis/client/dist/lib/commands/sintercard.d.ts","../node_modules/@redis/client/dist/lib/commands/sort.d.ts","../node_modules/@redis/client/dist/lib/commands/common-stream.types.d.ts","../node_modules/@redis/client/dist/lib/commands/xadd.d.ts","../node_modules/@redis/client/dist/lib/commands/xautoclaim.d.ts","../node_modules/@redis/client/dist/lib/commands/xclaim.d.ts","../node_modules/@redis/client/dist/lib/commands/xcfgset.d.ts","../node_modules/@redis/client/dist/lib/commands/xgroup_create.d.ts","../node_modules/@redis/client/dist/lib/commands/xgroup_setid.d.ts","../node_modules/@redis/client/dist/lib/commands/xinfo_consumers.d.ts","../node_modules/@redis/client/dist/lib/commands/xinfo_groups.d.ts","../node_modules/@redis/client/dist/lib/commands/xinfo_stream.d.ts","../node_modules/@redis/client/dist/lib/commands/xpending_range.d.ts","../node_modules/@redis/client/dist/lib/commands/xrange.d.ts","../node_modules/@redis/client/dist/lib/commands/xread.d.ts","../node_modules/@redis/client/dist/lib/commands/xreadgroup.d.ts","../node_modules/@redis/client/dist/lib/commands/xsetid.d.ts","../node_modules/@redis/client/dist/lib/commands/xtrim.d.ts","../node_modules/@redis/client/dist/lib/commands/zadd_incr.d.ts","../node_modules/@redis/client/dist/lib/commands/zadd.d.ts","../node_modules/@redis/client/dist/lib/commands/zinter.d.ts","../node_modules/@redis/client/dist/lib/commands/zintercard.d.ts","../node_modules/@redis/client/dist/lib/commands/zrange.d.ts","../node_modules/@redis/client/dist/lib/commands/zrangebylex.d.ts","../node_modules/@redis/client/dist/lib/commands/zrangebyscore.d.ts","../node_modules/@redis/client/dist/lib/commands/zrangestore.d.ts","../node_modules/@redis/client/dist/lib/commands/zunion.d.ts","../node_modules/@redis/client/dist/lib/commands/zunionstore.d.ts","../node_modules/@redis/client/dist/lib/commands/vadd.d.ts","../node_modules/@redis/client/dist/lib/commands/vinfo.d.ts","../node_modules/@redis/client/dist/lib/commands/vsim.d.ts","../node_modules/@redis/client/dist/lib/commands/index.d.ts","../node_modules/@redis/client/dist/lib/client/socket.d.ts","../node_modules/@redis/client/dist/lib/authx/identity-provider.d.ts","../node_modules/@redis/client/dist/lib/authx/token.d.ts","../node_modules/@redis/client/dist/lib/authx/disposable.d.ts","../node_modules/@redis/client/dist/lib/authx/token-manager.d.ts","../node_modules/@redis/client/dist/lib/authx/credentials-provider.d.ts","../node_modules/@redis/client/dist/lib/authx/index.d.ts","../node_modules/@redis/client/dist/lib/client/pub-sub.d.ts","../node_modules/@redis/client/dist/lib/client/commands-queue.d.ts","../node_modules/@redis/client/dist/lib/multi-command.d.ts","../node_modules/@redis/client/dist/lib/client/multi-command.d.ts","../node_modules/@redis/client/dist/lib/client/legacy-mode.d.ts","../node_modules/@redis/client/dist/lib/client/cache.d.ts","../node_modules/@redis/client/dist/lib/client/pool.d.ts","../node_modules/@redis/client/dist/lib/client/enterprise-maintenance-manager.d.ts","../node_modules/@redis/client/dist/lib/client/index.d.ts","../node_modules/@redis/client/dist/lib/cluster/cluster-slots.d.ts","../node_modules/@redis/client/dist/lib/cluster/multi-command.d.ts","../node_modules/@redis/client/dist/lib/cluster/index.d.ts","../node_modules/@redis/client/dist/lib/sentinel/types.d.ts","../node_modules/@redis/client/dist/lib/sentinel/multi-commands.d.ts","../node_modules/@redis/client/dist/lib/sentinel/index.d.ts","../node_modules/@redis/client/dist/index.d.ts","../node_modules/@redis/bloom/dist/lib/commands/bloom/info.d.ts","../node_modules/@redis/bloom/dist/lib/commands/bloom/insert.d.ts","../node_modules/@redis/bloom/dist/lib/commands/bloom/reserve.d.ts","../node_modules/@redis/bloom/dist/lib/commands/count-min-sketch/incrby.d.ts","../node_modules/@redis/bloom/dist/lib/commands/count-min-sketch/info.d.ts","../node_modules/@redis/bloom/dist/lib/commands/count-min-sketch/merge.d.ts","../node_modules/@redis/bloom/dist/lib/commands/cuckoo/info.d.ts","../node_modules/@redis/bloom/dist/lib/commands/cuckoo/insert.d.ts","../node_modules/@redis/bloom/dist/lib/commands/cuckoo/reserve.d.ts","../node_modules/@redis/bloom/dist/lib/commands/t-digest/create.d.ts","../node_modules/@redis/bloom/dist/lib/commands/t-digest/info.d.ts","../node_modules/@redis/bloom/dist/lib/commands/t-digest/merge.d.ts","../node_modules/@redis/bloom/dist/lib/commands/top-k/incrby.d.ts","../node_modules/@redis/bloom/dist/lib/commands/top-k/info.d.ts","../node_modules/@redis/bloom/dist/lib/commands/top-k/reserve.d.ts","../node_modules/@redis/bloom/dist/lib/commands/index.d.ts","../node_modules/@redis/bloom/dist/lib/index.d.ts","../node_modules/@redis/json/dist/lib/commands/arrindex.d.ts","../node_modules/@redis/json/dist/lib/commands/arrlen.d.ts","../node_modules/@redis/json/dist/lib/commands/arrpop.d.ts","../node_modules/@redis/json/dist/lib/commands/clear.d.ts","../node_modules/@redis/json/dist/lib/commands/debug_memory.d.ts","../node_modules/@redis/json/dist/lib/commands/del.d.ts","../node_modules/@redis/json/dist/lib/commands/forget.d.ts","../node_modules/@redis/json/dist/lib/commands/get.d.ts","../node_modules/@redis/json/dist/lib/commands/mset.d.ts","../node_modules/@redis/json/dist/lib/commands/objkeys.d.ts","../node_modules/@redis/json/dist/lib/commands/objlen.d.ts","../node_modules/@redis/json/dist/lib/commands/set.d.ts","../node_modules/@redis/json/dist/lib/commands/strappend.d.ts","../node_modules/@redis/json/dist/lib/commands/strlen.d.ts","../node_modules/@redis/json/dist/lib/commands/type.d.ts","../node_modules/@redis/json/dist/lib/commands/index.d.ts","../node_modules/@redis/json/dist/lib/index.d.ts","../node_modules/@redis/search/dist/lib/commands/create.d.ts","../node_modules/@redis/search/dist/lib/commands/search.d.ts","../node_modules/@redis/search/dist/lib/commands/aggregate.d.ts","../node_modules/@redis/search/dist/lib/commands/aggregate_withcursor.d.ts","../node_modules/@redis/search/dist/lib/commands/cursor_read.d.ts","../node_modules/@redis/search/dist/lib/commands/dropindex.d.ts","../node_modules/@redis/search/dist/lib/commands/explain.d.ts","../node_modules/@redis/search/dist/lib/commands/explaincli.d.ts","../node_modules/@redis/search/dist/lib/commands/hybrid.d.ts","../node_modules/@redis/search/dist/lib/commands/info.d.ts","../node_modules/@redis/search/dist/lib/commands/profile_search.d.ts","../node_modules/@redis/search/dist/lib/commands/search_nocontent.d.ts","../node_modules/@redis/search/dist/lib/commands/spellcheck.d.ts","../node_modules/@redis/search/dist/lib/commands/sugadd.d.ts","../node_modules/@redis/search/dist/lib/commands/sugget.d.ts","../node_modules/@redis/search/dist/lib/commands/synupdate.d.ts","../node_modules/@redis/search/dist/lib/commands/index.d.ts","../node_modules/@redis/search/dist/lib/index.d.ts","../node_modules/@redis/time-series/dist/lib/commands/add.d.ts","../node_modules/@redis/time-series/dist/lib/commands/helpers.d.ts","../node_modules/@redis/time-series/dist/lib/commands/create.d.ts","../node_modules/@redis/time-series/dist/lib/commands/alter.d.ts","../node_modules/@redis/time-series/dist/lib/commands/createrule.d.ts","../node_modules/@redis/time-series/dist/lib/commands/incrby.d.ts","../node_modules/@redis/time-series/dist/lib/commands/get.d.ts","../node_modules/@redis/time-series/dist/lib/commands/info.d.ts","../node_modules/@redis/time-series/dist/lib/commands/info_debug.d.ts","../node_modules/@redis/time-series/dist/lib/commands/madd.d.ts","../node_modules/@redis/time-series/dist/lib/commands/mget.d.ts","../node_modules/@redis/time-series/dist/lib/commands/mget_withlabels.d.ts","../node_modules/@redis/time-series/dist/lib/commands/range.d.ts","../node_modules/@redis/time-series/dist/lib/commands/mrange_groupby.d.ts","../node_modules/@redis/time-series/dist/lib/commands/mrange_selected_labels.d.ts","../node_modules/@redis/time-series/dist/lib/commands/mrange_selected_labels_groupby.d.ts","../node_modules/@redis/time-series/dist/lib/commands/mrange_withlabels_groupby.d.ts","../node_modules/@redis/time-series/dist/lib/commands/mrange_withlabels.d.ts","../node_modules/@redis/time-series/dist/lib/commands/mrange.d.ts","../node_modules/@redis/time-series/dist/lib/commands/index.d.ts","../node_modules/@redis/time-series/dist/lib/index.d.ts","../node_modules/redis/dist/index.d.ts","../src/common/redis.service.ts","../src/common/telegram.service.ts","../src/maps/traffic-grid.service.ts","../src/telemetry/telemetry-analyzer.service.ts","../src/auth/entities/tenant.entity.ts","../src/auth/entities/api-key.entity.ts","../src/auth/auth.service.ts","../src/common/guards/api-key.guard.ts","../node_modules/@nestjs/swagger/dist/decorators/api-basic.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-bearer.decorator.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/open-api-spec.interface.d.ts","../node_modules/@nestjs/swagger/dist/types/swagger-enum.type.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-body.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-consumes.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-cookie.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-default-getter.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-exclude-endpoint.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-exclude-controller.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-extra-models.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-header.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-hide-property.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-link.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-oauth2.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-operation.decorator.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/enum-schema-attributes.interface.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-param.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-produces.decorator.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/schema-object-metadata.interface.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-property.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-query.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-response.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-security.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-use-tags.decorator.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/callback-object.interface.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-callbacks.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-extension.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/api-schema.decorator.d.ts","../node_modules/@nestjs/swagger/dist/decorators/index.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/swagger-ui-options.interface.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/swagger-custom-options.interface.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/swagger-document-options.interface.d.ts","../node_modules/@nestjs/swagger/dist/interfaces/index.d.ts","../node_modules/@nestjs/swagger/dist/document-builder.d.ts","../node_modules/@nestjs/swagger/dist/swagger-module.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/intersection-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/omit-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/partial-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/pick-type.helper.d.ts","../node_modules/@nestjs/swagger/dist/type-helpers/index.d.ts","../node_modules/@nestjs/swagger/dist/utils/get-schema-path.util.d.ts","../node_modules/@nestjs/swagger/dist/utils/index.d.ts","../node_modules/@nestjs/swagger/dist/index.d.ts","../src/telemetry/telemetry.controller.ts","../src/telemetry/map-refinement.controller.ts","../src/common/redis.module.ts","../src/maps/road-speed-profile.entity.ts","../node_modules/@nestjs/cache-manager/dist/cache.constants.d.ts","../node_modules/keyv/dist/index.d.cts","../node_modules/cache-manager/dist/index.d.cts","../node_modules/@nestjs/cache-manager/dist/interfaces/cache-manager.interface.d.ts","../node_modules/@nestjs/cache-manager/dist/interfaces/cache-module.interface.d.ts","../node_modules/@nestjs/cache-manager/dist/cache.module-definition.d.ts","../node_modules/@nestjs/cache-manager/dist/cache.module.d.ts","../node_modules/@nestjs/cache-manager/dist/decorators/cache-key.decorator.d.ts","../node_modules/@nestjs/cache-manager/dist/decorators/cache-ttl.decorator.d.ts","../node_modules/@nestjs/cache-manager/dist/decorators/index.d.ts","../node_modules/@nestjs/core/adapters/http-adapter.d.ts","../node_modules/@nestjs/core/adapters/index.d.ts","../node_modules/@nestjs/core/inspector/interfaces/edge.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/entrypoint.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/extras.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/node.interface.d.ts","../node_modules/@nestjs/core/injector/settlement-signal.d.ts","../node_modules/@nestjs/core/injector/injector.d.ts","../node_modules/@nestjs/core/inspector/interfaces/serialized-graph-metadata.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/serialized-graph-json.interface.d.ts","../node_modules/@nestjs/core/inspector/serialized-graph.d.ts","../node_modules/@nestjs/core/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.d.ts","../node_modules/@nestjs/core/injector/compiler.d.ts","../node_modules/@nestjs/core/injector/modules-container.d.ts","../node_modules/@nestjs/core/injector/container.d.ts","../node_modules/@nestjs/core/injector/instance-links-host.d.ts","../node_modules/@nestjs/core/injector/abstract-instance-resolver.d.ts","../node_modules/@nestjs/core/injector/module-ref.d.ts","../node_modules/@nestjs/core/injector/module.d.ts","../node_modules/@nestjs/core/injector/instance-wrapper.d.ts","../node_modules/@nestjs/core/router/interfaces/exclude-route-metadata.interface.d.ts","../node_modules/@nestjs/core/application-config.d.ts","../node_modules/@nestjs/core/constants.d.ts","../node_modules/@nestjs/core/discovery/discovery-module.d.ts","../node_modules/@nestjs/core/discovery/discovery-service.d.ts","../node_modules/@nestjs/core/discovery/index.d.ts","../node_modules/@nestjs/core/helpers/http-adapter-host.d.ts","../node_modules/@nestjs/core/exceptions/base-exception-filter.d.ts","../node_modules/@nestjs/core/exceptions/index.d.ts","../node_modules/@nestjs/core/helpers/context-id-factory.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/exception-filter-metadata.interface.d.ts","../node_modules/@nestjs/core/exceptions/exceptions-handler.d.ts","../node_modules/@nestjs/core/router/router-proxy.d.ts","../node_modules/@nestjs/core/helpers/context-creator.d.ts","../node_modules/@nestjs/core/exceptions/base-exception-filter-context.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/rpc-exception-filter-metadata.interface.d.ts","../node_modules/@nestjs/common/interfaces/exceptions/index.d.ts","../node_modules/@nestjs/core/exceptions/external-exception-filter.d.ts","../node_modules/@nestjs/core/exceptions/external-exceptions-handler.d.ts","../node_modules/@nestjs/core/exceptions/external-exception-filter-context.d.ts","../node_modules/@nestjs/core/guards/constants.d.ts","../node_modules/@nestjs/core/helpers/execution-context-host.d.ts","../node_modules/@nestjs/core/guards/guards-consumer.d.ts","../node_modules/@nestjs/core/guards/guards-context-creator.d.ts","../node_modules/@nestjs/core/guards/index.d.ts","../node_modules/@nestjs/core/interceptors/interceptors-consumer.d.ts","../node_modules/@nestjs/core/interceptors/interceptors-context-creator.d.ts","../node_modules/@nestjs/core/interceptors/index.d.ts","../node_modules/@nestjs/common/enums/route-paramtypes.enum.d.ts","../node_modules/@nestjs/core/pipes/params-token-factory.d.ts","../node_modules/@nestjs/core/pipes/pipes-consumer.d.ts","../node_modules/@nestjs/core/pipes/pipes-context-creator.d.ts","../node_modules/@nestjs/core/pipes/index.d.ts","../node_modules/@nestjs/core/helpers/context-utils.d.ts","../node_modules/@nestjs/core/injector/inquirer/inquirer-constants.d.ts","../node_modules/@nestjs/core/injector/inquirer/index.d.ts","../node_modules/@nestjs/core/interfaces/module-definition.interface.d.ts","../node_modules/@nestjs/core/interfaces/module-override.interface.d.ts","../node_modules/@nestjs/core/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts","../node_modules/@nestjs/core/inspector/graph-inspector.d.ts","../node_modules/@nestjs/core/metadata-scanner.d.ts","../node_modules/@nestjs/core/scanner.d.ts","../node_modules/@nestjs/core/injector/instance-loader.d.ts","../node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader-options.interface.d.ts","../node_modules/@nestjs/core/injector/lazy-module-loader/lazy-module-loader.d.ts","../node_modules/@nestjs/core/injector/index.d.ts","../node_modules/@nestjs/core/helpers/interfaces/external-handler-metadata.interface.d.ts","../node_modules/@nestjs/core/helpers/interfaces/params-metadata.interface.d.ts","../node_modules/@nestjs/core/helpers/external-context-creator.d.ts","../node_modules/@nestjs/core/helpers/index.d.ts","../node_modules/@nestjs/core/inspector/initialize-on-preview.allowlist.d.ts","../node_modules/@nestjs/core/inspector/partial-graph.host.d.ts","../node_modules/@nestjs/core/inspector/index.d.ts","../node_modules/@nestjs/core/middleware/route-info-path-extractor.d.ts","../node_modules/@nestjs/core/middleware/routes-mapper.d.ts","../node_modules/@nestjs/core/middleware/builder.d.ts","../node_modules/@nestjs/core/middleware/index.d.ts","../node_modules/@nestjs/core/nest-application-context.d.ts","../node_modules/@nestjs/core/nest-application.d.ts","../node_modules/@nestjs/common/interfaces/microservices/nest-microservice-options.interface.d.ts","../node_modules/@nestjs/core/nest-factory.d.ts","../node_modules/@nestjs/core/repl/repl.d.ts","../node_modules/@nestjs/core/repl/index.d.ts","../node_modules/@nestjs/core/router/interfaces/routes.interface.d.ts","../node_modules/@nestjs/core/router/interfaces/index.d.ts","../node_modules/@nestjs/core/router/request/request-constants.d.ts","../node_modules/@nestjs/core/router/request/index.d.ts","../node_modules/@nestjs/core/router/router-module.d.ts","../node_modules/@nestjs/core/router/index.d.ts","../node_modules/@nestjs/core/services/reflector.service.d.ts","../node_modules/@nestjs/core/services/index.d.ts","../node_modules/@nestjs/core/index.d.ts","../node_modules/@nestjs/cache-manager/dist/interceptors/cache.interceptor.d.ts","../node_modules/@nestjs/cache-manager/dist/interceptors/index.d.ts","../node_modules/@nestjs/cache-manager/dist/interfaces/index.d.ts","../node_modules/@nestjs/cache-manager/dist/index.d.ts","../node_modules/@nestjs/cache-manager/index.d.ts","../src/geocoding/entities/base-place.entity.ts","../src/geocoding/entities/place-syria.entity.ts","../src/geocoding/entities/place-jordan.entity.ts","../src/geocoding/entities/place-egypt.entity.ts","../src/geocoding/entities/osm-area.entity.ts","../src/geocoding/entities/osm-point-with-area.entity.ts","../src/geocoding/geocoding.service.ts","../src/maps/maps.service.ts","../src/maps/maps.controller.ts","../src/geocoding/geocoding-init.service.ts","../src/geocoding/entities/admin-boundary.entity.ts","../src/geocoding/admin-boundaries.service.ts","../src/geocoding/jordan-research.service.ts","../src/geocoding/entities/neighborhood-point.entity.ts","../src/geocoding/entities/neighborhood-polygon.entity.ts","../src/geocoding/administrative-linking.service.ts","../node_modules/@nestjs/throttler/dist/throttler-storage-record.interface.d.ts","../node_modules/@nestjs/throttler/dist/throttler-storage.interface.d.ts","../node_modules/@nestjs/throttler/dist/throttler.guard.interface.d.ts","../node_modules/@nestjs/throttler/dist/throttler-module-options.interface.d.ts","../node_modules/@nestjs/throttler/dist/throttler.decorator.d.ts","../node_modules/@nestjs/throttler/dist/throttler.exception.d.ts","../node_modules/@nestjs/throttler/dist/throttler.guard.d.ts","../node_modules/@nestjs/throttler/dist/throttler.module.d.ts","../node_modules/@nestjs/throttler/dist/throttler.providers.d.ts","../node_modules/@nestjs/throttler/dist/throttler-storage-options.interface.d.ts","../node_modules/@nestjs/throttler/dist/throttler.service.d.ts","../node_modules/@nestjs/throttler/dist/utilities.d.ts","../node_modules/@nestjs/throttler/dist/index.d.ts","../src/common/guards/rate-limiter.guard.ts","../node_modules/class-validator/types/validation/validationerror.d.ts","../node_modules/class-validator/types/validation/validatoroptions.d.ts","../node_modules/class-validator/types/validation-schema/validationschema.d.ts","../node_modules/class-validator/types/container.d.ts","../node_modules/class-validator/types/validation/validationarguments.d.ts","../node_modules/class-validator/types/decorator/validationoptions.d.ts","../node_modules/class-validator/types/decorator/common/allow.d.ts","../node_modules/class-validator/types/decorator/common/isdefined.d.ts","../node_modules/class-validator/types/decorator/common/isoptional.d.ts","../node_modules/class-validator/types/decorator/common/validate.d.ts","../node_modules/class-validator/types/validation/validatorconstraintinterface.d.ts","../node_modules/class-validator/types/decorator/common/validateby.d.ts","../node_modules/class-validator/types/decorator/common/validateif.d.ts","../node_modules/class-validator/types/decorator/common/validatenested.d.ts","../node_modules/class-validator/types/decorator/common/validatepromise.d.ts","../node_modules/class-validator/types/decorator/common/islatlong.d.ts","../node_modules/class-validator/types/decorator/common/islatitude.d.ts","../node_modules/class-validator/types/decorator/common/islongitude.d.ts","../node_modules/class-validator/types/decorator/common/equals.d.ts","../node_modules/class-validator/types/decorator/common/notequals.d.ts","../node_modules/class-validator/types/decorator/common/isempty.d.ts","../node_modules/class-validator/types/decorator/common/isnotempty.d.ts","../node_modules/class-validator/types/decorator/common/isin.d.ts","../node_modules/class-validator/types/decorator/common/isnotin.d.ts","../node_modules/class-validator/types/decorator/number/isdivisibleby.d.ts","../node_modules/class-validator/types/decorator/number/ispositive.d.ts","../node_modules/class-validator/types/decorator/number/isnegative.d.ts","../node_modules/class-validator/types/decorator/number/max.d.ts","../node_modules/class-validator/types/decorator/number/min.d.ts","../node_modules/class-validator/types/decorator/date/mindate.d.ts","../node_modules/class-validator/types/decorator/date/maxdate.d.ts","../node_modules/class-validator/types/decorator/string/contains.d.ts","../node_modules/class-validator/types/decorator/string/notcontains.d.ts","../node_modules/@types/validator/lib/isboolean.d.ts","../node_modules/@types/validator/lib/isemail.d.ts","../node_modules/@types/validator/lib/isfqdn.d.ts","../node_modules/@types/validator/lib/isiban.d.ts","../node_modules/@types/validator/lib/isiso31661alpha2.d.ts","../node_modules/@types/validator/lib/isiso4217.d.ts","../node_modules/@types/validator/lib/isiso6391.d.ts","../node_modules/@types/validator/lib/istaxid.d.ts","../node_modules/@types/validator/lib/isurl.d.ts","../node_modules/@types/validator/index.d.ts","../node_modules/class-validator/types/decorator/string/isalpha.d.ts","../node_modules/class-validator/types/decorator/string/isalphanumeric.d.ts","../node_modules/class-validator/types/decorator/string/isdecimal.d.ts","../node_modules/class-validator/types/decorator/string/isascii.d.ts","../node_modules/class-validator/types/decorator/string/isbase64.d.ts","../node_modules/class-validator/types/decorator/string/isbytelength.d.ts","../node_modules/class-validator/types/decorator/string/iscreditcard.d.ts","../node_modules/class-validator/types/decorator/string/iscurrency.d.ts","../node_modules/class-validator/types/decorator/string/isemail.d.ts","../node_modules/class-validator/types/decorator/string/isfqdn.d.ts","../node_modules/class-validator/types/decorator/string/isfullwidth.d.ts","../node_modules/class-validator/types/decorator/string/ishalfwidth.d.ts","../node_modules/class-validator/types/decorator/string/isvariablewidth.d.ts","../node_modules/class-validator/types/decorator/string/ishexcolor.d.ts","../node_modules/class-validator/types/decorator/string/ishexadecimal.d.ts","../node_modules/class-validator/types/decorator/string/ismacaddress.d.ts","../node_modules/class-validator/types/decorator/string/isip.d.ts","../node_modules/class-validator/types/decorator/string/isport.d.ts","../node_modules/class-validator/types/decorator/string/isisbn.d.ts","../node_modules/class-validator/types/decorator/string/isisin.d.ts","../node_modules/class-validator/types/decorator/string/isiso8601.d.ts","../node_modules/class-validator/types/decorator/string/isjson.d.ts","../node_modules/class-validator/types/decorator/string/isjwt.d.ts","../node_modules/class-validator/types/decorator/string/islowercase.d.ts","../node_modules/class-validator/types/decorator/string/ismobilephone.d.ts","../node_modules/class-validator/types/decorator/string/isiso31661alpha2.d.ts","../node_modules/class-validator/types/decorator/string/isiso31661alpha3.d.ts","../node_modules/class-validator/types/decorator/string/ismongoid.d.ts","../node_modules/class-validator/types/decorator/string/ismultibyte.d.ts","../node_modules/class-validator/types/decorator/string/issurrogatepair.d.ts","../node_modules/class-validator/types/decorator/string/isurl.d.ts","../node_modules/class-validator/types/decorator/string/isuuid.d.ts","../node_modules/class-validator/types/decorator/string/isfirebasepushid.d.ts","../node_modules/class-validator/types/decorator/string/isuppercase.d.ts","../node_modules/class-validator/types/decorator/string/length.d.ts","../node_modules/class-validator/types/decorator/string/maxlength.d.ts","../node_modules/class-validator/types/decorator/string/minlength.d.ts","../node_modules/class-validator/types/decorator/string/matches.d.ts","../node_modules/libphonenumber-js/types.d.cts","../node_modules/libphonenumber-js/max/index.d.cts","../node_modules/class-validator/types/decorator/string/isphonenumber.d.ts","../node_modules/class-validator/types/decorator/string/ismilitarytime.d.ts","../node_modules/class-validator/types/decorator/string/ishash.d.ts","../node_modules/class-validator/types/decorator/string/isissn.d.ts","../node_modules/class-validator/types/decorator/string/isdatestring.d.ts","../node_modules/class-validator/types/decorator/string/isbooleanstring.d.ts","../node_modules/class-validator/types/decorator/string/isnumberstring.d.ts","../node_modules/class-validator/types/decorator/string/isbase32.d.ts","../node_modules/class-validator/types/decorator/string/isbic.d.ts","../node_modules/class-validator/types/decorator/string/isbtcaddress.d.ts","../node_modules/class-validator/types/decorator/string/isdatauri.d.ts","../node_modules/class-validator/types/decorator/string/isean.d.ts","../node_modules/class-validator/types/decorator/string/isethereumaddress.d.ts","../node_modules/class-validator/types/decorator/string/ishsl.d.ts","../node_modules/class-validator/types/decorator/string/isiban.d.ts","../node_modules/class-validator/types/decorator/string/isidentitycard.d.ts","../node_modules/class-validator/types/decorator/string/isisrc.d.ts","../node_modules/class-validator/types/decorator/string/islocale.d.ts","../node_modules/class-validator/types/decorator/string/ismagneturi.d.ts","../node_modules/class-validator/types/decorator/string/ismimetype.d.ts","../node_modules/class-validator/types/decorator/string/isoctal.d.ts","../node_modules/class-validator/types/decorator/string/ispassportnumber.d.ts","../node_modules/class-validator/types/decorator/string/ispostalcode.d.ts","../node_modules/class-validator/types/decorator/string/isrfc3339.d.ts","../node_modules/class-validator/types/decorator/string/isrgbcolor.d.ts","../node_modules/class-validator/types/decorator/string/issemver.d.ts","../node_modules/class-validator/types/decorator/string/isstrongpassword.d.ts","../node_modules/class-validator/types/decorator/string/istimezone.d.ts","../node_modules/class-validator/types/decorator/string/isbase58.d.ts","../node_modules/class-validator/types/decorator/string/is-tax-id.d.ts","../node_modules/class-validator/types/decorator/string/is-iso4217-currency-code.d.ts","../node_modules/class-validator/types/decorator/typechecker/isboolean.d.ts","../node_modules/class-validator/types/decorator/typechecker/isdate.d.ts","../node_modules/class-validator/types/decorator/typechecker/isnumber.d.ts","../node_modules/class-validator/types/decorator/typechecker/isenum.d.ts","../node_modules/class-validator/types/decorator/typechecker/isint.d.ts","../node_modules/class-validator/types/decorator/typechecker/isstring.d.ts","../node_modules/class-validator/types/decorator/typechecker/isarray.d.ts","../node_modules/class-validator/types/decorator/typechecker/isobject.d.ts","../node_modules/class-validator/types/decorator/array/arraycontains.d.ts","../node_modules/class-validator/types/decorator/array/arraynotcontains.d.ts","../node_modules/class-validator/types/decorator/array/arraynotempty.d.ts","../node_modules/class-validator/types/decorator/array/arrayminsize.d.ts","../node_modules/class-validator/types/decorator/array/arraymaxsize.d.ts","../node_modules/class-validator/types/decorator/array/arrayunique.d.ts","../node_modules/class-validator/types/decorator/object/isnotemptyobject.d.ts","../node_modules/class-validator/types/decorator/object/isinstance.d.ts","../node_modules/class-validator/types/decorator/decorators.d.ts","../node_modules/class-validator/types/validation/validationtypes.d.ts","../node_modules/class-validator/types/validation/validator.d.ts","../node_modules/class-validator/types/register-decorator.d.ts","../node_modules/class-validator/types/metadata/validationmetadataargs.d.ts","../node_modules/class-validator/types/metadata/validationmetadata.d.ts","../node_modules/class-validator/types/metadata/constraintmetadata.d.ts","../node_modules/class-validator/types/metadata/metadatastorage.d.ts","../node_modules/class-validator/types/index.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/expose-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/exclude-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/transform-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/type-discriminator-descriptor.interface.d.ts","../node_modules/class-transformer/types/interfaces/decorator-options/type-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/exclude-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/expose-metadata.interface.d.ts","../node_modules/class-transformer/types/enums/transformation-type.enum.d.ts","../node_modules/class-transformer/types/enums/index.d.ts","../node_modules/class-transformer/types/interfaces/target-map.interface.d.ts","../node_modules/class-transformer/types/interfaces/class-transformer-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/transform-fn-params.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/transform-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/metadata/type-metadata.interface.d.ts","../node_modules/class-transformer/types/interfaces/class-constructor.type.d.ts","../node_modules/class-transformer/types/interfaces/type-help-options.interface.d.ts","../node_modules/class-transformer/types/interfaces/index.d.ts","../node_modules/class-transformer/types/classtransformer.d.ts","../node_modules/class-transformer/types/decorators/exclude.decorator.d.ts","../node_modules/class-transformer/types/decorators/expose.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform-instance-to-instance.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform-instance-to-plain.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform-plain-to-instance.decorator.d.ts","../node_modules/class-transformer/types/decorators/transform.decorator.d.ts","../node_modules/class-transformer/types/decorators/type.decorator.d.ts","../node_modules/class-transformer/types/decorators/index.d.ts","../node_modules/class-transformer/types/index.d.ts","../src/geocoding/dto/search-query.dto.ts","../src/geocoding/dto/reverse-geocode.dto.ts","../src/geocoding/geocoding.controller.ts","../src/geocoding/geocoding.module.ts","../src/maps/maps.module.ts","../src/telemetry/telemetry.module.ts","../src/auth/auth.module.ts","../src/app.module.ts","../node_modules/helmet/index.d.cts","../src/main.ts","../src/common/cache.service.ts","../src/common/gis.utils.ts","../node_modules/@babel/types/lib/index.d.ts","../node_modules/@types/babel__generator/index.d.ts","../node_modules/@babel/parser/typings/babel-parser.d.ts","../node_modules/@types/babel__template/index.d.ts","../node_modules/@types/babel__traverse/index.d.ts","../node_modules/@types/babel__core/index.d.ts","../node_modules/@types/connect/index.d.ts","../node_modules/@types/body-parser/index.d.ts","../node_modules/@types/cookiejar/index.d.ts","../node_modules/@types/estree/index.d.ts","../node_modules/@types/json-schema/index.d.ts","../node_modules/@types/eslint/use-at-your-own-risk.d.ts","../node_modules/@types/eslint/index.d.ts","../node_modules/@eslint/core/dist/cjs/types.d.cts","../node_modules/eslint/lib/types/use-at-your-own-risk.d.ts","../node_modules/eslint/lib/types/index.d.ts","../node_modules/@types/eslint-scope/index.d.ts","../node_modules/@types/send/index.d.ts","../node_modules/@types/qs/index.d.ts","../node_modules/@types/range-parser/index.d.ts","../node_modules/@types/express-serve-static-core/index.d.ts","../node_modules/@types/http-errors/index.d.ts","../node_modules/@types/serve-static/index.d.ts","../node_modules/@types/express/index.d.ts","../node_modules/@types/istanbul-lib-coverage/index.d.ts","../node_modules/@types/istanbul-lib-report/index.d.ts","../node_modules/@types/istanbul-reports/index.d.ts","../node_modules/@jest/expect-utils/build/index.d.ts","../node_modules/chalk/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/symbols/symbols.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/symbols/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/any/any.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/any/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/mapped/mapped-key.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/mapped/mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/async-iterator/async-iterator.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/async-iterator/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/readonly/readonly.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/readonly/readonly-from-mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/readonly/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/readonly-optional/readonly-optional.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/readonly-optional/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/constructor/constructor.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/constructor/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/literal/literal.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/literal/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/enum/enum.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/enum/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/function/function.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/function/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/computed/computed.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/computed/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/never/never.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/never/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/intersect/intersect-type.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/intersect/intersect-evaluated.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/intersect/intersect.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/intersect/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/union/union-type.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/union/union-evaluated.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/union/union.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/union/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/recursive/recursive.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/recursive/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/unsafe/unsafe.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/unsafe/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/ref/ref.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/ref/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/tuple/tuple.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/tuple/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/error/error.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/error/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/string/string.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/string/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/boolean/boolean.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/boolean/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/number/number.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/number/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/integer/integer.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/integer/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/bigint/bigint.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/bigint/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/template-literal/parse.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/template-literal/finite.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/template-literal/generate.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/template-literal/syntax.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/template-literal/pattern.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/template-literal/template-literal.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/template-literal/union.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/template-literal/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed-property-keys.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed-from-mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/indexed/indexed-from-mapped-key.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/indexed/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/iterator/iterator.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/iterator/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/promise/promise.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/promise/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/sets/set.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/sets/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/mapped/mapped.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/mapped/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/optional/optional.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/optional/optional-from-mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/optional/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/awaited/awaited.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/awaited/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof-property-keys.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof-from-mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/keyof/keyof-property-entries.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/keyof/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/omit/omit-from-mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/omit/omit.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/omit/omit-from-mapped-key.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/omit/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/pick/pick-from-mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/pick/pick.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/pick/pick-from-mapped-key.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/pick/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/null/null.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/null/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/symbol/symbol.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/symbol/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/undefined/undefined.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/undefined/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/partial/partial.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/partial/partial-from-mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/partial/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/regexp/regexp.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/regexp/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/record/record.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/record/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/required/required.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/required/required-from-mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/required/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/transform/transform.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/transform/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/module/compute.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/module/infer.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/module/module.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/module/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/not/not.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/not/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/static/static.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/static/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/object/object.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/object/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/helpers/helpers.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/helpers/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/array/array.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/array/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/date/date.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/date/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/uint8array/uint8array.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/uint8array/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/unknown/unknown.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/unknown/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/void/void.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/void/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/schema/schema.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/schema/anyschema.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/schema/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/clone/type.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/clone/value.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/clone/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/create/type.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/create/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/argument/argument.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/argument/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/guard/kind.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/guard/type.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/guard/value.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/guard/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/patterns/patterns.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/patterns/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/registry/format.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/registry/type.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/registry/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/composite/composite.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/composite/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/const/const.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/const/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/constructor-parameters/constructor-parameters.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/constructor-parameters/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/exclude/exclude-from-template-literal.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/exclude/exclude.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/exclude/exclude-from-mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/exclude/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/extends/extends-check.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/extends/extends-from-mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/extends/extends.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/extends/extends-from-mapped-key.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/extends/extends-undefined.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/extends/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/extract/extract-from-template-literal.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/extract/extract.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/extract/extract-from-mapped-result.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/extract/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/instance-type/instance-type.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/instance-type/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/instantiate/instantiate.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/instantiate/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/intrinsic/intrinsic-from-mapped-key.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/intrinsic/intrinsic.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/intrinsic/capitalize.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/intrinsic/lowercase.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/intrinsic/uncapitalize.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/intrinsic/uppercase.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/intrinsic/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/parameters/parameters.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/parameters/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/rest/rest.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/rest/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/return-type/return-type.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/return-type/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/type/json.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/type/javascript.d.ts","../node_modules/@sinclair/typebox/build/cjs/type/type/index.d.ts","../node_modules/@sinclair/typebox/build/cjs/index.d.ts","../node_modules/@jest/schemas/build/index.d.ts","../node_modules/pretty-format/build/index.d.ts","../node_modules/jest-diff/build/index.d.ts","../node_modules/jest-matcher-utils/build/index.d.ts","../node_modules/jest-mock/build/index.d.ts","../node_modules/expect/build/index.d.ts","../node_modules/@types/jest/index.d.ts","../node_modules/@types/methods/index.d.ts","../node_modules/@types/stack-utils/index.d.ts","../node_modules/@types/superagent/lib/agent-base.d.ts","../node_modules/@types/superagent/lib/node/response.d.ts","../node_modules/@types/superagent/types.d.ts","../node_modules/@types/superagent/lib/node/agent.d.ts","../node_modules/@types/superagent/lib/request-base.d.ts","../node_modules/form-data/index.d.ts","../node_modules/@types/superagent/lib/node/http2wrapper.d.ts","../node_modules/@types/superagent/lib/node/index.d.ts","../node_modules/@types/superagent/index.d.ts","../node_modules/@types/supertest/types.d.ts","../node_modules/@types/supertest/lib/agent.d.ts","../node_modules/@types/supertest/lib/test.d.ts","../node_modules/@types/supertest/index.d.ts","../node_modules/@types/yargs-parser/index.d.ts","../node_modules/@types/yargs/index.d.ts"],"fileIdsList":[[437,486,503,504,1536],[437,486,503,504],[437,486,503,504,1546],[437,486,503,504,1756],[421,437,486,503,504,1225],[421,437,486,503,504,1223,1225,1226],[421,437,486,503,504],[437,486,503,504,1228,1229],[437,486,503,504,1221,1227,1230,1324,1325],[264,421,437,486,503,504,1322],[437,486,503,504,1323],[437,486,503,504,1222,1223],[421,437,486,503,504,1224],[437,486,503,504,1224,1225],[437,486,503,504,1326],[321,437,486,503,504],[70,322,323,324,325,326,327,328,329,330,331,332,333,334,437,486,503,504],[273,307,437,486,503,504],[280,437,486,503,504],[270,321,421,437,486,503,504],[339,340,341,342,343,344,345,347,437,486,503,504],[275,437,486,503,504],[321,421,437,486,503,504],[275,346,437,486,503,504],[335,338,348,437,486,503,504],[336,337,437,486,503,504],[311,437,486,503,504],[275,276,277,278,437,486,503,504],[351,437,486,503,504],[293,350,437,486,503,504],[350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,437,486,503,504],[380,437,486,503,504],[377,378,437,486,503,504],[376,379,437,486,503,504,518],[69,279,321,349,373,376,381,388,413,418,420,437,486,503,504],[75,273,437,486,503,504],[74,437,486,503,504],[75,265,266,437,486,503,504,1261,1266],[265,273,437,486,503,504],[74,264,437,486,503,504],[273,401,437,486,503,504],[267,403,437,486,503,504],[264,268,437,486,503,504],[268,437,486,503,504],[74,321,437,486,503,504],[272,273,437,486,503,504],[285,437,486,503,504],[287,288,289,290,291,437,486,503,504],[279,437,486,503,504],[279,280,299,437,486,503,504],[293,294,300,301,302,437,486,503,504],[71,72,73,74,75,265,266,267,268,269,270,271,272,273,274,280,285,286,292,299,303,304,305,307,315,316,317,318,319,320,437,486,503,504],[298,437,486,503,504],[281,282,283,284,437,486,503,504],[273,281,282,437,486,503,504],[273,279,280,437,486,503,504],[273,283,437,486,503,504],[273,311,437,486,503,504],[306,308,309,310,311,312,313,314,437,486,503,504],[71,273,437,486,503,504],[307,437,486,503,504],[71,273,306,310,312,437,486,503,504],[282,437,486,503,504],[308,437,486,503,504],[273,307,308,309,437,486,503,504],[297,437,486,503,504],[273,277,297,298,315,316,437,486,503,504],[295,296,298,437,486,503,504],[269,271,280,286,300,317,318,321,437,486,503,504],[75,264,269,271,274,317,318,437,486,503,504],[278,437,486,503,504],[264,437,486,503,504],[297,321,382,386,437,486,503,504],[386,387,437,486,503,504],[321,382,437,486,503,504],[321,382,383,437,486,503,504],[383,384,437,486,503,504],[383,384,385,437,486,503,504],[274,437,486,503,504],[391,392,393,437,486,503,504],[391,437,486,503,504],[393,394,395,397,398,399,437,486,503,504],[390,437,486,503,504],[393,396,437,486,503,504],[393,394,395,397,398,437,486,503,504],[274,391,393,397,437,486,503,504],[389,400,405,406,407,408,409,410,411,412,437,486,503,504],[274,321,405,437,486,503,504],[274,396,437,486,503,504],[274,396,421,437,486,503,504],[267,273,274,396,401,402,403,404,437,486,503,504],[264,321,401,402,414,437,486,503,504],[321,401,437,486,503,504],[416,437,486,503,504],[349,414,437,486,503,504],[414,415,417,437,486,503,504],[297,437,486,503,504,530],[297,374,375,437,486,503,504],[306,437,486,503,504],[279,321,437,486,503,504],[419,437,486,503,504],[421,437,486,503,504,539],[264,425,430,437,486,503,504],[424,430,437,486,503,504,539,540,541,544],[430,437,486,503,504],[431,437,486,503,504,537],[425,431,437,486,503,504,538],[426,427,428,429,437,486,503,504],[437,486,503,504,542,543],[430,437,486,503,504,539,545],[437,486,503,504,545],[299,321,421,437,486,503,504],[437,486,503,504,1231],[321,421,437,486,503,504,1250,1251],[346,437,486,503,504],[421,437,486,503,504,1244,1249,1250],[437,486,503,504,1254,1255],[75,321,437,486,503,504,1245,1250,1264],[421,437,486,503,504,1232,1257],[74,421,437,486,503,504,1258,1261],[321,437,486,503,504,1245,1250,1252,1263,1265,1269],[74,437,486,503,504,1267,1268],[437,486,503,504,1258],[264,321,421,437,486,503,504,1272],[321,421,437,486,503,504,1245,1250,1252,1264],[437,486,503,504,1271,1273,1274],[321,437,486,503,504,1250],[437,486,503,504,1250],[321,421,437,486,503,504,1272],[74,321,421,437,486,503,504],[321,421,437,486,503,504,1244,1245,1250,1270,1272,1275,1278,1283,1284,1297,1298],[264,437,486,503,504,1231],[437,486,503,504,1257,1260,1299],[437,486,503,504,1284,1296],[69,437,486,503,504,1232,1252,1253,1256,1259,1291,1296,1300,1303,1307,1308,1309,1311,1313,1319,1321],[321,421,437,486,503,504,1238,1246,1249,1250],[321,437,486,503,504,1242],[298,321,346,421,437,486,503,504,1241,1242,1243,1244,1249,1250,1252,1322],[437,486,503,504,1244,1245,1248,1250,1286,1295],[321,421,437,486,503,504,1237,1249,1250],[437,486,503,504,1285],[421,437,486,503,504,1245,1250],[421,437,486,503,504,1238,1245,1249,1290],[321,346,421,437,486,503,504,1237,1249],[421,437,486,503,504,1243,1244,1248,1288,1292,1293,1294],[421,437,486,503,504,1238,1245,1246,1247,1249,1250],[321,346,437,486,503,504,1245,1248,1250],[264,437,486,503,504,1249],[273,306,312,437,486,503,504],[437,486,503,504,1234,1235,1236,1245,1249,1250,1289],[437,486,503,504,1241,1290,1301,1302],[346,421,437,486,503,504,1250],[346,421,437,486,503,504],[437,486,503,504,1233,1234,1235,1236,1239,1241],[437,486,503,504,1238],[437,486,503,504,1240,1241],[421,437,486,503,504,1233,1234,1235,1236,1239,1240],[437,486,503,504,1276,1277],[321,437,486,503,504,1245,1250,1252,1264],[437,486,503,504,1287],[304,437,486,503,504],[285,321,437,486,503,504,1304,1305],[437,486,503,504,1306],[321,437,486,503,504,1252],[321,437,486,503,504,1245,1252],[298,321,421,437,486,503,504,1238,1245,1246,1247,1249,1250],[297,321,421,437,486,503,504,1232,1245,1252,1290,1308],[298,299,421,437,486,503,504,1231,1310],[437,486,503,504,1280,1281,1282],[421,437,486,503,504,1279],[437,486,503,504,1312],[421,437,486,503,504,515],[437,486,503,504,1315,1317,1318],[437,486,503,504,1314],[437,486,503,504,1316],[421,437,486,503,504,1244,1249,1315],[437,486,503,504,1262],[321,346,421,437,486,503,504,1245,1249,1250,1252,1287,1288,1290,1291],[437,486,503,504,1320],[437,486,503,504,960],[437,486,503,504,961,962,963],[437,486,503,504,942],[437,486,503,504,943,964,965,966,967],[421,437,486,503,504,965],[437,486,503,504,968],[421,437,486,503,504,1175,1176],[437,486,503,504,1198],[437,486,503,504,1175,1176],[437,486,503,504,1175],[421,437,486,503,504,1175,1176,1189],[421,437,486,503,504,1189,1192],[421,437,486,503,504,1175],[437,486,503,504,1192],[437,486,503,504,1173,1174,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1190,1191,1193,1194,1195,1196,1197,1199,1200,1201],[437,486,503,504,1175,1195,1206],[69,437,486,503,504,1202,1206,1207,1208,1213,1215],[437,486,503,504,1175,1204,1205],[421,437,486,503,504,1175,1189],[437,486,503,504,1175,1203],[300,421,437,486,503,504,1206],[437,486,503,504,1209,1210,1211,1212],[437,486,503,504,1214],[437,486,503,504,1345,1346,1347,1348,1349,1350,1351,1352,1354,1355],[321,437,486,503,504,1345,1346],[437,486,503,504,1344],[437,486,503,504,1347],[421,437,486,503,504,1322,1345,1346,1347],[421,437,486,503,504,1344,1347],[421,437,486,503,504,1347],[421,437,486,503,504,1345,1347],[421,437,486,503,504,1344,1345,1353],[437,486,503,504,934,935],[421,437,486,503,504,932,933],[264,421,437,486,503,504,932,933],[437,486,503,504,936,938,939],[437,486,503,504,932],[437,486,503,504,937],[421,437,486,503,504,932],[421,437,486,503,504,932,933,937],[437,486,503,504,940],[437,486,503,504,977,982],[437,486,503,504,976,977,982],[437,486,503,504,976,982,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105],[437,486,503,504,1106],[437,486,503,504,977,978,979,980,981,982,983,1011,1067,1080,1081,1083,1086,1087,1089],[437,486,503,504,1071],[437,486,503,504,1069,1070,1071,1072,1073],[437,486,503,504,1069,1070,1071],[437,486,503,504,518,536,977,982,1083],[437,486,503,504,536,980,982,1075,1083],[437,486,503,504,982,1076,1083],[437,486,497,503,504,536,976,977,982,1020,1067,1068,1074,1075,1076,1077,1078,1079,1080,1081,1082],[437,486,503,504,536,978,982,1067,1083],[437,486,503,504,976,982,1067,1077],[437,486,503,504,976,982],[437,486,497,503,504,536,982,1067,1076,1077,1078,1080,1083],[437,486,503,504,536,982,1076],[437,486,497,503,504,506,526,536,982],[437,486,503,504,518,536,982,1075,1080,1083,1086],[437,486,497,503,504,536,982,1067,1068,1075,1076,1080,1083,1084,1085],[437,486,503,504,977,982,994],[437,486,503,504,977,982,999],[437,486,503,504,982,1005,1090],[437,486,503,504,977,982,1009],[437,486,503,504,976,982,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1090],[437,486,503,504,982,1027,1090],[437,486,503,504,977,982,991],[437,486,503,504,977,982,1038],[437,486,503,504,976,977,982,1050],[437,486,503,504,536,982],[437,486,503,504,982],[437,486,503,504,536,978,982],[437,486,503,504,536,976,977,978,979,980,981],[437,486,497,503,504,536,976,982,1075,1076,1077,1080,1083,1087,1088],[437,486,503,504,976,982,1067,1077,1087],[437,486,503,504,982,1067,1068,1076,1080,1083,1089],[437,486,503,504,976,977,982,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122],[437,486,503,504,1123],[437,486,503,504,977,982,1125,1126],[437,486,503,504,977,982,1127],[437,486,503,504,977,982,1128],[437,486,503,504,977,982,1126],[437,486,503,504,536,976,977,982,1127],[437,486,503,504,536,976,982,1090,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140],[437,486,503,504,977,982,1090],[437,486,503,504,977,982,1126,1127],[437,486,503,504,976,977,982,1125],[437,486,503,504,982,1090,1126],[437,486,503,504,1125,1126,1127,1141],[437,486,503,504,977,982,1144],[437,486,503,504,977,982,1145],[437,486,503,504,977,982,1143,1144],[437,486,503,504,536,976,977,982,1143],[437,486,503,504,536,976,982,1090,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161],[437,486,503,504,977,982,1144,1147],[437,486,503,504,977,982,1150],[437,486,503,504,976,977,982,1144],[437,486,503,504,976,977,982,1144,1153],[437,486,503,504,976,977,982,1144,1155],[437,486,503,504,976,977,982,1144,1155,1156,1157],[437,486,503,504,536,976,977,982,1144,1155,1156],[437,486,503,504,1147,1155,1156,1162],[437,486,503,504,1566,1568,1572,1575,1577,1579,1581,1583,1585,1589,1593,1597,1599,1601,1603,1605,1607,1609,1611,1613,1615,1617,1625,1630,1632,1634,1636,1638,1641,1643,1648,1652,1656,1658,1660,1662,1665,1667,1669,1672,1674,1678,1680,1682,1684,1686,1688,1690,1692,1694,1696,1699,1702,1704,1706,1710,1712,1715,1717,1719,1721,1725,1731,1735,1737,1739,1746,1748,1750,1752,1755],[437,486,503,504,1566,1699],[437,486,503,504,1567],[437,486,503,504,1705],[437,486,503,504,1566,1682,1686,1699],[437,486,503,504,1687],[437,486,503,504,1566,1682,1699],[437,486,503,504,1571],[437,486,503,504,1587,1593,1597,1603,1634,1686,1699],[437,486,503,504,1642],[437,486,503,504,1616],[437,486,503,504,1610],[437,486,503,504,1700,1701],[437,486,503,504,1699],[437,486,503,504,1589,1593,1630,1636,1648,1684,1686,1699],[437,486,503,504,1716],[437,486,503,504,1565,1699],[437,486,503,504,1586],[437,486,503,504,1568,1575,1581,1585,1589,1605,1617,1658,1660,1662,1684,1686,1690,1692,1694,1699],[437,486,503,504,1718],[437,486,503,504,1579,1589,1605,1699],[437,486,503,504,1720],[437,486,503,504,1566,1575,1577,1641,1682,1686,1699],[437,486,503,504,1578],[437,486,503,504,1703],[437,486,503,504,1697],[437,486,503,504,1689],[437,486,503,504,1566,1581,1699],[437,486,503,504,1582],[437,486,503,504,1606],[437,486,503,504,1638,1684,1699,1723],[437,486,503,504,1625,1699,1723],[437,486,503,504,1589,1597,1625,1638,1682,1686,1699,1722,1724],[437,486,503,504,1722,1723,1724],[437,486,503,504,1607,1699],[437,486,503,504,1581,1638,1684,1686,1699,1728],[437,486,503,504,1638,1684,1699,1728],[437,486,503,504,1597,1638,1682,1686,1699,1727,1729],[437,486,503,504,1726,1727,1728,1729,1730],[437,486,503,504,1638,1684,1699,1733],[437,486,503,504,1625,1699,1733],[437,486,503,504,1589,1597,1625,1638,1682,1686,1699,1732,1734],[437,486,503,504,1732,1733,1734],[437,486,503,504,1584],[437,486,503,504,1707,1708,1709],[437,486,503,504,1566,1568,1572,1575,1579,1581,1585,1587,1589,1593,1597,1599,1601,1603,1605,1609,1611,1613,1615,1617,1625,1632,1634,1638,1641,1658,1660,1662,1667,1669,1674,1678,1680,1684,1688,1690,1692,1694,1696,1699,1706],[437,486,503,504,1566,1568,1572,1575,1579,1581,1585,1587,1589,1593,1597,1599,1601,1603,1605,1607,1609,1611,1613,1615,1617,1625,1632,1634,1638,1641,1658,1660,1662,1667,1669,1674,1678,1680,1684,1688,1690,1692,1694,1696,1699,1706],[437,486,503,504,1589,1684,1699],[437,486,503,504,1685],[437,486,503,504,1626,1627,1628,1629],[437,486,503,504,1628,1638,1684,1686,1699],[437,486,503,504,1626,1630,1638,1684,1699],[437,486,503,504,1581,1597,1613,1615,1625,1699],[437,486,503,504,1587,1589,1593,1597,1599,1603,1605,1626,1627,1629,1638,1684,1686,1688,1699],[437,486,503,504,1736],[437,486,503,504,1579,1589,1699],[437,486,503,504,1738],[437,486,503,504,1572,1575,1577,1579,1585,1593,1597,1605,1632,1634,1641,1669,1684,1688,1694,1699,1706],[437,486,503,504,1614],[437,486,503,504,1590,1591,1592],[437,486,503,504,1575,1589,1590,1641,1699],[437,486,503,504,1589,1590,1699],[437,486,503,504,1699,1741],[437,486,503,504,1740,1741,1742,1743,1744,1745],[437,486,503,504,1581,1638,1684,1686,1699,1741],[437,486,503,504,1581,1597,1625,1638,1699,1740],[437,486,503,504,1631],[437,486,503,504,1644,1645,1646,1647],[437,486,503,504,1638,1645,1684,1686,1699],[437,486,503,504,1593,1597,1599,1605,1636,1684,1686,1688,1699],[437,486,503,504,1581,1587,1597,1603,1613,1638,1644,1646,1686,1699],[437,486,503,504,1580],[437,486,503,504,1569,1570,1637],[437,486,503,504,1566,1684,1699],[437,486,503,504,1569,1570,1572,1575,1579,1581,1583,1585,1593,1597,1605,1630,1632,1634,1636,1641,1684,1686,1688,1699],[437,486,503,504,1572,1575,1579,1583,1585,1587,1589,1593,1597,1603,1605,1630,1632,1641,1643,1648,1652,1656,1665,1669,1672,1674,1684,1686,1688,1699],[437,486,503,504,1677],[437,486,503,504,1572,1575,1579,1583,1585,1593,1597,1599,1603,1605,1632,1641,1669,1682,1684,1686,1688,1699],[437,486,503,504,1566,1675,1676,1682,1684,1699],[437,486,503,504,1588],[437,486,503,504,1679],[437,486,503,504,1657],[437,486,503,504,1612],[437,486,503,504,1683],[437,486,503,504,1566,1575,1641,1682,1686,1699],[437,486,503,504,1649,1650,1651],[437,486,503,504,1638,1650,1684,1699],[437,486,503,504,1638,1650,1684,1686,1699],[437,486,503,504,1581,1587,1593,1597,1599,1603,1630,1638,1649,1651,1684,1686,1699],[437,486,503,504,1639,1640],[437,486,503,504,1638,1639,1684],[437,486,503,504,1566,1638,1640,1686,1699],[437,486,503,504,1747],[437,486,503,504,1585,1589,1605,1699],[437,486,503,504,1663,1664],[437,486,503,504,1638,1663,1684,1686,1699],[437,486,503,504,1575,1577,1581,1587,1593,1597,1599,1603,1609,1611,1613,1615,1617,1638,1641,1658,1660,1662,1664,1684,1686,1699],[437,486,503,504,1711],[437,486,503,504,1653,1654,1655],[437,486,503,504,1638,1654,1684,1699],[437,486,503,504,1638,1654,1684,1686,1699],[437,486,503,504,1581,1587,1593,1597,1599,1603,1630,1638,1653,1655,1684,1686,1699],[437,486,503,504,1633],[437,486,503,504,1576],[437,486,503,504,1575,1641,1699],[437,486,503,504,1573,1574],[437,486,503,504,1573,1638,1684],[437,486,503,504,1566,1574,1638,1686,1699],[437,486,503,504,1668],[437,486,503,504,1566,1568,1581,1583,1589,1597,1609,1611,1613,1615,1625,1667,1682,1684,1686,1699],[437,486,503,504,1598],[437,486,503,504,1602],[437,486,503,504,1566,1601,1682,1699],[437,486,503,504,1666],[437,486,503,504,1713,1714],[437,486,503,504,1670,1671],[437,486,503,504,1638,1670,1684,1686,1699],[437,486,503,504,1575,1577,1581,1587,1593,1597,1599,1603,1609,1611,1613,1615,1617,1638,1641,1658,1660,1662,1671,1684,1686,1699],[437,486,503,504,1749],[437,486,503,504,1593,1597,1605,1699],[437,486,503,504,1751],[437,486,503,504,1585,1589,1699],[437,486,503,504,1568,1572,1579,1581,1583,1585,1593,1597,1599,1603,1605,1609,1611,1613,1615,1617,1625,1632,1634,1658,1660,1662,1667,1669,1680,1684,1688,1690,1692,1694,1696,1697],[437,486,503,504,1697,1698],[437,486,503,504,1566],[437,486,503,504,1635],[437,486,503,504,1681],[437,486,503,504,1572,1575,1579,1583,1585,1589,1593,1597,1599,1601,1603,1605,1632,1634,1641,1669,1674,1678,1680,1684,1686,1688,1699],[437,486,503,504,1608],[437,486,503,504,1659],[437,486,503,504,1565],[437,486,503,504,1581,1597,1607,1609,1611,1613,1615,1617,1618,1625],[437,486,503,504,1581,1597,1607,1611,1618,1619,1625,1686],[437,486,503,504,1618,1619,1620,1621,1622,1623,1624],[437,486,503,504,1607],[437,486,503,504,1607,1625],[437,486,503,504,1581,1597,1609,1611,1613,1617,1625,1686],[437,486,503,504,1566,1581,1589,1597,1609,1611,1613,1615,1617,1621,1682,1686,1699],[437,486,503,504,1581,1597,1623,1682,1686],[437,486,503,504,1673],[437,486,503,504,1604],[437,486,503,504,1753,1754],[437,486,503,504,1572,1579,1585,1617,1632,1634,1643,1660,1662,1667,1690,1692,1696,1699,1706,1721,1737,1739,1748,1752,1753],[437,486,503,504,1568,1575,1577,1581,1583,1589,1593,1597,1599,1601,1603,1605,1609,1611,1613,1615,1625,1630,1638,1641,1648,1652,1656,1658,1665,1669,1672,1674,1678,1680,1684,1688,1694,1699,1717,1719,1725,1731,1735,1746,1750],[437,486,503,504,1691],[437,486,503,504,1661],[437,486,503,504,1594,1595,1596],[437,486,503,504,1575,1589,1594,1641,1699],[437,486,503,504,1589,1594,1699],[437,486,503,504,1693],[437,486,503,504,1600],[437,486,503,504,1695],[437,486,503,504,1536,1537,1538,1539,1540],[437,486,503,504,1536,1538],[437,486,500,503,504,536,1542],[437,486,500,503,504,536],[437,486,503,504,1545,1551],[437,486,503,504,1545,1546,1547],[437,486,503,504,1548],[437,486,497,500,503,504,536,1553,1554,1555],[437,486,503,504,1543,1556,1558],[437,486,503,504,1560],[437,486,503,504,1561],[437,486,503,504,1758,1762],[437,486,503,504,952],[437,486,503,504,945],[437,486,503,504,944,946,948,949,953],[437,486,503,504,946,947,950],[437,486,503,504,944,947,950],[437,486,503,504,946,948,950],[437,486,503,504,944,945,947,948,949,950,951],[437,486,503,504,944,950],[437,486,503,504,946],[437,483,484,486,503,504],[437,485,486,503,504],[486,503,504],[437,486,491,503,504,521],[437,486,487,492,497,503,504,506,518,529],[437,486,487,488,497,503,504,506],[432,433,434,437,486,503,504],[437,486,489,503,504,530],[437,486,490,491,498,503,504,507],[437,486,491,503,504,518,526],[437,486,492,494,497,503,504,506],[437,485,486,493,503,504],[437,486,494,495,503,504],[437,486,496,497,503,504],[437,485,486,497,503,504],[437,486,497,498,499,503,504,518,529],[437,486,497,498,499,503,504,513,518,521],[437,479,486,494,497,500,503,504,506,518,529],[437,486,497,498,500,501,503,504,506,518,526,529],[437,486,500,502,503,504,518,526,529],[435,436,437,438,439,440,441,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535],[437,486,497,503,504],[437,486,503,504,505,529],[437,486,494,497,503,504,506,518],[437,486,503,504,507],[437,486,503,504,508],[437,485,486,503,504,509],[437,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535],[437,486,503,504,511],[437,486,503,504,512],[437,486,497,503,504,513,514],[437,486,503,504,513,515,530,532],[437,486,498,503,504],[437,486,497,503,504,518,519,521],[437,486,503,504,520,521],[437,486,503,504,518,519],[437,486,503,504,521],[437,486,503,504,522],[437,483,486,503,504,518,523,529],[437,486,497,503,504,524,525],[437,486,503,504,524,525],[437,486,491,503,504,506,518,526],[437,486,503,504,527],[437,486,503,504,506,528],[437,486,500,503,504,512,529],[437,486,491,503,504,530],[437,486,503,504,518,531],[437,486,503,504,505,532],[437,486,503,504,533],[437,479,486,503,504],[437,479,486,497,499,503,504,509,518,521,529,531,532,534],[437,486,503,504,518,535],[437,486,498,503,504,518,536],[437,486,500,503,504,536,1557],[437,486,503,504,1773],[437,486,503,504,1544,1764,1766,1768,1774],[437,486,501,503,504,506,518,526,536],[437,486,498,500,501,502,503,504,506,518,1764,1767,1768,1769,1770,1771,1772],[437,486,500,503,504,518,1773],[437,486,498,503,504,1767,1768],[437,486,503,504,529,1767],[437,486,503,504,1774,1775,1776,1777],[437,486,503,504,1774,1775,1778],[437,486,503,504,1774,1775],[437,486,500,501,503,504,506,1764,1774],[437,486,503,504,1391,1392,1393,1394,1395,1396,1397,1398,1399],[437,486,503,504,1779],[437,486,497,503,504,1222],[437,486,503,504,1513],[437,486,503,504,1515,1516,1517,1518,1519,1520,1521],[437,486,503,504,1504],[437,486,503,504,1505,1513,1514,1522],[437,486,503,504,1506],[437,486,503,504,1500],[437,486,503,504,1497,1498,1499,1500,1501,1502,1503,1506,1507,1508,1509,1510,1511,1512],[437,486,503,504,1505,1507],[437,486,503,504,1508,1513],[437,486,503,504,1363],[437,486,503,504,1362,1363,1368],[437,486,503,504,1364,1365,1366,1367,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487],[437,486,503,504,1363,1400],[437,486,503,504,1363,1440],[437,486,503,504,1362],[437,486,503,504,1358,1359,1360,1361,1362,1363,1368,1488,1489,1490,1491,1495],[437,486,503,504,1368],[437,486,503,504,1360,1493,1494],[437,486,503,504,1362,1492],[437,486,503,504,1363,1368],[437,486,503,504,1358,1359],[437,486,503,504,953,956,958,959],[437,486,503,504,953,958,959],[437,486,503,504,953,954,958],[437,486,487,503,504,953,955,956,957],[437,486,503,504,536],[437,486,503,504,1545,1549,1550],[437,486,503,504,1551],[437,486,503,504,1563,1760,1761],[437,486,500,503,504,518,536],[437,486,500,503,504],[437,486,503,504,1758],[437,486,503,504,1564,1759],[437,486,503,504,1439],[437,486,503,504,1757],[437,486,503,504,536,976,982,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1142,1143,1145,1146,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163],[76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,92,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,132,133,134,135,136,137,138,139,140,141,142,143,145,146,147,148,149,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,195,196,197,199,208,210,211,212,213,214,215,217,218,220,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,437,486,503,504],[121,437,486,503,504],[77,80,437,486,503,504],[79,437,486,503,504],[79,80,437,486,503,504],[76,77,78,80,437,486,503,504],[77,79,80,237,437,486,503,504],[80,437,486,503,504],[76,79,121,437,486,503,504],[79,80,237,437,486,503,504],[79,245,437,486,503,504],[77,79,80,437,486,503,504],[89,437,486,503,504],[112,437,486,503,504],[133,437,486,503,504],[79,80,121,437,486,503,504],[80,128,437,486,503,504],[79,80,121,139,437,486,503,504],[79,80,139,437,486,503,504],[80,180,437,486,503,504],[80,121,437,486,503,504],[76,80,198,437,486,503,504],[76,80,199,437,486,503,504],[221,437,486,503,504],[205,207,437,486,503,504],[216,437,486,503,504],[205,437,486,503,504],[76,80,198,205,206,437,486,503,504],[198,199,207,437,486,503,504],[219,437,486,503,504],[76,80,205,206,207,437,486,503,504],[78,79,80,437,486,503,504],[76,80,437,486,503,504],[77,79,199,200,201,202,437,486,503,504],[121,199,200,201,202,437,486,503,504],[199,201,437,486,503,504],[79,200,201,203,204,208,437,486,503,504],[76,79,437,486,503,504],[80,223,437,486,503,504],[81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,122,123,124,125,126,127,129,130,131,132,133,134,135,136,137,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,437,486,503,504],[209,437,486,503,504],[437,486,503,504,614,733],[437,486,503,504,553,932],[437,486,503,504,617],[437,486,503,504,724],[437,486,503,504,720,724],[437,486,503,504,720],[437,486,503,504,568,610,611,612,613,615,616,724],[437,486,503,504,553,554,563,568,611,615,618,622,654,670,671,673,675,681,682,683,684,720,721,722,723,726,733,750],[437,486,503,504,686,688,690,691,701,703,704,705,706,707,708,709,711,713,714,715,716,719],[437,486,503,504,557,559,560,590,832,833,834,835,836,837],[437,486,503,504,560],[437,486,503,504,557,560],[437,486,503,504,841,842,843],[437,486,503,504,850],[437,486,503,504,557,848],[437,486,503,504,878],[437,486,503,504,866],[437,486,503,504,610],[437,486,503,504,553,591],[437,486,503,504,865],[437,486,503,504,558],[437,486,503,504,557,558,559],[437,486,503,504,598],[437,486,503,504,548,549,550],[437,486,503,504,594],[437,486,503,504,557],[437,486,503,504,589],[437,486,503,504,548],[437,486,503,504,557,558],[437,486,503,504,595,596],[437,486,503,504,551,553],[437,486,503,504,750],[437,486,503,504,606,607],[437,486,503,504,549],[437,486,503,504,886],[437,486,503,504,617,710],[437,486,503,504,526],[437,486,503,504,617,618,685],[437,486,503,504,549,550,557,563,565,567,581,582,583,586,587,617,618,620,621,726,732,733],[437,486,503,504,617,628],[437,486,503,504,565,567,585,618,620,626,628,642,655,659,663,670,724,730,732,733],[437,486,494,503,504,506,526,626,627],[437,486,503,504,617,618,687],[437,486,503,504,617,702],[437,486,503,504,617,618,689],[437,486,503,504,617,712],[437,486,503,504,618,717,718],[437,486,503,504,584],[437,486,503,504,692,693,694,695,696,697,698,699],[437,486,503,504,617,618,700],[437,486,503,504,553,554,563,628,630,634,635,636,637,638,665,667,668,669,671,673,674,675,679,680,682,724,733,750],[437,486,503,504,554,563,581,628,631,635,639,640,664,665,667,668,669,681,724,726],[437,486,503,504,681,724,733],[437,486,503,504,609],[437,486,503,504,554,591],[437,486,503,504,557,558,590,592],[437,486,503,504,588,593,597,598,599,600,601,602,603,604,605,608,932],[437,486,503,504,547,548,549,550,554,594,595,596],[437,486,503,504,768],[437,486,503,504,726,768],[437,486,503,504,557,581,613,768],[437,486,503,504,554,768],[437,486,503,504,684,768],[437,486,503,504,768,769,770,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830],[437,486,503,504,570,768],[437,486,503,504,570,726,768],[437,486,503,504,768,772],[437,486,503,504,622,768],[437,486,503,504,625],[437,486,503,504,634],[437,486,503,504,623,630,631,632,633],[437,486,503,504,558,563,624],[437,486,503,504,628],[437,486,503,504,563,634,635,672,726,750],[437,486,503,504,625,628,629],[437,486,503,504,639],[437,486,503,504,563,634],[437,486,503,504,625,629],[437,486,503,504,563,625],[437,486,503,504,553,554,563,670,671,673,681,682,720,721,724,750,763,764],[69,437,486,503,504,551,553,554,557,558,560,563,564,565,566,567,568,588,589,593,594,596,597,598,609,610,611,612,613,616,618,619,620,622,623,624,625,628,629,630,631,632,633,634,635,636,637,638,641,642,644,645,646,647,648,649,650,651,652,653,654,656,659,660,663,665,666,667,668,669,670,671,672,673,676,677,681,682,683,684,720,724,726,729,730,731,732,733,743,744,746,747,748,749,750,764,765,766,767,831,838,839,840,844,845,846,847,849,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,879,880,881,882,883,884,885,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,919,920,921,922,923,924,925,926,927,929,931],[437,486,503,504,611,612,733],[437,486,503,504,611,733,912],[437,486,503,504,611,612,733,912],[437,486,503,504,733],[437,486,503,504,611],[437,486,503,504,560,561],[437,486,503,504,575],[437,486,503,504,554],[437,486,503,504,548,549,550,552,555],[437,486,503,504,753],[437,486,503,504,556,562,571,572,576,578,608,657,661,725,727,751,752,753,754,755,756,757,758,759,760,761,762],[437,486,503,504,547,551,552,555],[437,486,503,504,598,599,932],[437,486,503,504,568,657,726],[437,486,503,504,557,558,562,563,570,580,724,726],[437,486,503,504,570,571,573,574,577,579,581,724,726,728],[437,486,503,504,563,575,576,580,726],[437,486,503,504,563,569,570,573,574,577,579,580,581,598,599,606,607,608,658,662,724,725,728,932],[437,486,503,504,568,661,726],[437,486,503,504,548,549,550,568,581,726],[437,486,503,504,568,580,581,726,727],[437,486,503,504,570,726,750,751],[437,486,503,504,563,570,572,726,750],[437,486,503,504,547,548,549,550,552,556,563,569,580,581,726],[437,486,503,504,581],[437,486,503,504,548,568,578,580,581,726],[437,486,503,504,683],[437,486,503,504,684,724,733],[437,486,503,504,568,732],[437,486,503,504,568,925],[437,486,503,504,567,732],[437,486,503,504,563,570,581,726,771],[437,486,503,504,570,581,772],[437,486,497,498,503,504,518,613],[437,486,503,504,726],[437,486,503,504,676],[437,486,503,504,554,563,669,676,677,724,733,749],[437,486,503,504,563,621,677],[437,486,503,504,554,563,581,665,667,678,749],[437,486,503,504,570,724,726,735,742],[437,486,503,504,677],[437,486,503,504,554,563,581,622,665,677,724,726,733,734,735,741,742,743,744,745,746,747,748,750],[437,486,503,504,563,570,581,598,621,724,726,734,735,736,737,738,739,740,741,749],[437,486,503,504,563],[437,486,503,504,570,726,742,750],[437,486,503,504,563,570,724,733,750],[437,486,503,504,563,749],[437,486,503,504,666],[437,486,503,504,563,666],[437,486,503,504,554,563,570,598,626,630,631,632,633,635,676,677,726,733,739,740,742,749],[437,486,503,504,554,563,598,668,676,677,724,733,749],[437,486,503,504,563,726],[437,486,503,504,563,598,665,668,676,677,724,733,749],[437,486,503,504,563,677],[437,486,503,504,563,565,567,585,618,620,626,642,655,659,663,666,675,681,724,730,732],[437,486,503,504,553,563,673,681,682,750],[437,486,503,504,554,628,630,634,635,636,637,638,665,667,668,669,679,680,682,750,918],[437,486,503,504,563,628,634,635,639,640,670,682,733,750],[437,486,503,504,554,563,628,630,634,635,636,637,638,665,667,668,669,679,680,681,733,750,932],[437,486,503,504,563,672,682,750],[437,486,503,504,621,678],[437,486,503,504,564,619,641,656,660,729],[437,486,503,504,564,581,585,586,724,726,733],[437,486,503,504,585],[437,486,503,504,565,620,622,642,659,663,726,730,731],[437,486,503,504,656,658],[437,486,503,504,564],[437,486,503,504,660,662],[437,486,503,504,569,619,622],[437,486,503,504,728,729],[437,486,503,504,579,641],[437,486,503,504,566,932],[437,486,503,504,563,570,581,643,654,726,733],[437,486,503,504,644,645,646,647,648,649,650,651,652,653],[437,486,503,504,563,681,724,726,733],[437,486,503,504,681,724,726,733],[437,486,503,504,648],[437,486,503,504,563,570,581,681,724,726,733],[437,486,503,504,565,567,581,584,610,620,625,629,642,659,663,670,677,721,726,730,732,743,744,745,746,747,748,750,772,918,919,920,928],[437,486,503,504,681,726,930],[437,451,455,486,503,504,529],[437,451,486,503,504,518,529],[437,446,486,503,504],[437,448,451,486,503,504,526,529],[437,486,503,504,506,526],[437,446,486,503,504,536],[437,448,451,486,503,504,506,529],[437,443,444,447,450,486,497,503,504,518,529],[437,451,458,486,503,504],[437,443,449,486,503,504],[437,451,472,473,486,503,504],[437,447,451,486,503,504,521,529,536],[437,472,486,503,504,536],[437,445,446,486,503,504,536],[437,451,486,503,504],[437,445,446,447,448,449,450,451,452,453,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,473,474,475,476,477,478,486,503,504],[437,451,466,486,503,504],[437,451,458,459,486,503,504],[437,449,451,459,460,486,503,504],[437,450,486,503,504],[437,443,446,451,486,503,504],[437,451,455,459,460,486,503,504],[437,455,486,503,504],[437,449,451,454,486,503,504,529],[437,443,448,451,458,486,503,504],[437,486,503,504,518],[437,446,451,472,486,503,504,534,536],[421,422,437,486,503,504],[421,437,486,503,504,546,941,969,1356,1527,1528,1529,1530],[421,437,486,503,504,546,941,1169,1170,1171,1219],[421,437,486,491,503,504,932,941,1165,1169,1170],[437,486,503,504,932,1169],[437,486,503,504,932,1170],[421,437,486,503,504,546,1164],[421,437,486,503,504,1171],[421,437,486,503,504,1356],[421,437,486,503,504,546,1164,1165],[421,437,486,503,504,1164],[421,437,486,503,504,546,974],[421,437,486,503,504,932,941,1338],[421,437,486,503,504,932,941,974,1329,1330,1338,1341,1342],[437,486,503,504,1216,1496,1523],[437,486,503,504,932,1328],[421,437,486,503,504,932,941,1329],[421,437,486,503,504,1172,1216,1334,1339,1340,1343,1357,1524,1525],[421,437,486,503,504,941,1327,1329,1330,1331,1332,1333,1334,1337,1338,1339,1340,1341,1342,1343,1526],[421,437,486,503,504,932,941,1223,1327,1328,1329,1330,1331,1332,1333],[421,437,486,498,503,504,508,932,941,974,1330],[421,437,486,503,504,1216,1322,1531,1532],[421,437,486,503,504,1172,1216,1335],[421,437,486,503,504,941,972,973,1167,1219,1335,1336,1527],[421,437,486,503,504,546,932,941,972,974,1167,1220,1334],[421,437,486,503,504,1168,1172,1216],[421,437,486,503,504,932,941,969,970,972,973,975,1165,1166,1167],[421,437,486,503,504,971,1168,1172,1216],[421,437,486,503,504,941,970,971,972,973,975,1165,1166,1168,1217,1218,1219,1528],[421,437,486,503,504,932,941,970]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"785921608325fa246b450f05b238f4b3ed659f1099af278ce9ebbc9416a13f1d","impliedFormat":1},{"version":"8d6d51a5118d000ed3bfe6e1dd1335bebfff3fef23cd2af2f84a24d30f90cc90","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d8dedbec739bc79642c1e96e9bfc0b83b25b104a0486aebf016fc7b85b39f48","impliedFormat":1},{"version":"e89535c3ec439608bcd0f68af555d0e5ddf121c54abe69343549718bd7506b9c","impliedFormat":1},{"version":"622a984b60c294ffb2f9152cf1d4d12e91d2b733d820eec949cf54d63a3c1025","impliedFormat":1},{"version":"81aae92abdeaccd9c1723cef39232c90c1aed9d9cf199e6e2a523b7d8e058a11","impliedFormat":1},{"version":"a63a6c6806a1e519688ef7bd8ca57be912fc0764485119dbd923021eb4e79665","impliedFormat":1},{"version":"75b57b109d774acca1e151df21cf5cb54c7a1df33a273f0457b9aee4ebd36fb9","impliedFormat":1},{"version":"073ca26c96184db9941b5ec0ddea6981c9b816156d9095747809e524fdd90e35","impliedFormat":1},{"version":"e41d17a2ec23306d953cda34e573ed62954ca6ea9b8c8b74e013d07a6886ce47","impliedFormat":1},{"version":"241bd4add06f06f0699dcd58f3b334718d85e3045d9e9d4fa556f11f4d1569c1","impliedFormat":1},{"version":"2ae3787e1498b20aad1b9c2ee9ea517ec30e89b70d242d8e3e52d1e091039695","impliedFormat":1},{"version":"c7c72c4cffb1bc83617eefed71ed68cc89df73cab9e19507ccdecb3e72b4967e","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8bff8a60af0173430b18d9c3e5c443eaa3c515617210c0c7b3d2e1743c19ecb","impliedFormat":1},{"version":"38b38db08e7121828294dec10957a7a9ff263e33e2a904b346516d4a4acca482","impliedFormat":1},{"version":"a76ebdf2579e68e4cfe618269c47e5a12a4e045c2805ed7f7ab37af8daa6b091","impliedFormat":1},{"version":"8a2aaea564939c22be05d665cc955996721bad6d43148f8fa21ae8f64afecd37","impliedFormat":1},{"version":"e59d36b7b6e8ba2dd36d032a5f5c279d2460968c8b4e691ca384f118fb09b52a","impliedFormat":1},{"version":"e96885c0684c9042ec72a9a43ef977f6b4b4a2728f4b9e737edcbaa0c74e5bf6","impliedFormat":1},{"version":"95950a187596e206d32d5d9c7b932901088c65ed8f9040e614aa8e321e0225ef","impliedFormat":1},{"version":"89e061244da3fc21b7330f4bd32f47c1813dd4d7f1dc3d0883d88943f035b993","impliedFormat":1},{"version":"e46558c2e04d06207b080138678020448e7fc201f3d69c2601b0d1456105f29a","impliedFormat":1},{"version":"71549375db52b1163411dba383b5f4618bdf35dc57fa327a1c7d135cf9bf67d1","impliedFormat":1},{"version":"7e6b2d61d6215a4e82ea75bc31a80ebb8ad0c2b37a60c10c70dd671e8d9d6d5d","impliedFormat":1},{"version":"78bea05df2896083cca28ed75784dde46d4b194984e8fc559123b56873580a23","impliedFormat":1},{"version":"5dd04ced37b7ea09f29d277db11f160df7fd73ba8b9dba86cb25552e0653a637","impliedFormat":1},{"version":"f74b81712e06605677ae1f061600201c425430151f95b5ef4d04387ad7617e6a","impliedFormat":1},{"version":"9a72847fcf4ac937e352d40810f7b7aec7422d9178451148296cf1aa19467620","impliedFormat":1},{"version":"3ae18f60e0b96fa1e025059b7d25b3247ba4dcb5f4372f6d6e67ce2adac74eac","impliedFormat":1},{"version":"2b9260f44a2e071450ae82c110f5dc8f330c9e5c3e85567ed97248330f2bf639","impliedFormat":1},{"version":"4f196e13684186bda6f5115fc4677a87cf84a0c9c4fc17b8f51e0984f3697b6d","impliedFormat":1},{"version":"61419f2c5822b28c1ea483258437c1faab87d00c6f84481aa22afb3380d8e9a4","impliedFormat":1},{"version":"64479aee03812264e421c0bf5104a953ca7b02740ba80090aead1330d0effe91","impliedFormat":1},{"version":"0521108c9f8ddb17654a0a54dae6ba9667c99eddccfd6af5748113e022d1c37a","impliedFormat":1},{"version":"c5570e504be103e255d80c60b56c367bf45d502ca52ee35c55dec882f6563b5c","impliedFormat":1},{"version":"ee764e6e9a7f2b987cc1a2c0a9afd7a8f4d5ebc4fdb66ad557a7f14a8c2bd320","impliedFormat":1},{"version":"0520b5093712c10c6ef23b5fea2f833bf5481771977112500045e5ea7e8e2b69","impliedFormat":1},{"version":"5c3cf26654cf762ac4d7fd7b83f09acfe08eef88d2d6983b9a5a423cb4004ca3","impliedFormat":1},{"version":"e60fa19cf7911c1623b891155d7eb6b7e844e9afdf5738e3b46f3b687730a2bd","impliedFormat":1},{"version":"b1fd72ff2bb0ba91bb588f3e5329f8fc884eb859794f1c4657a2bfa122ae54d0","impliedFormat":1},{"version":"6cf42a4f3cfec648545925d43afaa8bb364ac10a839ffed88249da109361b275","impliedFormat":1},{"version":"d7058e75920120b142a9d57be25562a3cd9a936269fd52908505f530105f2ec4","impliedFormat":1},{"version":"6df52b70d7f7702202f672541a5f4a424d478ee5be51a9d37b8ccbe1dbf3c0f2","impliedFormat":1},{"version":"0ca7f997e9a4d8985e842b7c882e521b6f63233c4086e9fe79dd7a9dc4742b5e","impliedFormat":1},{"version":"91046b5c6b55d3b194c81fd4df52f687736fad3095e9d103ead92bb64dc160ee","impliedFormat":1},{"version":"db5704fdad56c74dfc5941283c1182ed471bd17598209d3ac4a49faa72e43cfc","impliedFormat":1},{"version":"758e8e89559b02b81bc0f8fd395b17ad5aff75490c862cbe369bb1a3d1577c40","impliedFormat":1},{"version":"2ee64342c077b1868f1834c063f575063051edd6e2964257d34aad032d6b657c","impliedFormat":1},{"version":"6f6b4b3d670b6a5f0e24ea001c1b3d36453c539195e875687950a178f1730fa7","impliedFormat":1},{"version":"a472a1d3f25ce13a1d44911cd3983956ac040ce2018e155435ea34afb25f864c","impliedFormat":1},{"version":"b48b83a86dd9cfe36f8776b3ff52fcd45b0e043c0538dc4a4b149ba45fe367b9","impliedFormat":1},{"version":"792de5c062444bd2ee0413fb766e57e03cce7cdaebbfc52fc0c7c8e95069c96b","impliedFormat":1},{"version":"a79e3e81094c7a04a885bad9b049c519aace53300fb8a0fe4f26727cb5a746ce","impliedFormat":1},{"version":"93181bac0d90db185bb730c95214f6118ae997fe836a98a49664147fbcaf1988","impliedFormat":1},{"version":"8a4e89564d8ea66ad87ee3762e07540f9f0656a62043c910d819b4746fc429c5","impliedFormat":1},{"version":"b9011d99942889a0f95e120d06b698c628b0b6fdc3e6b7ecb459b97ed7d5bcc6","impliedFormat":1},{"version":"4d639cbbcc2f8f9ce6d55d5d503830d6c2556251df332dc5255d75af53c8a0e7","impliedFormat":1},{"version":"cdb48277f600ab5f429ecf1c5ea046683bc6b9f73f3deab9a100adac4b34969c","impliedFormat":1},{"version":"75be84956a29040a1afbe864c0a7a369dfdb739380072484eff153905ef867ee","impliedFormat":1},{"version":"b06b4adc2ae03331a92abd1b19af8eb91ec2bf8541747ee355887a167d53145e","impliedFormat":1},{"version":"c54166a85bd60f86d1ebb90ce0117c0ecb850b8a33b366691629fdf26f1bbbd8","impliedFormat":1},{"version":"0d417c15c5c635384d5f1819cc253a540fe786cc3fda32f6a2ae266671506a21","impliedFormat":1},{"version":"80f23f1d60fbed356f726b3b26f9d348dddbb34027926d10d59fad961e70a730","impliedFormat":1},{"version":"cb59317243a11379a101eb2f27b9df1022674c3df1df0727360a0a3f963f523b","impliedFormat":1},{"version":"cc20bb2227dd5de0aab0c8d697d1572f8000550e62c7bf5c92f212f657dd88c5","impliedFormat":1},{"version":"06b8a7d46195b6b3980e523ef59746702fd210b71681a83a5cf73799623621f9","impliedFormat":1},{"version":"860e4405959f646c101b8005a191298b2381af8f33716dc5f42097e4620608f8","impliedFormat":1},{"version":"f7e32adf714b8f25d3c1783473abec3f2e82d5724538d8dcf6f51baaaff1ca7a","impliedFormat":1},{"version":"d0da80c845999a16c24d0783033fb5366ada98df17867c98ad433ede05cd87fd","impliedFormat":1},{"version":"bfbf80f9cd4558af2d7b2006065340aaaced15947d590045253ded50aabb9bc5","impliedFormat":1},{"version":"fd9a991b51870325e46ebb0e6e18722d313f60cd8e596e645ec5ac15b96dbf4e","impliedFormat":1},{"version":"c3bd2b94e4298f81743d92945b80e9b56c1cdfb2bef43c149b7106a2491b1fc9","impliedFormat":1},{"version":"a246cce57f558f9ebaffd55c1e5673da44ea603b4da3b2b47eb88915d30a9181","impliedFormat":1},{"version":"d993eacc103c5a065227153c9aae8acea3a4322fe1a169ee7c70b77015bf0bb2","impliedFormat":1},{"version":"fc2b03d0c042aa1627406e753a26a1eaad01b3c496510a78016822ef8d456bb6","impliedFormat":1},{"version":"063c7ebbe756f0155a8b453f410ca6b76ffa1bbc1048735bcaf9c7c81a1ce35f","impliedFormat":1},{"version":"314e402cd481370d08f63051ae8b8c8e6370db5ee3b8820eeeaaf8d722a6dac6","impliedFormat":1},{"version":"9669075ac38ce36b638b290ba468233980d9f38bdc62f0519213b2fd3e2552ec","impliedFormat":1},{"version":"4d123de012c24e2f373925100be73d50517ac490f9ed3578ac82d0168bfbd303","impliedFormat":1},{"version":"656c9af789629aa36b39092bee3757034009620439d9a39912f587538033ce28","impliedFormat":1},{"version":"3ac3f4bdb8c0905d4c3035d6f7fb20118c21e8a17bee46d3735195b0c2a9f39f","impliedFormat":1},{"version":"1f453e6798ed29c86f703e9b41662640d4f2e61337007f27ac1c616f20093f69","impliedFormat":1},{"version":"af43b7871ff21c62bf1a54ec5c488e31a8d3408d5b51ff2e9f8581b6c55f2fc7","impliedFormat":1},{"version":"70550511d25cbb0b6a64dcac7fffc3c1397fd4cbeb6b23ccc7f9b794ab8a6954","impliedFormat":1},{"version":"af0fbf08386603a62f2a78c42d998c90353b1f1d22e05a384545f7accf881e0a","impliedFormat":1},{"version":"cefc20054d20b85b534206dbcedd509bb74f87f3d8bc45c58c7be3a76caa45e1","impliedFormat":1},{"version":"ad6eee4877d0f7e5244d34bc5026fd6e9cf8e66c5c79416b73f9f6ebf132f924","impliedFormat":1},{"version":"4888fd2bcfee9a0ce89d0df860d233e0cee8ee9c479b6bd5a5d5f9aae98342fe","impliedFormat":1},{"version":"f4749c102ced952aa6f40f0b579865429c4869f6d83df91000e98005476bee87","impliedFormat":1},{"version":"56654d2c5923598384e71cb808fac2818ca3f07dd23bb018988a39d5e64f268b","impliedFormat":1},{"version":"8b6719d3b9e65863da5390cb26994602c10a315aa16e7d70778a63fee6c4c079","impliedFormat":1},{"version":"05f56cd4b929977d18df8f3d08a4c929a2592ef5af083e79974b20a063f30940","impliedFormat":1},{"version":"547d3c406a21b30e2b78629ecc0b2ddaf652d9e0bdb2d59ceebce5612906df33","impliedFormat":1},{"version":"b3a4f9385279443c3a5568ec914a9492b59a723386161fd5ef0619d9f8982f97","impliedFormat":1},{"version":"3fe66aba4fbe0c3ba196a4f9ed2a776fe99dc4d1567a558fb11693e9fcc4e6ed","impliedFormat":1},{"version":"140eef237c7db06fc5adcb5df434ee21e81ee3a6fd57e1a75b8b3750aa2df2d8","impliedFormat":1},{"version":"0944ec553e4744efae790c68807a461720cff9f3977d4911ac0d918a17c9dd99","impliedFormat":1},{"version":"cb46b38d5e791acaa243bf342b8b5f8491639847463ac965b93896d4fb0af0d9","impliedFormat":1},{"version":"7c7d9e116fe51100ff766703e6b5e4424f51ad8977fe474ddd8d0959aa6de257","impliedFormat":1},{"version":"af70a2567e586be0083df3938b6a6792e6821363d8ef559ad8d721a33a5bcdaf","impliedFormat":1},{"version":"006cff3a8bcb92d77953f49a94cd7d5272fef4ab488b9052ef82b6a1260d870b","impliedFormat":1},{"version":"7d44bfdc8ee5e9af70738ff652c622ae3ad81815e63ab49bdc593d34cb3a68e5","impliedFormat":1},{"version":"339814517abd4dbc7b5f013dfd3b5e37ef0ea914a8bbe65413ecffd668792bc6","impliedFormat":1},{"version":"34d5bc0a6958967ec237c99f980155b5145b76e6eb927c9ffc57d8680326b5d8","impliedFormat":1},{"version":"9eae79b70c9d8288032cbe1b21d0941f6bd4f315e14786b2c1d10bccc634e897","impliedFormat":1},{"version":"18ce015ed308ea469b13b17f99ce53bbb97975855b2a09b86c052eefa4aa013a","impliedFormat":1},{"version":"5a931bc4106194e474be141e0bc1046629510dc95b9a0e4b02a3783847222965","impliedFormat":1},{"version":"5e5f371bf23d5ced2212a5ff56675aefbd0c9b3f4d4fdda1b6123ac6e28f058c","impliedFormat":1},{"version":"907c17ad5a05eecb29b42b36cc8fec6437be27cc4986bb3a218e4f74f606911c","impliedFormat":1},{"version":"ce60a562cd2a92f37a88f2ddd99a3abfbc5848d7baf38c48fb8d3243701fcb75","impliedFormat":1},{"version":"a726ad2d0a98bfffbe8bc1cd2d90b6d831638c0adc750ce73103a471eb9a891c","impliedFormat":1},{"version":"f44c0c8ce58d3dacac016607a1a90e5342d830ea84c48d2e571408087ae55894","impliedFormat":1},{"version":"75a315a098e630e734d9bc932d9841b64b30f7a349a20cf4717bf93044eff113","impliedFormat":1},{"version":"9131d95e32b3d4611d4046a613e022637348f6cebfe68230d4e81b691e4761a1","impliedFormat":1},{"version":"b03aa292cfdcd4edc3af00a7dbd71136dd067ec70a7536b655b82f4dd444e857","impliedFormat":1},{"version":"b6e2b0448ced813b8c207810d96551a26e7d7bb73255eea4b9701698f78846d6","impliedFormat":1},{"version":"8ae10cd85c1bd94d2f2d17c4cbd25c068a4b2471c70c2d96434239f97040747a","impliedFormat":1},{"version":"9ed5b799c50467b0c9f81ddf544b6bcda3e34d92076d6cab183c84511e45c39f","impliedFormat":1},{"version":"b4fa87cc1833839e51c49f20de71230e259c15b2c9c3e89e4814acc1d1ef10de","impliedFormat":1},{"version":"e90ac9e4ac0326faa1bc39f37af38ace0f9d4a655cd6d147713c653139cf4928","impliedFormat":1},{"version":"ea27110249d12e072956473a86fd1965df8e1be985f3b686b4e277afefdde584","impliedFormat":1},{"version":"8776a368617ce51129b74db7d55c3373dadcce5d0701e61d106e99998922a239","impliedFormat":1},{"version":"5666075052877fe2fdddd5b16de03168076cf0f03fbca5c1d4a3b8f43cba570c","impliedFormat":1},{"version":"9108ab5af05418f599ab48186193b1b07034c79a4a212a7f73535903ba4ca249","impliedFormat":1},{"version":"bb4e2cdcadf9c9e6ee2820af23cee6582d47c9c9c13b0dca1baaffe01fbbcb5f","impliedFormat":1},{"version":"6e30d0b5a1441d831d19fe02300ab3d83726abd5141cbcc0e2993fa0efd33db4","impliedFormat":1},{"version":"423f28126b2fc8d8d6fa558035309000a1297ed24473c595b7dec52e5c7ebae5","impliedFormat":1},{"version":"fb30734f82083d4790775dae393cd004924ebcbfde49849d9430bf0f0229dd16","impliedFormat":1},{"version":"2c92b04a7a4a1cd9501e1be338bf435738964130fb2ad5bd6c339ee41224ac4c","impliedFormat":1},{"version":"c5c5f0157b41833180419dacfbd2bcce78fb1a51c136bd4bcba5249864d8b9b5","impliedFormat":1},{"version":"02ae43d5bae42efcd5a00d3923e764895ce056bca005a9f4e623aa6b4797c8af","impliedFormat":1},{"version":"db6e01f17012a9d7b610ae764f94a1af850f5d98c9c826ad61747dca0fb800bd","impliedFormat":1},{"version":"8a44b424edee7bb17dc35a558cc15f92555f14a0441205613e0e50452ab3a602","impliedFormat":1},{"version":"24a00d0f98b799e6f628373249ece352b328089c3383b5606214357e9107e7d5","impliedFormat":1},{"version":"33637e3bc64edd2075d4071c55d60b32bdb0d243652977c66c964021b6fc8066","impliedFormat":1},{"version":"0f0ad9f14dedfdca37260931fac1edf0f6b951c629e84027255512f06a6ebc4c","impliedFormat":1},{"version":"16ad86c48bf950f5a480dc812b64225ca4a071827d3d18ffc5ec1ae176399e36","impliedFormat":1},{"version":"8cbf55a11ff59fd2b8e39a4aa08e25c5ddce46e3af0ed71fb51610607a13c505","impliedFormat":1},{"version":"d5bc4544938741f5daf8f3a339bfbf0d880da9e89e79f44a6383aaf056fe0159","impliedFormat":1},{"version":"97f9169882d393e6f303f570168ca86b5fe9aab556e9a43672dae7e6bb8e6495","impliedFormat":1},{"version":"7c9adb3fcd7851497818120b7e151465406e711d6a596a71b807f3a17853cb58","impliedFormat":1},{"version":"6752d402f9282dd6f6317c8c048aaaac27295739a166eed27e00391b358fed9a","impliedFormat":1},{"version":"9fd7466b77020847dbc9d2165829796bf7ea00895b2520ff3752ffdcff53564b","impliedFormat":1},{"version":"fbfc12d54a4488c2eb166ed63bab0fb34413e97069af273210cf39da5280c8d6","impliedFormat":1},{"version":"85a84240002b7cf577cec637167f0383409d086e3c4443852ca248fc6e16711e","impliedFormat":1},{"version":"84794e3abd045880e0fadcf062b648faf982aa80cfc56d28d80120e298178626","impliedFormat":1},{"version":"053d8b827286a16a669a36ffc8ccc8acdf8cc154c096610aa12348b8c493c7b8","impliedFormat":1},{"version":"3cce4ce031710970fe12d4f7834375f5fd455aa129af4c11eb787935923ff551","impliedFormat":1},{"version":"8f62cbd3afbd6a07bb8c934294b6bfbe437021b89e53a4da7de2648ecfc7af25","impliedFormat":1},{"version":"62c3621d34fb2567c17a2c4b89914ebefbfbd1b1b875b070391a7d4f722e55dc","impliedFormat":1},{"version":"c05ac811542e0b59cb9c2e8f60e983461f0b0e39cea93e320fad447ff8e474f3","impliedFormat":1},{"version":"8e7a5b8f867b99cc8763c0b024068fb58e09f7da2c4810c12833e1ca6eb11c4f","impliedFormat":1},{"version":"132351cbd8437a463757d3510258d0fa98fd3ebef336f56d6f359cf3e177a3ce","impliedFormat":1},{"version":"df877050b04c29b9f8409aa10278d586825f511f0841d1ec41b6554f8362092b","impliedFormat":1},{"version":"33d1888c3c27d3180b7fd20bac84e97ecad94b49830d5dd306f9e770213027d1","impliedFormat":1},{"version":"ee942c58036a0de88505ffd7c129f86125b783888288c2389330168677d6347f","impliedFormat":1},{"version":"a3f317d500c30ea56d41501632cdcc376dae6d24770563a5e59c039e1c2a08ec","impliedFormat":1},{"version":"eb21ddc3a8136a12e69176531197def71dc28ffaf357b74d4bf83407bd845991","impliedFormat":1},{"version":"0c1651a159995dfa784c57b4ea9944f16bdf8d924ed2d8b3db5c25d25749a343","impliedFormat":1},{"version":"aaa13958e03409d72e179b5d7f6ec5c6cc666b7be14773ae7b6b5ee4921e52db","impliedFormat":1},{"version":"0a86e049843ad02977a94bb9cdfec287a6c5a0a4b6b5391a6648b1a122072c5a","impliedFormat":1},{"version":"40f06693e2e3e58526b713c937895c02e113552dc8ba81ecd49cdd9596567ddb","impliedFormat":1},{"version":"4ed5e1992aedb174fb8f5aa8796aa6d4dcb8bd819b4af1b162a222b680a37fa0","impliedFormat":1},{"version":"d7f4bd46a8b97232ea6f8c28012b8d2b995e55e729d11405f159d3e00c51420a","impliedFormat":1},{"version":"d604d413aff031f4bfbdae1560e54ebf503d374464d76d50a2c6ded4df525712","impliedFormat":1},{"version":"e4f4f9cf1e3ac9fd91ada072e4d428ecbf0aa6dc57138fb797b8a0ca3a1d521c","impliedFormat":1},{"version":"12bfd290936824373edda13f48a4094adee93239b9a73432db603127881a300d","impliedFormat":1},{"version":"340ceb3ea308f8e98264988a663640e567c553b8d6dc7d5e43a8f3b64f780374","impliedFormat":1},{"version":"c5a769564e530fba3ec696d0a5cff1709b9095a0bdf5b0826d940d2fc9786413","impliedFormat":1},{"version":"7124ef724c3fc833a17896f2d994c368230a8d4b235baed39aa8037db31de54f","impliedFormat":1},{"version":"5de1c0759a76e7710f76899dcae601386424eab11fb2efaf190f2b0f09c3d3d3","impliedFormat":1},{"version":"9c5ee8f7e581f045b6be979f062a61bf076d362bf89c7f966b993a23424e8b0d","impliedFormat":1},{"version":"1a11df987948a86aa1ec4867907c59bdf431f13ed2270444bf47f788a5c7f92d","impliedFormat":1},{"version":"8018dd2e95e7ce6e613ddd81672a54532614dc745520a2f9e3860ff7fb1be0ca","impliedFormat":1},{"version":"b756781cd40d465da57d1fc6a442c34ae61fe8c802d752aace24f6a43fedacee","impliedFormat":1},{"version":"0fe76167c87289ea094e01616dcbab795c11b56bad23e1ef8aba9aa37e93432a","impliedFormat":1},{"version":"3a45029dba46b1f091e8dc4d784e7be970e209cd7d4ff02bd15270a98a9ba24b","impliedFormat":1},{"version":"032c1581f921f8874cf42966f27fd04afcabbb7878fa708a8251cac5415a2a06","impliedFormat":1},{"version":"69c68ed9652842ce4b8e495d63d2cd425862104c9fb7661f72e7aa8a9ef836f8","impliedFormat":1},{"version":"0e704ee6e9fd8b6a5a7167886f4d8915f4bc22ed79f19cb7b32bd28458f50643","impliedFormat":1},{"version":"06f62a14599a68bcde148d1efd60c2e52e8fa540cc7dcfa4477af132bb3de271","impliedFormat":1},{"version":"904a96f84b1bcee9a7f0f258d17f8692e6652a0390566515fe6741a5c6db8c1c","impliedFormat":1},{"version":"11f19ce32d21222419cecab448fa335017ebebf4f9e5457c4fa9df42fa2dcca7","impliedFormat":1},{"version":"2e8ee2cbb5e9159764e2189cf5547aebd0e6b0d9a64d479397bb051cd1991744","impliedFormat":1},{"version":"1b0471d75f5adb7f545c1a97c02a0f825851b95fe6e069ac6ecaa461b8bb321d","impliedFormat":1},{"version":"1d157c31a02b1e5cca9bc495b3d8d39f4b42b409da79f863fb953fbe3c7d4884","impliedFormat":1},{"version":"07baaceaec03d88a4b78cb0651b25f1ae0322ac1aa0b555ae3749a79a41cba86","impliedFormat":1},{"version":"619a132f634b4ebe5b4b4179ea5870f62f2cb09916a25957bff17b408de8b56d","impliedFormat":1},{"version":"f60fa446a397eb1aead9c4e568faf2df8068b4d0306ebc075fb4be16ed26b741","impliedFormat":1},{"version":"f3cb784be4d9e91f966a0b5052a098d9b53b0af0d341f690585b0cc05c6ca412","impliedFormat":1},{"version":"350f63439f8fe2e06c97368ddc7fb6d6c676d54f59520966f7dbbe6a4586014e","impliedFormat":1},{"version":"eba613b9b357ac8c50a925fa31dc7e65ff3b95a07efbaa684b624f143d8d34ba","impliedFormat":1},{"version":"45b74185005ed45bec3f07cac6e4d68eaf02ead9ff5a66721679fb28020e5e7c","impliedFormat":1},{"version":"0f6199602df09bdb12b95b5434f5d7474b1490d2cd8cc036364ab3ba6fd24263","impliedFormat":1},{"version":"c8ca7fd9ec7a3ec82185bfc8213e4a7f63ae748fd6fced931741d23ef4ea3c0f","impliedFormat":1},{"version":"5c6a8a3c2a8d059f0592d4eab59b062210a1c871117968b10797dee36d991ef7","impliedFormat":1},{"version":"ad77fd25ece8e09247040826a777dc181f974d28257c9cd5acb4921b51967bd8","impliedFormat":1},{"version":"795a08ae4e193f345073b49f68826ab6a9b280400b440906e4ec5c237ae777e6","impliedFormat":1},{"version":"8153df63cf65122809db17128e5918f59d6bb43a371b5218f4430c4585f64085","impliedFormat":1},{"version":"a8150bc382dd12ce58e00764d2366e1d59a590288ee3123af8a4a2cb4ef7f9df","impliedFormat":1},{"version":"5adfaf2f9f33957264ad199a186456a4676b2724ed700fc313ff945d03372169","impliedFormat":1},{"version":"d5c41a741cd408c34cb91f84468f70e9bda3dfeabf33251a61039b3cdb8b22d8","impliedFormat":1},{"version":"a20c3e0fe86a1d8fc500a0e9afec9a872ad3ab5b746ceb3dd7118c6d2bff4328","impliedFormat":1},{"version":"cbaf4a4aa8a8c02aa681c5870d5c69127974de29b7e01df570edec391a417959","impliedFormat":1},{"version":"c7135e329a18b0e712378d5c7bc2faec6f5ab0e955ea0002250f9e232af8b3e4","impliedFormat":1},{"version":"340a45cd77b41d8a6deda248167fa23d3dc67ec798d411bd282f7b3d555b1695","impliedFormat":1},{"version":"fae330f86bc10db6841b310f32367aaa6f553036a3afc426e0389ddc5566cd74","impliedFormat":1},{"version":"2bee1efe53481e93bb8b31736caba17353e7bb6fc04520bd312f4e344afd92f9","impliedFormat":1},{"version":"357b67529139e293a0814cb5b980c3487717c6fbf7c30934d67bc42dad316871","impliedFormat":1},{"version":"99d99a765426accf8133737843fb024a154dc6545fc0ffbba968a7c0b848959d","impliedFormat":1},{"version":"c782c5fd5fa5491c827ecade05c3af3351201dd1c7e77e06711c8029b7a9ee4d","impliedFormat":1},{"version":"883d2104e448bb351c49dd9689a7e8117b480b614b2622732655cef03021bf6d","impliedFormat":1},{"version":"d9b00ee2eca9b149663fdba1c1956331841ae296ee03eaaff6c5becbc0ff1ea8","impliedFormat":1},{"version":"09a7e04beb0547c43270b327c067c85a4e2154372417390731dfe092c4350998","impliedFormat":1},{"version":"eee530aaa93e9ec362e3941ee8355e2d073c7b21d88c2af4713e3d701dab8fef","impliedFormat":1},{"version":"28d47319b97dbeee9130b78eae03b2061d46dedbf92b0d9de13ed7ab8399ccd0","impliedFormat":1},{"version":"6559a36671052ca93cab9a289279a6cef6f9d1a72c34c34546a8848274a9c66c","impliedFormat":1},{"version":"7a0e4cd92545ad03910fd019ae9838718643bd4dde39881c745f236914901dfa","impliedFormat":1},{"version":"c99ebd20316217e349004ee1a0bc74d32d041fb6864093f10f31984c737b8cad","impliedFormat":1},{"version":"6f622e7f054f5ab86258362ac0a64a2d6a27f1e88732d6f5f052f422e08a70e7","impliedFormat":1},{"version":"d62d2ef93ceeb41cf9dfab25989a1e5f9ca5160741aac7f1453c69a6c14c69be","impliedFormat":1},{"version":"1491e80d72873fc586605283f2d9056ee59b166333a769e64378240df130d1c9","impliedFormat":1},{"version":"c32c073d389cfaa3b3e562423e16c2e6d26b8edebbb7d73ccffff4aa66f2171d","impliedFormat":1},{"version":"eca72bf229eecadb63e758613c62fab13815879053539a22477d83a48a21cd73","impliedFormat":1},{"version":"633db46fd1765736409a4767bfc670861468dde60dbb9a501fba4c1b72f8644d","impliedFormat":1},{"version":"f379412f2c0dddd193ff66dcdd9d9cc169162e441d86804c98c84423f993aa8a","impliedFormat":1},{"version":"f2ee748883723aa9325e5d7f30fce424f6a786706e1b91a5a55237c78ee89c4a","impliedFormat":1},{"version":"eda4760e5d7b171132265e970b67c322bcfffacb84248f44def26ed160eb722e","impliedFormat":1},{"version":"142f5190d730259339be1433931c0eb31ae7c7806f4e325f8a470bd9221b6533","impliedFormat":1},{"version":"cbd19f594f0ee7beffeb37dc0367af3908815acf4ce46d86b0515478718cfed8","impliedFormat":1},{"version":"3cdb96f128133efd129c798ac11f959e59d278ae439f69983224774d79ed11db","impliedFormat":1},{"version":"8776e64e6165838ac152fa949456732755b0976d1867ae5534ce248f0ccd7f41","impliedFormat":1},{"version":"896bbc7402b3a403cda96813c8ea595470ff76d31f32869d053317c00ca2589a","impliedFormat":1},{"version":"5c4c5b49bbb01828402bb04af1d71673b18852c11b7e95bfd5cf4c3d80d352c8","impliedFormat":1},{"version":"7030df3d920343df00324df59dc93a959a33e0f4940af3fefef8c07b7ee329bf","impliedFormat":1},{"version":"a96bc00e0c356e29e620eaec24a56d6dd7f4e304feefcc99066a1141c6fe05a7","impliedFormat":1},{"version":"d12cc0e5b09943c4cd0848f787eb9d07bf78b60798e4588c50582db9d4decc70","impliedFormat":1},{"version":"7333ee6354964fd396297958e52e5bf62179aa2c88ca0a35c6d3a668293b7e0e","impliedFormat":1},{"version":"19c3760af3cbc9da99d5b7763b9e33aaf8d018bc2ed843287b7ff4343adf4634","impliedFormat":1},{"version":"9d1e38aeb76084848d2fcd39b458ec88246de028c0f3f448b304b15d764b23d2","impliedFormat":1},{"version":"d406da1eccf18cec56fd29730c24af69758fe3ff49c4f94335e797119cbc0554","impliedFormat":1},{"version":"4898c93890a136da9156c75acd1a80a941a961b3032a0cf14e1fa09a764448b7","impliedFormat":1},{"version":"f5d7a845e3e1c6c27351ea5f358073d0b0681537a2da6201fab254aa434121d3","impliedFormat":1},{"version":"3a47d4582ef0697cccf1f3d03b620002f03fb0ff098f630e284433c417d6c61b","impliedFormat":1},{"version":"d7c30f0abfe9e197e376b016086cf66b2ffb84015139963f37301ed0da9d3d0d","impliedFormat":1},{"version":"ff75bba0148f07775bcb54bf4823421ed4ebdb751b3bf79cc003bd22e49d7d73","impliedFormat":1},{"version":"d40d20ac633703a7333770bfd60360126fc3302d5392d237bbb76e8c529a4f95","impliedFormat":1},{"version":"35a9867207c488061fb4f6fe4715802fbc164b4400018d2fa0149ad02db9a61c","impliedFormat":1},{"version":"b5fd805b7c578ca6a42c42bbfa6fda95a85d9e332106d810bb18116dc13a45f8","impliedFormat":1},{"version":"3abd9ab4fb3a035c865e6a68cb9f4260515354d5ebebacd5c681aee52c046d1f","impliedFormat":1},{"version":"13e82862532619a727cff9a9ba78df7ca66e8a9b69e4cbd18e9809257b6bf7ba","impliedFormat":1},{"version":"601fe4e366b99181cd0244d96418cffeaaa987a7e310c6f0ed0f06ce63dfe3e9","impliedFormat":1},{"version":"c66a4f2b1362abc4aeee0870c697691618b423c8c6e75624a40ef14a06f787b7","impliedFormat":1},{"version":"8808b1c4f84f2e43da98757a959fe7282cb1795737e16534a97b7d4d33e84dfc","impliedFormat":1},{"version":"cd0565ace87a2d7802bf4c20ea23a997c54e598b9eb89f9c75e69478c1f7a0b4","impliedFormat":1},{"version":"738020d2c8fc9df92d5dee4b682d35a776eaedfe2166d12bc8f186e1ea57cc52","impliedFormat":1},{"version":"86dd7c5657a0b0bc6bee8002edcfd544458d3d3c60974555746eb9b2583dc35e","impliedFormat":1},{"version":"d97b96b6ecd4ee03f9f1170722c825ef778430a6a0d7aab03b8929012bf773cd","impliedFormat":1},{"version":"e84e9b89251a57da26a339e75f4014f52e8ef59b77c2ee1e0171cde18d17b3b8","impliedFormat":1},{"version":"272dbfe04cfa965d6fff63fdaba415c1b5a515b1881ae265148f8a84ddeb318f","impliedFormat":1},{"version":"2035fb009b5fafa9a4f4e3b3fdb06d9225b89f2cbbf17a5b62413bf72cea721a","impliedFormat":1},{"version":"eefafec7c059f07b885b79b327d381c9a560e82b439793de597441a4e68d774a","impliedFormat":1},{"version":"72636f59b635c378dc9ea5246b9b3517b1214e340e468e54cb80126353053b2e","impliedFormat":1},{"version":"ebb79f267a3bf2de5f8edc1995c5d31777b539935fab8b7d863e8efb06c8e9ea","impliedFormat":1},{"version":"ada033e6a4c7f4e147e6d76bb881069dc66750619f8cc2472d65beeec1100145","impliedFormat":1},{"version":"0c04cc14a807a5dc0e3752d18a3b2655a135fefbf76ddcdabd0c5df037530d41","impliedFormat":1},{"version":"605d29d619180fbec287d1701e8b1f51f2d16747ec308d20aba3e9a0dac43a0f","impliedFormat":1},{"version":"67c19848b442d77c767414084fc571ce118b08301c4ddff904889d318f3a3363","impliedFormat":1},{"version":"c704ff0e0cb86d1b791767a88af21dadfee259180720a14c12baee668d0eb8fb","impliedFormat":1},{"version":"195c50e15d5b3ea034e01fbdca6f8ad4b35ad47463805bb0360bdffd6fce3009","impliedFormat":1},{"version":"da665f00b6877ae4adb39cd548257f487a76e3d99e006a702a4f38b4b39431cb","impliedFormat":1},{"version":"083aebdd7c96aee90b71ec970f81c48984d9c8ab863e7d30084f048ddcc9d6af","impliedFormat":1},{"version":"1c3bde1951add95d54a05e6628a814f2f43bf9d49902729eaf718dc9eb9f4e02","impliedFormat":1},{"version":"d7a4309673b06223537bc9544b1a5fe9425628e1c8ab5605f3c5ebc27ecb8074","impliedFormat":1},{"version":"0be3da88f06100e2291681bbda2592816dd804004f0972296b20725138ebcddf","impliedFormat":1},{"version":"3eadfd083d40777b403f4f4eecfa40f93876f2a01779157cc114b2565a7afb51","impliedFormat":1},{"version":"cb6789ce3eba018d5a7996ccbf50e27541d850e9b4ee97fdcb3cbd8c5093691f","impliedFormat":1},{"version":"a3684ea9719122f9477902acd08cd363a6f3cff6d493df89d4dc12fa58204e27","impliedFormat":1},{"version":"ff3c48a17bf10dfbb62448152042e4a48a56c9972059997ab9e7ed03b191809b","impliedFormat":1},{"version":"bc3561e460de5a2c19123f618fc1d5a96a484d168884d00666997d847f502bf9","impliedFormat":1},{"version":"c0c46113b4cd5ec9e7cf56e6dbfb3930ef6cbba914c0883eeced396988ae8320","impliedFormat":1},{"version":"118ea3f4e7b9c12e92551be0766706f57a411b4f18a1b4762cfde3cd6d4f0a96","impliedFormat":1},{"version":"01acd7f315e2493395292d9a02841f3b0300e77ccf42f84f4f11460e7623107d","impliedFormat":1},{"version":"656d1ce5b8fbed896bb803d849d6157242261030967b821d01e72264774cab55","impliedFormat":1},{"version":"da66c1b41d833858fe61947432130d39649f0b53d992dfd7d00f0bbe57191ef4","impliedFormat":1},{"version":"835739c6dcf0a9a1533d1e95b7d7cf8e44ca1341652856b897f4573078b23a31","impliedFormat":1},{"version":"774a3bcc0700036313c57a079e2e1161a506836d736203aa0463efa7b11a7e54","impliedFormat":1},{"version":"96577e3f8e0f9ea07ddf748d72dc1908581ef2aafd4ae7418a4574c26027cf02","impliedFormat":1},{"version":"f55971cb3ede99c17443b03788fe27b259dcd0f890ac31badcb74e3ffb4bb371","impliedFormat":1},{"version":"0ef0c246f8f255a5d798727c40d6d2231d2b0ebda5b1ec75e80eadb02022c548","impliedFormat":1},{"version":"ea127752a5ec75f2ac6ef7f1440634e6ae5bc8d09e6f98b61a8fb600def6a861","impliedFormat":1},{"version":"862320e775649dcca8915f8886865e9c6d8affc1e70ed4b97199f3b70a843b47","impliedFormat":1},{"version":"561764374e9f37cb895263d5c8380885972d75d09d0db64c12e0cb10ba90ae3e","impliedFormat":1},{"version":"ee889da857c29fa7375ad500926748ef2e029a6645d7c080e57769923d15dfef","impliedFormat":1},{"version":"56984ba2d781bd742b6bc0fa34c10df2eae59b42ec8b1b731d297f1590fa4071","impliedFormat":1},{"version":"7521de5e64e2dd022be87fce69d956a52d4425286fbc5697ecfec386da896d7e","impliedFormat":1},{"version":"f50b072ec1f4839b54fd1269a4fa7b03efbc9c59940224c7939632c0f70a39c3","impliedFormat":1},{"version":"a5b7ec6f1ff3f1d19a2547f7e1a50ab1284e6b4755d260a481ea01ed2c7cec60","impliedFormat":1},{"version":"1747f9eebf5beb8cfc46cf0303e300950b7bff20cff60b9c46818caced3226e3","impliedFormat":1},{"version":"9d969f36abb62139a90345ee5d03f1c2479831bd84c8f843d87ec304cad96ead","impliedFormat":1},{"version":"e972b52218fd5919aec6cd0e5e2a5fb75f5d2234cf05597a9441837a382b2b29","impliedFormat":1},{"version":"d1e292b0837d0ef5ede4f52363c9d8e93f5d5234086adc796e11eae390305b36","impliedFormat":1},{"version":"0a9e10028a96865d0f25aeca9e3b1ff0691b9b662aa186d9d490728434cf8261","impliedFormat":1},{"version":"1aed740b674839c89f427f48737bad435ee5a39d80b5929f9dc9cc9ac10a7700","impliedFormat":1},{"version":"6e9e3690dc3a6e99a845482e33ee78915893f2d0d579a55b6a0e9b4c44193371","impliedFormat":1},{"version":"4e7a76cce3b537b6cdb1c4b97e29cb4048ee8e7d829cf3a85f4527e92eb573f2","impliedFormat":1},{"version":"bedbf6e1e952560ff250828c494da56976ca88860f8ba3dfb17dc89eac2e3463","impliedFormat":1},{"version":"46f1fe93f199a419172d7480407d9572064b54712b69406efa97e0244008b24e","impliedFormat":1},{"version":"044e6aaa3f612833fb80e323c65e9d816c3148b397e93630663cda5c2d8f4de1","impliedFormat":1},{"version":"deaf8eb392c46ea2c88553d3cc38d46cfd5ee498238dbc466e3f5be63ae0f651","impliedFormat":1},{"version":"6a79b61f57699de0a381c8a13f4c4bcd120556bfab0b4576994b6917cb62948b","impliedFormat":1},{"version":"c5133d7bdec65f465df12f0b507fbc0d96c78bfa5a012b0eb322cf1ff654e733","impliedFormat":1},{"version":"7905c052681cbe9286797ec036942618e1e8d698dcc2e60f4fb7a0013d470442","impliedFormat":1},{"version":"89049878a456b5e0870bb50289ea8ece28a2abd0255301a261fa8ab6a3e9a07d","impliedFormat":1},{"version":"d0da4f4fd66f37c13deabc1a641edd629141c333ccf862733788bd27e89436ac","impliedFormat":1},{"version":"d4a4f10062a6d82ba60d3ffde9154ef24b1baf2ce28c6439f5bdfb97aa0d18fc","impliedFormat":1},{"version":"f13310c360ecffddb3858dcb33a7619665369d465f55e7386c31d45dfc3847bf","impliedFormat":1},{"version":"e7bde95a05a0564ee1450bc9a53797b0ac7944bf24d87d6f645baca3aa60df48","impliedFormat":1},{"version":"62e68ce120914431a7d34232d3eca643a7ddd67584387936a5202ae1c4dd9a1b","impliedFormat":1},{"version":"91d695bba902cc2eda7edc076cd17c5c9340f7bb254597deb6679e343effadbb","impliedFormat":1},{"version":"e1cb8168c7e0bd4857a66558fe7fe6c66d08432a0a943c51bacdac83773d5745","impliedFormat":1},{"version":"a464510505f31a356e9833963d89ce39f37a098715fc2863e533255af4410525","impliedFormat":1},{"version":"0612b149cabbc136cb25de9daf062659f306b67793edc5e39755c51c724e2949","impliedFormat":1},{"version":"2579b150b86b5f644d86a6d58f17e3b801772c78866c34d41f86f3fc9eb523fe","impliedFormat":1},{"version":"e4b3a3e1b21a194b29d35488ec880948fc2ef8e937288463ea2981ad62a7b106","impliedFormat":1},{"version":"0353e05b0d8475c10ddd88056e0483b191aa5cdea00a25e0505b96e023f1a2d9","impliedFormat":1},{"version":"6a312caabb43c284a4b0da60d5c24f285338096eb9e977af1faca38d32a34685","impliedFormat":1},{"version":"b6eda93163beb978dd0d3042b11c60373506400c94613c0b40d1c0a9a9f1020e","impliedFormat":1},{"version":"a8af4739274959d70f7da4bfdd64f71cfc08d825c2d5d3561bc7baed760b33ef","impliedFormat":1},{"version":"99193bafaa9ce112889698de25c4b8c80b1209bb7402189aea1c7ada708a8a54","impliedFormat":1},{"version":"70473538c6eb9494d53bf1539fe69df68d87c348743d8f7244dcb02ca3619484","impliedFormat":1},{"version":"c48932ab06a4e7531bdca7b0f739ace5fa273f9a1b9009bcd26902f8c0b851f0","impliedFormat":1},{"version":"df6c83e574308f6540c19e3409370482a7d8f448d56c65790b4ac0ab6f6fedd8","impliedFormat":1},{"version":"ebbe6765a836bfa7f03181bc433c8984ca29626270ca1e240c009851222cb8a7","impliedFormat":1},{"version":"20f630766b73752f9d74aab6f4367dba9664e8122ea2edcb00168e4f8b667627","impliedFormat":1},{"version":"468df9d24a6e2bc6b4351417e3b5b4c2ca08264d6d5045fe18eb42e7996e58b4","impliedFormat":1},{"version":"954523d1f4856180cbf79b35bd754e14d3b2aea06c7efd71b254c745976086e9","impliedFormat":1},{"version":"31a030f1225ab463dd0189a11706f0eb413429510a7490192a170114b2af8697","impliedFormat":1},{"version":"6f48f244cd4b5b7e9a0326c74f480b179432397580504726de7c3c65d6304b36","impliedFormat":1},{"version":"5520e6defac8e6cdced6dd28808fafe795cb2cd87407bb1012e13a2b061f50b7","impliedFormat":1},{"version":"c3451661fb058f4e15971bbed29061dd960d02d9f8db1038e08b90d294a05c68","impliedFormat":1},{"version":"1f21aefa51f03629582568f97c20ef138febe32391012828e2a0149c2c393f62","impliedFormat":1},{"version":"b18141cda681d82b2693aef045107a910b90a7409ecff0830e1283f0bb2a53e6","impliedFormat":1},{"version":"18eb53924f27af2a5e9734dce28cf5985df7b2828dade1239241e95b639e9bf1","impliedFormat":1},{"version":"a9f1c52f4e7c2a2c4988b5638bd3dbfe38e408b358d02dd2fb8c8920e877f088","impliedFormat":1},{"version":"a7e10a8ad6536dd0225029e46108b18cee0d3c15c2f6e49bd62798ad85bc57b6","impliedFormat":1},{"version":"8db1ed144dd2304b9bd6e41211e22bad5f4ab1d8006e6ac127b29599f4b36083","impliedFormat":1},{"version":"843a5e3737f2abbbbd43bf2014b70f1c69a80530814a27ae1f8be213ae9ec222","impliedFormat":1},{"version":"6fc1be224ad6b3f3ec11535820def2d21636a47205c2c9de32238ba1ac8d82e6","impliedFormat":1},{"version":"5a44788293f9165116c9c183be66cefef0dc5d718782a04847de53bf664f3cc1","impliedFormat":1},{"version":"afd653ae63ce07075b018ba5ce8f4e977b6055c81cc65998410b904b94003c0a","impliedFormat":1},{"version":"9172155acfeb17b9d75f65b84f36cb3eb0ff3cd763db3f0d1ad5f6d10d55662f","impliedFormat":1},{"version":"71807b208e5f15feffb3ff530bec5b46b1217af0d8cc96dde00d549353bcb864","impliedFormat":1},{"version":"1a6eca5c2bc446481046c01a54553c3ffb856f81607a074f9f0256c59dd0ab13","impliedFormat":1},{"version":"eaf8514ce110fa428a93a27408df4d06d133dbd9ed0a775c315ddfdd507853a9","impliedFormat":1},{"version":"260f889b9e2b69f77be1155348eb345166aec664b3efff6720053c6844a41f28","impliedFormat":1},{"version":"dff93e0997c4e64ff29e9f70cad172c0b438c4f58c119f17a51c94d48164475a","impliedFormat":1},{"version":"fd1ddf926b323dfa439be49c1d41bbe233fe5656975a11183aeb3bf2addfa3bb","impliedFormat":1},{"version":"6dda11db28da6bcc7ff09242cd1866bdddd0ae91e2db3bea03ba66112399641a","impliedFormat":1},{"version":"ea4cd1e72af1aa49cf208b9cb4caf542437beb7a7a5b522f50a5f1b7480362ed","impliedFormat":1},{"version":"903a7d68a222d94da11a5a89449fdd5dd75d83cd95af34c0242e10b85ec33a93","impliedFormat":1},{"version":"e7fe2e7ed5c3a7beff60361632be19a8943e53466b7dd69c34f89faf473206d7","impliedFormat":1},{"version":"b4896cee83379e159f83021e262223354db79e439092e485611163e2082224ff","impliedFormat":1},{"version":"5243e79a643e41d9653011d6c66e95048fc0478eb8593dc079b70877a2e3990e","impliedFormat":1},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"58647d85d0f722a1ce9de50955df60a7489f0593bf1a7015521efe901c06d770","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"6b039f55681caaf111d5eb84d292b9bee9e0131d0db1ad0871eef0964f533c73","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c8d3e5a18ba35629954e48c4cc8f11dc88224650067a172685c736b27a34a4dc","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2b55d426ff2b9087485e52ac4bc7cfafe1dc420fc76dad926cd46526567c501a","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"76e7352249c42b9d54fe1f9e1ebcef777da1cb2eb33038366af49469d433597b","impliedFormat":1},{"version":"88cb622dd0ec1ef860e5c27fa884e60d2eba5ae22c7907dff82c56a69bdd2c8a","impliedFormat":1},{"version":"eb234b3e285e8bc071bdddc1ec0460095e13ead6222d44b02c4e0869522f9ba3","impliedFormat":1},{"version":"c85114872760189e50fef131944427b0fb367f0cc0b6dce164bb427a6fd89381","impliedFormat":1},{"version":"5ad69b0d7e7bdbcd3adfdb6a3e306e935c9c2711b1c60493646504a2f991346e","impliedFormat":1},{"version":"a12a667efdeb03b529bd4ebb4032998ddd32743799f59f9f18b186f8e63a2cf1","impliedFormat":1},{"version":"cee7efa0ae4c58deab218d1df0d1bf84abfd5c356cff28bca1421489cba13a19","impliedFormat":1},{"version":"f9e034b1ae29825c00532e08ea852b0c72885c343ee48d2975db0a6481218ab3","impliedFormat":1},{"version":"1193f49cbb883f40326461fe379e58ffa4c18d15bf6d6a1974ad2894e4fb20f3","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},{"version":"2e2bc02af7b535d267be8cecbc5831466dd71c5af294401821791b26cb363c47","impliedFormat":1},{"version":"986affe0f60331f20df7d708ee097056b0973d85422ec2ce754af19c1fa4e4b1","impliedFormat":1},{"version":"8f06c2807459f1958b297f4ad09c6612d7dbd7997c9ccfc6ea384f7538e0cea8","impliedFormat":1},{"version":"a7de30cd043d7299bfe9daaca3732b086e734341587c3e923b01f3fd74d31126","impliedFormat":1},{"version":"78f7fad319e4ac305ffe8e03027423279b53a8af4db305096aa75d446b1ec7af","impliedFormat":1},{"version":"3bf58923a1d27819745bdad52bca1bdced9fef12cc0c7f8a3fd5f4e0206b684a","impliedFormat":1},{"version":"8fc11f102df58f03d36fcbf0da3efa37c177f5f18f534c76179ceef0c3a672cd","impliedFormat":1},{"version":"e6935ab0f64a886e778c12a54ed6e9075ce7e7f44723ff0d52020a654b025a09","impliedFormat":1},{"version":"9829af7653a29f1b85d3dd688a6c6256087c0b737b85d84b630e7f93fd420faf","impliedFormat":1},{"version":"3d9d985d41e536fcf79fc95082925c2f1ae5ade75814ad2bd70c0944747f7ac4","impliedFormat":1},{"version":"03b419ce598d77fe4d1705c8281a797a908f57ce24a15d6174d7e7276d355a65","impliedFormat":1},{"version":"b0e6f1b1569779cf567317c2265d67460d1d3b4de4e79126533109d87dc16d50","impliedFormat":1},{"version":"18cb8be1326ffa4158abd8d84c9b0a189c0f52201f12f7af2d2af830c077f2bf","impliedFormat":1},{"version":"9c15e2b87cd3d8b18881bcc7d72b2d1dc6d5fe078b674ae12c12c19ec09a6a1a","impliedFormat":1},{"version":"0de68916e23c1e3df800f9f61cdd7c506ceb0656fcbc245ee9974aad26786781","impliedFormat":1},{"version":"80c538ee6a62249e77ba3de07efb23d4a7ca8946499c065261bf5079f1cd3cf0","impliedFormat":1},{"version":"ad4277862bdcbe1cf5c1e0d43b39770e1ccc033da92f5b9ff75ca8c3a03a569b","impliedFormat":1},{"version":"46a86c47400a564df04a1604fcac41cb599ebbada392527a1462c9dfe4713d78","impliedFormat":1},{"version":"f342dcb96ad26855757929a9f6632704b7013f65786573d4fdcd4da09f475923","impliedFormat":1},{"version":"dcd467dc444953a537502d9e140d4f2dc13010664d4216cc8e6977b3c5c3efa3","impliedFormat":1},{"version":"ca476924dfa6120b807a14e0a8aea7b061b8bdaa7eecdb303d7957c769102e96","impliedFormat":1},{"version":"848fe622fac070f8af9255e5d63fe829e3da079cae30be48fb6deb5dbf2c27c6","impliedFormat":1},{"version":"f3bb275073b5db8931c042d347fdce888775436a4774836221af57fdccec32ff","impliedFormat":1},{"version":"03cb8cb2f8ef002a5cac9b8c9a0c02e5fd09de128b9769c5b920a6cbfc080087","impliedFormat":1},{"version":"3e5ebc3a6a938a03a361f4cdb9a26c9f5a1bac82b46273e11d5d37cd8eccc918","impliedFormat":1},{"version":"a0a7800e71c504c21f3051a29f0f6f948f0b8296c9ebffeb67033822aabf92e0","impliedFormat":1},{"version":"6a219f12b3e853398d51192736707e320699a355052687bad4729784649ff519","impliedFormat":1},{"version":"4294a84634c56529e67301a3258448019e41c101de6b9646ea41c0ecdc70df92","impliedFormat":1},{"version":"80fc027e10234b809a9a40086114a8154657dcb8478d58c85ef850592d352870","impliedFormat":1},{"version":"27f24ba43083d406b372e9eff72dbc378afa0503dac1c1dd32499cc92fc9cb22","impliedFormat":1},{"version":"12594611a054ca7fe69962f690a4e79922d563b4b434716eb855d63a9d11a78f","impliedFormat":1},{"version":"1440eca2d8bc47ebdbc5a901b369de1b7b39c3297e5b4ac9631899f49ea9740b","impliedFormat":1},{"version":"fc9897fbada879bda954603ea204c6e5df913262a90ad848b5efaab182b58033","impliedFormat":1},{"version":"93443b2da120bea58eb48bd7da86559d4cf868dc2d581eebf9b48b51ba1e8894","impliedFormat":1},{"version":"94be5c5f8cf26bbf53554cba4b112e30134349b14f3c0fd0ede3b51ec25a7174","impliedFormat":1},{"version":"c2956026078814be6dc01515213aeb1eb816e81715085952bbc97b7c81fe3f6d","impliedFormat":1},{"version":"ac3a69c529ab256532825b08902aec65d0d88c66963e39ae19a3d214953aedc5","impliedFormat":1},{"version":"fe29108f3ddf7030c3d573c5226ebe03213170b3beca5200ca7cb33755184017","impliedFormat":1},{"version":"04d5bfb0a0eecd66c0b3f522477bf69065a9703be8300fbea5566a0fc4a97b9d","impliedFormat":1},{"version":"d5e3e13faca961679bed01d80bc38b3336e7de598ebf9b03ec7d31081af735ad","impliedFormat":1},{"version":"de05a488fb501de32c1ec0af2a6ddfe0fdef46935b9f4ffb3922d355b15da674","impliedFormat":1},{"version":"9f00f2bc49f0c10275a52cb4f9e2991860d8b7b0922bfab6eafe14178377aa72","impliedFormat":1},{"version":"7bd94408358caf1794ad24546ca0aa56f9be6be2d3245d0972fcb924b84a81fd","impliedFormat":1},{"version":"0e7c3660d1df392b6f6ae7fa697f0629ae4404e5b7bac05dd81136247aff32d5","impliedFormat":1},{"version":"b0b3636502dc0c50295f67747968f202f7b775eac5016329606d1bc2888d5dd9","impliedFormat":1},{"version":"f9ede7ea553dc197fd5d2604f62cda1be1aea50024ed73237d9e3144f0c93608","impliedFormat":1},{"version":"b1005ae67226fd9b7b65333d9a351917f517d421a0c63b7cde59bec3b8e3562f","impliedFormat":1},{"version":"c6688fd4c2a8a24c9b80da3660a7a06b93ed37d12d84f3ba4aa071ffc125e75f","impliedFormat":1},{"version":"20efc25890a0b2f09e4d224afaaf84917baa77b1aee60d9dfd11ff8078d73f93","impliedFormat":1},{"version":"d00b48096854d711cee688e7ff1ca796c1bf0d27ca509633c2a98b85cc23d47d","impliedFormat":1},{"version":"30f116226d0e53c6cbbdbc967479d5c8036935f771b2af51987c2e8d4cc7fc6a","impliedFormat":1},{"version":"8be98ffc3c54fb40b220796b796388f8ade50c8ba813a811bffccf98006566d5","impliedFormat":1},{"version":"4e82eed3c1b5084132708ce030f8ec90b69e4b7bb844dcaacd808045ae24c0e2","impliedFormat":1},{"version":"eae8c7cbcb175b997ce8e76cd6e770eca5dba07228f6cb4a44e1b0a11eb87685","impliedFormat":1},{"version":"b3ded8e50b3cdf548d7c8d3b3b5b2105932b04a2f08b392564f4bc499407e4e5","impliedFormat":1},{"version":"4ed2d8fb4c598719985b8fbef65f7de9c3f5ae6a233fc0fe20bd00193c490908","impliedFormat":1},{"version":"6da51da9b74383988b89e17298ceca510357f63830f78b40f72afe4d5a9cee3e","impliedFormat":1},{"version":"512a079a1a3de2492c80aa599e173b2ea8cc6afb2800e3e99f14330b34155fe1","impliedFormat":1},{"version":"f281f20b801830f2f94b2bc0b18aba01d4fb50c2f4a847ffcadff39de31c8b80","impliedFormat":1},{"version":"738ddac5ab5b61d70d3466f3906d6b3c83c8786e922c6e726a6597296181ae87","impliedFormat":1},{"version":"90d202ace592f7b51b131a5890ec93e4df774c8677a485391c280cef0ea53f48","impliedFormat":1},{"version":"b34e1861949a545916696ef40f4a7fe71793661e72dd4db5e04cacc60ef23f7a","impliedFormat":1},{"version":"dd3f42651cfa863ded8fa0b0608fb892b826e254a0a6cbc447388cb5e11bffd5","impliedFormat":1},{"version":"8e3842ba15690ab4b340893a4552a8c3670b8f347fbb835afe14be98891eef10","impliedFormat":1},{"version":"e7b9673dcd3d1825dbd70ad1d1f848d68189afc302ecdafc6eb30cbe7bd420b5","impliedFormat":1},{"version":"15911b87a2ad4b65b30c445802d55fa6186c66068603113042e8c3dfa4a35e2a","impliedFormat":1},{"version":"a9dc7b8d06b1f69d219f61fa3f7ac621e6e3a8d5a430e800cd7d1a755cc058c3","impliedFormat":1},{"version":"f8c496656cb5fd737931b4d6c60bd72a97c48f37c07dcb74a593dd24ac3f684a","impliedFormat":1},{"version":"f2cf1d33c458ac091983e5dac1613f264d48a69b281e43c5b055321320082358","impliedFormat":1},{"version":"0fa43815d4b05eafe97c056dae73c313f23a9f00b559f1e942d042c7a04db93c","impliedFormat":1},{"version":"e769097e5ea39d2ed548eeb9c093e90f26dde167f95eb80fbdd4efb041778387","impliedFormat":1},{"version":"a02db6aabaa291a85cf52b0c3f02a75301b80be856db63d44af4feea2179f37b","impliedFormat":1},{"version":"e1e94e41f47a4496566a9f40e815687a2eca1e7b7910b67704813cf61248b869","impliedFormat":1},{"version":"557ba6713b2a6fefd943399d5fb6c64e315dc461e9e05eaa6300fdbeeda5d0a1","impliedFormat":1},{"version":"1f7eeb69504ad94d16f4731f707d2af879adc7487dc35b146e2d86825bb779b4","impliedFormat":1},{"version":"c1b5c480e4d38377c82f9f517c12014d3d4475c0e607c4845e0836e0e89bbf7d","impliedFormat":1},{"version":"1a014a8365354f37ea245349a4361d3b46589be7921fe7f1dbf408cc0f084bab","impliedFormat":1},{"version":"87fc4a324b9fa5c9b93a13b5ae1b55ea390929ec1b0450afebff9620921a9cc1","impliedFormat":1},{"version":"73c0b8df0e282e26a53820f53502847a043bd77a9cda78782207d5349842fba2","impliedFormat":1},{"version":"5c7391307b9a7c540d678f015d687c277269aa9171f441467e20bab15694db40","impliedFormat":1},{"version":"082aa8710bbf3d16b877e798341c69599fdd487b4dc34d374ab3e3ec6d46f690","impliedFormat":1},{"version":"acb9367f45f12526ea808d6da48ab77eee1ceb2b6fe47ab02bbcc7cce4c972b0","impliedFormat":1},{"version":"d6db974317fd9ff66a923555464850dcf87976054a7adacf09d53323f64686d1","impliedFormat":1},{"version":"79f4812dffe8f933c12c341d68eee731cb6dd7f2a4bb20097c411560c97a6263","impliedFormat":1},{"version":"c446e8f3bd5b16e121252e05ba7696524ca95ec3f819c12fb8c37e7836744769","impliedFormat":1},{"version":"23386bb0bcb20fcb367149f22f5c6468b53f1987e86fd25de875ffb769e4d241","impliedFormat":1},{"version":"3913806467307a4bd874b105ac3e79ac261ab986fbdce7f0feea26cbcee95765","impliedFormat":1},{"version":"a9417a980a4300048d179d0295e5b7dd76e4db7b566344779ee576cbd084b3c4","impliedFormat":1},{"version":"b96760c030c41fa078b35ea05fc3e7e4d2a81710a8329271d42b6abc110d5dbe","impliedFormat":1},{"version":"ef8ff23609cec5eb95e2beb98132ad90c0c5075415b50228b12f89ffaf981a4a","impliedFormat":1},{"version":"80bbc9365ca8398c69eae77cdf7284d07192a17dacf1904095ab4c89f4520a5d","impliedFormat":1},{"version":"174a3381f98fc78c451528cb1aa1baaa37a51852ec6fa90d42efd876301537c1","impliedFormat":1},{"version":"2c0de27d99a9331cfac8bc5c6bbd174e0593628bf3df268faa6c4188962a9549","impliedFormat":1},{"version":"1a17bcbc124a098987f7b1adbbcd412f8372ecb37e352b1c50165dac439eee5e","impliedFormat":1},{"version":"0ef49170735d9e5902f55b72465accadd0db93cae52544e3c469cbc8fbdbf654","impliedFormat":1},{"version":"f68a30e88dfa7d12d8dd4609bc9d5226a31d260bf3526de5554feed3f0bf0cb6","impliedFormat":1},{"version":"d8acc6f92c85e784acbbc72036156a4c1168a18cba5390c7d363040479c39396","impliedFormat":1},{"version":"1fffef141820a0556f60aa6050eccb17dbcdc29ecd8a17ee4366573fd9c96ce3","impliedFormat":1},{"version":"d2598c755c11170e3b5f85cd0c237033e783fd4896070c06c35b2246879612b8","impliedFormat":1},{"version":"8d2044a28963c6c85a2cf4e334eb49bb6f3dd0c0dfe316233148a9be74510a0e","impliedFormat":1},{"version":"2660eb7dba5976c2dcbea02ec146b1f27109e7bee323392db584f8c78a6477dd","impliedFormat":1},{"version":"54a4f21be5428d7bff9240efb4e8cae3cb771cad37f46911978e013ff7289238","impliedFormat":1},{"version":"10837df0382365c2544fb75cb9a8f6e481e68c64915362941b4ea4468fd0ef61","impliedFormat":1},{"version":"cc4483c79688bd3f69c11cb3299a07d5dcf87646c35b869c77cde553c42893cf","impliedFormat":1},{"version":"faf76eeb5dd5d4d1e37c6eb875d114fa97297c2b50b10e25066fed09e325a77a","impliedFormat":1},{"version":"b741703daf465b44177ef31cc637bde5cd5345e6c048d5807108e6e868182b01","impliedFormat":1},{"version":"9c3e59360437a3e2a22f7f1032559a4c24aba697365b62fb4816b7c8c66035b8","impliedFormat":1},{"version":"393446ab3f0dd3449ad6fd4c8abd0c82b711c514b9e8dfbf75222bbc48eb0cb6","impliedFormat":1},{"version":"ea02a962453ec628e886a6c5d0fc03bf4da9dfa38e1f8d42e65e07b2651edd85","impliedFormat":1},{"version":"5eb09226bfa1928721a438e37c004647fc19d8d1f4817bddcc350e57fb32935f","impliedFormat":1},{"version":"5994ed389d7fc28c03dad647ecb62e5349160bde443b0c7a54e0e10d6368bcbd","impliedFormat":1},{"version":"e1ff7df643e1aa1dbf1863113a913358844ed66f1af452e774834b0008e578b2","impliedFormat":1},{"version":"c5114285d0283d05e09cd959e605a4f76e5816c2fbe712241993fd66496083e5","impliedFormat":1},{"version":"2752e949c871f2cbd146efa21ebc34e4693c0ac8020401f90a45d4e150682181","impliedFormat":1},{"version":"c349cea980e28566998972522156daac849af8a9e4a9d59074845e319b975f5d","impliedFormat":1},{"version":"0370682454d1d243b75a7c7031bc8589531a472e927b67854c1b53b55ee496ea","impliedFormat":1},{"version":"cf6b4dbb5a1ac9ece24761c3a08682029851b292b67113a93b5e2bfd2e64e49d","impliedFormat":1},{"version":"baa9fbd480342a1d5e3e11ba3629f2826d18d4a765f1f9693ab87bfb3ce54adb","impliedFormat":1},{"version":"cb2fea712720bb7951d7e5d63db8670bf4a400d3e0fb197bceb6ef44efe36ec3","impliedFormat":1},{"version":"1b4fcfc691980d63a730d47d5309d9f85cdddc18a4c83f6e3af20936d103e3ff","impliedFormat":1},{"version":"ef19d5fe42541f8b529bccd10f488d12caefa3b57a0deb1ed6143219cba716b4","impliedFormat":1},{"version":"84b5e6269d7cf53008a479eeb533ef09d025eafb4febe3729301b8d4daf37ff2","impliedFormat":1},{"version":"04196b5d9edd60b9648daa329c3355d7c95f33b7e520e7835eb21002174a8b8c","impliedFormat":1},{"version":"637c0d7d8cedbc64a3c228c3fa6bef884746f7a16a631e7532f9828c9ac06b8a","impliedFormat":1},{"version":"9e665aea79b702fd612ffb7ac741e4160d35d8d696a789129ebcbaea003beb3d","impliedFormat":1},{"version":"c8eeffebe6c2c6800f73aa59d1436d4dadbad7f3ddda02a831ffa66114c3122d","impliedFormat":1},{"version":"caf3f141f93cbf527ad18ecce326311d70342fe1e16ce93e5ce8d6bcdf02bd48","impliedFormat":1},{"version":"4283d88023e6e9645626475e392565464eae99068f17e324cfc40a27d10fe94f","impliedFormat":1},{"version":"51e3b73dea24e2a9638345fb7a2a7ef5d3aa2e7a285ad6bd446b45fab826def1","impliedFormat":1},{"version":"77c4c9f71f3736ed179043a72c4fad9832023855804fbe5261a956428b26a7a6","impliedFormat":1},{"version":"7232467057ec57666b884924f84fd21cd3a79cc826430c312e61a5bc5758f879","impliedFormat":1},{"version":"624f5dbfd76f2d77f20ace318e8cb918608a296106e55587fb443ef3030c595d","impliedFormat":1},{"version":"c78bb1275f640e4902ad5c3383ab4f54f73322a59c95924ab671125ba9546294","impliedFormat":1},{"version":"1cb0838371e8213ce116a1497bb86bcf01a11a755b77587980ee7cfb2d625ece","impliedFormat":1},{"version":"f5d29fd7099274774c203d94d8c0238770ab411b922b978be15a2c3ec8ab845c","impliedFormat":1},{"version":"6d99b5b226a65890ce27796e086d58c6351f601757c1e9f217a69e944d05e7e6","impliedFormat":1},{"version":"10b322f5bc001bec9bf08513c978c120adb0abe3c82793b11bdaf75873426c05","impliedFormat":1},{"version":"51b4efdc8dc92bc6ae2c44d4edad265decad70e8577d5653fc7f85200cbf6c6e","impliedFormat":1},{"version":"c3fa40ac56aa2598d9133c90b115eeb39bbad56c6dfca350dc8435b8b107fe26","impliedFormat":1},{"version":"cc542183b68b048a8cf64eb6231b3d0852f7f4d0191d4637c9d1d4c3f44b83b5","impliedFormat":1},{"version":"4b954a3d432dca82c787c06d2f1cca0fe673a4b440c5e0195429bd1fe43b324a","impliedFormat":1},{"version":"c6fd975d319a70d6ba90bf38c34ac8efebe531214038fe561a27f89f2203f78e","impliedFormat":1},{"version":"a818204639081cf07d80885b88aff5120e5a4135211162f5e08cfc00ef3bf5b6","impliedFormat":1},{"version":"c194ca06da86829b836bb188dffc05543bbea3cbda797667c7a7cade2f907646","impliedFormat":1},{"version":"6df6afb0424a7c7581ee98a9333d30e893b943d0a4709b88f18c252ddc3101b4","impliedFormat":1},{"version":"59c2cbf84c22fae87f4f506f36a7258a72b931b602115067dfd6008ee526f8c0","impliedFormat":1},{"version":"1e09cd1bc6b6baa0733e1e799c4533105ea79cbb109937c71e8c870e14693216","impliedFormat":1},{"version":"0b60cfcd94fa9bd9fa58176650c7e4c72f99b9d30a50d0b55aa08b510276af96","impliedFormat":1},{"version":"ba25681012e5117866a2456dd3557e24aa5a946ed641126aa4469880db526883","impliedFormat":1},{"version":"2b1e058a8c3944890c7ce7c712ecfd0f2645420ee67537ac031d7afe6feda6e0","impliedFormat":1},{"version":"175dbcd1f226eebd93fd9628e9180fb537bb1171489b33db7b388ef0f4e73b37","impliedFormat":1},{"version":"69ec6331ee3a7cd6bade5d5f683f1705c1041ff77432aa18c50d2097e61f93db","impliedFormat":1},{"version":"06f34a0f2151b619314fc8a54e4352a40fd5606bda50623c326c3be365cc1ef9","impliedFormat":1},{"version":"6c6dcb49af3d72d823334f74a554b2f9917e3a59b3219934b7ae9e6b03a3e8b4","impliedFormat":1},{"version":"9628be9799a060a3f7fe2e1f08fab2b21cdd7e97a2bbc3ef2f0029be46e0d7da","impliedFormat":1},{"version":"3d24aec533fe2f035b0675ba1c0e55e8680a714fff2a517e0fb388279476701c","impliedFormat":1},{"version":"224e2edff4c1e67d9c5179aa70e31d0dc7dd4ea5a9e80ffde121df9e5254eef2","impliedFormat":1},{"version":"e324c3b2058f9525cf5c11915284f9dfdf7550c98f103429b271fe723c4f8e14","impliedFormat":1},{"version":"70a3659d557bb683091f9d318762a330a3acb3954f5e89e5134d24c9272192f1","impliedFormat":1},{"version":"d9fe2c804f7db2f19e4323601278b748dc2984798f265c37cd37bb84e6c88ab8","impliedFormat":1},{"version":"3525647a73ae2124fa8f353f0a078b44ff1ee6f82958c2bb507de61575f12fff","impliedFormat":1},{"version":"d7238315cbd18ebeed93f41ad756a0ed9759824b9b158c3d7a1e0b71682d8966","impliedFormat":1},{"version":"eeba7376ce9721610d3282a4159f3c60154b7b3877fb251f7b3211b085cfdc18","impliedFormat":1},{"version":"643efb9d7747ee1dd50ff5bd4b7a87351157e55988c7d2f90ffbdf124f063931","impliedFormat":1},{"version":"788c870cac6b39980a5cc41bf610b1873952ecdd339b781f0687d42682ffc5dc","impliedFormat":1},{"version":"d51a2e050c8a131b13ec9330a0869e5ac75b9ac4ebde52d5f474e819510b5263","impliedFormat":1},{"version":"b694593470a9bf370987e5b0757d5a9a88a46a703c9cf7921969f3379ce16148","impliedFormat":1},{"version":"6c034655fa83236bd779cacfc1d5b469d6e2150a1993e66ecca92376a8b2c6a7","impliedFormat":1},{"version":"6bd6933efe9d6263d9f1a534a28a8f88b1e4c331b95d85d39350cf02eca8dce0","impliedFormat":1},{"version":"658cf468a05b2b591fcd5455a76d9927face59ac4a21b4965982b3c234f5d289","impliedFormat":1},{"version":"6bf893d1b824bde22ee5880c0c760c1dd0a5163c38d22311441a3341b6965d2d","impliedFormat":1},{"version":"579d9d3c25058b854a6f7cc6368a473efcaa0740f45db13cb508761d35fc0156","impliedFormat":1},{"version":"68705604f0666ba3862670153eb4f965c3079415e7ab30a35b3126e36277dc9e","impliedFormat":1},{"version":"28b415e70f9da0346545b7d2bcf361844a8e5778bd6b45bc1a2859f99700ff5b","impliedFormat":1},{"version":"a905f2f6785e3971bd97c42191394209d97f2aefb11841f7353dd9789821fa8c","impliedFormat":1},{"version":"e099c5ebddf80ae7285d380c7dd3b5d49c1347346ced51ae121b846833a8d102","impliedFormat":1},{"version":"aec91730b9f4d83758b4a45596317d34d6ecdbe9330a44629f53af47641b96ee","impliedFormat":1},{"version":"2321197343254570a8d4c868572059bfdfb683cf9d4099b6d4694250dac69471","impliedFormat":1},{"version":"18a3be03c31356b60ea1090bcc905d99e4983ca911cc70b34ad0b9b4d4e050c3","impliedFormat":1},{"version":"9833a67663f960dc2d1908a19365ddde55c0651235596ac60d7078a9be6f6e56","impliedFormat":1},{"version":"2bcb8920601b80911430979b6db4a58a7908a31334e74e4e22b75c65edce3587","impliedFormat":1},{"version":"c3186dc74d62d0fb6fba29841ccbf995614992526c37fac5c082d0f28b351e54","impliedFormat":1},{"version":"2306daed18f7f59542a99857a678ef818058eefa30c2a556af123a1cf53889cd","impliedFormat":1},{"version":"b41ed9285a09710807ce2c423e038dfe538e46e9183c0c05aadc27bfb9ae256a","impliedFormat":1},{"version":"56b9f9de03f28eb5922750a213d3f47b21a4f00a48c7c9b89bf1733623873d3a","impliedFormat":1},{"version":"2bdd736078e445858cb1d9df809ff3a2f00445d78664dd70b6794fb2156bdd53","impliedFormat":1},{"version":"2653fb2893a65c610ec17d0e454e2b16726f16118425f0bc8a38c801943ef7f5","impliedFormat":1},{"version":"74ffa4541a56571f379060acaf9ab86da6c889dfe1f588425807e0117e62bba5","impliedFormat":1},{"version":"cf4dc15ca9dc6c0995dd2a9264e5ec37d09d9d551c85f395034e812abdf60a99","impliedFormat":1},{"version":"73e8b003f39c7ce46d2811749dab1dd1b309235fd5c277bd672c30a98b5cf90f","impliedFormat":1},{"version":"4cb49e79595c6413fcb01af55a8a574705bf385bd2ec5cf8b777778952e2914a","impliedFormat":1},{"version":"d6b44382b2670f38c8473e7c16b6e8a9bfa546b396b920afc4c53410eeb22abf","impliedFormat":1},{"version":"3b5c6f451b7ad87e3fcd2008d3a6cb69bd33803e541e9c0fe35754201389158f","impliedFormat":1},{"version":"8329556a2e85e3c3ff3dff43141790ff624b0f5138cedec5bb793164cf8b088f","impliedFormat":1},{"version":"4c889ce7e61ca7f3b7733e0d2be80b3af373e080c922e04639aa25f22963ae63","impliedFormat":1},{"version":"2239a8cd90c48e0b5c075e51099e7e3b4fc3d4741e4d9cc4410d2544d4216946","impliedFormat":1},{"version":"f5aa57712223d7438799be67b0c4a0e5ac3841f6397b5e692673944374f58a83","impliedFormat":1},{"version":"774c37f8faed74c238915868ccc36d0afedfbafb1d2329d6a230966457f57cbd","impliedFormat":1},{"version":"bc41b711477270e8d6f1110d57863284d084b089a22592c7c09df8d4cc3d1d20","impliedFormat":1},{"version":"0c792fe4e5f383b4f085a0033553fb84ed9322b7923fd59d4575aa43135e050d","impliedFormat":1},{"version":"228ed3721f42cc25bfebceef33754ce4766414d975ff71d012f01f141dbe3549","impliedFormat":1},{"version":"08985cdb65bbfe3c70d0037794a3d0f0a5613f55c278c77277a7acc17205db57","impliedFormat":1},{"version":"22bdefb6b2107006ab203073218566443a52ab65eb5e4e8e86c3d38efe776588","impliedFormat":1},{"version":"0f01b48cee64391fabef3f344e6e86197dc921f0f88a6d45d133ac58283d9690","impliedFormat":1},{"version":"c86fea295c21ea01c93410eba2ec6e4f918b97d0c3bf9f1bb1960eabe417e7eb","impliedFormat":1},{"version":"05d41b3e7789381ff4d7f06d8739bf54cc8e75b835cb28f22e59c1d212e48ff3","impliedFormat":1},{"version":"6fbcfc270125b77808679b682663c7c6ad36518f5a528c5f7258bcd635096770","impliedFormat":1},{"version":"9d3bd4ee558de42e9d8434f7293b404c4b7a09b344e77c36bbe959696328d594","impliedFormat":1},{"version":"f63be9b46a22ee5894316cf71a4ba7581809dd98cf046109060a1214ee9e2977","impliedFormat":1},{"version":"dd3cc41b5764c9435b7cae3cc830be4ee6071f41a607188e43aa1edeba4fbb3e","impliedFormat":1},{"version":"b2dbb9485701a1d8250d9a35b74afd41b9a403c32484ed40ed195e8aa369ae70","impliedFormat":1},{"version":"5aa7565991c306061181bd0148c458bcce3472d912e2af6a98a0a54904cd84fc","impliedFormat":1},{"version":"9629e70ae80485928a562adb978890c53c7be47c3b3624dbb82641e1da48fd2f","impliedFormat":1},{"version":"c33d86e1d4753d035c4ea8d0fdb2377043bc894e4227be3ceabc8e6a5411ab2e","impliedFormat":1},{"version":"f9ec74382c95cbc85804daf0e9dabed56511a6dfb72f8a2868aa46a0b9b5eafc","impliedFormat":1},{"version":"1ff7a67731e575e9f31837883ddfc6bfcef4a09630267e433bc5aea65ad2ced4","impliedFormat":1},{"version":"0c4f6b6eb73b0fa4d27ce6eef6c2f1e7bd93d953b941e486b55d5d4b22883350","impliedFormat":1},{"version":"af9692ce3b9db8b94dcfbaa672cb6a87472f8c909b83b5aeea043d6e53e8b107","impliedFormat":1},{"version":"782f2628a998fd03f4ccbe9884da532b8c9be645077556e235149ca9e6bd8c7d","impliedFormat":1},{"version":"269b7db8b769d5677f8d5d219e74ea2390b72ea2c65676b307e172e8f605a74a","impliedFormat":1},{"version":"ae731d469fae328ba73d6928e4466b72e3966f92f14cd1a711f9a489c6f93839","impliedFormat":1},{"version":"90878ed33999d4ff8da72bd2ca3efb1cde76d81940767adc8c229a70eb9332b2","impliedFormat":1},{"version":"d7236656e70e3a7005dba52aa27b2c989ba676aff1cab0863795ac6185f8d54f","impliedFormat":1},{"version":"e327901e9f31d1ad13928a95d95604ee4917d72ad96092da65612879d89aba42","impliedFormat":1},{"version":"868914e3630910e58d4ad917f44b045d05303adc113931e4b197357f59c3e93e","impliedFormat":1},{"version":"7d59adb080be18e595f1ce421fc50facd0073672b8e67abac5665ba7376b29b9","impliedFormat":1},{"version":"275344839c4df9f991bcf5d99c98d61ef3ce3425421e63eeb4641f544cb76e25","impliedFormat":1},{"version":"c4f1cc0bd56665694e010a6096a1d31b689fa33a4dd2e3aa591c4e343dd5181c","impliedFormat":1},{"version":"81c3d9b4d90902aa6b3cbd22e4d956b6eb5c46c4ea2d42c8ff63201c3e9676da","impliedFormat":1},{"version":"5bfc3a4bd84a6f4b992b3d285193a8140c80bbb49d50a98c4f28ad14d10e0acc","impliedFormat":1},{"version":"a7cf6a2391061ca613649bc3497596f96c1e933f7b166fa9b6856022b68783ab","impliedFormat":1},{"version":"864c844c424536df0f6f745101d90d69dd14b36aa8bd6dde11268bb91e7de88e","impliedFormat":1},{"version":"c74a70a215bbd8b763610f195459193ab05c877b3654e74f6c8881848b9ddb7f","impliedFormat":1},{"version":"3fa94513af13055cd79ea0b70078521e4484e576f8973e0712db9aab2f5dd436","impliedFormat":1},{"version":"48ffc1a6b67d61110c44d786d520a0cba81bb89667c7cdc35d4157263bfb7175","impliedFormat":1},{"version":"7cb4007e1e7b6192af196dc1dacd29a0c3adc44df23190752bef6cbbc94b5e0b","impliedFormat":1},{"version":"3d409649b4e73004b7561219ce791874818239913cac47accc083fad58f4f985","impliedFormat":1},{"version":"051908114dee3ca6d0250aacb0a4a201e60f458085177d5eda1fc3cde2e570f3","impliedFormat":1},{"version":"3e8240b75f97eb4495679f6031fb02ad889a43017cae4b17d572324513559372","impliedFormat":1},{"version":"d82609394127fb33eed0b58e33f8a0f55b62b21c2b6c10f1d7348b4781e392cb","impliedFormat":1},{"version":"b0f8a6436fbaf3fb7b707e2551b3029650bfaeb51d4b98e089e9a104d5b559b5","impliedFormat":1},{"version":"eae0ac4f87d56dcf9fbcf9314540cc1447e7a206eee8371b44afa3e2911e520c","impliedFormat":1},{"version":"b585e7131070c77b28cc682f9b1be6710e5506c196a4b6b94c3028eb865de4a7","impliedFormat":1},{"version":"b92ac4cc40d551450a87f9154a8d088e31cff02c36e81db2976d9ff070ba9929","impliedFormat":1},{"version":"6f99b4a552fbdc6afd36d695201712901d9b3f009e340db8b8d1d3415f2776f5","impliedFormat":1},{"version":"43700e8832b12f82e6f519b56fae2695e93bb18dddb485ddea6583a0d1482992","impliedFormat":1},{"version":"e8165ea64af5de7f400d851aeea5703a3b8ac021c08bebc958859d341fa53387","impliedFormat":1},{"version":"6db546ea3ced87efda943e6016c2a748e150941a0704af013dfe535936e820e1","impliedFormat":1},{"version":"f521c4293b6d8f097e885be50c2fef97de3dd512ad26f978360bb70c766e7eae","impliedFormat":1},{"version":"a0666dfd499f319cc51a1e6d9722ed9c830b040801427bbdd2984b73f98d292a","impliedFormat":1},{"version":"a7d86611d7882643dd8c529d56d2e2b698afd3a13a5adc2d9e8157b57927c0da","impliedFormat":1},{"version":"7e4615c366c93399f288c7bfbaa00a1dc123578be9d8ac96b15d489efc3f4851","impliedFormat":1},{"version":"f2e6c87a2c322ee1473cb0bd776eb20ee7bff041bc56619e5d245134ab73e83d","impliedFormat":1},{"version":"ee89bc94431b2dfaf6a7e690f8d9a5473b9d61de4ddcb637217d11229fe5b69f","impliedFormat":1},{"version":"a19c1014936f60281156dd4798395ad4ab26b7578b5a6a062b344a3e924a4333","impliedFormat":1},{"version":"5608be84dd2ca55fc6d9b6da43f67194182f40af00291198b6487229403a98fe","impliedFormat":1},{"version":"4a800f1d740379122c473c18343058f4bd63c3dffdef4d0edba668caa9c75f54","impliedFormat":1},{"version":"8e6868a58ca21e92e09017440fdb42ebfe78361803be2c1e7f49883b7113fdc2","impliedFormat":1},{"version":"2fbb72a22faefa3c9ae0dfb2a7e83d7b3d82ec625a74a8800a9da973511b0672","impliedFormat":1},{"version":"3e8c1a811bad9e5cd313c3d90c39a99867befa746098cdad81a9578ac3392541","impliedFormat":1},{"version":"d88f78b4e272864f414d98e5ed0996cd09f7a3bb01c5b7528320386f7383153d","impliedFormat":1},{"version":"0b9c34da2c6f0170e6a357112b91f2351712c5a537b76e42adfee9a91308b122","impliedFormat":1},{"version":"47adac87ec85a52ed2562cb4a3b441383551727ed802e471aa05c12e7cc7e27e","impliedFormat":1},{"version":"d1cacf181763c5d0960986f6d0abd1a36fc58fc06a707c9f5060b6b5526179ca","impliedFormat":1},{"version":"92610d503212366ff87801c2b9dc2d1bccfa427f175261a5c11331bc3588bb3f","impliedFormat":1},{"version":"805e2737ce5d94d7da549ed51dfa2e27c2f06114b19573687e9bde355a20f0ff","impliedFormat":1},{"version":"a37b576e17cf09938090a0e7feaec52d5091a1d2bbd73d7335d350e5f0e8be95","impliedFormat":1},{"version":"98971aa63683469692fef990fcba8b7ba3bae3077de26ac4be3e1545d09874b8","impliedFormat":1},{"version":"c6d36fa611917b6177e9c103a2719a61421044fb81cdd0accd19eba08d1b54de","impliedFormat":1},{"version":"088592cf2e218b99b02a5029ed8d1a763a3856cd25e012cfbb536b7494f08971","impliedFormat":1},{"version":"5eb39c56462b29c90cb373676a9a9a179f348a8684b85990367b3bbc6be5a6e9","impliedFormat":1},{"version":"52252b11bcbfaeb4c04dc9ec92ea3f1481684eee62c0c913e8ff1421dc0807e5","impliedFormat":1},{"version":"731d07940d9b4313122e6cc58829ea57dcc5748003df9a0cad7eb444b0644685","impliedFormat":1},{"version":"b3ead4874138ce39966238b97f758fdb06f56a14df3f5e538d77596195ece0b5","impliedFormat":1},{"version":"032b40b5529f2ecce0524974dbec04e9c674278ae39760b2ee0d7fce1bb0b165","impliedFormat":1},{"version":"c25736b0cb086cd2afa4206c11959cb8141cea9700f95a766ad37c2712b7772b","impliedFormat":1},{"version":"033c269cd9631b3f56bb69a9f912c1f0d6f83cf2cff4d436ee1c98f6e655e3b5","impliedFormat":1},{"version":"bd6d692a4a950abbfabe29131420abe804e7f3cc187c3c451f9811e9cf4408ce","impliedFormat":1},{"version":"a9b6411417d4bffd9a89c41dc9dedda7d39fb4fa378eaa0ab55ec9ea1a94eb6a","impliedFormat":1},{"version":"1329e7cd7aca4d223ef5a088d82bc3f6f302ce70581c8d3823a050ea155eec3b","impliedFormat":1},{"version":"09248c76437c5b1efce189b4050c398f76a9385135af75c5fb46308b0d1432e0","impliedFormat":1},{"version":"b8df115bf7b30cceeb4550c0be507082b9930ee6268539a1a1aaffb0791cc299","impliedFormat":1},{"version":"dde00f41a2d2b1e70df6df8ac33de7cb3a658956212c7bee326245cc01c990c2","impliedFormat":1},{"version":"115d092e2748990ff0f67f376f47e9a45a2f21f7c7784102419c14b32c4362d1","impliedFormat":1},{"version":"4ba068163c800094cd81b237f86f22c3a33c23cf2a70b9252aca373cfdf59677","impliedFormat":1},{"version":"53e65282ab040a9f535f4ad2e3c8d8346034d8d69941370886d17055874b348d","impliedFormat":1},{"version":"e6db934da4b03c1f4f1da6f4165a981ec004e9e7d956c585775326b392d4d886","impliedFormat":1},{"version":"6ecb85c8cbb289fe72e1d302684e659cc01ef76ae8e0ad01e8b2203706af1d56","impliedFormat":1},{"version":"fca410876e0302680190982f2fc5102d896e65e4f4f20547a185b60364838910","impliedFormat":1},{"version":"601bc70ff67ae9855fc65bad9bb2d135f72147cf22e2490f58ea0d209d95f2ee","impliedFormat":1},{"version":"5cd5a999e218c635ea6c3e0d64da34a0f112757e793f29bc097fd18b5267f427","impliedFormat":1},{"version":"de8a12540370f9f18b160a07ed57917d69fe24525d360531d42d4b1b5d0d9f0f","impliedFormat":1},{"version":"4a397c8a3d1cccf28751bcca469d57faeb637e76b74f6826e76ad66a3c57c7b8","impliedFormat":1},{"version":"34c1bb0d4cf216f2acb3d013ad2c79f906fe89ce829e23a899029dfa738f97e0","impliedFormat":1},{"version":"5c744f3cc0a266dd95b5769a70ddc85c8b6019adbb0954d4de61f89182202ce3","impliedFormat":1},{"version":"b50f05738b1e82cbb7318eb35a7aaf25036f5585b75bbf4377cfa2bad15c40bf","impliedFormat":1},{"version":"c682cb23f38a786bb37901b3f64727bd3c6210292f5bb36f3b11b63fbe2b23ee","impliedFormat":1},{"version":"d6592cf10dc7797d138af32800d53ff4707fdcd6e053812ce701404f5f533351","impliedFormat":1},{"version":"997f6604cd3d35281083706aa2862e8181ed1929a6cbb004c087557d6c7f23c4","impliedFormat":1},{"version":"9584dd669a3bf285e079502ebbb683e7da0bf7f7c1eb3d63f6ef929350667541","impliedFormat":1},{"version":"41a10e2db052a8bf53ed4d933d9b4f5caa30bdaee5a9d978af95f6641ce44860","impliedFormat":1},{"version":"d84761f8a994b5444529c7c294b194de6fd5350ccda974929ea7e8b3893b753a","impliedFormat":1},{"version":"652e51858bafd77e1abcc4d4e9d5e48cc4426c3dd2910021abd8cc664961e135","impliedFormat":1},{"version":"8c5c602045ffdfebeffc7a71cd2bf201fe147a371274b5fcbded765a92f2af78","impliedFormat":1},{"version":"6392ce794eef6f9b57818264bb0eeb24a46cf923f7695a957c15d3d087fbb6cc","impliedFormat":1},{"version":"b10f123e8100aa98723c133af16f1226a6360ec5b6990a0fe82b165d289549db","impliedFormat":1},{"version":"93d20368cdb5fff7f7398bfc9b2b474b2a2d5867277a0631a33b7db7fd53d5b4","impliedFormat":1},{"version":"b1e69b9834104482fabf7fba40e86a282ee10e0600ffd75123622f4610b0ef9e","impliedFormat":1},{"version":"ad5bb6c450cb574289db945ff82be103ed5d0ad8ee8c76164cee7999c695ae01","impliedFormat":1},{"version":"217761e8a5482b3ad20588a801521c2f5f9f7fb2fbb416d4eff3aff9b57f8471","impliedFormat":1},{"version":"7ad780687331f05998c62277d73b6f15ee3e8045b0187a515ffc49c0ad993606","impliedFormat":1},{"version":"e9aa5ccb42e118f5418721d2ac8c0ebdebeb9502007db9b4c1b7c9b8d493013e","impliedFormat":1},{"version":"d300868212b3cc4d13228f5dc2e9880d5959dc742c0c55be2fc43bcda8504c8f","impliedFormat":1},{"version":"0c55daad827669843bd2401f1ddd163b74d9f922680b08ae6e162ceb6c11b078","impliedFormat":1},{"version":"fe45a9bc654dfd1550c9466c0dad9c8017f2626476ed9d25c65ddfc1943f6b74","impliedFormat":1},{"version":"03abcbc7b5b68887525be71a194dd7f9f68276b5fb5b8989abae9a91585ddc33","impliedFormat":1},{"version":"5055e86e689cfe39104ab71298757e5aac839c2ea9d1f12299e76fa79303d47d","impliedFormat":1},{"version":"42266c387025558423c19d624f671352aac3e449c23906cb636f9ae317b72d7e","impliedFormat":1},{"version":"e578a36b3683d233e045a85c9adb0f10e83d2b48f777b9c05fbc363ccc6bdd34","impliedFormat":1},{"version":"0235d0ba0c7b64244d4703b7d6cabd88ba809abeb01da0c13e9ed111bf5e7059","impliedFormat":1},{"version":"9b21e8a79f4213c1cf29f3c408f85a622f9eb6f4902549ccb9a2c00717a0b220","impliedFormat":1},{"version":"d556e498591413e254793f9d64d3108b369a97bd50f9dd4015b5552888e975ef","impliedFormat":1},{"version":"e2c652c7a45072e408c1749908ca39528d3a9a0eb6634a8999b8cf0e35ef20c8","impliedFormat":1},{"version":"ec08224b320739d26aaf61cead7f1e0f82e6581df0216f6fe048aa6f5042cb8c","impliedFormat":1},{"version":"4eadaa271acca9bd20fc6ac1ea5e4bf9ab6698b8ccf3ec07c33df4970f8130f1","impliedFormat":1},{"version":"3238d2eee64423c8d41972c88673b0327d8b40174a78ea346bcd10954a8f3373","impliedFormat":1},{"version":"8f773ddff9070d725dd23f5cf6c8e62bd86984a57b5d5e3fc7583010b48cd8ac","impliedFormat":1},{"version":"5ecd8fdeb6c87db9c320eefbfa9ea27efccbdce853ed38d5ba58e2da482edf1f","impliedFormat":1},{"version":"19a4d116285e7d77e91411966930761a2204ce2d20915afdb12652681a4a88d7","impliedFormat":1},{"version":"c30ca82112586c5dae7477d7e82cc91a7e0d1e658c581f9ec3df07c4485bba84","impliedFormat":1},{"version":"68fca1813d17ee736f41124ccc958d0364cdef79ad1222951bfacc36b2630a58","impliedFormat":1},{"version":"7813329e568df1d42e5a6c52312b1a7c69700e35a561cf085158c345be155b22","impliedFormat":1},{"version":"561067dc7b6b7635277d3cad0a0e11f698d377063dd2c15dfac43ef78847eef4","impliedFormat":1},{"version":"438247e782a8a9b9abdce618e963667cf95157cc6d3f5194a452d3c7d9e9655c","impliedFormat":1},{"version":"0c293195f800014f1fa3ffacf979002c8c1886ab71750432813fb590738eeef5","impliedFormat":1},{"version":"7673348e0cc2f4e33d1db02ecda02f39e66e56ab2cc3c5602246e5532f2715ab","impliedFormat":1},{"version":"83724b26b711d85d6cfc9dd92fd5d666ffaae27fcfb1a0110401b98814ea26c0","impliedFormat":1},{"version":"869a27c929366c3c864013a991fd4c4c86af73eba25513e8ae915f814d3d349c","impliedFormat":1},{"version":"bfa105c32ed586b227188f7b568776d03202dc7aa4c3af2746579450c7d5e7f2","impliedFormat":1},{"version":"756e3f41a7f2501a34e1a070283c7f5550e200eeb43fed3c806e3f2edd924a75","impliedFormat":1},{"version":"59935cc13dcb7c3c7825e770a61e6696bfd11b65e3e47c28acc410dbdf8461c0","impliedFormat":1},{"version":"85e2808cc73ab3ac07774802b34a6ff0d7e1e46c26de7bc2dbe08e04b3340edb","impliedFormat":1},{"version":"f766e5cdea938e0c9d214533fd4501ab0ee23ab4efca9edba334fa02d2869f11","impliedFormat":1},{"version":"eb380820a3a1feda3a182a3d078da18e0d5b7da08ae531ce11133a84b479678c","impliedFormat":1},{"version":"7fba5cc3088ad9acada3daeff52dae0f2cac8d84d19508abd78af5924dc96bea","impliedFormat":1},{"version":"14176cfdbc3d1d633ad9b5daf044ab4c7d0d73be61ca2f14388800e21f0989cd","impliedFormat":1},{"version":"a24f510afe4d938d625a4b5a5374ac0478e56305e8743dd7d37d86d709754286","impliedFormat":1},{"version":"648acdbcbcd01b1a91e8b0ad390ed59fada685977f44b90e148b65bd8159dfe8","impliedFormat":1},{"version":"8309898ba0ac6f2856a94a11723d499091253a6d5df34ddebc6149d43480bfd2","impliedFormat":1},{"version":"a317ae0eb092da3fd799d1717a2da319a74abebe85e2914cb259222969f95705","impliedFormat":1},{"version":"36d76e2dbd5f5243bd566b018c589e2ba707e34b24ec7d285feb11ba6bf23fbe","impliedFormat":1},{"version":"f780879a2ca63dbb59b36f772bc28dccd2840f1377d8d632e8c978b99c26a45f","impliedFormat":1},{"version":"335c2e013b572967a9a282a70f9dded38631189b992381f1df50e966c7f315d6","impliedFormat":1},{"version":"8b7a519edbd0b7654491300d8e3cbd2cb3ef921003569ca39ebd33e77479bb99","impliedFormat":1},{"version":"c90f8038c75600e55db93d97bab73c0ab8fb618d75392d1d1ad32e2f6e9c7908","impliedFormat":1},{"version":"ca083f3bf68e813b5bded56ecbf177636aa75833eb86c7b40e3d75b8ce4c2f78","impliedFormat":1},{"version":"3c8bf00283ef468da8389119d3f5662c81106e302c8810f40ea86b1018df647e","impliedFormat":1},{"version":"67b248e4bac845c5139898b44cbd3e1213674bcc9831039701b5f0f957243a24","impliedFormat":1},{"version":"63d49516f359186f7b3e3115f2c829ed75c319b34022c97b56beead032a073b7","impliedFormat":1},{"version":"9f5f256c7b5cc4a98ef557ea9720f81e96319d569f731c897ddb4514936242b4","impliedFormat":1},{"version":"a20ded6c920f6e566537e93d69cbad79bc57d7e3ce85686003078cf88c1c9cfc","impliedFormat":1},{"version":"40b2d781df7b4a76d33454cb917c3883655ec1d8d05424b7a80d01610ad5082f","impliedFormat":1},{"version":"703ea2acd8b4741248897a5709cd46e22fcd9d13f01ff3481322a86505f0b77c","impliedFormat":1},{"version":"e09c56f8c446225e061b53cb2f95fcbbc8555483ab29165f6b0f39bc82c8d773","impliedFormat":1},{"version":"a571973bc2e34c898c3202452f957e6757f0c08cb66d50d6785f4a9042d74bad","impliedFormat":1},{"version":"a6a059446e66fbf5072eccce94eb5587cef2f99aa04d4bbd4ebe63d0a6592a4f","impliedFormat":1},{"version":"6e2533e27eba5ff02d6eed37e0a7eb69ae7982e0f72fd8f74c90ab201f061867","impliedFormat":1},{"version":"9c10dd3d85b7620ed3105b3f018125d0bb54198bf5847e39622afb22c651a1ad","impliedFormat":1},{"version":"58c62e415bf74b1423bf443587e33d7951a8bf19d7b03073f26e86d9b43ba9ea","impliedFormat":1},{"version":"dd6ec67ad168e92b8bf79ba975c6e0be8c60e403ba704d1c1b31a6059c12f967","impliedFormat":1},{"version":"bcaf468eea143f8e68ca40e5da58d640656b4f36697170c339042500be78ac5d","impliedFormat":1},{"version":"92de961d1db5fe075db8c0b6414a6eec430adaf9022465fe9d0a23f437aafcb3","impliedFormat":1},{"version":"7610ecdae59cea1a8db7580941ebc24d522d8ac1751ce718a6af22d41e1a1279","impliedFormat":1},{"version":"3e55a65822875e85f96e444b79787f619b9473e36c143dedc6d5441a2544b8ab","impliedFormat":1},{"version":"d49275f9098a8e7a5df7c55321b0242cef0bfdde51018b7b2709c4dc74917822","impliedFormat":1},{"version":"b25556c4111afad4cb174aa4674db2e5b23a6b191dc6a3e42c7c3417ea446a68","impliedFormat":1},{"version":"f9568a3a6c74013aee8b09d73ef04175596b51ce6f5d9dcd4885418170fe9306","impliedFormat":1},{"version":"bd3910ccd4fcd05ebd83fbfeb62f5a82a6674c85c6c0e4755c16298df7abe4d7","impliedFormat":1},{"version":"7c0541d0addc3007e5f5776023d5e6e44f96eae0684cdabe59ef04f2a294b116","impliedFormat":1},{"version":"70137204b720e4dd1b81260a70578f0f4f417c53837f8a13859b2f58e20d7150","impliedFormat":1},{"version":"b28b6875a761fd153ebf120fecb359660de80fd36e90c9b3d72a12318bd5d789","impliedFormat":1},{"version":"56d092bd6225f6e67d9acab3fd65ce0a4edb36cadba2f0370e67322e2f6f1bc8","impliedFormat":1},{"version":"a4709d5d466ad8dcf4ddccb905ad95348131df1616f964185be9739f96526bde","impliedFormat":1},{"version":"73b0fd6255f24e82be861f800a264f0175984062b6ccca3052578b03ed6f397b","impliedFormat":1},{"version":"4a3f7c6f02cb01eb7a9800548b41cfa03a57e476fc92a72869983f37efa8067a","impliedFormat":1},{"version":"ee428614fde0db27939b30094352fc85b58d1bdba6d63be6d8b2aec5929fd9a2","impliedFormat":1},{"version":"bc0b17d3fd0e34083fbc886367ed53563b569d1d05214f60b21117e2dbfb7fdd","impliedFormat":1},{"version":"c1cc2a1ac9ae043fd05e07193d408c0f0bf4628e54c19871621ce1049d4c200e","impliedFormat":1},{"version":"d005c21b9c42bd1ccde99f183dc2d3c992be407aa63c4ba3371e4f81cf36b2aa","impliedFormat":1},{"version":"9a7638d62db8cfa1466093d7d413fdf85c5e4a7c663ed76f2bfc8739c8e01505","impliedFormat":1},{"version":"e608cfd08fb30d374ba4b822fb2329a850d515bee8599117c9f53e925f7a548c","impliedFormat":1},{"version":"c338859b98f8a11f80e3e47e33767299e7a4facdf0870c01c8694fa8fa048d16","impliedFormat":1},{"version":"4f64016165565f743356812e33ac22f5ef91891738927e413121f502b186210c","impliedFormat":1},{"version":"b113e9770d5be136c5e2add9e6cdf40d85051762ff2391f71d552975e66b1500","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},{"version":"953cbf62815703fa9970c9cfec3c8d033da04a90c2409af6070dcc6858cf6b98","impliedFormat":1},{"version":"68065ce3af3ef8599af8338068cf336be35249eff281ee393186a0ef40db3abf","impliedFormat":1},{"version":"5339f84dfcb7b04aa1c2b4d7713d6128039381447f07abc2e48d36685e2eef44","impliedFormat":1},{"version":"fb35a61a39c933d31b5b2549d906b2c932a1486622958586f662dbd4b2fe72e6","impliedFormat":1},{"version":"24e2728268be1ad2407bab004549d2753a49b2acb0f117a04c4e28ffb3ecdd4f","impliedFormat":1},{"version":"aff159b14eba59afe98a88fe6f57881ba02895fb9763512dda9083497bdcd0e6","impliedFormat":1},{"version":"1f2bddea07543ccda708134cca0600b4d9ac9bd774ec1ede0a69935b04df1496","impliedFormat":1},{"version":"6e8997d08f6798d0a9416df24312cafd084e6184a205d9283eba95ef56f8ef8b","impliedFormat":1},{"version":"ac6968717607889d24d6e407effb48dd5af82005925b4725b1d9eb52a8a047e2","impliedFormat":1},{"version":"26080058b725ac0b480241751255b4391f722263778e84e66a62068705aafd3c","impliedFormat":1},{"version":"46afbf46c3d62eac2afead3a2011d506637bf4f2c05e1fd64bbf7e2bb2947b7c","impliedFormat":1},{"version":"84d02daa32c7a8bff4946bbc7d878ffb7114c19879f7bfceeeb39bef48e93c42","impliedFormat":1},{"version":"29723e0bc48036a127c3b8874f3abe9b695c56103f685f2b817fc532b8995e33","impliedFormat":1},{"version":"991cf4ed946cdf4c140ccaad45c61fc36a25b238a8fa95af51e93cb20c4b0503","impliedFormat":1},{"version":"81ef252ff5df76bccf7863bb355ccbb8af69f7d1064b3ef87b2b01c30fb2c1f4","impliedFormat":1},{"version":"0f17f5f14a5f53e5709404b5b59fe816eaad15a469412b73330e6f69834234e0","impliedFormat":1},{"version":"01edea77be9c2bef3a5f3fc46324c5e420e5bd72b499c5dec217c91866be5a99","impliedFormat":1},{"version":"39209d2b85d238810ef19ab3905c9498918343bc8f72a1dcae7fc0b08270d9a0","impliedFormat":1},{"version":"92a130d875262e78c581f98faa07c62f4510885df6d98213c72f3b83a1be93c1","impliedFormat":1},{"version":"367b818a25afccdbddf932a62a02012869f59fe66d359ff4aca78a7c2bb680aa","impliedFormat":1},{"version":"0aa14ffe353b8bab88046e64a92efa5cd039f095759fe884d188702956e2cba2","impliedFormat":1},{"version":"68d3eee1d509f45625e39ba325a72c6ce1d2116e3d5c3a40f513472e66622e02","impliedFormat":1},{"version":"4e5f1234308de112f09920e0a0b99f35a9780b3abbc13a84445f32a490d0bb87","impliedFormat":1},{"version":"9ac0e5aea87c4a1d37b4677145e9a75bc8e13bf887bd1148a4acb21ab7398d00","impliedFormat":1},{"version":"625b802ecd18feb6a9d69ef8ef58d6c08c9c9022b8105cdeaa3fc77acaab5667","impliedFormat":1},{"version":"2ac33d7f6999e0fb363d1e483d80f087d3e7d712ff6fcc2b4f7b18b5dab92f37","impliedFormat":1},{"version":"195749d135be639001a554e4b4025b66b3c5c627d90b68266c14399bde120cec","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},{"version":"60167a5ec34c6cb30ea5f33106339f6bd031169c3a571975e8bd003fb9da70ed","impliedFormat":1},{"version":"a967fd380f819ec5249ed49a2e96ac242397fc60f386d872a75a4536f59bb020","impliedFormat":1},{"version":"69dc7b44b233cc08e4d8712ecf69d4c301356cec6fe762f6c0758b9b10d9bc86","impliedFormat":1},{"version":"7010a1d0fede9fdbd3df69df2a08e79cbb96a49a0e2fabe062216c5c3c551433","impliedFormat":1},{"version":"c46bfe2085597ebcc05bf6f23b066fdffd98cd2034fa982b234c64da05a1d4d5","impliedFormat":1},{"version":"681f55bf1e226cf601956bc9e39865256c3abeabc03a3c5e4a5d5546b0e56eb0","impliedFormat":1},{"version":"398d3b753d3741fcf0b069a6b8a1315fe527e328e84160119d81d8425f798c33","impliedFormat":1},{"version":"a02124c0ee850443005ca9a4800b743c1afed28f9752afaf8c95cac6baf83877","impliedFormat":1},{"version":"cd6e8fbdcfddbca7d72509f987cb6b3bd5a51a25334bb28a71ad53ffc4a7b0c8","impliedFormat":1},{"version":"554acf414793d442a5602055e4f8d0b83edbd0e4a977bd4a90fdcf7b0b1fd898","impliedFormat":1},{"version":"52e2d806ccaab9371209f3fe262252e44cb4f79592e21500559bc6261c534d1e","impliedFormat":1},{"version":"b123d189617fe233217ddb7c8c0fd06b4581fdef69e77d63728d3006499f33eb","impliedFormat":1},{"version":"3cd4c2711fd3496674d4267305e67b69a5a42caaeca1b45c294a1de5ea3897c1","impliedFormat":1},{"version":"117c9403487420a1fa5936658fee58de9d77c07b2c7510aba24e9dbf92e9b622","impliedFormat":1},{"version":"3c201db56028e893e4de5bd9d048bb804daabcf820be6bf96bb5905a0ffa1024","impliedFormat":1},{"version":"a29d69c75a5a7b1d451b30dae820b745eb7efb5cb74abbe546451b1185c8b339","impliedFormat":1},{"version":"f2bac29fb3514f46c0c1ea981340c674098aa74c5fffe1e7630d31c177686450","impliedFormat":1},{"version":"b5499e8d3e39a1523d4d12718f77f1e2dcfa3f825f67898fcb90a9edb680e43e","impliedFormat":1},{"version":"96fc3dae2f110377fb32c48acf3efcebffd12df01c798466287183ade087719f","impliedFormat":1},{"version":"a64e1342f2c32cfa1b9da3f5282b2185dbdd0989e30b48ad07962e7771244a18","impliedFormat":1},{"version":"cefc795bc727964f7ec2991703fafe975a0b265ef4938d342f4dbd93ed7a5f86","impliedFormat":1},{"version":"0d390748eee58a959b560b93da0d6261a1d3ff87a246f459d8b3e7a20391b62c","impliedFormat":1},{"version":"fb652d576e7c73b08eb6f9a4f322aa841c1b857195745e6ca436724c179de2fb","impliedFormat":1},{"version":"d192c4305f2add7ebbe22e9328f788b341fcb66e5ce4bd23cd2b1de097fe890f","impliedFormat":1},{"version":"925c28c5e11d57a08d05059a147f7a91c0e447ec27726dc8b79655fa1ff05301","impliedFormat":1},{"version":"8c4242fbbba473b36879fb5c23f29482335ab05e4150f06c22edae4e44c894dd","impliedFormat":1},{"version":"2681cb7b5767f12041662d1db8c0994012ef98c8b41d26d2388497adfcb0cc64","impliedFormat":1},{"version":"4ac4739a6edf9fbd20a18b5b675b08291fc860dbf89784fbd85f6f303df8047c","impliedFormat":1},{"version":"1840ac8a2b18e0982da57d80a09f5e5ec0e38d18afea7ac4ce069d9bcb3b3cb6","impliedFormat":1},{"version":"681c823b35bcc451c501382a6ebecf0b09fc792d83efa1279a005aa62285ff7b","impliedFormat":1},{"version":"cff0422eb92de48515743c3638bed6c73cd7d1312513df94030dc4c41090457b","impliedFormat":1},{"version":"d478539c608c8ec78b2d0a7817c29efab421e29d80b641ccaa074a96fb577f04","impliedFormat":1},{"version":"f97e2644e1e7763c6332e1067695ab3a2e51c06baab3985507da46a6e1200958","impliedFormat":1},{"version":"e3c8c01adb8d63c65f122778d8f63911437024ec3f4733622c510273ce3b8823","impliedFormat":1},{"version":"a12603dea0828662dc971e86e1169ec7b243a606e460a04ba1e01051c4f52f36","impliedFormat":1},{"version":"b86d0df4f4c8abcf28e629ace836c0f6423ea1509853178f56c6329b2a26ccfe","impliedFormat":1},{"version":"0e62d4ab3949b67c679fd23b39e55ed9f19597c0afb21d8ceeaacc4716ed20a9","impliedFormat":1},{"version":"04771a6db3f7b054afac1bb6d540d18efdbba7439415d4bbb759b8f39f1f5377","impliedFormat":1},{"version":"d0cebbf45fa0f4b492284e0be4b3cbd1610f05e33ed201ba8937b1c147bc974d","impliedFormat":1},{"version":"6a1b55618aef82ea35596613159dd7cd7805b07dbfcdc8fa288e41745f3ec98c","impliedFormat":1},{"version":"572fa17bfde079d0d5159c47702addc4f2e0060f8abb0437a5ce9d451473f53b","impliedFormat":1},{"version":"9c2971938ec0bb237bc330aeb026d82d1e7ed0da7391c8761263e717875f2b21","impliedFormat":1},{"version":"8db1b5e284bdd0df8797b1f70406cc7dd126587fca77be01e711910cd04103fa","impliedFormat":1},{"version":"31549213d7a9f3cf3aa96845b5860144e3900997771713c689d60276b4786664","impliedFormat":1},{"version":"822a8277cc73b8d96ce336ff56a1072c9f66485a64a562cc0f29cd7e550a87fa","impliedFormat":1},{"version":"a097e76e2b3a5a7ab5db2db9a5787dc4a3bccbc65228951c243fc0d58675467c","impliedFormat":1},{"version":"e996cc50e5bae651f0565e8499873d38145d8955e521e758426ba73758eb3bf5","impliedFormat":1},{"version":"8ad61067b3ba801965c04c2815c231847631a61c4da2b1987500b5aca6db161c","impliedFormat":1},{"version":"aadd40c020be82d01ba79caf35e1169bd3cd53bb6b999a4ddc5f00c9db847a46","impliedFormat":1},{"version":"f16df5990c987807a817d3d4218335095cf2783a1a7521e2871e64b8d0f6648e","impliedFormat":1},{"version":"81320fc91eea90e06f8781d5f6bd0d3990e0cc7a50e766a78b56e0a1cd44a332","impliedFormat":1},{"version":"224f89650a8724c67f36b98b5e5325d4a224cadfb9b387bf076adb76437443c7","impliedFormat":1},{"version":"36338d4f4ac9768967f2cdc092734373a3d0eb70b808def5222765825dcde534","impliedFormat":1},{"version":"3bc987bed2ad368f08e5e0b05148783a46621d3386c4a123af145d12082a3850","impliedFormat":1},{"version":"27ae73c6c31329e8268cfadf194e127a92b5c6ada1164693e784622576b94f81","impliedFormat":1},{"version":"0e5a227256596eb516def2d3ab823c2321cef34c28cacbb559c924b2374143e7","impliedFormat":1},{"version":"718d456c2624bdff0b7683ed67041995519f657b98f52b7890f11cdccac36f89","impliedFormat":1},{"version":"4b2e887e533849e74020b1c594604e990dd8fb3abf693b1d82c96d5079b27ea8","impliedFormat":1},{"version":"2f4f0059c74e8ecf9a5e962c6a8fc3aa258941dfc18343f50e2efc2923ea5c56","impliedFormat":1},{"version":"92e0c20c54604feb984ddc519b56460c61dd9b285fbc30174839286545ddf848","impliedFormat":1},{"version":"54a336776a1161336928376c78fcc9deda2b5890f9008631c7aea700b6727bb5","impliedFormat":1},{"version":"14d18076cf79b3c6ff515123a71836644f50c2956312a2ffc960028111489316","impliedFormat":1},{"version":"632e5af6af4bc7c3977dd4782ad03b37c0229806de4eec9666fd79841b6a68c0","impliedFormat":1},{"version":"8c3e1c25eff5752f6642204351420c99844c1b2a73aa0dd5f81b315cf38b32b0","impliedFormat":1},{"version":"2e51565212c8cd03202a9492d57e93c431041114762dedf69ac3be0f62e7fb20","impliedFormat":1},{"version":"06f894fea5d5bb81048440482e750f7cbd4932cabb95e4d485cb0b9be1d3eeaa","impliedFormat":1},{"version":"b617019b6a719ce7a920e1909f3e62be8ac6a914746667bcfe10d8f350cc7089","impliedFormat":1},{"version":"cecf293195c298e093742c82e5995cbde08af76d41f9440224de7f83e077c4aa","impliedFormat":1},{"version":"575ce340b9a859c0589a04305dd9846184710eaee71a4effd071d5d406377ffd","impliedFormat":1},{"version":"8c08e433b7d3a998a2cadff9d54e3da445c26a13815f0c2fc8e7f3fdc7cbd1db","impliedFormat":1},{"version":"ed872db0e2a3622d6d92d9b110b7165d8cf23d44b6993783328e0088fdc6a33d","impliedFormat":1},{"version":"e34adafe9efbbe6d7af7e346ca7df8bb2e77a3a851d8207ae6199357b903b192","impliedFormat":1},{"version":"42b2b30e00d58b57a4204ba1118422e1bf83634816f950869e7454472fab4e35","impliedFormat":1},{"version":"958fc2e0308e04a48b1f3a793d66aaec672278fc1ae0f31efb89febb84dac1a9","impliedFormat":1},{"version":"4e771fb2e12b05ef96d1a215adfd119643c057ad3e97739f85d1d7533a18caf7","impliedFormat":1},{"version":"02ffcc56317b8d9ee19f209b7cd8e037074ab508a1ad06754a2b1f2e77911f66","impliedFormat":1},{"version":"ab570c33c53acbc83ad2e24433a433fccf12c28389271cf3f5c44b871f547b2b","impliedFormat":1},{"version":"8d6c8608ae5cde40483ab309156f5db32bbb2ee86486f7cf0f1d85733fd39f53","impliedFormat":1},{"version":"f4529b8473a9022e02fc7a4b5f92e93659d1874809f2c7b38fc367441a93a339","impliedFormat":1},{"version":"b92c58600fd18c32ff687b783eebfd0796cd995e5965a86ca17275b523d1fabb","impliedFormat":1},{"version":"ac46a79d9cfb4df1f024d98c886e4a47ea9821a2a467e4cc9623d96b8f753766","impliedFormat":1},{"version":"ff8b5fb2bca480984f53b064e53a0f3ebf4400c0a1a4b53cede4f77de95002ed","impliedFormat":1},{"version":"ab1a99b4017155d8040b5456cba7bfef33bb767da1eb8e4ca369d5185810f349","impliedFormat":1},{"version":"0c4286c0a84c20e05c1f5cda5add26956e696aa817b33d45ee2458eecb3ec375","impliedFormat":1},{"version":"eb155438a82c3e7228cfda102f1d6e1ab4652aa83cb8ca01d8afeeb782803f1f","impliedFormat":1},{"version":"1f0012e2fac75a6ef2406eba7a9ca9ea16c553947583d663eb726c97a26880c3","impliedFormat":1},{"version":"54ec65aad2d7775fab779d01763bf55d7e768920d68f7a05946901eae49ebbfb","impliedFormat":1},{"version":"ae1099212ffebd47c3f0e51162fb0c1e5d4b104421b8a66edddbdf920899334d","impliedFormat":1},{"version":"9cbe0b736b34de9fcf54ba1db60133cfcffd413bc87ad008384ec6442d4ccc14","impliedFormat":1},{"version":"3f713c2dd9b26d5e3e475c811a8d7ce219f1346cbe46dad4596dc6e1d8d35cf7","impliedFormat":1},{"version":"d538fbbf8fd0e073bb11279bff9a37deddbd192513362737f98cce00f2fa3c34","impliedFormat":1},{"version":"a7d869e34e5b3201695b1fd231884d163cf41d24975e1e6a407eedc31d7b9efa","impliedFormat":1},{"version":"d5b6042c1806e7f8ef08b9be9cb72ee50cb7b991a28efbda30a61434b1610216","impliedFormat":1},{"version":"8d30f52bf78ba0b0435286cfa393e2f62077d64fb9536eefa9cddd62c1252884","impliedFormat":1},{"version":"431e627e173edc76477913c8fe99dbbb96f8fde04aab57f133553f359d4eb20e","impliedFormat":1},{"version":"2d37f551e55c0ecdc324b7af4d2ce823026a3109f64d8c4f5d9fb050a01460da","impliedFormat":1},{"version":"dc6e89155b11ff755ade6d9eb497d247f1f7beaae87f64332e2c1e5ef05a3cec","impliedFormat":1},{"version":"4e2fb39d94dac2785eeac18a5d53df1f73bdbad18900fa22e46bef5cb3ad789e","impliedFormat":1},{"version":"4791a0848602785d8f5d08ca6d4083c0b5b88415f9b0a3f97f5c3d2226d34a3e","impliedFormat":1},{"version":"ef71f578ad24aa892b5f52e9e5aca43fa56434ec07ce5d62423a6499c15708f7","impliedFormat":1},{"version":"176d770c6577804c34df935fa0d0fc3f60396ab125fbf20d95698e35c08bf077","impliedFormat":1},{"version":"314c4b1b0b4977f9f55a5854a6c6effdeba1342edbbb89e7492e550cc38ce4cb","impliedFormat":1},{"version":"b03941a397cbaac2a62ea7094ca56acd26e90d73865d750788a439c68c75dfdd","impliedFormat":1},{"version":"67d0d710465d9f4e26c3e55865d110596b95e84f7598164ad3046345f422931e","impliedFormat":1},{"version":"34e8ade0345445320e23a677a1011f78efae36e8653446fda313b38957865dfd","impliedFormat":1},{"version":"1da306aaadfa696c00e66e8d1cf265407713e8041bcf2e563f796eb8f9563ae7","impliedFormat":1},{"version":"81326da769be04c36bb9295ebb8396de5f4779e211d611ced7ad9659534dbc5a","impliedFormat":1},{"version":"465d478cecb928a2cd1b3ba3a07d1a2837cf3779375d5fa42fb46e9dc1fa4a76","impliedFormat":1},{"version":"34b01c29fe2c5d7548166e1348a19db73b3bcbeeb67979d39d5726f6268de8b3","impliedFormat":1},{"version":"a0df4b1e4af6007211dbd710098e3ab753b119886c94ef877730644c66c166d7","impliedFormat":1},{"version":"b6230e2101bfa9166c16d6480ecdee1275dbc1d8c007a12a12d504005897eefe","impliedFormat":1},{"version":"0abbe2facfc54e35a09e6dad947c6cd3ead79aa2b16963624f070de3cf1e6e6a","impliedFormat":1},{"version":"ad6c3346012990409402a879aa4829fd51dda769d9a0a4d728e51d8a1e65b799","impliedFormat":1},{"version":"6ada73e1eeab1ab75456d89b63691a65ed730874ce9f10d973d2b3d7c1833690","impliedFormat":1},{"version":"a7094a8c44e0199aedd3b2e8460a4849e68c37e2ea7a4a8011f9fc76db8e5296","impliedFormat":1},{"version":"37d03f5a65cfbfc976c012e329d70a286f4835cabd6ecad549718f2dcdf93e52","impliedFormat":1},{"version":"fe18303b37f19402a451b3162d04e4e49b33b1314fcb9538210c3469180d9555","impliedFormat":1},{"version":"71b2749ddc97ea329d22f141bd0d2231dfbcfd0c77b673fc54f22a2560d570d0","impliedFormat":1},{"version":"e73fd5246990372158691f84c5b1d8a01046b2a725c882e5e89a93f3442ec391","impliedFormat":1},{"version":"771b56a29c1f7263f09e0fd68f0ec9e2c1fb0aace287345e396a3e465f2f19d3","impliedFormat":1},{"version":"45fe1142e46f1ad33f0afa6e0b8ad354f599b312549be5a8ecd393d0d0bfde65","impliedFormat":1},{"version":"92fa6c066987a4cea71a0ffe9fbfb683b45b5300ae9f5584b02592f3a27b3ed0","impliedFormat":1},{"version":"a5c018512673b7e1ff6cae34d14713e89e94479fff33c14696f7e2153e4f4755","impliedFormat":1},{"version":"e459c1d4e7623343476da01e7e4edf8290bca1f1315287559137af5557f3ba39","impliedFormat":1},{"version":"5981c27079aeb53fb96829328f014ae7a5a690cec8b1c93815bc23e6fe7189e7","impliedFormat":1},{"version":"2b69fbd1f361e82dfe9bbb786133f0b58845c79d7094fa5790306e5ec271e5bd","impliedFormat":1},{"version":"c10c88f1daf9fda0323c9205ee7a0fd63ae4f67320d3b673468242d89061a459","impliedFormat":1},{"version":"a68ae02c58a9b6ffb29eec100c886ce8eb80201e454fcae79c299bc2db0b37d0","impliedFormat":1},{"version":"d764056449904a73c1f2c6f8c2ae79edb0d1cc799eda5fc3a60a30fa97b94749","impliedFormat":1},{"version":"7e73db72fa480a32afd616f2ab23edb4702316c7b898bd2ba6b5eff6e8ab9412","impliedFormat":1},{"version":"916e84931e102ae5091d09c1ac5aeb2cbf5458f11e0057b23157f5c062254999","impliedFormat":1},{"version":"226d624e4776b837abb8c1eb775f27fc265d7ab4c7473bb48f39c535cac94285","impliedFormat":1},{"version":"4173e4d951eb16efa7943068fcb21aea81bdf4c996dd047ee78625874836dad7","impliedFormat":1},{"version":"9c219a351e0e80e556380fb3372a3fd2c54fa3f1bd9574710ab4e577ea26063a","impliedFormat":1},{"version":"ac18a2d24df81dbbb885e1601fe94fb9a7ba42f04c98df04d16e69f4ca9ee9db","impliedFormat":1},{"version":"8a9b3c96ea397dc289581c1aa4f045cdd2f8a55fc5d917c56d40370a83eedc5f","impliedFormat":1},{"version":"5b289d52c1414fc6737fc451b85fca5f70ead22c2294f5a9484ec1ffbe233a83","impliedFormat":1},{"version":"30af3be0483da0faf989c428587c526597b80c1e368d85281a3fbc95e360987e","impliedFormat":1},{"version":"95f50c554cc9bd129a38fc61cabf1b0b56851c3b4db34177c909c2a03d3e2b9f","impliedFormat":1},{"version":"a2b35bc1378fbc1443e1678fb3ab6e8023269500146537b5a098e8db214327e2","impliedFormat":1},{"version":"4428a7e681f6ee541f90b54d6422325fe26263c333b27293203ec8cf98da4dae","impliedFormat":1},{"version":"cf25b77288f29a84be0a436ea2f5b8cc00bc06b6e142ff975f60a2252a6fc18c","impliedFormat":1},{"version":"9fbd375bb1f6ca5490ddc37165bf761f2fe89d93bd0de57e5bf3dd12cf94baf4","impliedFormat":1},{"version":"fc291372c7992060d4222381491902295756466f44fbc6f0889a6d4e28d0b937","impliedFormat":1},{"version":"6ca9bc3ae7c4fabade7fbf2659731cecce54a745d286d69755fa2496c545456b","impliedFormat":1},{"version":"e6a2e3b9fe781537a0f91c301de9961bebdd4b33187f98a582d694177acda462","impliedFormat":1},{"version":"27316752e6998304fd7db2d67ba0b26d8029b6f503b3ea89efe845c39fabf9f9","impliedFormat":1},{"version":"4add6412e18d83b5bd7c65dd07c3a1544bf6b31baa22473775ce967d685aca27","impliedFormat":1},{"version":"8a7d6fe5fbb7e37ebb0bb81241d59c4a806cbda97a5f1f15af3fb9c903672598","impliedFormat":1},{"version":"74efaf42f5842c4c4fb398d2f74d59a86792320c53df9f63dbe00ba8b24b88bc","impliedFormat":1},{"version":"08603c7d3cc9cecd1ac97cc1baef2d90b116759b541eb4181109bdabc64788a9","impliedFormat":1},{"version":"64068fb5c2c88a2b7016d34b02b03582e759b3f0ffb89e9e07f968838275a564","impliedFormat":1},{"version":"1825619ec278edd94785af65ae589289792cc6db662f63adfddf2a79f6bd4233","impliedFormat":1},{"version":"3c63b1b5ea4b20822405d6b7a8ba96429ee2b400367b61c82507f80be6202289","impliedFormat":1},{"version":"cbd2ae79794fd7bcff66e343af71f7e174a6eb95f17a8742b1ff62c8482f7cf7","impliedFormat":1},{"version":"e36a635d498defc980ef7b96eb5cfaddc11eeda2bd0de7ae249adde06b2d168f","impliedFormat":1},{"version":"5ebe388148630bc63525fbf1f408370c657ae888abe179001e64711b0dc8d663","impliedFormat":1},{"version":"cda3e014cbfab2a60d7e598a50f90dd30c7fcfeaa73a60dd916507bd9965260e","impliedFormat":1},{"version":"432ba4ec869745ed9de5ba6a12c76549dd76ae0a146faf0bfdf35ffd4a4e6ea7","impliedFormat":1},{"version":"a88437446e80a492b1c4d3f5c9fff5d80b5c5e52754cbb3eb2cfee3d3690ca94","impliedFormat":1},{"version":"bace2dc66c954f2a81c641fa9f0dcb1b36ddbc6db3635ea446ee10c47ada15f1","impliedFormat":1},{"version":"c5c7f25f198dfc5ffc62fe2e8ef3f25647bf21070a5f05ac200748c83ab7da4f","impliedFormat":1},{"version":"60390e7b89c19d160b3bf2c854a9e06414d001debd9947a5db54623004a4be0e","impliedFormat":1},{"version":"5909d075463236fbe7fd8a785248203f6f32d73b032c774d5018adc3c44846d8","impliedFormat":1},{"version":"c08e7bfca5a8bb244cad7689ddf7546cec8a5bc5367b18bcadc0628ae927f797","impliedFormat":1},{"version":"b7506549d0f8ea4c74e4b4b4263932090578f193cb37bf719b44c5f149a934f6","impliedFormat":1},{"version":"992aafb2a060c3e2099941c7128d88aeb9bf8f5fcc594e9fe561d19003b5e4be","impliedFormat":1},{"version":"9874f63b3f3167f344d2a30047722b409e2915a502d9b9a50a91ab1a23b49623","impliedFormat":1},{"version":"b55dfdbd1e893c0b6cf91dca75395f4bd8aab8e624007f9fc70d650d8b340137","impliedFormat":1},{"version":"1740fa9c57b951441b1db4478a7f6a82ccec9de1de650920cbce74ed10e08eba","impliedFormat":1},{"version":"6948d2c91da770f73b9a6459c3daf8ab23d80bf7b70e215551ca3219ac041b68","impliedFormat":1},{"version":"32dd24f732e9efb063532a95a730e6bd68b7c8e54a3d4f026fb4a1fa71d115d0","impliedFormat":1},{"version":"e39c146a2b8a3f48452973628042cabc94bb2893488bd6a79b3e04cfcd89c729","impliedFormat":1},{"version":"60f5165cd2492544cf497f3eb4e8a75fa340185b4b98b8aa87b62853d57d1549","impliedFormat":1},{"version":"fe9cc3f1d04297f8d6995789f4df2b531a1ee7f1d0c8add6371281f4a31d195b","impliedFormat":1},{"version":"66b9b5e8625e6ada62c4d070918350dd10d01fa260426674448b25ffc7009488","impliedFormat":1},{"version":"0d25032744f0015a340edeb2e84e685a4c79ee1c9066d761d7fb0affbc2dfdc3","impliedFormat":1},{"version":"dbade843dd62f6241d1a30d944dd80152ddb554ea86a2778caf0f3ff990402ed","impliedFormat":1},{"version":"c5fe75259bda7aba824205a9138ea7f3bbc47d20ce777cea79d40930685b6ac8","impliedFormat":1},{"version":"3d485a48053321817c3ce51afa41c07b180b462274551d53c5a4927a5d052038","impliedFormat":1},{"version":"9e2f9ee99f0e172ef91af1d571e09743304b3b2430d41a8bcab357b878114757","impliedFormat":1},{"version":"5d6257ebe252d97b3d6fe3e0a49a0f148cd7312849f5f1d6f6b7265d3d72b5d2","impliedFormat":1},{"version":"2c60950709e37e95cc5dfa2ca27c5da53521ee09c254f894f8d91ae8717e7885","impliedFormat":1},{"version":"8bfc090ffec588f44eacbd6714f798a8a0c3dc1b02855f5e12e567b4f161b30b","impliedFormat":1},{"version":"b302d3e1a806fc890c324ebe90dfe07a780e973267c66bd159d0dbc1f6e3d055","impliedFormat":1},{"version":"b1c627fa2a4cc9199f937f4d35ccfdef2efd6ef40d5525ffd384acb29cbaf66e","impliedFormat":1},{"version":"5211c6778aff2c045d7fb44236ef9b91ab424ee916f6575901dd0dcd9d58857a","impliedFormat":1},{"version":"39959ee712b3455499af3b1c95bbfc9ea59d584d5af2b01dcde120fe5dc6fceb","impliedFormat":1},{"version":"bc27582d90eaa5a793cc4f3e27acff890eab95641431c263144f3162bbd4a8bc","impliedFormat":1},{"version":"2992d19be476415c0296bd548764c20fc9cac2876e45abbbce23dafbd65438d9","impliedFormat":1},{"version":"dc117b16848058e94c39b68cddd38b36be885a63a0130097e6e992cce6ad9bf4","impliedFormat":1},{"version":"11bc3d6606ca11c982d848ff3946f1d978360e7861dedd8bb97348a21b4a8ad7","impliedFormat":1},{"version":"989b88698577f76069fe791b224d2157a0205aa2b029718dfd386b7b4706fa0c","impliedFormat":1},{"version":"fab62208329b9bb74dfe558a6b05f802bceda19274c763efd8ea0b47cb68925b","impliedFormat":1},{"version":"b7126f4bafda5e7424504458d53b298d92139de65e34859ee67f6f8f1d43bfdd","impliedFormat":1},{"version":"ec90d21f6239438395a48b16da2a9eefc914401ab0c4716e68a970990f802b6b","impliedFormat":1},{"version":"1a4ffc0b4026ed85a0e74d61887e7c105f2aa3e92a08aa6fe8c9fecc4e158532","impliedFormat":1},{"version":"96b88ce757b76ef12b429a4815badd3ae2f5766e051203118446eb87823ff501","impliedFormat":1},{"version":"3cb6f56325963eeb5c3f6554c64dbbf8fbfd037a0f912453db4c654091692304","impliedFormat":1},{"version":"74781fbd0420eef8eecdd7c2f912cbe3b97fda084fea597215bd319ad0889b40","impliedFormat":1},{"version":"0b29f27b3b0d6a5158bf1a791a3be2620a73484b7b4d5086dfbb6b1ac96ac699","impliedFormat":1},{"version":"9b8a1c3f568276b8cf88cd80d8f9dafd1bc40dc1ab83d6d26fa0fd8b1c0d3b63","impliedFormat":1},{"version":"750635d38fb66b2e7fe901509aa08d10e2c371c69a800b9b5c1103008509de19","impliedFormat":1},{"version":"6ecc423e71318bafbd230e6059e082c377170dfc7e02fccfa600586f8604d452","impliedFormat":1},{"version":"772f9bdd2bf50c9c01b0506001545e9b878faa7394ad6e7d90b49b179a024584","impliedFormat":1},{"version":"ccb26251684230c0e18bdc9fdffa313a9f92ba9f1e1c590bf4638cd5ca08b3e5","impliedFormat":1},{"version":"7467736a77548887faa90a7d0e074459810a5db4bbc6de302a2be6c05287ccae","impliedFormat":1},{"version":"39504a2c1278ee4d0dc1a34e27c80e58b4c53c08c87e3a7fc924f18c936bebb5","impliedFormat":1},{"version":"cd1ccdd9fd7980d43dfede5d42ee3d18064baed98b136089cf7c8221d562f058","impliedFormat":1},{"version":"d60f9a4fd1e734e7b79517f02622426ea1000deb7d6549dfdece043353691a4e","impliedFormat":1},{"version":"ec05ccc3a2e35ef2800a5b5ed2eb2ad4cd004955447bebd86883ddf49625b400","impliedFormat":1},{"version":"403d28b5e5f8fcff795ac038902033ec5890143e950af45bd91a3ed231e8b59c","impliedFormat":1},{"version":"c73b59f91088c00886d44ca296d53a75c263c3bda31e3b2f37ceb137382282be","impliedFormat":1},{"version":"e7aa2c584edb0970cb4bb01eb10344200286055f9a22bc3dadcc5a1f9199af3e","impliedFormat":1},{"version":"bfeb476eb0049185cb94c2bfcadb3ce1190554bbcf170d2bf7c68ed9bb00458e","impliedFormat":1},{"version":"ae23a65a2b664ffe979b0a2a98842e10bdf3af67a356f14bbc9d77eb3ab13585","impliedFormat":1},{"version":"2db00053dff66774bc4216209acf094dd70d9dfd8211e409fc4bd8d10f7f66f6","impliedFormat":1},{"version":"eccf6ad2a8624329653896e8dbd03f30756cbd902a81b5d3942d6cf0e1a21575","impliedFormat":1},{"version":"1930c964051c04b4b5475702613cd5a27fcc2d33057aa946ff52bfca990dbc84","impliedFormat":1},{"version":"762992adfa3fbf42c0bce86caed3dc185786855b21a20265089770485e6aa9d3","impliedFormat":1},{"version":"1dbdb9a095f0619197019e870f3481a91e9281c77b0092a19ddfd1903066cd54","impliedFormat":1},{"version":"62463aa3d299ae0cdc5473d2ac32213a05753c3adce87a8801c6d2b114a64116","impliedFormat":1},{"version":"16d1ff93435f6e81a94d2993b290e708ed84131e23a70c5838d80ed77c006618","impliedFormat":1},{"version":"bd3e38cbf8108b661c591dcd03290d5cf2f2a8a1c74b045ba6b6bf4118b0a967","impliedFormat":1},{"version":"40abfc1faa2971acedb69bde8d8c4bbd4edce4af12f786e747dfb8298e6a05a1","impliedFormat":1},{"version":"4423628def6b7993f94afbddba7dd2b0668f85f6dac83c4b8f8a578ee95524f9","impliedFormat":1},{"version":"f689c0633e8c95f550d36af943d775f3fae3dac81a28714b45c7af0bbb76a980","impliedFormat":1},{"version":"fef736cfb404b4db9aa942f377dbbac6edb76d18aabd3b647713fa75da8939e9","impliedFormat":1},{"version":"0495afa06118083a11cd4da27acfd96a01b989aff0fc633823c5febe9668ef15","impliedFormat":1},{"version":"67feb4436be89f58ba899dec57f6e703bee1bb7205ba21ab50fca237f6753787","impliedFormat":1},{"version":"75849f5ead7684bf85ee9cce7e84683ed4332fa187f8ee0978ba9df96c5cee06","impliedFormat":1},{"version":"b5325ff5c9dc488bb9c87711faf2b73f639c45f190b81df88ed056807206958b","impliedFormat":1},{"version":"cc4f5179acd0a8efad722a44c4621d0da29169e03d78a452a27f73e1e7f27985","impliedFormat":1},{"version":"a743cf98667fdbb6989d9a7629d25a9824a484ce639bbf2740dc809341e6dbce","impliedFormat":1},{"version":"a16d79b3c260525e9637a0d224d8461305097bb255e4a53b4c3d2d08ec3463fa","impliedFormat":1},{"version":"bb732222ec0c3c23753dcfbafd78ea3eba480c068d5b5c28d6f12d5bc1516cf0","impliedFormat":1},{"version":"8fc97ef271771dc6f81a9c846d007ac4f0cb5779e3f441c1de54dfda5046fe7b","impliedFormat":1},{"version":"649bc33e15b742fdfe68157f0c08dde7f7355d027515c321ca076f13c2b207e2","impliedFormat":1},{"version":"7b36f5bce24167f089e4d3601e5fde14f0a233e1a0954df5ec56ae07f36e2219","impliedFormat":1},{"version":"1c225a18846203fafc4334658715b0d3fd3ee842c4cfd42e628a535eda17730d","impliedFormat":1},{"version":"7ce93da38595d1caf57452d57e0733474564c2b290459d34f6e9dcf66e2d8beb","impliedFormat":1},{"version":"d7b672c1c583e9e34ff6df2549d6a55d7ca3adaf72e6a05081ea9ee625dac59f","impliedFormat":1},{"version":"f3a2902e84ebdef6525ed6bf116387a1256ea9ae8eeb36c22f070b7c9ea4cf09","impliedFormat":1},{"version":"33bb0d96cea9782d701332e6b7390f8efae3af92fd3e2aa2ac45e4a610e705d6","impliedFormat":1},{"version":"ae3e98448468e46474d817b5ebe74db11ab22c2feb60e292d96ce1a4ee963623","impliedFormat":1},{"version":"f0a2fdee9e801ac9320a8660dd6b8a930bf8c5b658d390ae0feafdba8b633688","impliedFormat":1},{"version":"7beb7f04f6186bdac5e622d44e4cac38d9f2b9fcad984b10d3762e369524dd77","impliedFormat":1},{"version":"64adfcc7153e9b06d4544a9037e3e7962d693d71b522311ac02807906147bc70","impliedFormat":1},{"version":"bd819bafc26c87a68f3359d6658870423844807b340c9965d5ecb1ac77e92633","impliedFormat":1},{"version":"e3c7cabc1064bac241cc7c2225b0cf5c5333198f5932f84af5c653eeaeace4ec","impliedFormat":1},{"version":"e3f0e5554c466117e304f2703a0f697a405488d919475087b83841d6bbb80651","impliedFormat":1},{"version":"3284e33a45d6aa8324691ac5737d08695e35e99b5f69fdc9ef21b3c7e7fd8449","impliedFormat":1},{"version":"03464dcca517bcfb982cefdc316afe821aae8bbe02dcd4765dfa25bc2aecd097","impliedFormat":1},{"version":"59bdc8b3c0ca88ace4d08cf703a52a14f91ce05e3d66235df792915ea54f67c9","impliedFormat":1},{"version":"46899ea33977cc9709846fa0df32edbaa610d261a7020e487c09c5b499723634","impliedFormat":1},{"version":"df2ba32dfae996beb1face17a5bba909d7fb8f6fb80ac554e7cae50e8b00a4c7","impliedFormat":1},{"version":"b4a8d900684e3167a5251e7614843bc889a307bd79226054124286743475f2fa","impliedFormat":1},{"version":"5feab6c5b5962b943354bafc10e79ab8a495786c1141358f2a44fe2108003828","impliedFormat":1},{"version":"a01edbe7ac76216dab283b8b34e0bd8a740df74e8a3b4cd86313e87261a4b27c","impliedFormat":1},{"version":"67e1ae275bb047700f4384559e596bcdc46a9e7ba1ef6ab275e60b8059f077ce","impliedFormat":1},{"version":"eeb24fa259f000f6b51a1fe89123f55de081eb2a0ef8d8f847afd67af49cfb68","impliedFormat":1},{"version":"04de5584b953b03611eeef01ba9948607def8f64f1e7fbc840752b13b4521b52","impliedFormat":1},{"version":"8b0b6a4c032a56d5651f7dd02ba3f05fbfe4131c4095093633cda3cae0991972","impliedFormat":1},{"version":"192a0c215bffe5e4ac7b9ff1e90e94bf4dfdad4f0f69a5ae07fccc36435ebb87","impliedFormat":1},{"version":"3ef8565e3d254583cced37534f161c31e3a8f341ff005c98b582c6d8c9274538","impliedFormat":1},{"version":"d7e42a3800e287d2a1af8479c7dd58c8663e80a01686cb89e0068be6c777d687","impliedFormat":1},{"version":"1098034333d3eb3c1d974435cacba9bd5a625711453412b3a514774fec7ca748","impliedFormat":1},{"version":"f2388b97b898a93d5a864e85627e3af8638695ebfa6d732ecd39d382824f0e63","impliedFormat":1},{"version":"73a3180fe69bf6e8d61f8fbbf969a3e4c9d19e1b3570768a281d371f85aa2dec","impliedFormat":1},{"version":"f477375e6f0bf2a638a71d4e7a3da8885e3a03f3e5350688541d136b10b762a6","impliedFormat":1},{"version":"a44d6ea4dc70c3d789e9cef3cc42b79c78d17d3ce07f5fd278a7e1cbe824da56","impliedFormat":1},{"version":"55cd8cbc22fe648429a787e16a9cd2dc501a2aafd28c00254ad120ef68a581c0","impliedFormat":1},{"version":"ba4900e9d6f9795a72e8f5ca13c18861821a3fc3ae7858acb0a3366091a47afb","impliedFormat":1},{"version":"7778e2cc5f74ef263a880159aa7fa67254d6232e94dd03429a75597a622537a7","impliedFormat":1},{"version":"8e06a1ef49502a62039eeb927a1bd7561b0bce48bd423a929e2e478fd827c273","impliedFormat":1},{"version":"7ec3d0b061da85d6ff50c337e3248a02a72088462739d88f33b9337dba488c4f","impliedFormat":1},{"version":"2f554c6798b731fc39ff4e3d86aadc932fdeaa063e3cbab025623ff5653c0031","impliedFormat":1},{"version":"fe4613c6c0d23edc04cd8585bdd86bc7337dc6265fb52037d11ca19eeb5e5aaf","impliedFormat":1},{"version":"53b26fbee1a21a6403cf4625d0e501a966b9ccf735754b854366cee8984b711c","impliedFormat":1},{"version":"9ff247206ec5dffdfadddfded2c9d9ad5f714821bb56760be40ed89121f192f4","impliedFormat":1},{"version":"98c6ddd06251098b3302e7094cbc9ab54a2ea88069f5416b7d0b8daee2ff8aa2","impliedFormat":1},{"version":"8c59d8256086ed17676139ee43c1155673e357ab956fb9d00711a7cac73e059d","impliedFormat":1},{"version":"cfe88132f67aa055a3f49d59b01585fa8d890f5a66a0a13bb71973d57573eee7","impliedFormat":1},{"version":"53ce488a97f0b50686ade64252f60a1e491591dd7324f017b86d78239bd232ca","impliedFormat":1},{"version":"50fd11b764194f06977c162c37e5a70bcf0d3579bf82dd4de4eee3ac68d0f82f","impliedFormat":1},{"version":"e0ceb647dcdf6b27fd37e8b0406c7eafb8adfc99414837f3c9bfd28ffed6150a","impliedFormat":1},{"version":"99579aa074ed298e7a3d6a47e68f0cd099e92411212d5081ce88344a5b1b528d","impliedFormat":1},{"version":"096e4ddaa8f0aa8b0ceadd6ab13c3fab53e8a0280678c405160341332eca3cd7","impliedFormat":1},{"version":"415b55892d813a74be51742edd777bbced1f1417848627bf71725171b5325133","impliedFormat":1},{"version":"942ab34f62ac3f3d20014615b6442b6dc51815e30a878ebc390dd70e0dec63bf","impliedFormat":1},{"version":"7a671bf8b4ad81b8b8aea76213ca31b8a5de4ba39490fbdee249fc5ba974a622","impliedFormat":1},{"version":"8e07f13fb0f67e12863b096734f004e14c5ebfd34a524ed4c863c80354c25a44","impliedFormat":1},{"version":"9faa56e38ed5637228530065a9bab19a4dc5a326fbdd1c99e73a310cfed4fcde","impliedFormat":1},{"version":"7d4ad85174f559d8e6ed28a5459aebfc0a7b0872f7775ca147c551e7765e3285","impliedFormat":1},{"version":"d422f0c340060a53cb56d0db24dd170e31e236a808130ab106f7ab2c846f1cdb","impliedFormat":1},{"version":"424403ef35c4c97a7f00ea85f4a5e2f088659c731e75dbe0c546137cb64ef8d8","impliedFormat":1},{"version":"16900e9a60518461d7889be8efeca3fe2cbcd3f6ce6dee70fea81dfbf8990a76","impliedFormat":1},{"version":"6daf17b3bd9499bd0cc1733ab227267d48cd0145ed9967c983ccb8f52eb72d6e","impliedFormat":1},{"version":"e4177e6220d0fef2500432c723dbd2eb9a27dcb491344e6b342be58cc1379ec0","impliedFormat":1},{"version":"ddc62031f48165334486ad1943a1e4ed40c15c94335697cb1e1fd19a182e3102","impliedFormat":1},{"version":"b3f4224eb155d7d13eb377ef40baa1f158f4637aa6de6297dfeeacefd6247476","impliedFormat":1},{"version":"4a168e11fe0f46918721d2f6fcdb676333395736371db1c113ae30b6fde9ccd2","impliedFormat":1},{"version":"5b0a75a5cced0bed0d733bde2da0bbb5d8c8c83d3073444ae52df5f16aefb6ab","impliedFormat":1},{"version":"ef2c1585cad462bdf65f2640e7bcd75cd0dbc45bae297e75072e11fe3db017fa","impliedFormat":1},{"version":"ef809928a4085de826f5b0c84175a56d32dd353856f5b9866d78b8419f8ea9bc","impliedFormat":1},{"version":"6f6eadb32844b0ec7b322293b011316486894f110443197c4c9fbcba01b3b2fa","impliedFormat":1},{"version":"a51e08f41e3e948c287268a275bfe652856a10f68ddd2bf3e3aaf5b8cdb9ef85","impliedFormat":1},{"version":"862f7d760ef37f0ae2c17de82e5fbf336b37d5c1b0dcf39dcd5468f90a7fdd54","impliedFormat":1},{"version":"af48a76b75041e2b3e7bd8eed786c07f39ea896bb2ff165e27e18208d09b8bee","impliedFormat":1},{"version":"cb524ec077f3963e13e85747c6b53fbdf6bf407c84ca1873c6e43da1e96bee6d","impliedFormat":1},{"version":"deb092bc337b2cb0a1b14f3d43f56bc663e1447694e6d479d6df8296bdd452d6","impliedFormat":1},{"version":"041bc1c3620322cb6152183857601707ef6626e9d99f736e8780533689fb1bf9","impliedFormat":1},{"version":"22bd7c75de7d68e075975bf1123de5bccecfd06688afff2e2022b4c70bfc91c3","impliedFormat":1},{"version":"128e7c2ffd37aa29e05367400d718b0e4770cefb1e658d8783ec80a16bc0643a","impliedFormat":1},{"version":"076ac4f2d642c473fa7f01c8c1b7b4ef58f921130174d9cf78430651f44c43ec","impliedFormat":1},{"version":"396c1e5a39706999ec8cc582916e05fcb4f901631d2c192c1292e95089a494d9","impliedFormat":1},{"version":"89df75d28f34fc698fe261f9489125b4e5828fbd62d863bbe93373d3ed995056","impliedFormat":1},{"version":"8ccf5843249a042f4553a308816fe8a03aa423e55544637757d0cfa338bb5186","impliedFormat":1},{"version":"93b44aa4a7b27ba57d9e2bad6fb7943956de85c5cc330d2c3e30cd25b4583d44","impliedFormat":1},{"version":"a0c6216075f54cafdfa90412596b165ff85e2cadd319c49557cc8410f487b77c","impliedFormat":1},{"version":"3c359d811ec0097cba00fb2afd844b125a2ddf4cad88afaf864e88c8d3d358bd","impliedFormat":1},{"version":"3c0b38e8bf11bf3ab87b5116ae8e7b2cad0147b1c80f2b77989dea6f0b93e024","impliedFormat":1},{"version":"8df06e1cd5bb3bf31529cc0db74fa2e57f7de1f6042726679eb8bc1f57083a99","impliedFormat":1},{"version":"d62f09256941e92a95b78ae2267e4cf5ff2ca8915d62b9561b1bc85af1baf428","impliedFormat":1},{"version":"e6223b7263dd7a49f4691bf8df2b1e69f764fb46972937e6f9b28538d050b1ba","impliedFormat":1},{"version":"d9b59eb4e79a0f7a144ee837afb3f1afbc4dab031e49666067a2b5be94b36bd4","impliedFormat":1},{"version":"1db014db736a09668e0c0576585174dbcfd6471bb5e2d79f151a241e0d18d66b","impliedFormat":1},{"version":"8a153d30edde9cefd102e5523b5a9673c298fc7cf7af5173ae946cbb8dd48f11","impliedFormat":1},{"version":"abaaf8d606990f505ee5f76d0b45a44df60886a7d470820fcfb2c06eafa99659","impliedFormat":1},{"version":"51a66bfa412057e786a712733107547ceb6f539061f5bf1c6e5a96e4ccf4f83c","impliedFormat":1},{"version":"d92a80c2c05cf974704088f9da904fe5eadc0b3ad49ddd1ef70ca8028b5adda1","impliedFormat":1},{"version":"fbd7450f20b4486c54f8a90486c395b14f76da66ba30a7d83590e199848f0660","impliedFormat":1},{"version":"ece5b0e45c865645ab65880854899a5422a0b76ada7baa49300c76d38a530ee1","impliedFormat":1},{"version":"62d89ac385aeab821e2d55b4f9a23a277d44f33c67fefe4859c17b80fdb397ea","impliedFormat":1},{"version":"f4dee11887c5564886026263c6ee65c0babc971b2b8848d85c35927af25da827","impliedFormat":1},{"version":"fb8dd49a4cd6d802be4554fbab193bb06e2035905779777f32326cb57cf6a2c2","impliedFormat":1},{"version":"e403ecdfba83013b5eb0e648a92ce182bff2a45ccb81db3035a69081563c2830","impliedFormat":1},{"version":"82d3e00d56a71fc169f3cf9ec5f5ffcc92f6c0e67d4dfc130dafe9f1886d5515","impliedFormat":1},{"version":"b8d57effce2d49a5493debbd8c644e8d52fbe66e2c6d451371375ef5f7bccb8e","impliedFormat":1},{"version":"9963d9857df2df335d1232a12eccbe5c777537a244f4b39406b27bf4736202f6","impliedFormat":1},{"version":"1b33478647aa1b771314745807397002a410c746480e9447db959110999873ce","impliedFormat":1},{"version":"b8d58ef4128a6e8e4b80803e5b67b2aaf1436c133ce39e514b9c004e21b2867e","impliedFormat":1},{"version":"7e6a96b383da9f5acb848bb9dedb9ac8489df7cec46bbf26aeaed2610f709078","impliedFormat":1},{"version":"9fac6ebf3c60ced53dd21def30a679ec225fc3ff4b8d66b86326c285a4eebb5a","impliedFormat":1},{"version":"8cb83cb98c460cd716d2a98b64eb1a07a3a65c7362436550e02f5c2d212871d1","impliedFormat":1},{"version":"07bc8a3551e39e70c38e7293b1a09916867d728043e352b119f951742cb91624","impliedFormat":1},{"version":"e47adc2176f43c617c0ab47f2d9b2bb1706d9e0669bf349a30c3fe09ddd63261","impliedFormat":1},{"version":"7fec79dfd7319fec7456b1b53134edb54c411ba493a0aef350eee75a4f223eeb","impliedFormat":1},{"version":"189c489705bb96a308dcde9b3336011d08bfbca568bcaf5d5d55c05468e9de7a","impliedFormat":1},{"version":"98f4b1074567341764b580bf14c5aabe82a4390d11553780814f7e932970a6f7","impliedFormat":1},{"version":"1dd24cbf39199100fbe2f3dbd1c7203c240c41d95f66301ecc7650ae77875be1","impliedFormat":1},{"version":"2e252235037a2cd8feebfbf74aa460f783e5d423895d13f29a934d7655a1f8be","impliedFormat":1},{"version":"763f4ac187891a6d71ae8821f45eef7ff915b5d687233349e2c8a76c22b3bf2a","impliedFormat":1},{"version":"1571a4d5630872e670eb77fc5df3e33cbc72a67070fc75f9e7dd751568efe3ab","impliedFormat":1},{"version":"e21bb2cfbcdd8ce7eebb72422f3660806724f2b16cd6ce126d527511abb3a379","impliedFormat":1},{"version":"c04146836a55ea071b435298335e47f569db0e4d3ae420e35c83e448f944192f","impliedFormat":1},{"version":"31f71fe23daabea143fc8bd21dae0d5908227180fcda38ad3674df70351f9761","impliedFormat":1},{"version":"8f1241f5d9f0d3d72117768b3c974e462840fbd85026fb66685078945404cf2f","impliedFormat":1},{"version":"af50464960c41782733b598982db664158b6855228152e5d0d530ebf6ba14144","impliedFormat":1},{"version":"53ee526bc778d810bd983b4efab47d937e55ecb9114a4bd11056aacb8e8c49ec","impliedFormat":1},{"version":"5f719b3a2cddb91f777cb77edf4968f1864accd22d7d4c999071fdffe718fbb0","impliedFormat":1},{"version":"649fcf380722edcad5e18361468184fdfdf5867840e842a82789e5e8d3fc4ddb","impliedFormat":1},{"version":"6d7533ae0fb0da532e2a20ebf88d775194eeb42a9dc9f44fb8ad786e3c216b8f","impliedFormat":1},{"version":"b8087f1c249e60cfeefc6dfa1521a3b470b2c7fab4976ece0e873b18dbecec02","impliedFormat":1},{"version":"996feb5fb9dab934bff23543459532a39ac0d62a7885fae6dd644df6bcb2e69e","impliedFormat":1},{"version":"3482de0d272ce868329d6fef473bdec8593fef928b558757860c1b8bbb116d46","impliedFormat":1},{"version":"c4286aa2ff14fde4f11c9da21dd925fda03f831dd478a3b192a06ed722df2ac2","impliedFormat":1},{"version":"dbfe9f38341fb1b6c757e826e62fe1b3c54e5e8edb0c3d44f865230d403fb7e2","impliedFormat":1},{"version":"32965ebab2a14bf52025e2bd336a7d281339b34fdb91fbd3cd7bc4818b67d519","impliedFormat":1},{"version":"4ba32a705197ca7ada81364105283b5e6b8ae59007dc33956db7b0ce37e42637","impliedFormat":1},{"version":"ed73470b9a7898300d2fbf2cdbc6ea920c9fc1fe2b5d7d14b6294410ab7c73ef","impliedFormat":1},{"version":"ae42ca043ffd6963b304be53b1168fbde1e9b5855ff6df56d105252ac5bacd38","impliedFormat":1},{"version":"8911b182d97bc41c4ef6fa06ebb129e8d7fb743e15a8876c096c78cfa487ac98","impliedFormat":1},{"version":"65d3eeba663346fe1fc1a7cfe888fdf484ed4097bbe8dd38486d0a6987a32ff0","impliedFormat":1},{"version":"2e19656c513ded3efe9d292e55d3661b47f21f48f9c7b22003b8522d6d78e42f","impliedFormat":1},{"version":"ddecf238214bfa352f7fb8ed748a7ec6c80f1edcb45053af466a4aa6a2b85ffe","impliedFormat":1},{"version":"896eec3b830d89bc3fb20a38589c111bbe4183dd422e61c6c985d6ccec46a1e9","impliedFormat":1},{"version":"907dab3492fc59404ecf40f9ad655251741c5f2e471bb0376d11dae3e27cb1d8","impliedFormat":1},{"version":"8629340be5692664c52a0e242705616c92b21330cb20acf23425fff401ac771f","impliedFormat":1},{"version":"81477bb2c9b97a9dd5ce7750ab4ae655e74172f0d536d637be345ba76b41cd92","impliedFormat":1},{"version":"55a6b0318ec658ff37bc88e18a93e5f10ddad7257b379b71abf39e6868b8d4d2","impliedFormat":1},{"version":"b7d85dc2de8db4ca983d848c8cfad6cf4d743f8cb35afe1957bedf997c858052","impliedFormat":1},{"version":"83daad5d7ae60a0aede88ea6b9e40853abcbe279c10187342b25e96e35bc9f78","impliedFormat":1},{"version":"3a4e276e678bae861d453944cf92178deaf9b6dcd363c8d10d5dd89d81b74a0c","impliedFormat":1},{"version":"db9661c9bca73e5be82c90359e6217540fd3fd674f0b9403edf04a619a57d563","impliedFormat":1},{"version":"f7a5ab7b54bdc6a13cf1015e1b5d6eeb31d765d54045281bfeefcdfcc982a37c","impliedFormat":1},{"version":"ec99a3d23510a4cb5bdc996b9f2170c78cde2bfa89a5aee4ca2c009a5f122310","impliedFormat":1},{"version":"18d273c495762ba4b62f3bf9f61814dc5142aa06ba4c589121af6443d60be78a","impliedFormat":1},{"version":"cb5eaaa2a079305b1c5344af739b29c479746f7a7aefffc7175d23d8b7c8dbb0","impliedFormat":1},{"version":"bd324dccada40f2c94aaa1ebc82b11ce3927b7a2fe74a5ab92b431d495a86e6f","impliedFormat":1},{"version":"56749bf8b557c4c76181b2fd87e41bde2b67843303ae2eabb299623897d704d6","impliedFormat":1},{"version":"5a6fbec8c8e62c37e9685a91a6ef0f6ecaddb1ee90f7b2c2b71b454b40a0d9a6","impliedFormat":1},{"version":"e7435f2f56c50688250f3b6ef99d8f3a1443f4e3d65b4526dfb31dfd4ba532f8","impliedFormat":1},{"version":"6fc56a681a637069675b2e11b4aa105efe146f7a88876f23537e9ea139297cf9","impliedFormat":1},{"version":"33b7f4106cf45ae7ccbb95acd551e9a5cd3c27f598d48216bda84213b8ae0c7e","impliedFormat":1},{"version":"176d6f604b228f727afb8e96fd6ff78c7ca38102e07acfb86a0034d8f8a2064a","impliedFormat":1},{"version":"1b1a02c54361b8c222392054648a2137fc5983ad5680134a653b1d9f655fe43d","impliedFormat":1},{"version":"8bcb884d06860a129dbffa3500d51116d9d1040bb3bf1c9762eb2f1e7fd5c85c","impliedFormat":1},{"version":"e55c0f31407e1e4eee10994001a4f570e1817897a707655f0bbe4d4a66920e9e","impliedFormat":1},{"version":"a37c2194c586faa8979f50a5c5ca165b0903d31ee62a9fe65e4494aa099712c0","impliedFormat":1},{"version":"6602339ddc9cd7e54261bda0e70fb356d9cdc10e3ec7feb5fa28982f8a4d9e34","impliedFormat":1},{"version":"7ffaa736b8a04b0b8af66092da536f71ef13a5ef0428c7711f32b94b68f7c8c8","impliedFormat":1},{"version":"7b4930d666bbe5d10a19fcc8f60cfa392d3ad3383b7f61e979881d2c251bc895","impliedFormat":1},{"version":"46342f04405a2be3fbfb5e38fe3411325769f14482b8cd48077f2d14b64abcfb","impliedFormat":1},{"version":"8fa675c4f44e6020328cf85fdf25419300f35d591b4f56f56e00f9d52b6fbb3b","impliedFormat":1},{"version":"ba98f23160cfa6b47ee8072b8f54201f21a1ee9addc2ef461ebadf559fe5c43a","impliedFormat":1},{"version":"45a4591b53459e21217dc9803367a651e5a1c30358a015f27de0b3e719db816b","impliedFormat":1},{"version":"9ef22bee37885193b9fae7f4cad9502542c12c7fe16afe61e826cdd822643d84","impliedFormat":1},{"version":"b0451895b894c102eed19d50bd5fcb3afd116097f77a7d83625624fafcca8939","impliedFormat":1},{"version":"bce17120b679ff4f1be70f5fe5c56044e07ed45f1e555db6486c6ded8e1da1c8","impliedFormat":1},{"version":"7590477bfa2e309e677ff7f31cb466f377fcd0e10a72950439c3203175309958","impliedFormat":1},{"version":"3f9ebd554335d2c4c4e7dc67af342d37dc8f2938afa64605d8a93236022cc8a5","impliedFormat":1},{"version":"1c077c9f6c0bc02a36207994a6e92a8fbf72d017c4567f640b52bf32984d2392","impliedFormat":1},{"version":"600b42323925b32902b17563654405968aa12ee39e665f83987b7759224cc317","impliedFormat":1},{"version":"32c8f85f6b4e145537dfe61b94ddd98b47dbdd1d37dc4b7042a8d969cd63a1aa","impliedFormat":1},{"version":"2426ed0e9982c3d734a6896b697adf5ae93d634b73eb15b48da8106634f6d911","impliedFormat":1},{"version":"057431f69d565fb44c246f9f64eac09cf309a9af7afb97e588ebef19cc33c779","impliedFormat":1},{"version":"960d026ca8bf27a8f7a3920ee50438b50ec913d635aa92542ca07558f9c59eca","impliedFormat":1},{"version":"71f5d895cc1a8a935c40c070d3d0fade53ae7e303fd76f443b8b541dee19a90c","impliedFormat":1},{"version":"252eb4750d0439d1674ad0dc30d2a2a3e4655e08ad9e58a7e236b21e78d1d540","impliedFormat":1},{"version":"e344b4a389bb2dfa98f144f3f195387a02b6bdb69deed4a96d16cc283c567778","impliedFormat":1},{"version":"c6cdcd12d577032b84eed1de4d2de2ae343463701a25961b202cff93989439fb","impliedFormat":1},{"version":"3dc633586d48fcd04a4f8acdbf7631b8e4a334632f252d5707e04b299069721e","impliedFormat":1},{"version":"3322858f01c0349ee7968a5ce93a1ca0c154c4692aa8f1721dc5192a9191a168","impliedFormat":1},{"version":"6dde0a77adad4173a49e6de4edd6ef70f5598cbebb5c80d76c111943854636ca","impliedFormat":1},{"version":"09acacae732e3cc67a6415026cfae979ebe900905500147a629837b790a366b3","impliedFormat":1},{"version":"f7b622759e094a3c2e19640e0cb233b21810d2762b3e894ef7f415334125eb22","impliedFormat":1},{"version":"99236ea5c4c583082975823fd19bcce6a44963c5c894e20384bc72e7eccf9b03","impliedFormat":1},{"version":"f6688a02946a3f7490aa9e26d76d1c97a388e42e77388cbab010b69982c86e9e","impliedFormat":1},{"version":"9f642953aba68babd23de41de85d4e97f0c39ef074cb8ab8aa7d55237f62aff6","impliedFormat":1},{"version":"159d95163a0ed369175ae7838fa21a9e9e703de5fdb0f978721293dd403d9f4a","impliedFormat":1},{"version":"2d2ec3235e01474f45a68f28cf826c2f5228b79f7d474d12ca3604cdcfdac80c","impliedFormat":1},{"version":"6dd249868034c0434e170ba6e0451d67a0c98e5a74fd57a7999174ee22a0fa7b","impliedFormat":1},{"version":"9716553c72caf4ff992be810e650707924ec6962f6812bd3fbdb9ac3544fd38f","impliedFormat":1},{"version":"506bc8f4d2d639bebb120e18d3752ddeee11321fd1070ad2ce05612753c628d6","impliedFormat":1},{"version":"053c51bbc32db54be396654ab5ecd03a66118d64102ac9e22e950059bc862a5e","impliedFormat":1},{"version":"1977f62a560f3b0fc824281fd027a97ce06c4b2d47b408f3a439c29f1e9f7e10","impliedFormat":1},{"version":"627570f2487bd8d899dd4f36ecb20fe0eb2f8c379eff297e24caba0c985a6c43","impliedFormat":1},{"version":"0f6e0b1a1deb1ab297103955c8cd3797d18f0f7f7d30048ae73ba7c9fb5a1d89","impliedFormat":1},{"version":"0a051f254f9a16cdde942571baab358018386830fed9bdfff42478e38ba641ce","impliedFormat":1},{"version":"17269f8dfc30c4846ab7d8b5d3c97ac76f50f33de96f996b9bf974d817ed025b","impliedFormat":1},{"version":"9e82194af3a7d314ccbc64bb94bfb62f4bfea047db3422a7f6c5caf2d06540a9","impliedFormat":1},{"version":"083d6f3547ccbf25dfa37b950c50bee6691ed5c42107f038cc324dbca1e173ae","impliedFormat":1},{"version":"952a9eab21103b79b7a6cca8ad970c3872883aa71273f540285cad360c35da40","impliedFormat":1},{"version":"8ba48776335db39e0329018c04486907069f3d7ee06ce8b1a6134b7d745271cc","impliedFormat":1},{"version":"e6d5809e52ed7ef1860d1c483e005d1f71bab36772ef0fd80d5df6db1da0e815","impliedFormat":1},{"version":"893e5cfbae9ed690b75b8b2118b140665e08d182ed8531e1363ec050905e6cb2","impliedFormat":1},{"version":"6ae7c7ada66314a0c3acfbf6f6edf379a12106d8d6a1a15bd35bd803908f2c31","impliedFormat":1},{"version":"e4b1e912737472765e6d2264b8721995f86a463a1225f5e2a27f783ecc013a7b","impliedFormat":1},{"version":"97146bbe9e6b1aab070510a45976faaf37724c747a42d08563aeae7ba0334b4f","impliedFormat":1},{"version":"c40d552bd2a4644b0617ec2f0f1c58618a25d098d2d4aa7c65fb446f3c305b54","impliedFormat":1},{"version":"09e64dea2925f3a0ef972d7c11e7fa75fec4c0824e9383db23eacf17b368532f","impliedFormat":1},{"version":"424ddba00938bb9ae68138f1d03c669f43556fc3e9448ed676866c864ca3f1d6","impliedFormat":1},{"version":"a0fe12181346c8404aab9d9a938360133b770a0c08b75a2fce967d77ca4b543f","impliedFormat":1},{"version":"3cc6eb7935ff45d7628b93bb6aaf1a32e8cb3b24287f9e75694b607484b377b3","impliedFormat":1},{"version":"ced02e78a2e10f89f4d70440d0a8de952a5946623519c54747bc84214d644bac","impliedFormat":1},{"version":"efd463021ccc91579ed8ae62584176baab2cd407c555c69214152480531a2072","impliedFormat":1},{"version":"29647c3b79320cfeecb5862e1f79220e059b26db2be52ea256df9cf9203fb401","impliedFormat":1},{"version":"e8cdefd2dc293cb4866ee8f04368e7001884650bb0f43357c4fe044cc2e1674f","impliedFormat":1},{"version":"582a3578ebba9238eb0c5d30b4d231356d3e8116fea497119920208fb48ccf85","impliedFormat":1},{"version":"185eae4a1e8a54e38f36cd6681cfa54c975a2fc3bc2ba6a39bf8163fac85188d","impliedFormat":1},{"version":"0c0a02625cf59a0c7be595ccc270904042bea523518299b754c705f76d2a6919","impliedFormat":1},{"version":"c44fc1bbdb5d1c8025073cb7c5eab553aa02c069235a1fc4613cd096d578ab80","impliedFormat":1},{"version":"cee72255e129896f0240ceb58c22e207b83d2cc81d8446190d1b4ef9b507ccd6","impliedFormat":1},{"version":"3b54670e11a8d3512f87e46645aa9c83ae93afead4a302299a192ac5458aa586","impliedFormat":1},{"version":"c2fc4d3a130e9dc0e40f7e7d192ef2494a39c37da88b5454c8adf143623e5979","impliedFormat":1},{"version":"2e693158fc1eedba3a5766e032d3620c0e9c8ad0418e4769be8a0f103fdb52cd","impliedFormat":1},{"version":"516275ccf3e66dc391533afd4d326c44dd750345b68bb573fc592e4e4b74545f","impliedFormat":1},{"version":"07c342622568693847f6cb898679402dd19740f815fd43bec996daf24a1e2b85","impliedFormat":1},{"version":"fa40d705f9813843d47f19321591499f14d1a18fa5e8ca9beaee5aac633c3d0d","impliedFormat":1},{"version":"a7a6330fb015f72d821e23004e63a3827e0c632b614ef3a310b3c81b66de61fd","impliedFormat":1},{"version":"89968316b7069339433bd42d53fe56df98b6990783dfe00c9513fb4bd01c2a1c","impliedFormat":1},{"version":"a4096686f982f6977433ee9759ecbef49da29d7e6a5d8278f0fbc7b9f70fce12","impliedFormat":1},{"version":"62e62a477c56cda719013606616dd856cfdc37c60448d0feb53654860d3113bb","impliedFormat":1},{"version":"207c107dd2bd23fa9febac2fe05c7c72cdac02c3f57003ab2e1c6794a6db0c05","impliedFormat":1},{"version":"55133e906c4ddabecdfcbc6a2efd4536a3ac47a8fa0a3fe6d0b918cac882e0d4","impliedFormat":1},{"version":"2147f8d114cf58c05106c3dccea9924d069c69508b5980ed4011d2b648af2ffe","impliedFormat":1},{"version":"2eb4012a758b9a7ba9121951d7c4b9f103fe2fc626f13bec3e29037bb9420dc6","impliedFormat":1},{"version":"fe61f001bd4bd0a374daa75a2ba6d1bb12c849060a607593a3d9a44e6b1df590","impliedFormat":1},{"version":"cfe8221c909ad721b3da6080570553dea2f0e729afbdbcf2c141252cf22f39b5","impliedFormat":1},{"version":"34e89249b6d840032b9acdec61d136877f84f2cd3e3980355b8a18f119809956","impliedFormat":1},{"version":"6f36ff8f8a898184277e7c6e3bf6126f91c7a8b6a841f5b5e6cb415cfc34820e","impliedFormat":1},{"version":"4b6378c9b1b3a2521316c96f5c777e32a1b14d05b034ccd223499e26de8a379c","impliedFormat":1},{"version":"07be5ae9bf5a51f3d98ffcfacf7de2fe4842a7e5016f741e9fad165bb929be93","impliedFormat":1},{"version":"cb1b37eda1afc730d2909a0f62cac4a256276d5e62fea36db1473981a5a65ab1","impliedFormat":1},{"version":"195f855b39c8a6e50eb1f37d8f794fbd98e41199dffbc98bf629506b6def73d7","impliedFormat":1},{"version":"471386a0a7e4eb88c260bdde4c627e634a772bf22f830c4ec1dad823154fd6f5","impliedFormat":1},{"version":"108314a60f3cb2454f2d889c1fb8b3826795399e5d92e87b2918f14d70c01e69","impliedFormat":1},{"version":"d75cc838286d6b1260f0968557cd5f28495d7341c02ac93989fb5096deddfb47","impliedFormat":1},{"version":"d531dc11bb3a8a577bd9ff83e12638098bfc9e0856b25852b91aac70b0887f2a","impliedFormat":1},{"version":"19968b998a2ab7dfd39de0c942fc738b2b610895843fec25477bc393687babd8","impliedFormat":1},{"version":"c0e6319f0839d76beed6e37b45ec4bb80b394d836db308ae9db4dea0fe8a9297","impliedFormat":1},{"version":"1a7b11be5c442dab3f4af9faf20402798fddf1d3c904f7b310f05d91423ba870","impliedFormat":1},{"version":"079d3f1ddcaf6c0ff28cfc7851b0ce79fcd694b3590afa6b8efa6d1656216924","impliedFormat":1},{"version":"2c817fa37b3d2aa72f01ce4d3f93413a7fbdecafe1b9fb7bd7baaa1bbd46eb08","impliedFormat":1},{"version":"682203aed293a0986cc2fccc6321d862742b48d7359118ac8f36b290d28920d2","impliedFormat":1},{"version":"7406d75a4761b34ce126f099eafe6643b929522e9696e5db5043f4e5c74a9e40","impliedFormat":1},{"version":"7e9c4e62351e3af1e5e49e88ebb1384467c9cd7a03c132a3b96842ccdc8045c4","impliedFormat":1},{"version":"ea1f9c60a912065c08e0876bd9500e8fa194738855effb4c7962f1bfb9b1da86","impliedFormat":1},{"version":"903f34c920e699dacbc483780b45d1f1edcb1ebf4b585a999ece78e403bb2db3","impliedFormat":1},{"version":"100ebfd0470433805c43be5ae377b7a15f56b5d7181c314c21789c4fe9789595","impliedFormat":1},{"version":"12533f60d36d03d3cf48d91dc0b1d585f530e4c9818a4d695f672f2901a74a86","impliedFormat":1},{"version":"21d9968dad7a7f021080167d874b718197a60535418e240389d0b651dd8110e7","impliedFormat":1},{"version":"2ef7349b243bce723d67901991d5ad0dfc534da994af61c7c172a99ff599e135","impliedFormat":1},{"version":"fa103f65225a4b42576ae02d17604b02330aea35b8aaf889a8423d38c18fa253","impliedFormat":1},{"version":"1b9173f64a1eaee88fa0c66ab4af8474e3c9741e0b0bd1d83bfca6f0574b6025","impliedFormat":1},{"version":"1b212f0159d984162b3e567678e377f522d7bee4d02ada1cc770549c51087170","impliedFormat":1},{"version":"46bd71615bdf9bfa8499b9cfce52da03507f7140c93866805d04155fa19caa1b","impliedFormat":1},{"version":"86cb49eb242fe19c5572f58624354ffb8743ff0f4522428ebcabc9d54a837c73","impliedFormat":1},{"version":"fc2fb9f11e930479d03430ee5b6588c3788695372b0ab42599f3ec7e78c0f6d5","impliedFormat":1},{"version":"bb1e5cf70d99c277c9f1fe7a216b527dd6bd2f26b307a8ab65d24248fb3319f5","impliedFormat":1},{"version":"817547eacf93922e22570ba411f23e9164544dead83e379c7ae9c1cfc700c2cf","impliedFormat":1},{"version":"a728478cb11ab09a46e664c0782610d7dd5c9db3f9a249f002c92918ca0308f7","impliedFormat":1},{"version":"9e91ef9c3e057d6d9df8bcbfbba0207e83ef9ab98aa302cf9223e81e32fdfe8d","impliedFormat":1},{"version":"66d30ef7f307f95b3f9c4f97e6c1a5e4c462703de03f2f81aca8a1a2f8739dbd","impliedFormat":1},{"version":"293ca178fd6c23ed33050052c6544c9d630f9d3b11d42c36aa86218472129243","impliedFormat":1},{"version":"90a4be0e17ba5824558c38c93894e7f480b3adf5edd1fe04877ab56c56111595","impliedFormat":1},{"version":"fadd55cddab059940934df39ce2689d37110cfe37cc6775f06b0e8decf3092d7","impliedFormat":1},{"version":"91324fe0902334523537221b6c0bef83901761cfd3bd1f140c9036fa6710fa2b","impliedFormat":1},{"version":"b4f3b4e20e2193179481ab325b8bd0871b986e1e8a8ed2961ce020c2dba7c02d","impliedFormat":1},{"version":"41744c67366a0482db029a21f0df4b52cd6f1c85cbc426b981b83b378ccb6e65","impliedFormat":1},{"version":"c3f3cf7561dd31867635c22f3c47c8491af4cfa3758c53e822a136828fc24e5d","impliedFormat":1},{"version":"a88ddea30fae38aa071a43b43205312dc5ff86f9e21d85ba26b14690dc19d95e","impliedFormat":1},{"version":"b5b2d0510e5455234016bbbaba3839ca21adbc715d1b9c3d6dede7d411a28545","impliedFormat":1},{"version":"5515f17f45c6aafe6459afa3318bba040cb466a8d91617041566808a5fd77a44","impliedFormat":1},{"version":"4df1f0c17953b0450aa988c9930061f8861b114e1649e1a16cfd70c5cbdf8d83","impliedFormat":1},{"version":"441104b363d80fe57eb79a50d495e0b7e3ebeb45a5f0d1a4067d71ef75e8fbfa","impliedFormat":1},{"version":"b6e995b5ef6661f5636ff738e67e4ec90150768ef119ad74b473c404304408a1","impliedFormat":1},{"version":"5d470930bf6142d7cbda81c157869024527dc7911ba55d90b8387ef6e1585aa1","impliedFormat":1},{"version":"074483fdbf20b30bd450e54e6892e96ea093430c313e61be5fdfe51588baa2d6","impliedFormat":1},{"version":"b7e6a6a3495301360edb9e1474702db73d18be7803b3f5c6c05571212acccd16","impliedFormat":1},{"version":"aa7527285c94043f21baf6e337bc60a92c20b6efaa90859473f6476954ac5f79","impliedFormat":1},{"version":"dd3be6d9dcd79e46d192175a756546630f2dc89dab28073823c936557b977f26","impliedFormat":1},{"version":"8d0566152618a1da6536c75a5659c139522d67c63a9ae27e8228d76ab0420584","impliedFormat":1},{"version":"ba06bf784edafe0db0e2bd1f6ecf3465b81f6b1819871bf190a0e0137b5b7f18","impliedFormat":1},{"version":"a0500233cb989bcb78f5f1a81f51eabc06b5c39e3042c560a7489f022f1f55a3","impliedFormat":1},{"version":"220508b3fb6b773f49d8fb0765b04f90ef15caacf0f3d260e3412ed38f71ef09","impliedFormat":1},{"version":"1ad113089ad5c188fec4c9a339cb53d1bcbb65682407d6937557bb23a6e1d4e5","impliedFormat":1},{"version":"e56427c055602078cbf0e58e815960541136388f4fc62554813575508def98b6","impliedFormat":1},{"version":"1f58b0676a80db38df1ce19d15360c20ce9e983b35298a5d0b4aa4eb4fb67e0f","impliedFormat":1},{"version":"3d67e7eb73c6955ee27f1d845cae88923f75c8b0830d4b5440eea2339958e8ec","impliedFormat":1},{"version":"11fec302d58b56033ab07290a3abc29e9908e29d504db9468544b15c4cd7670d","impliedFormat":1},{"version":"c66d6817c931633650edf19a8644eea61aeeb84190c7219911cefa8ddea8bd9a","impliedFormat":1},{"version":"ab1359707e4fc610c5f37f1488063af65cda3badca6b692d44b95e8380e0f6c2","impliedFormat":1},{"version":"37deda160549729287645b3769cf126b0a17e7e2218737352676705a01d5957e","impliedFormat":1},{"version":"d80ffdd55e7f4bc69cde66933582b8592d3736d3b0d1d8cc63995a7b2bcca579","impliedFormat":1},{"version":"c9b71952b2178e8737b63079dba30e1b29872240b122905cbaba756cb60b32f5","impliedFormat":1},{"version":"b596585338b0d870f0e19e6b6bcbf024f76328f2c4f4e59745714e38ee9b0582","impliedFormat":1},{"version":"e6717fc103dfa1635947bf2b41161b5e4f2fabbcaf555754cc1b4340ec4ca587","impliedFormat":1},{"version":"c36186d7bdf1f525b7685ee5bf639e4b157b1e803a70c25f234d4762496f771f","impliedFormat":1},{"version":"026726932a4964341ab8544f12b912c8dfaa388d2936b71cc3eca0cffb49cc1d","impliedFormat":1},{"version":"83188d037c81bd27076218934ba9e1742ddb69cd8cc64cdb8a554078de38eb12","impliedFormat":1},{"version":"7d82f2d6a89f07c46c7e3e9071ab890124f95931d9c999ba8f865fa6ef6cbf72","impliedFormat":1},{"version":"4fc523037d14d9bb6ddb586621a93dd05b6c6d8d59919a40c436ca3ac29d9716","impliedFormat":1},{"version":"c1f0a7b6e7765d68ad278e2a19fade88f2f95a4f02617fe4cb0fe129a457d35d","impliedFormat":1},{"version":"5bc500a7075b779beb853ad8fdc1350a105e593d8e4d15abc7d169aab48cdf80","impliedFormat":1},{"version":"e88c8ec3dc992bdcf0c6ba044c5255c84f630c889cde7cbb271f33c38dfe5017","impliedFormat":1},{"version":"23f46bf9c50124dbeece3a12f457fc5ffa2964efe488ef8abd45b1cc510cbb0c","impliedFormat":1},{"version":"b6373ffa3726c9c11253a1bd18d0c327a987591acf277bd76067996d8e148341","impliedFormat":1},{"version":"eb6274bd683719d60c57818a7cd12650ca90d76d7970a5904a472933d9a3bd3f","impliedFormat":1},{"version":"67b95220c2fc27569deb79b7dd842fdcadfb9cafaf41e04b94879562b0b37fec","impliedFormat":1},{"version":"1104609ad51b36b315e06c64ba62b1d09389b469fba74676b8388b704854a23b","impliedFormat":1},{"version":"53477a1815e915b8c20222a2ac8f9e3de880a1e8c8dbf9dae529b3d2e2b4a53b","impliedFormat":1},{"version":"efb8ee2457b2923c715ed3f77cf7a2df9ec724ebccd0efe8d9b48bf9349f043f","impliedFormat":1},{"version":"d7ceb4884ccac95cfc24a6773de92540ebc4094529cfcedac6bab32ab29da75b","impliedFormat":1},{"version":"57b33201d9aa377cc352fbb181da19c91b91f099a622f12cc661e5b89a86a834","impliedFormat":1},{"version":"556ccd493ec36c7d7cb130d51be66e147b91cc1415be383d71da0f1e49f742a9","impliedFormat":1},{"version":"b6d03c9cfe2cf0ba4c673c209fcd7c46c815b2619fd2aad59fc4229aaef2ed43","impliedFormat":1},{"version":"95aba78013d782537cc5e23868e736bec5d377b918990e28ed56110e3ae8b958","impliedFormat":1},{"version":"670a76db379b27c8ff42f1ba927828a22862e2ab0b0908e38b671f0e912cc5ed","impliedFormat":1},{"version":"13b77ab19ef7aadd86a1e54f2f08ea23a6d74e102909e3c00d31f231ed040f62","impliedFormat":1},{"version":"069bebfee29864e3955378107e243508b163e77ab10de6a5ee03ae06939f0bb9","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"0dc6940ff35d845686a118ee7384713a84024d60ef26f25a2f87992ec7ddbd64","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"a4a39b5714adfcadd3bbea6698ca2e942606d833bde62ad5fb6ec55f5e438ff8","impliedFormat":1},{"version":"bbc1d029093135d7d9bfa4b38cbf8761db505026cc458b5e9c8b74f4000e5e75","impliedFormat":1},{"version":"ac450542cbfd50a4d7bf0f3ec8aeedb9e95791ecc6f2b2b19367696bd303e8c6","impliedFormat":1},{"version":"8a190298d0ff502ad1c7294ba6b0abb3a290fc905b3a00603016a97c363a4c7a","impliedFormat":1},{"version":"3cf631a6ae0060fddf4898c816958e39f47e16570faf7bc7048c774c83cd7a7e","impliedFormat":1},{"version":"1f68ab0e055994eb337b67aa87d2a15e0200951e9664959b3866ee6f6b11a0fe","impliedFormat":1},{"version":"d34aa8df2d0b18fb56b1d772ff9b3c7aea7256cf0d692f969be6e1d27b74d660","impliedFormat":1},{"version":"f4db16820c99b6db923ab18af5fecb02331d785c4c2a8a88373a0cfc08256589","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"6823ccc7b5b77bbf898d878dbcad18aa45e0fa96bdd0abd0de98d514845d9ed9","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"168d88e14e0d81fe170e0dadd38ae9d217476c11435ea640ddb9b7382bdb6c1f","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"035a5df183489c2e22f3cf59fc1ed2b043d27f357eecc0eb8d8e840059d44245","impliedFormat":1},{"version":"a4809f4d92317535e6b22b01019437030077a76fec1d93b9881c9ed4738fcc54","impliedFormat":1},{"version":"5f53fa0bd22096d2a78533f94e02c899143b8f0f9891a46965294ee8b91a9434","impliedFormat":1},{"version":"d934a06d62d87a7e2d75a3586b5f9fb2d94d5fe4725ff07252d5f4651485100f","impliedFormat":1},{"version":"0d14fa22c41fdc7277e6f71473b20ebc07f40f00e38875142335d5b63cdfc9d2","impliedFormat":1},{"version":"b104e2da53231a529373174880dc0abfbc80184bb473b6bf2a9a0746bebb663d","impliedFormat":1},{"version":"ee91a5fbbd1627c632df89cce5a4054f9cc6e7413ebdccc82b27c7ffeedf982d","impliedFormat":1},{"version":"85c8731ca285809fc248abf21b921fe00a67b6121d27060d6194eddc0e042b1a","impliedFormat":1},{"version":"6bac0cbdf1bc85ae707f91fdf037e1b600e39fb05df18915d4ecab04a1e59d3c","impliedFormat":1},{"version":"5688b21a05a2a11c25f56e53359e2dcda0a34cb1a582dbeb1eaacdeca55cb699","impliedFormat":1},{"version":"35558bf15f773acbe3ed5ac07dd27c278476630d85245f176e85f9a95128b6e0","impliedFormat":1},{"version":"951f54e4a63e82b310439993170e866dba0f28bb829cbc14d2f2103935cea381","impliedFormat":1},{"version":"4454a999dc1676b866450e8cddd9490be87b391b5526a33f88c7e45129d30c5d","impliedFormat":1},{"version":"99013139312db746c142f27515a14cdebb61ff37f20ee1de6a58ce30d36a4f0d","impliedFormat":1},{"version":"71da852f38ac50d2ae43a7b7f2899b10a2000727fee293b0b72123ed2e7e2ad6","impliedFormat":1},{"version":"74dd1096fca1fec76b951cf5eacf609feaf919e67e13af02fed49ec3b77ea797","impliedFormat":1},{"version":"a0691153ccf5aa1b687b1500239722fff4d755481c20e16d9fcd7fb2d659c7c7","impliedFormat":1},{"version":"fe2201d73ae56b1b4946c10e18549a93bf4c390308af9d422f1ffd3c7989ffc8","impliedFormat":1},{"version":"cad63667f992149cee390c3e98f38c00eee56a2dae3541c6d9929641b835f987","impliedFormat":1},{"version":"f497cad2b33824d8b566fa276cfe3561553f905fdc6b40406c92bcfcaec96552","impliedFormat":1},{"version":"eb58c4dbc6fec60617d80f8ccf23900a64d3190fda7cfb2558b389506ec69be0","impliedFormat":1},{"version":"578929b1c1e3adaed503c0a0f9bda8ba3fea598cc41ad5c38932f765684d9888","impliedFormat":1},{"version":"7cc9d600b2070b1e5c220044a8d5a58b40da1c11399b6c8968711de9663dc6b2","impliedFormat":1},{"version":"45f36cf09d3067cd98b39a7d430e0e531f02911dd6d63b6d784b1955eef86435","impliedFormat":1},{"version":"80419a23b4182c256fa51d71cb9c4d872256ca6873701ceabbd65f8426591e49","impliedFormat":1},{"version":"5aa046aaab44da1a63d229bd67a7a1344afbd6f64db20c2bbe3981ceb2db3b07","impliedFormat":1},{"version":"ed9ad5b51c6faf9d6f597aa0ab11cb1d3a361c51ba59d1220557ef21ad5b0146","impliedFormat":1},{"version":"73db7984e8a35e6b48e3879a6d024803dd990022def2750b3c23c01eb58bc30f","impliedFormat":1},{"version":"c9ecb910b3b4c0cf67bc74833fc41585141c196b5660d2eb3a74cfffbf5aa266","impliedFormat":1},{"version":"33dcfba8a7e4acbe23974d342c44c36d7382c3d1d261f8aef28261a7a5df2969","impliedFormat":1},{"version":"de26700eb7277e8cfdde32ebb21b3d9ad1d713b64fdc2019068b857611e8f0c4","impliedFormat":1},{"version":"e481bd2c07c8e93eb58a857a9e66f22cb0b5ddfd86bbf273816fd31ef3a80613","impliedFormat":1},{"version":"ef156ba4043f6228d37645d6d9c6230a311e1c7a86669518d5f2ebc26e6559bf","impliedFormat":1},{"version":"457fd1e6d6f359d7fa2ca453353f4317efccae5c902b13f15c587597015212bc","impliedFormat":1},{"version":"473b2b42af720ebdb539988c06e040fd9600facdeb23cb297d72ee0098d8598f","impliedFormat":1},{"version":"22bc373ca556de33255faaddb373fec49e08336638958ad17fbd6361c7461eed","impliedFormat":1},{"version":"b3d58358675095fef03ec71bddc61f743128682625f1336df2fc31e29499ab25","impliedFormat":1},{"version":"5b1ef94b03042629c76350fe18be52e17ab70f1c3be8f606102b30a5cd86c1b3","impliedFormat":1},{"version":"a7b6046c44d5fda21d39b3266805d37a2811c2f639bf6b40a633b9a5fb4f5d88","impliedFormat":1},{"version":"80b036a132f3def4623aad73d526c6261dcae3c5f7013857f9ecf6589b72951f","impliedFormat":1},{"version":"0a347c2088c3b1726b95ccde77953bede00dd9dd2fda84585fa6f9f6e9573c18","impliedFormat":1},{"version":"8cc3abb4586d574a3faeea6747111b291e0c9981003a0d72711351a6bcc01421","impliedFormat":1},{"version":"0a516adfde610035e31008b170da29166233678216ef3646822c1b9af98879da","impliedFormat":1},{"version":"70d48a1faa86f67c9cb8a39babc5049246d7c67b6617cd08f64e29c055897ca9","impliedFormat":1},{"version":"df10dc6fe1c49e2f94be9d7d1e625aeb66e5eb90b2e0af1f378bfdfa5313155b","impliedFormat":1},{"version":"082b818038423de54be877cebdb344a2e3cf3f6abcfc48218d8acf95c030426a","impliedFormat":1},{"version":"813514ef625cb8fc3befeec97afddfb3b80b80ced859959339d99f3ad538d8fe","impliedFormat":1},{"version":"039cd54028eb988297e189275764df06c18f9299b14c063e93bd3f30c046fee6","impliedFormat":1},{"version":"e91cfd040e6da28427c5c4396912874902c26605240bdc3457cc75b6235a80f2","impliedFormat":1},{"version":"b4347f0b45e4788c18241ac4dee20ceab96d172847f1c11d42439d3de3c09a3e","impliedFormat":1},{"version":"16fe6721dc0b4144a0cdcef98857ee19025bf3c2a3cc210bcd0b9d0e25f7cec8","impliedFormat":1},{"version":"346d903799e8ea99e9674ba5745642d47c0d77b003cc7bb93e1d4c21c9e37101","impliedFormat":1},{"version":"3997421bb1889118b1bbfc53dd198c3f653bf566fd13c663e02eb08649b985c4","impliedFormat":1},{"version":"2d1ac54184d897cb5b2e732d501fa4591f751678717fd0c1fd4a368236b75cba","impliedFormat":1},{"version":"bade30041d41945c54d16a6ec7046fba6d1a279aade69dfdef9e70f71f2b7226","impliedFormat":1},{"version":"56fbea100bd7dd903dc49a1001995d3c6eee10a419c66a79cdb194bff7250eb7","impliedFormat":1},{"version":"fe8d26b2b3e519e37ceea31b1790b17d7c5ab30334ca2b56d376501388ba80d6","impliedFormat":1},{"version":"37ad0a0c2b296442072cd928d55ef6a156d50793c46c2e2497da1c2750d27c1e","impliedFormat":1},{"version":"be93d07586d09e1b6625e51a1591d6119c9f1cbd95718497636a406ec42babee","impliedFormat":1},{"version":"a062b507ed5fc23fbc5850fd101bc9a39e9a0940bb52a45cd4624176337ad6b8","impliedFormat":1},{"version":"cf01f601ef1e10b90cad69312081ce0350f26a18330913487a26d6d4f7ce5a73","impliedFormat":1},{"version":"a9de7b9a5deaed116c9c89ad76fdcc469226a22b79c80736de585af4f97b17cd","impliedFormat":1},{"version":"5bde81e8b0efb2d977c6795f9425f890770d54610764b1d8df340ce35778c4f8","impliedFormat":1},{"version":"20fd0402351907669405355eeae8db00b3cf0331a3a86d8142f7b33805174f57","impliedFormat":1},{"version":"da6949af729eca1ec1fe867f93a601988b5b206b6049c027d0c849301d20af6f","impliedFormat":1},{"version":"7008f240ea3a5a344be4e5f9b5dbf26721aad3c5cfef5ff79d133fa7450e48fa","impliedFormat":1},{"version":"eb13c8624f5747a845aea0df1dfde0f2b8f5ed90ca3bc550b12777797cb1b1e3","impliedFormat":1},{"version":"2452fc0f47d3b5b466bda412397831dd5138e62f77aa5e11270e6ca3ecb8328d","impliedFormat":1},{"version":"33c2ebbdd9a62776ca0091a8d1f445fa2ea4b4f378bc92f524031a70dfbeec86","impliedFormat":1},{"version":"3ac3a5b34331a56a3f76de9baf619def3f3073961ce0a012b6ffa72cf8a91f1f","impliedFormat":1},{"version":"d5e9d32cc9813a5290a17492f554999e33f1aa083a128d3e857779548537a778","impliedFormat":1},{"version":"776f49489fa2e461b40370e501d8e775ddb32433c2d1b973f79d9717e1d79be5","impliedFormat":1},{"version":"be94ea1bfaa2eeef1e821a024914ef94cf0cba05be8f2e7df7e9556231870a1d","impliedFormat":1},{"version":"40cd13782413c7195ad8f189f81174850cc083967d056b23d529199d64f02c79","impliedFormat":1},{"version":"05e041810faf710c1dcd03f3ffde100c4a744672d93512314b1f3cfffccdaf20","impliedFormat":1},{"version":"15a8f79b1557978d752c0be488ee5a70daa389638d79570507a3d4cfc620d49d","impliedFormat":1},{"version":"968ee57037c469cffb3b0e268ab824a9c31e4205475b230011895466a1e72da4","impliedFormat":1},{"version":"77debd777927059acbaf1029dfc95900b3ab8ed0434ce3914775efb0574e747b","impliedFormat":1},{"version":"921e3bd6325acb712cd319eaec9392c9ad81f893dead509ab2f4e688f265e536","impliedFormat":1},{"version":"60f6768c96f54b870966957fb9a1b176336cd82895ded088980fb506c032be1c","impliedFormat":1},{"version":"755d9b267084db4ea40fa29653ea5fc43e125792b1940f2909ec70a4c7f712d8","impliedFormat":1},{"version":"7e3056d5333f2d8a9e54324c2e2293027e4cd9874615692a53ad69090894d116","impliedFormat":1},{"version":"1e25b848c58ad80be5c31b794d49092d94df2b7e492683974c436bcdbefb983c","impliedFormat":1},{"version":"3df6fc700b8d787974651680ae6e37b6b50726cf5401b7887f669ab195c2f2ef","impliedFormat":1},{"version":"145df08c171ec616645a353d5eaa5d5f57a5fbce960a47d847548abd9215a99e","impliedFormat":1},{"version":"dcfd2ca9e033077f9125eeca6890bb152c6c0bc715d0482595abc93c05d02d92","impliedFormat":1},{"version":"8056fa6beb8297f160e13c9b677ba2be92ab23adfb6940e5a974b05acd33163b","impliedFormat":1},{"version":"86dda1e79020fad844010b39abb68fafed2f3b2156e3302820c4d0a161f88b03","impliedFormat":1},{"version":"dea0dcec8d5e0153d6f0eacebb163d7c3a4b322a9304048adffc6d26084054bd","impliedFormat":1},{"version":"2afd081a65d595d806b0ff434d2a96dc3d6dcd8f0d1351c0a0968568c6944e0b","impliedFormat":1},{"version":"b86259ab4b95ebe1aedb03d3eebea647f0bd9a706981220f00210487d70e77a0","impliedFormat":1},{"version":"2f1f7c65e8ee58e3e7358f9b8b3c37d8447549ecc85046f9405a0fc67fbdf54b","impliedFormat":1},{"version":"e3f3964ff78dee11a07ae589f1319ff682f62f3c6c8afa935e3d8616cf21b431","impliedFormat":1},{"version":"2762c2dbee294ffb8fdbcae6db32c3dae09e477d6a348b48578b4145b15d1818","impliedFormat":1},{"version":"78a1eace936ad32ca1c228814f3333cb2e826e1447e60fee181b3c53d43a8d07","impliedFormat":1},{"version":"24bd135b687da453ea7bd98f7ece72e610a3ff8ca6ec23d321c0e32f19d32db6","impliedFormat":1},{"version":"64d45d55ba6e42734ac326d2ea1f674c72837443eb7ff66c82f95e4544980713","impliedFormat":1},{"version":"f9b0dc747f13dcc09e40c26ddcc118b1bafc3152f771fdc32757a7f8916a11fc","impliedFormat":1},{"version":"7035fc608c297fd38dfe757d44d3483a570e2d6c8824b2d6b20294d617da64c6","impliedFormat":1},{"version":"22160a296186123d2df75280a1fab70d2105ce1677af1ebb344ffcb88eef6e42","impliedFormat":1},{"version":"9067b3fd7d71165d4c34fcbbf29f883860fd722b7e8f92e87da036b355a6c625","impliedFormat":1},{"version":"e01ab4b99cc4a775d06155e9cadd2ebd93e4af46e2723cb9361f24a4e1f178ef","impliedFormat":1},{"version":"9a13410635d5cc9c2882e67921c59fb26e77b9d99efa1a80b5a46fdc2954afce","impliedFormat":1},{"version":"b04862a4f44f78fd12ad8ed34ab81f9f254a87398568173694a78dc0bdebcd23","impliedFormat":1},{"version":"fa894bdddb2ba0e6c65ad0d88942cf15328941246410c502576124ef044746f9","impliedFormat":1},{"version":"59c5a06fa4bf2fa320a3c5289b6f199a3e4f9562480f59c0987c91dc135a1adf","impliedFormat":1},{"version":"456a9a12ad5d57af0094edf99ceab1804449f6e7bc773d85d09c56a18978a177","impliedFormat":1},{"version":"a8e2a77f445a8a1ce61bfd4b7b22664d98cf19b84ec6a966544d0decec18e143","impliedFormat":1},{"version":"6f6b0b477db6c4039410c7a13fe1ebed4910dedf644330269816df419cdb1c65","impliedFormat":1},{"version":"960b6e1edfb9aafbd560eceaae0093b31a9232ab273f4ed776c647b2fb9771da","impliedFormat":1},{"version":"530f4bee13cc07fd4e8bac69eeb728a6270ebafeab886c98624c699725b29755","impliedFormat":1},{"version":"a0db48d42371b223cea8fd7a41763d48f9166ecd4baecc9d29d9bb44cc3c2d83","impliedFormat":1},{"version":"aaf3c2e268f27514eb28255835f38445a200cd8bcfdff2c07c6227f67aaaf657","impliedFormat":1},{"version":"6ade56d2afdf75a9bd55cd9c8593ed1d78674804d9f6d9aba04f807f3179979e","impliedFormat":1},{"version":"b67acb619b761e91e3a11dddb98c51ee140361bc361eb17538f1c3617e3ec157","impliedFormat":1},{"version":"81b097e0f9f8d8c3d5fe6ba9dc86139e2d95d1e24c5ce7396a276dfbb2713371","impliedFormat":1},{"version":"692d56fff4fb60948fe16e9fed6c4c4eac9b263c06a8c6e63726e28ed4844fd4","impliedFormat":1},{"version":"f13228f2c0e145fc6dc64917eeef690fb2883a0ac3fa9ebfbd99616fd12f5629","impliedFormat":1},{"version":"d89b2b41a42c04853037408080a2740f8cd18beee1c422638d54f8aefe95c5b8","impliedFormat":1},{"version":"be5d39e513e3e0135068e4ebed5473ab465ae441405dce90ab95055a14403f64","impliedFormat":1},{"version":"97e320c56905d9fa6ac8bd652cea750265384f048505870831e273050e2878cc","impliedFormat":1},{"version":"9932f390435192eb93597f89997500626fb31005416ce08a614f66ec475c5c42","impliedFormat":1},{"version":"5d89ca552233ac2d61aee34b0587f49111a54a02492e7a1098e0701dedca60c9","impliedFormat":1},{"version":"1ee47a39f996d76442fe9777bb4446bd110f6828488db0e65cba817b4ffc5807","impliedFormat":1},{"version":"fdc4fd2c610b368104746960b45216bc32685927529dd871a5330f4871d14906","impliedFormat":1},{"version":"7b5d77c769a6f54ea64b22f1877d64436f038d9c81f1552ad11ed63f394bd351","impliedFormat":1},{"version":"4f7d54c603949113f45505330caae6f41e8dbb59841d4ae20b42307dc4579835","impliedFormat":1},{"version":"a71fd01a802624c3fce6b09c14b461cc7c7758aa199c202d423a7c89ad89943c","impliedFormat":1},{"version":"1ed0dc05908eb15f46379bc1cb64423760e59d6c3de826a970b2e2f6da290bf5","impliedFormat":1},{"version":"db89ef053f209839606e770244031688c47624b771ff5c65f0fa1ec10a6919f1","impliedFormat":1},{"version":"4d45b88987f32b2ac744f633ff5ddb95cd10f64459703f91f1633ff457d6c30d","impliedFormat":1},{"version":"8512fd4a480cd8ef8bf923a85ff5e97216fa93fb763ec871144a9026e1c9dade","impliedFormat":1},{"version":"2aa58b491183eedf2c8ae6ef9a610cd43433fcd854f4cc3e2492027fbe63f5ca","impliedFormat":1},{"version":"ce1f3439cb1c5a207f47938e68752730892fc3e66222227effc6a8b693450b82","impliedFormat":1},{"version":"295ce2cf585c26a9b71ba34fbb026d2b5a5f0d738b06a356e514f39c20bf38ba","impliedFormat":1},{"version":"342f10cf9ba3fbf52d54253db5c0ac3de50360b0a3c28e648a449e28a4ac8a8c","impliedFormat":1},{"version":"c485987c684a51c30e375d70f70942576fa86e9d30ee8d5849b6017931fccc6f","impliedFormat":1},{"version":"320bd1aa480e22cdd7cd3d385157258cc252577f4948cbf7cfdf78ded9d6d0a8","impliedFormat":1},{"version":"4ee053dfa1fce5266ecfae2bf8b6b0cb78a6a76060a1dcf66fb7215b9ff46b0b","impliedFormat":1},{"version":"1f84d8b133284b596328df47453d3b3f3817ad206cf3facf5eb64b0a2c14f6d7","impliedFormat":1},{"version":"5c75e05bc62bffe196a9b2e9adfa824ffa7b90d62345a766c21585f2ce775001","impliedFormat":1},{"version":"cc2eb5b23140bbceadf000ef2b71d27ac011d1c325b0fc5ecd42a3221db5fb2e","impliedFormat":1},{"version":"fd75cc24ea5ec28a44c0afc2f8f33da5736be58737ba772318ae3bdc1c079dc3","impliedFormat":1},{"version":"5ae43407346e6f7d5408292a7d957a663cc7b6d858a14526714a23466ac83ef9","impliedFormat":1},{"version":"c72001118edc35bbe4fff17674dc5f2032ccdbcc5bec4bd7894a6ed55739d31b","impliedFormat":1},{"version":"353196fd0dd1d05e933703d8dad664651ed172b8dfb3beaef38e66522b1e0219","impliedFormat":1},{"version":"670aef817baea9332d7974295938cf0201a2d533c5721fccf4801ba9a4571c75","impliedFormat":1},{"version":"3f5736e735ee01c6ecc6d4ab35b2d905418bb0d2128de098b73e11dd5decc34f","impliedFormat":1},{"version":"b64e159c49afc6499005756f5a7c2397c917525ceab513995f047cdd80b04bdf","impliedFormat":1},{"version":"f72b400dbf8f27adbda4c39a673884cb05daf8e0a1d8152eec2480f5700db36c","impliedFormat":1},{"version":"24509d0601fc00c4d77c20cacddbca6b878025f4e0712bddd171c7917f8cdcde","impliedFormat":1},{"version":"5f5baa59149d3d6d6cef2c09d46bb4d19beb10d6bee8c05b7850c33535b3c438","impliedFormat":1},{"version":"f17a51aae728f9f1a2290919cf29a927621b27f6ae91697aee78f41d48851690","impliedFormat":1},{"version":"be02e3c3cb4e187fd252e7ae12f6383f274e82288c8772bb0daf1a4e4af571ad","impliedFormat":1},{"version":"82ca40fb541799273571b011cd9de6ee9b577ef68acc8408135504ae69365b74","impliedFormat":1},{"version":"8fb6646db72914d6ef0692ea88b25670bbf5e504891613a1f46b42783ec18cce","impliedFormat":1},{"version":"b61efdebae3d131b6ad71bd2aa7cc4284e351481339bf66d84ee5ed86465bcc8","impliedFormat":1},{"version":"213aa21650a910d95c4d0bee4bb936ecd51e230c1a9e5361e008830dcc73bc86","impliedFormat":1},{"version":"874a8c5125ad187e47e4a8eacc809c866c0e71b619a863cc14794dd3ccf23940","impliedFormat":1},{"version":"c31db8e51e85ee67018ac2a40006910efbb58e46baea774cf1f245d99bf178b5","impliedFormat":1},{"version":"31fac222250b18ebac0158938ede4b5d245e67d29cd2ef1e6c8a5859d137d803","impliedFormat":1},{"version":"a9dfb793a7e10949f4f3ea9f282b53d3bd8bf59f5459bc6e618e3457ed2529f5","impliedFormat":1},{"version":"2a77167687b0ec0c36ef581925103f1dc0c69993f61a9dbd299dcd30601af487","impliedFormat":1},{"version":"0f23b5ce60c754c2816c2542b9b164d6cb15243f4cbcd11cfafcab14b60e04d0","impliedFormat":1},{"version":"813ce40a8c02b172fdbeb8a07fdd427ac68e821f0e20e3dc699fb5f5bdf1ef0a","impliedFormat":1},{"version":"5ce6b24d5fd5ebb1e38fe817b8775e2e00c94145ad6eedaf26e3adf8bb3903d0","impliedFormat":1},{"version":"6babca69d3ae17be168cfceb91011eed881d41ce973302ee4e97d68a81c514b4","impliedFormat":1},{"version":"3e0832bc2533c0ec6ffcd61b7c055adedcca1a45364b3275c03343b83c71f5b3","impliedFormat":1},{"version":"342418c52b55f721b043183975052fb3956dae3c1f55f965fedfbbf4ad540501","impliedFormat":1},{"version":"6a6ab1edb5440ee695818d76f66d1a282a31207707e0d835828341e88e0c1160","impliedFormat":1},{"version":"7e9b4669774e97f5dc435ddb679aa9e7d77a1e5a480072c1d1291892d54bf45c","impliedFormat":1},{"version":"de439ddbed60296fbd1e5b4d242ce12aad718dffe6432efcae1ad6cd996defd3","impliedFormat":1},{"version":"ce5fb71799f4dbb0a9622bf976a192664e6c574d125d3773d0fa57926387b8b2","impliedFormat":1},{"version":"b9c0de070a5876c81540b1340baac0d7098ea9657c6653731a3199fcb2917cef","impliedFormat":1},{"version":"cbc91ecd74d8f9ddcbcbdc2d9245f14eff5b2f6ae38371283c97ca7dc3c4a45f","impliedFormat":1},{"version":"3ca1d6f016f36c61a59483c80d8b9f9d50301fbe52a0dde288c1381862b13636","impliedFormat":1},{"version":"ecfef0c0ff0c80ac9a6c2fab904a06b680fb5dfe8d9654bb789e49c6973cb781","impliedFormat":1},{"version":"0ee2eb3f7c0106ccf6e388bc0a16e1b3d346e88ac31b6a5bbc15766e43992167","impliedFormat":1},{"version":"7a80da7b14bc7902b1da607c8b3734ad5740f8f5fade9a7bfbf753b9bba22652","impliedFormat":1},{"version":"7e46dd61422e5afe88c34e5f1894ae89a37b7a07393440c092e9dc4399820172","impliedFormat":1},{"version":"9df4f57d7279173b0810154c174aa03fd60f5a1f0c3acfe8805e55e935bdecd4","impliedFormat":1},{"version":"a02a51b68a60a06d4bd0c747d6fbade0cb87eefda5f985fb4650e343da424f12","impliedFormat":1},{"version":"0cf851e2f0ecf61cabe64efd72de360246bcb8c19c6ef7b5cbb702293e1ff755","impliedFormat":1},{"version":"0c0e0aaf37ab0552dffc13eb584d8c56423b597c1c49f7974695cb45e2973de6","impliedFormat":1},{"version":"e2e0cd8f6470bc69bbfbc5e758e917a4e0f9259da7ffc93c0930516b0aa99520","impliedFormat":1},{"version":"180de8975eff720420697e7b5d95c0ecaf80f25d0cea4f8df7fe9cf817d44884","impliedFormat":1},{"version":"424a7394f9704d45596dce70bd015c5afec74a1cc5760781dfda31bc300df88f","impliedFormat":1},{"version":"044a62b9c967ee8c56dcb7b2090cf07ef2ac15c07e0e9c53d99fab7219ee3d67","impliedFormat":1},{"version":"3903b01a9ba327aae8c7ea884cdabc115d27446fba889afc95fddca8a9b4f6e2","impliedFormat":1},{"version":"78fd8f2504fbfb0070569729bf2fe41417fdf59f8c3e975ab3143a96f03e0a4a","impliedFormat":1},{"version":"8afd4f91e3a060a886a249f22b23da880ec12d4a20b6404acc5e283ef01bdd46","impliedFormat":1},{"version":"72e72e3dea4081877925442f67b23be151484ef0a1565323c9af7f1c5a0820f0","impliedFormat":1},{"version":"fa8c21bafd5d8991019d58887add8971ccbe88243c79bbcaec2e2417a40af4e8","impliedFormat":1},{"version":"ab35597fd103b902484b75a583606f606ab2cef7c069fae6c8aca0f058cee77d","impliedFormat":1},{"version":"ca54ec33929149dded2199dca95fd8ad7d48a04f6e8500f3f84a050fa77fee45","impliedFormat":1},{"version":"cac7dcf6f66d12979cc6095f33edc7fbb4266a44c8554cd44cd04572a4623fd0","impliedFormat":1},{"version":"98af566e6d420e54e4d8d942973e7fbe794e5168133ad6658b589d9dfb4409d8","impliedFormat":1},{"version":"772b2865dd86088c6e0cab71e23534ad7254961c1f791bdeaf31a57a2254df43","impliedFormat":1},{"version":"21717957404f5b57e7c66b38d5ea832cc7eb5e81a6152242cf2e21893b1fcc5d","impliedFormat":1},{"version":"539dd525bf1d52094e7a35c2b4270bee757d3a35770462bcb01cd07683b4d489","impliedFormat":1},{"version":"86c0791444b64f452f8e513dd07c697313dfc5842916d73abbd2dabd28930367","impliedFormat":1},{"version":"7a705c800602314ac1e6ac059e2c0842fedace663a44bc240e0dc6bfefa2020b","impliedFormat":1},{"version":"8e42a36680c916db7b8951fea71ec2ce0092b82e44c8a33a436902244f0cc907","impliedFormat":1},{"version":"3e2f739bdfb6b194ae2af13316b4c5bb18b3fe81ac340288675f92ba2061b370","affectsGlobalScope":true,"impliedFormat":1},{"version":"b0f9ef6423d6b29dde29fd60d83d215796b2c1b76bfca28ac374ae18702cfb8e","impliedFormat":1},{"version":"ab82804a14454734010dcdcd43f564ff7b0389bee4c5692eec76ff5b30d4cf66","impliedFormat":1},{"version":"e7bb49fac2aa46a13011b5eb5e4a8648f70a28aea1853fab2444dd4fcb4d4ec7","impliedFormat":1},{"version":"464e45d1a56dae066d7e1a2f32e55b8de4bfb072610c3483a4091d73c9924908","impliedFormat":1},{"version":"da318e126ac39362c899829547cc8ee24fa3e8328b52cdd27e34173cf19c7941","impliedFormat":1},{"version":"24bd01a91f187b22456c7171c07dbf44f3ad57ebd50735aab5c13fa23d7114b4","impliedFormat":1},{"version":"4738eefeaaba4d4288a08c1c226a76086095a4d5bcc7826d2564e7c29da47671","impliedFormat":1},{"version":"736097ddbb2903bef918bb3b5811ef1c9c5656f2a73bd39b22a91b9cc2525e50","impliedFormat":1},{"version":"dbec715e9e82df297e49e3ed0029f6151aa40517ebfd6fcdba277a8a2e1d3a1b","impliedFormat":1},{"version":"097f1f8ca02e8940cfdcca553279e281f726485fa6fb214b3c9f7084476f6bcc","impliedFormat":1},{"version":"8f75e211a2e83ff216eb66330790fb6412dcda2feb60c4f165c903cf375633ee","impliedFormat":1},{"version":"c3fb0d969970b37d91f0dbf493c014497fe457a2280ac42ae24567015963dbf7","impliedFormat":1},{"version":"a9155c6deffc2f6a69e69dc12f0950ba1b4db03b3d26ab7a523efc89149ce979","impliedFormat":1},{"version":"c99faf0d7cb755b0424a743ea0cbf195606bf6cd023b5d10082dba8d3714673c","impliedFormat":1},{"version":"21942c5a654cc18ffc2e1e063c8328aca3b127bbf259c4e97906d4696e3fa915","impliedFormat":1},{"version":"bae8d023ef6b23df7da26f51cea44321f95817c190342a36882e93b80d07a960","impliedFormat":1},{"version":"26a770cec4bd2e7dbba95c6e536390fffe83c6268b78974a93727903b515c4e7","impliedFormat":1}],"root":[422,423,[970,973],975,[1165,1172],[1217,1220],[1328,1343],1357,[1524,1531],[1533,1535]],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":199,"noFallthroughCasesInSwitch":false,"noImplicitAny":false,"outDir":"./","removeComments":true,"skipLibCheck":true,"sourceMap":true,"strictBindCallApply":false,"strictNullChecks":true,"target":10},"referencedMap":[[1538,1],[1536,2],[1549,3],[1563,2],[1757,4],[1221,2],[1226,5],[1227,6],[1228,7],[1229,7],[1230,8],[1326,9],[1323,10],[1324,11],[1224,12],[1225,13],[1325,14],[1327,15],[346,2],[333,2],[70,2],[322,16],[323,16],[324,2],[325,7],[335,17],[326,16],[327,18],[328,2],[329,2],[330,16],[331,16],[332,16],[334,19],[342,20],[344,2],[341,2],[348,21],[345,2],[343,2],[339,22],[340,23],[347,24],[349,25],[336,2],[338,26],[337,27],[276,2],[279,28],[275,2],[1279,2],[277,2],[278,2],[352,29],[353,29],[354,29],[355,29],[356,29],[357,29],[358,29],[351,30],[359,29],[373,31],[360,29],[350,2],[361,29],[362,29],[363,29],[364,29],[365,29],[366,29],[367,29],[368,29],[369,29],[370,29],[371,29],[372,29],[381,32],[379,33],[378,2],[377,2],[380,34],[421,35],[71,2],[72,2],[73,2],[1261,36],[75,37],[1267,38],[1266,39],[265,40],[266,37],[401,2],[295,2],[296,2],[402,41],[267,2],[403,2],[404,42],[74,2],[269,43],[270,44],[268,45],[271,43],[272,2],[274,46],[286,47],[287,2],[292,48],[288,2],[289,2],[290,2],[291,2],[293,2],[294,49],[300,50],[303,51],[301,2],[302,2],[321,52],[304,2],[305,2],[1310,53],[285,54],[283,55],[281,56],[282,57],[284,2],[312,58],[306,2],[315,59],[308,60],[313,61],[311,62],[314,63],[309,64],[310,65],[298,66],[317,67],[299,68],[319,69],[320,70],[307,2],[316,2],[273,2],[280,71],[318,72],[387,73],[382,2],[388,74],[383,75],[384,76],[385,77],[386,78],[389,79],[394,80],[392,81],[393,81],[400,82],[390,2],[391,83],[395,80],[397,84],[399,85],[398,86],[413,87],[406,88],[407,89],[408,89],[409,90],[410,90],[411,89],[412,89],[405,91],[415,92],[414,93],[417,94],[416,95],[418,96],[374,97],[376,98],[297,2],[375,66],[419,99],[396,100],[420,101],[424,7],[540,102],[541,103],[545,104],[425,2],[431,105],[538,106],[539,107],[426,2],[427,2],[430,108],[428,2],[429,2],[543,2],[544,109],[542,110],[546,111],[1231,112],[1232,113],[1252,114],[1253,115],[1254,2],[1255,116],[1256,117],[1265,118],[1258,119],[1262,120],[1270,121],[1268,7],[1269,122],[1259,123],[1271,2],[1273,124],[1274,125],[1275,126],[1264,127],[1260,128],[1284,129],[1272,130],[1299,131],[1257,132],[1300,133],[1297,134],[1298,7],[1322,135],[1247,136],[1243,137],[1245,138],[1296,139],[1238,140],[1286,141],[1285,2],[1246,142],[1293,143],[1250,144],[1294,2],[1295,145],[1248,146],[1249,147],[1244,148],[1242,149],[1237,2],[1290,150],[1303,151],[1301,7],[1233,7],[1289,152],[1234,23],[1235,115],[1236,153],[1240,154],[1239,155],[1302,156],[1241,157],[1278,158],[1276,124],[1277,159],[1287,23],[1288,160],[1291,161],[1306,162],[1307,163],[1304,164],[1305,165],[1308,166],[1309,167],[1311,168],[1283,169],[1280,170],[1281,16],[1282,159],[1313,171],[1312,172],[1319,173],[1251,7],[1315,174],[1314,7],[1317,175],[1316,2],[1318,176],[1263,177],[1292,178],[1321,179],[1320,7],[961,180],[964,181],[962,2],[963,2],[942,2],[943,182],[968,183],[965,7],[966,184],[967,180],[969,185],[1173,2],[1174,2],[1177,186],[1199,187],[1178,2],[1179,2],[1180,7],[1182,2],[1181,2],[1200,2],[1183,2],[1184,188],[1185,2],[1186,7],[1187,2],[1188,189],[1190,190],[1191,2],[1193,191],[1194,190],[1195,192],[1201,193],[1196,189],[1197,2],[1202,194],[1207,195],[1216,196],[1198,2],[1189,189],[1206,197],[1175,2],[1192,198],[1204,199],[1205,2],[1203,2],[1208,200],[1213,201],[1209,7],[1210,7],[1211,7],[1212,7],[1176,2],[1214,2],[1215,202],[1356,203],[1347,204],[1353,2],[1344,2],[1345,205],[1348,206],[1349,7],[1350,207],[1346,208],[1351,209],[1352,210],[1354,211],[1355,2],[936,212],[934,213],[935,214],[940,215],[933,216],[938,217],[937,218],[939,219],[941,220],[1091,221],[1092,222],[1093,221],[1094,221],[1095,221],[1096,221],[1097,221],[1098,222],[1099,221],[1106,223],[1100,221],[1101,221],[1102,222],[1103,221],[1104,221],[1105,221],[1107,224],[1090,225],[1073,226],[1071,2],[1069,2],[1074,227],[1072,228],[1070,2],[1080,229],[1076,230],[1082,231],[1083,232],[1079,233],[1078,234],[977,235],[1081,236],[1075,237],[1068,238],[1084,239],[1086,240],[1085,234],[990,221],[991,221],[992,221],[993,221],[994,221],[995,241],[996,222],[999,221],[984,221],[1000,242],[1001,222],[985,221],[1002,221],[986,221],[987,221],[1038,2],[1003,221],[1004,221],[988,221],[1005,221],[1006,243],[1007,221],[1008,221],[976,221],[1010,244],[1012,244],[1013,244],[1009,221],[1011,244],[1014,244],[1015,221],[1016,221],[1017,222],[1018,222],[1023,221],[1024,221],[1019,221],[1021,221],[1022,221],[1067,245],[1025,221],[1026,221],[1027,221],[1028,246],[997,222],[1029,221],[1030,221],[1031,221],[1032,247],[1033,221],[1034,221],[1035,221],[1020,221],[989,221],[1036,222],[1037,221],[1064,221],[1065,221],[1066,221],[1039,248],[1040,222],[1042,221],[1041,222],[1043,221],[1044,221],[1045,221],[1046,221],[1047,221],[1048,221],[1049,222],[1050,222],[1051,249],[1052,221],[1053,248],[1055,222],[1054,222],[1056,222],[1057,222],[998,222],[1058,221],[1059,221],[1060,221],[1061,221],[1062,222],[1063,222],[978,2],[979,250],[1077,251],[980,252],[982,253],[981,2],[1089,254],[1088,255],[1087,256],[983,251],[1108,222],[1109,221],[1110,222],[1111,221],[1112,221],[1113,221],[1114,221],[1115,222],[1123,257],[1116,222],[1117,221],[1118,221],[1119,222],[1120,221],[1121,221],[1122,221],[1124,258],[1127,259],[1128,260],[1125,222],[1129,261],[1130,221],[1131,262],[1132,221],[1133,263],[1141,264],[1134,265],[1135,266],[1126,267],[1136,268],[1137,221],[1138,221],[1139,221],[1140,222],[1142,269],[1143,270],[1146,271],[1145,272],[1147,221],[1149,221],[1144,273],[1148,272],[1162,274],[1150,275],[1151,276],[1152,270],[1153,277],[1154,278],[1161,279],[1156,279],[1157,279],[1158,280],[1160,279],[1159,281],[1155,275],[1163,282],[1756,283],[1567,284],[1568,285],[1705,284],[1706,286],[1687,287],[1688,288],[1571,289],[1572,290],[1642,291],[1643,292],[1616,284],[1617,293],[1610,284],[1611,294],[1702,295],[1700,296],[1701,2],[1716,297],[1717,298],[1586,299],[1587,300],[1718,301],[1719,302],[1720,303],[1721,304],[1578,305],[1579,306],[1704,307],[1703,308],[1689,284],[1690,309],[1582,310],[1583,311],[1606,2],[1607,312],[1724,313],[1722,314],[1723,315],[1725,316],[1726,317],[1729,318],[1727,319],[1730,296],[1728,320],[1731,321],[1734,322],[1732,323],[1733,324],[1735,325],[1584,305],[1585,326],[1710,327],[1707,328],[1708,329],[1709,2],[1685,330],[1686,331],[1630,332],[1629,333],[1627,334],[1626,335],[1628,336],[1737,337],[1736,338],[1739,339],[1738,340],[1615,341],[1614,284],[1593,342],[1591,343],[1590,289],[1592,344],[1742,345],[1746,346],[1740,347],[1741,348],[1743,345],[1744,345],[1745,345],[1632,349],[1631,289],[1648,350],[1646,351],[1647,296],[1644,352],[1645,353],[1581,354],[1580,284],[1638,355],[1569,284],[1570,356],[1637,357],[1675,358],[1678,359],[1676,360],[1677,361],[1589,362],[1588,284],[1680,363],[1679,289],[1658,364],[1657,284],[1613,365],[1612,284],[1684,366],[1683,367],[1652,368],[1651,369],[1649,370],[1650,371],[1641,372],[1640,373],[1639,374],[1748,375],[1747,376],[1665,377],[1664,378],[1663,379],[1712,380],[1711,2],[1656,381],[1655,382],[1653,383],[1654,384],[1634,385],[1633,289],[1577,386],[1576,387],[1575,388],[1574,389],[1573,390],[1669,391],[1668,392],[1599,393],[1598,289],[1603,394],[1602,395],[1667,396],[1666,284],[1713,2],[1715,397],[1714,2],[1672,398],[1671,399],[1670,400],[1750,401],[1749,402],[1752,403],[1751,404],[1698,405],[1699,406],[1697,407],[1636,408],[1635,2],[1682,409],[1681,410],[1609,411],[1608,284],[1660,412],[1659,284],[1566,413],[1565,2],[1619,414],[1620,415],[1625,416],[1618,417],[1622,418],[1621,419],[1623,420],[1624,421],[1674,422],[1673,289],[1605,423],[1604,289],[1755,424],[1754,425],[1753,426],[1692,427],[1691,284],[1662,428],[1661,284],[1597,429],[1595,430],[1594,289],[1596,431],[1694,432],[1693,284],[1601,433],[1600,284],[1696,434],[1695,284],[1541,435],[1537,1],[1539,436],[1540,1],[1543,437],[1542,438],[1544,2],[1552,439],[1548,440],[1547,441],[1545,2],[1556,442],[1559,443],[1557,2],[1560,2],[1561,444],[1562,445],[1763,446],[1546,2],[953,447],[946,448],[950,449],[948,450],[951,451],[949,452],[952,453],[947,2],[945,454],[944,455],[1764,2],[483,456],[484,456],[485,457],[437,458],[486,459],[487,460],[488,461],[432,2],[435,462],[433,2],[434,2],[489,463],[490,464],[491,465],[492,466],[493,467],[494,468],[495,468],[496,469],[497,470],[498,471],[499,472],[438,2],[436,2],[500,473],[501,474],[502,475],[536,476],[503,477],[504,2],[505,478],[506,479],[507,480],[508,481],[509,482],[510,483],[511,484],[512,485],[513,486],[514,486],[515,487],[516,2],[517,488],[518,489],[520,490],[519,491],[521,492],[522,493],[523,494],[524,495],[525,496],[526,497],[527,498],[528,499],[529,500],[530,501],[531,502],[532,503],[533,504],[439,2],[440,2],[441,2],[480,505],[481,2],[482,2],[534,506],[535,507],[1554,2],[1555,2],[1553,508],[1558,509],[1765,2],[1774,510],[1766,2],[1769,511],[1772,512],[1773,513],[1767,514],[1770,515],[1768,516],[1778,517],[1776,518],[1777,519],[1775,520],[1400,521],[1391,2],[1392,2],[1393,2],[1394,2],[1395,2],[1396,2],[1397,2],[1398,2],[1399,2],[1779,2],[1780,522],[974,2],[442,2],[1223,523],[1564,2],[1514,524],[1515,524],[1516,524],[1522,525],[1517,524],[1518,524],[1519,524],[1520,524],[1521,524],[1505,526],[1504,2],[1523,527],[1511,2],[1507,528],[1498,2],[1497,2],[1499,2],[1500,524],[1501,529],[1513,530],[1502,524],[1503,524],[1508,531],[1509,532],[1510,524],[1506,2],[1512,2],[1361,2],[1480,533],[1484,533],[1483,533],[1481,533],[1482,533],[1485,533],[1364,533],[1376,533],[1365,533],[1378,533],[1380,533],[1374,533],[1373,533],[1375,533],[1379,533],[1381,533],[1366,533],[1377,533],[1367,533],[1369,534],[1370,533],[1371,533],[1372,533],[1388,533],[1387,533],[1488,535],[1382,533],[1384,533],[1383,533],[1385,533],[1386,533],[1487,533],[1486,533],[1389,533],[1471,533],[1470,533],[1401,536],[1402,536],[1404,533],[1448,533],[1469,533],[1405,536],[1449,533],[1446,533],[1450,533],[1406,533],[1407,533],[1408,536],[1451,533],[1445,536],[1403,536],[1452,533],[1409,536],[1453,533],[1433,533],[1410,536],[1411,533],[1412,533],[1443,536],[1415,533],[1414,533],[1454,533],[1455,533],[1456,536],[1417,533],[1419,533],[1420,533],[1426,533],[1427,533],[1421,536],[1457,533],[1444,536],[1422,533],[1423,533],[1458,533],[1424,533],[1416,536],[1459,533],[1442,533],[1460,533],[1425,536],[1428,533],[1429,533],[1447,536],[1461,533],[1462,533],[1441,537],[1418,533],[1463,536],[1464,533],[1465,533],[1466,533],[1467,536],[1430,533],[1468,533],[1434,533],[1431,536],[1432,536],[1413,533],[1435,533],[1438,533],[1436,533],[1437,533],[1390,533],[1478,533],[1472,533],[1473,533],[1475,533],[1476,533],[1474,533],[1479,533],[1477,533],[1363,538],[1496,539],[1494,540],[1495,541],[1493,542],[1492,533],[1491,543],[1360,2],[1362,2],[1358,2],[1489,2],[1490,544],[1368,538],[1359,2],[955,2],[954,2],[960,545],[956,546],[959,547],[958,548],[957,2],[537,549],[1551,550],[1550,551],[1762,552],[1771,553],[1532,554],[1759,555],[1760,556],[1761,2],[1222,2],[1440,557],[1439,2],[1758,558],[1164,559],[69,2],[264,560],[237,2],[215,561],[213,561],[263,562],[228,563],[227,563],[128,564],[79,565],[235,564],[236,564],[238,566],[239,564],[240,567],[139,568],[241,564],[212,564],[242,564],[243,569],[244,564],[245,563],[246,570],[247,564],[248,564],[249,564],[250,564],[251,563],[252,564],[253,564],[254,564],[255,564],[256,571],[257,564],[258,564],[259,564],[260,564],[261,564],[78,562],[81,567],[82,567],[83,567],[84,567],[85,567],[86,567],[87,567],[88,564],[90,572],[91,567],[89,567],[92,567],[93,567],[94,567],[95,567],[96,567],[97,567],[98,564],[99,567],[100,567],[101,567],[102,567],[103,567],[104,564],[105,567],[106,567],[107,567],[108,567],[109,567],[110,567],[111,564],[113,573],[112,567],[114,567],[115,567],[116,567],[117,567],[118,571],[119,564],[120,564],[134,574],[122,575],[123,567],[124,567],[125,564],[126,567],[127,567],[129,576],[130,567],[131,567],[132,567],[133,567],[135,567],[136,567],[137,567],[138,567],[140,577],[141,567],[142,567],[143,567],[144,564],[145,567],[146,578],[147,578],[148,578],[149,564],[150,567],[151,567],[152,567],[157,567],[153,567],[154,564],[155,567],[156,564],[158,567],[159,567],[160,567],[161,567],[162,567],[163,567],[164,564],[165,567],[166,567],[167,567],[168,567],[169,567],[170,567],[171,567],[172,567],[173,567],[174,567],[175,567],[176,567],[177,567],[178,567],[179,567],[180,567],[181,579],[182,567],[183,567],[184,567],[185,567],[186,567],[187,567],[188,564],[189,564],[190,564],[191,564],[192,564],[193,567],[194,567],[195,567],[196,567],[214,580],[262,564],[199,581],[198,582],[222,583],[221,584],[217,585],[216,584],[218,586],[207,587],[205,588],[220,589],[219,586],[206,2],[208,590],[121,591],[77,592],[76,567],[211,2],[203,593],[204,594],[201,2],[202,595],[200,567],[209,596],[80,597],[229,2],[230,2],[223,2],[226,563],[225,2],[231,2],[232,2],[224,598],[233,2],[234,2],[197,599],[210,600],[615,601],[614,2],[636,2],[554,602],[616,2],[563,2],[553,2],[680,2],[767,2],[717,603],[923,604],[764,605],[922,606],[921,606],[766,2],[617,607],[724,608],[720,609],[918,605],[888,2],[838,610],[839,611],[840,611],[852,611],[845,612],[844,613],[846,611],[847,611],[851,614],[849,615],[879,616],[876,2],[875,617],[877,611],[891,618],[889,2],[885,619],[890,2],[884,620],[853,2],[854,2],[857,2],[855,2],[856,2],[858,2],[859,2],[862,2],[860,2],[861,2],[863,2],[864,2],[559,621],[832,2],[833,2],[834,2],[835,2],[560,622],[836,2],[837,2],[866,623],[591,624],[865,2],[594,2],[595,625],[596,625],[843,626],[841,626],[842,2],[551,624],[590,627],[886,628],[558,2],[850,621],[878,216],[848,629],[867,625],[868,630],[869,631],[870,631],[871,631],[872,631],[873,632],[874,632],[883,633],[882,2],[880,2],[881,634],[887,635],[710,2],[711,636],[714,603],[715,603],[716,603],[685,637],[686,638],[705,603],[622,639],[709,603],[627,2],[704,640],[664,641],[628,642],[687,2],[688,643],[708,603],[702,2],[703,644],[689,637],[690,645],[584,2],[707,603],[712,2],[713,646],[718,2],[719,647],[585,648],[691,603],[706,603],[693,2],[694,2],[695,2],[696,2],[697,2],[698,2],[692,2],[699,2],[920,2],[700,649],[701,650],[557,2],[582,2],[613,2],[587,2],[589,2],[675,2],[583,626],[618,2],[621,2],[681,651],[670,652],[721,653],[610,654],[601,2],[592,655],[593,656],[927,618],[602,2],[605,655],[588,2],[603,611],[609,657],[604,632],[597,658],[600,628],[770,659],[793,659],[774,659],[777,660],[779,659],[828,659],[805,659],[769,659],[797,659],[825,659],[776,659],[806,659],[791,659],[794,659],[782,659],[815,661],[811,659],[804,659],[786,662],[785,662],[802,660],[812,659],[830,663],[831,664],[816,665],[808,659],[789,659],[775,659],[778,659],[810,659],[795,660],[803,659],[800,666],[817,666],[801,660],[787,659],[796,659],[829,659],[819,659],[807,659],[827,659],[809,659],[788,659],[823,659],[813,659],[790,659],[818,659],[826,659],[792,659],[814,662],[798,659],[822,667],[773,667],[784,659],[783,659],[781,668],[768,2],[780,659],[824,666],[820,666],[799,666],[821,666],[629,669],[635,670],[634,671],[625,672],[624,2],[633,673],[632,673],[631,673],[911,674],[630,675],[672,2],[623,2],[640,676],[639,677],[892,669],[894,669],[895,669],[896,669],[897,669],[898,669],[899,678],[904,669],[900,669],[901,669],[910,669],[902,669],[903,669],[905,669],[906,669],[907,669],[908,669],[893,669],[909,679],[598,2],[765,680],[932,681],[912,682],[913,683],[916,684],[914,683],[611,685],[612,686],[915,683],[657,2],[562,687],[757,2],[571,2],[576,688],[758,689],[755,2],[661,2],[762,690],[761,2],[727,2],[756,611],[753,2],[754,691],[763,692],[752,2],[751,632],[572,632],[556,693],[725,694],[759,2],[760,2],[608,633],[561,2],[578,628],[658,695],[581,696],[580,697],[577,698],[726,699],[662,700],[569,701],[728,702],[574,703],[573,704],[570,705],[607,706],[548,2],[575,2],[549,2],[550,2],[552,2],[555,689],[547,2],[599,2],[606,2],[579,707],[684,708],[924,709],[683,685],[925,710],[926,711],[568,712],[772,713],[771,714],[626,715],[735,716],[677,717],[744,718],[678,719],[746,720],[736,721],[748,722],[749,723],[734,2],[742,724],[665,725],[738,726],[737,726],[723,727],[722,727],[747,728],[669,729],[667,730],[668,730],[739,2],[750,731],[740,2],[745,732],[674,733],[743,734],[741,2],[676,735],[666,2],[733,736],[917,737],[919,738],[930,2],[671,739],[638,2],[682,740],[637,2],[673,741],[679,742],[656,2],[564,2],[660,2],[619,2],[729,2],[731,743],[641,2],[566,216],[928,744],[586,745],[732,746],[659,747],[565,748],[663,749],[620,750],[730,751],[642,752],[567,753],[655,754],[643,2],[654,755],[649,756],[650,757],[653,653],[652,758],[648,757],[651,758],[644,653],[645,653],[646,653],[647,759],[929,760],[931,761],[66,2],[67,2],[13,2],[11,2],[12,2],[17,2],[16,2],[2,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[25,2],[3,2],[26,2],[27,2],[4,2],[28,2],[32,2],[29,2],[30,2],[31,2],[33,2],[34,2],[35,2],[5,2],[36,2],[37,2],[38,2],[39,2],[6,2],[43,2],[40,2],[41,2],[42,2],[44,2],[7,2],[45,2],[50,2],[51,2],[46,2],[47,2],[48,2],[49,2],[8,2],[55,2],[52,2],[53,2],[54,2],[56,2],[9,2],[57,2],[58,2],[59,2],[61,2],[60,2],[62,2],[63,2],[10,2],[68,2],[64,2],[1,2],[65,2],[15,2],[14,2],[458,762],[468,763],[457,762],[478,764],[449,765],[448,766],[477,549],[471,767],[476,768],[451,769],[465,770],[450,771],[474,772],[446,773],[445,549],[475,774],[447,775],[452,776],[453,2],[456,776],[443,2],[479,777],[469,778],[460,779],[461,780],[463,781],[459,782],[462,783],[472,549],[454,784],[455,785],[464,786],[444,787],[467,778],[466,776],[470,2],[473,788],[423,789],[1531,790],[422,7],[1530,791],[1171,792],[1170,793],[1169,794],[1534,795],[1535,2],[1172,796],[1357,797],[1219,798],[1165,799],[1166,800],[1339,801],[1343,802],[1525,803],[1524,803],[1338,216],[1328,216],[1341,216],[1342,216],[1332,216],[1333,216],[1331,804],[1330,804],[1329,804],[1337,805],[1526,806],[1527,807],[1334,808],[1340,809],[1533,810],[973,216],[1336,811],[1528,812],[1335,813],[1220,216],[972,216],[1167,218],[975,800],[1218,814],[1168,815],[1217,816],[970,216],[1529,817],[971,818]],"semanticDiagnosticsPerFile":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540,1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780],"version":"5.9.3"} \ No newline at end of file +{"fileNames":["../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es5.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2015.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2016.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2017.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2018.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2019.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2020.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2021.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2022.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2023.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.dom.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.scripthost.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.decorators.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../../../../../../usr/local/lib/node_modules/@nestjs/cli/node_modules/typescript/lib/lib.es2023.full.d.ts","../src/app.service.ts","../src/app.controller.ts","../src/maps/road-speed-profile.entity.ts","../src/maps/road-stat.entity.ts","../src/maps/traffic-grid.service.ts","../src/geocoding/entities/base-place.entity.ts","../src/geocoding/entities/place-syria.entity.ts","../src/geocoding/entities/place-jordan.entity.ts","../src/geocoding/entities/place-egypt.entity.ts","../src/geocoding/entities/osm-area.entity.ts","../src/geocoding/entities/osm-point-with-area.entity.ts","../src/geocoding/geocoding.service.ts","../src/common/redis.service.ts","../src/maps/maps.service.ts","../src/auth/entities/tenant.entity.ts","../src/auth/entities/api-key.entity.ts","../src/auth/auth.service.ts","../src/common/guards/api-key.guard.ts","../src/maps/maps.controller.ts","../src/maps/candidate-road.entity.ts","../src/common/redis.module.ts","../src/geocoding/geocoding-init.service.ts","../src/geocoding/entities/admin-boundary.entity.ts","../src/geocoding/admin-boundaries.service.ts","../src/geocoding/jordan-research.service.ts","../src/geocoding/entities/neighborhood-point.entity.ts","../src/geocoding/entities/neighborhood-polygon.entity.ts","../src/geocoding/administrative-linking.service.ts","../src/geocoding/entities/map-candidate.entity.ts","../src/geocoding/map-refinement.service.ts","../src/common/guards/admin.guard.ts","../src/common/guards/rate-limiter.guard.ts","../src/geocoding/dto/search-query.dto.ts","../src/geocoding/dto/reverse-geocode.dto.ts","../src/geocoding/geocoding.controller.ts","../src/auth/firebase-admin.service.ts","../src/auth/guards/firebase-auth.guard.ts","../src/geocoding/map-refinement.controller.ts","../src/geocoding/index-refresh.service.ts","../src/geocoding/geocoding.module.ts","../src/maps/maps.module.ts","../src/auth/dto/management/create-key.dto.ts","../src/auth/tenant.controller.ts","../src/auth/auth.module.ts","../src/usage/usage.entity.ts","../src/usage/usage.service.ts","../src/usage/usage.controller.ts","../src/usage/usage.module.ts","../src/billing/entities/subscription.entity.ts","../src/billing/entities/transaction.entity.ts","../src/common/mail.service.ts","../src/billing/billing.service.ts","../src/billing/providers/paymob.provider.ts","../src/billing/providers/binance.provider.ts","../src/billing/billing.controller.ts","../src/billing/billing.module.ts","../src/common/mail.module.ts","../src/usage/usage.interceptor.ts","../src/app.module.ts","../src/main.ts","../src/common/cache.service.ts","../src/common/gis.utils.ts","../src/common/telegram.service.ts"],"fileIdsList":[[68],[107,108,111,115,123,124,125],[82,83,84,88,103,104,110],[80,82,83],[82],[83],[84,103],[84,104,109],[104,117,119,120,121],[82,116,117,119,120,121,122],[82,116,117,118],[84],[118],[80],[90],[74,75,90,93,94],[73],[74],[79,85,91,92,95,97,98,99,100,101],[74,75,76,77,78,79,89,90,91,92,93,94,95,96,97,102,105,106],[73,74,75,76,77,78],[78],[75],[96,97,104],[74,75,76,96],[126],[81,85],[71,72,81,86,87,88,107],[70,71,72,79,80],[104,113],[82,113],[112,113,114],[80,112]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"785921608325fa246b450f05b238f4b3ed659f1099af278ce9ebbc9416a13f1d","impliedFormat":1},{"version":"eaf8514ce110fa428a93a27408df4d06d133dbd9ed0a775c315ddfdd507853a9","impliedFormat":1},{"version":"260f889b9e2b69f77be1155348eb345166aec664b3efff6720053c6844a41f28","impliedFormat":1},{"version":"e3f0e5554c466117e304f2703a0f697a405488d919475087b83841d6bbb80651","impliedFormat":1},{"version":"69dc7b44b233cc08e4d8712ecf69d4c301356cec6fe762f6c0758b9b10d9bc86","impliedFormat":1},{"version":"96b88ce757b76ef12b429a4815badd3ae2f5766e051203118446eb87823ff501","impliedFormat":1},{"version":"af50464960c41782733b598982db664158b6855228152e5d0d530ebf6ba14144","impliedFormat":1},{"version":"53ee526bc778d810bd983b4efab47d937e55ecb9114a4bd11056aacb8e8c49ec","impliedFormat":1},{"version":"5f719b3a2cddb91f777cb77edf4968f1864accd22d7d4c999071fdffe718fbb0","impliedFormat":1},{"version":"649fcf380722edcad5e18361468184fdfdf5867840e842a82789e5e8d3fc4ddb","impliedFormat":1},{"version":"6d7533ae0fb0da532e2a20ebf88d775194eeb42a9dc9f44fb8ad786e3c216b8f","impliedFormat":1},{"version":"b8087f1c249e60cfeefc6dfa1521a3b470b2c7fab4976ece0e873b18dbecec02","impliedFormat":1},{"version":"558ebe6fb409c7a0eb0636b49f270a57f00e80b2d7d5642442f0b8abf6b6e038","impliedFormat":1},{"version":"126e491676f1bb1a912c489b378654942a1e7bdaee44264ef809bc4f73d792b6","impliedFormat":1},{"version":"3fffc37fdd5d8a763c5252a0b25939f3d4c8fcf135eb4598c870c22d6373cb81","impliedFormat":1},{"version":"84fa569e0d12d9a93154bec14bea08bc7485c0bb98ca254835c3b88110f246cc","impliedFormat":1},{"version":"0b29f27b3b0d6a5158bf1a791a3be2620a73484b7b4d5086dfbb6b1ac96ac699","impliedFormat":1},{"version":"6176217cbe9d0afcf637165e5286dcf25a70888e8a90ab38b00dbf8bcea4cbee","impliedFormat":1},{"version":"750635d38fb66b2e7fe901509aa08d10e2c371c69a800b9b5c1103008509de19","impliedFormat":1},{"version":"eb7079c6d55625f087761c58cf6bd270a6c613b81bcd17afc90f0843d76b3351","impliedFormat":1},{"version":"ab3bbca008a833d6bf71e028f59b14d1ca761940e80df3a71b1359dd1dccdc4f","impliedFormat":1},{"version":"e3c7cabc1064bac241cc7c2225b0cf5c5333198f5932f84af5c653eeaeace4ec","impliedFormat":1},{"version":"dbfe9f38341fb1b6c757e826e62fe1b3c54e5e8edb0c3d44f865230d403fb7e2","impliedFormat":1},{"version":"32965ebab2a14bf52025e2bd336a7d281339b34fdb91fbd3cd7bc4818b67d519","impliedFormat":1},{"version":"4ba32a705197ca7ada81364105283b5e6b8ae59007dc33956db7b0ce37e42637","impliedFormat":1},{"version":"ed73470b9a7898300d2fbf2cdbc6ea920c9fc1fe2b5d7d14b6294410ab7c73ef","impliedFormat":1},{"version":"ae42ca043ffd6963b304be53b1168fbde1e9b5855ff6df56d105252ac5bacd38","impliedFormat":1},{"version":"8911b182d97bc41c4ef6fa06ebb129e8d7fb743e15a8876c096c78cfa487ac98","impliedFormat":1},{"version":"65d3eeba663346fe1fc1a7cfe888fdf484ed4097bbe8dd38486d0a6987a32ff0","impliedFormat":1},{"version":"115e15166167a4cb8129e08ac34a54fe5ccfc6ef005ca51852fb5d7487490987","impliedFormat":1},{"version":"f2f99468eccf92d40a333ecdf47f7f6ed71d35823d5efa3f1438b8c046f344fd","impliedFormat":1},{"version":"6b6831af0f6a2263bbafbbc35229231bad9b97d42e53dcbbac5dc02f3c2c0199","impliedFormat":1},{"version":"63485ea62e18c17b751b0b89f1ca0749f789918d91beec428f5b5cce6ab83f49","impliedFormat":1},{"version":"c1f0a7b6e7765d68ad278e2a19fade88f2f95a4f02617fe4cb0fe129a457d35d","impliedFormat":1},{"version":"5bc500a7075b779beb853ad8fdc1350a105e593d8e4d15abc7d169aab48cdf80","impliedFormat":1},{"version":"974108177e65ff71dfc6f0b915b8a2b37e84725b7b5fff5f28c332d8b9a3a0f8","impliedFormat":1},{"version":"eb243124125039a8b8ac09d2d108185cec48d391189b5478c444acae3401609f","impliedFormat":1},{"version":"8eb874fb2a1283708f068b2a1ddcd69c548775b9a45baeba3545f9892e6db746","impliedFormat":1},{"version":"8d21470af0109fb0bde30d8a6a91db8d1903be5a175827bdd2e6d5d479e67deb","impliedFormat":1},{"version":"395b0666f350f34497a14b9b28160b9ba9a312549b239cd71cd559bc55a1c199","impliedFormat":1},{"version":"a60581fad4a734a942554110f23b64483fb108667ffff0a4eb05b066bde39a69","impliedFormat":1},{"version":"b6373ffa3726c9c11253a1bd18d0c327a987591acf277bd76067996d8e148341","impliedFormat":1},{"version":"5b01a11756ad589c046ca78f0fa83f4ac123a011d7bca8bb7dcabb4fd488aec3","impliedFormat":1},{"version":"1a4871140a3916b2cc5f73f141d3e342e2e3edc5fa5bfc17b5a627e60e4bb191","impliedFormat":1},{"version":"3d7380f6a20c8e2b11b9153e99b3505ecae1e3d720a5ada600f48eab6794d38e","impliedFormat":1},{"version":"d428f987cc619731d3d924902091ebb75b4dc857006b715972152b8bec8cb405","impliedFormat":1},{"version":"d4107d5b85a0dc57b1497017c99230238163e16746951ea1e28bb3857643b699","impliedFormat":1},{"version":"1606dbc55b7b0412b8b9cbee85ba9e8dc96a71b00d337cecb54bed2e507e0c6a","impliedFormat":1},{"version":"07d95a22db56c66d5400592c8551c9fe77c1506c71e84e028ea69d810decea9e","impliedFormat":1},{"version":"77b6189e8dc7c00910bcc4617fed57bd9d44541833555a1674c4afcdfce981ba","impliedFormat":1},{"version":"37114254bb61328d042c8760906cb633d00c8ab8a823a4ce6a77ef3e85b1ea4b","impliedFormat":1},{"version":"04e8aba6ada316e88f5c316b5fed380aba2020ab893278cee0e26ef33c1f68c7","impliedFormat":1},{"version":"a79eff56bfb3decc611b25dbf726c363801d993e55f5cfa0fbc5dfc4144af55a","impliedFormat":1},{"version":"c2bc8c4b1c729b329fbfdd073fc4a349eb036f05d1eaf9e3eaba5e6e6f17f458","impliedFormat":1},{"version":"8c704b246503a5755c7e93b79db76c14d95141def355dd195d34b1b745d373d0","impliedFormat":1},{"version":"fcf849a9820830dc6047f8bb0c9ba1ddb068ccc756104fab63dd598cd3692638","impliedFormat":1},{"version":"1e249a42cb8025137cd7d37637db792e2493692e08dea0ad3ba86f2e5987de7c","impliedFormat":1},{"version":"70301f9d773bdf2b59a9e0c40d3669eb04c67e126728f670ffbd1f76c69ce94a","impliedFormat":1},{"version":"fd30224939eec8d923c08a31ffc803663c563261fcdff04b65c83f054e64ea30","impliedFormat":1},{"version":"a59a32a1ba149bd51c08ec8e00d76c57e85c9bb539552e345f4b3fac347a8416","impliedFormat":1},{"version":"c49ac3764b2f2d5a75519cde11c25cdce26b18009dfd71fc6857bd509d4c1b59","impliedFormat":1},{"version":"d7ceb4884ccac95cfc24a6773de92540ebc4094529cfcedac6bab32ab29da75b","impliedFormat":1},{"version":"57b33201d9aa377cc352fbb181da19c91b91f099a622f12cc661e5b89a86a834","impliedFormat":1},{"version":"1a4ffc0b4026ed85a0e74d61887e7c105f2aa3e92a08aa6fe8c9fecc4e158532","impliedFormat":1}],"root":[[68,130]],"options":{"allowSyntheticDefaultImports":true,"declaration":true,"emitDecoratorMetadata":true,"esModuleInterop":true,"experimentalDecorators":true,"module":199,"noFallthroughCasesInSwitch":false,"noImplicitAny":false,"outDir":"./","removeComments":true,"skipLibCheck":true,"sourceMap":true,"strictBindCallApply":false,"strictNullChecks":true,"target":10},"referencedMap":[[69,1],[126,2],[111,3],[84,4],[83,5],[82,6],[104,7],[110,8],[122,9],[123,10],[119,11],[116,5],[98,5],[85,12],[124,13],[88,14],[91,15],[95,16],[96,17],[76,17],[75,17],[74,17],[89,18],[102,19],[107,20],[79,21],[106,22],[92,23],[105,24],[97,25],[127,26],[86,27],[108,28],[81,29],[114,30],[125,31],[115,32],[113,33]],"semanticDiagnosticsPerFile":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130],"version":"5.9.3"} \ No newline at end of file diff --git a/apps/api/dist/usage/usage.controller.d.ts b/apps/api/dist/usage/usage.controller.d.ts new file mode 100644 index 0000000..fb9e856 --- /dev/null +++ b/apps/api/dist/usage/usage.controller.d.ts @@ -0,0 +1,17 @@ +import { UsageService } from './usage.service'; +export declare class UsageController { + private usageService; + constructor(usageService: UsageService); + getSummary(req: any): Promise<{ + limit: any; + percentage: string; + plan: any; + monthlyUsage: number; + monthlyLimit: any; + totalToday: number; + avgLatency: number; + successRate: number; + lastUpdated: Date; + }>; + getHistory(req: any, days?: number): Promise<any>; +} diff --git a/apps/api/dist/usage/usage.controller.js b/apps/api/dist/usage/usage.controller.js new file mode 100644 index 0000000..16eb613 --- /dev/null +++ b/apps/api/dist/usage/usage.controller.js @@ -0,0 +1,72 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UsageController = void 0; +const common_1 = require("@nestjs/common"); +const usage_service_1 = require("./usage.service"); +const firebase_auth_guard_1 = require("../auth/guards/firebase-auth.guard"); +const swagger_1 = require("@nestjs/swagger"); +let UsageController = class UsageController { + usageService; + constructor(usageService) { + this.usageService = usageService; + } + async getSummary(req) { + const tenant = req.tenant; + const summary = await this.usageService.getUsageSummary(tenant.id); + const limits = { + FREE: 5000, + STARTER: 25000, + PRO: 100000, + ENTERPRISE: 500000, + }; + const limit = limits[tenant.plan] || 5000; + return { + ...summary, + limit, + percentage: Math.min(((summary.monthlyUsage / limit) * 100), 100).toFixed(1), + plan: tenant.plan, + }; + } + async getHistory(req, days = 30) { + const tenantId = req.tenant.id; + return this.usageService.getUsageHistory(tenantId, days); + } +}; +exports.UsageController = UsageController; +__decorate([ + (0, common_1.Get)('summary'), + (0, swagger_1.ApiOperation)({ summary: 'Get current month usage summary' }), + __param(0, (0, common_1.Req)()), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object]), + __metadata("design:returntype", Promise) +], UsageController.prototype, "getSummary", null); +__decorate([ + (0, common_1.Get)('history'), + (0, swagger_1.ApiOperation)({ summary: 'Get daily request volume history' }), + __param(0, (0, common_1.Req)()), + __param(1, (0, common_1.Query)('days')), + __metadata("design:type", Function), + __metadata("design:paramtypes", [Object, Number]), + __metadata("design:returntype", Promise) +], UsageController.prototype, "getHistory", null); +exports.UsageController = UsageController = __decorate([ + (0, swagger_1.ApiTags)('usage'), + (0, swagger_1.ApiBearerAuth)(), + (0, common_1.UseGuards)(firebase_auth_guard_1.FirebaseAuthGuard), + (0, common_1.Controller)('usage'), + __metadata("design:paramtypes", [usage_service_1.UsageService]) +], UsageController); +//# sourceMappingURL=usage.controller.js.map \ No newline at end of file diff --git a/apps/api/dist/usage/usage.controller.js.map b/apps/api/dist/usage/usage.controller.js.map new file mode 100644 index 0000000..fc06671 --- /dev/null +++ b/apps/api/dist/usage/usage.controller.js.map @@ -0,0 +1 @@ +{"version":3,"file":"usage.controller.js","sourceRoot":"","sources":["../../src/usage/usage.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAwE;AACxE,mDAA+C;AAC/C,4EAAuE;AACvE,6CAAuE;AAMhE,IAAM,eAAe,GAArB,MAAM,eAAe;IACN;IAApB,YAAoB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAI5C,AAAN,KAAK,CAAC,UAAU,CAAQ,GAAQ;QAC9B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAGnE,MAAM,MAAM,GAAG;YACb,IAAI,EAAE,IAAI;YACV,OAAO,EAAE,KAAK;YACd,GAAG,EAAE,MAAM;YACX,UAAU,EAAE,MAAM;SACnB,CAAC;QAEF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QAE1C,OAAO;YACL,GAAG,OAAO;YACV,KAAK;YACL,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5E,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAC;IACJ,CAAC;IAIK,AAAN,KAAK,CAAC,UAAU,CAAQ,GAAQ,EAAiB,OAAe,EAAE;QAChE,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;CACF,CAAA;AAjCY,0CAAe;AAKpB;IAFL,IAAA,YAAG,EAAC,SAAS,CAAC;IACd,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC;IAC3C,WAAA,IAAA,YAAG,GAAE,CAAA;;;;iDAoBtB;AAIK;IAFL,IAAA,YAAG,EAAC,SAAS,CAAC;IACd,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,kCAAkC,EAAE,CAAC;IAC5C,WAAA,IAAA,YAAG,GAAE,CAAA;IAAY,WAAA,IAAA,cAAK,EAAC,MAAM,CAAC,CAAA;;;;iDAG/C;0BAhCU,eAAe;IAJ3B,IAAA,iBAAO,EAAC,OAAO,CAAC;IAChB,IAAA,uBAAa,GAAE;IACf,IAAA,kBAAS,EAAC,uCAAiB,CAAC;IAC5B,IAAA,mBAAU,EAAC,OAAO,CAAC;qCAEgB,4BAAY;GADnC,eAAe,CAiC3B"} \ No newline at end of file diff --git a/apps/api/dist/usage/usage.entity.d.ts b/apps/api/dist/usage/usage.entity.d.ts new file mode 100644 index 0000000..4b10ed5 --- /dev/null +++ b/apps/api/dist/usage/usage.entity.d.ts @@ -0,0 +1,12 @@ +export declare class UsageLog { + id: string; + tenantId: string; + apiKeyId: string; + endpoint: string; + method: string; + statusCode: number; + responseTimeMs: number; + userAgent: string; + ipAddress: string; + createdAt: Date; +} diff --git a/apps/api/dist/usage/usage.entity.js b/apps/api/dist/usage/usage.entity.js new file mode 100644 index 0000000..e17c6b9 --- /dev/null +++ b/apps/api/dist/usage/usage.entity.js @@ -0,0 +1,73 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UsageLog = void 0; +const typeorm_1 = require("typeorm"); +let UsageLog = class UsageLog { + id; + tenantId; + apiKeyId; + endpoint; + method; + statusCode; + responseTimeMs; + userAgent; + ipAddress; + createdAt; +}; +exports.UsageLog = UsageLog; +__decorate([ + (0, typeorm_1.PrimaryGeneratedColumn)('uuid'), + __metadata("design:type", String) +], UsageLog.prototype, "id", void 0); +__decorate([ + (0, typeorm_1.Index)(), + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], UsageLog.prototype, "tenantId", void 0); +__decorate([ + (0, typeorm_1.Index)(), + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], UsageLog.prototype, "apiKeyId", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], UsageLog.prototype, "endpoint", void 0); +__decorate([ + (0, typeorm_1.Column)(), + __metadata("design:type", String) +], UsageLog.prototype, "method", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'int', default: 200 }), + __metadata("design:type", Number) +], UsageLog.prototype, "statusCode", void 0); +__decorate([ + (0, typeorm_1.Column)({ type: 'int', default: 0 }), + __metadata("design:type", Number) +], UsageLog.prototype, "responseTimeMs", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: true }), + __metadata("design:type", String) +], UsageLog.prototype, "userAgent", void 0); +__decorate([ + (0, typeorm_1.Column)({ nullable: true }), + __metadata("design:type", String) +], UsageLog.prototype, "ipAddress", void 0); +__decorate([ + (0, typeorm_1.Index)(), + (0, typeorm_1.CreateDateColumn)(), + __metadata("design:type", Date) +], UsageLog.prototype, "createdAt", void 0); +exports.UsageLog = UsageLog = __decorate([ + (0, typeorm_1.Entity)('usage_logs') +], UsageLog); +//# sourceMappingURL=usage.entity.js.map \ No newline at end of file diff --git a/apps/api/dist/usage/usage.entity.js.map b/apps/api/dist/usage/usage.entity.js.map new file mode 100644 index 0000000..ac1b7fe --- /dev/null +++ b/apps/api/dist/usage/usage.entity.js.map @@ -0,0 +1 @@ +{"version":3,"file":"usage.entity.js","sourceRoot":"","sources":["../../src/usage/usage.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAMiB;AAGV,IAAM,QAAQ,GAAd,MAAM,QAAQ;IAEnB,EAAE,CAAS;IAIX,QAAQ,CAAS;IAIjB,QAAQ,CAAS;IAGjB,QAAQ,CAAS;IAGjB,MAAM,CAAS;IAGf,UAAU,CAAS;IAGnB,cAAc,CAAS;IAGvB,SAAS,CAAS;IAGlB,SAAS,CAAS;IAIlB,SAAS,CAAO;CACjB,CAAA;AAjCY,4BAAQ;AAEnB;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;oCACpB;AAIX;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,GAAE;;0CACQ;AAIjB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,gBAAM,GAAE;;0CACQ;AAGjB;IADC,IAAA,gBAAM,GAAE;;0CACQ;AAGjB;IADC,IAAA,gBAAM,GAAE;;wCACM;AAGf;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;;4CACnB;AAGnB;IADC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;;gDACb;AAGvB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACT;AAGlB;IADC,IAAA,gBAAM,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;2CACT;AAIlB;IAFC,IAAA,eAAK,GAAE;IACP,IAAA,0BAAgB,GAAE;8BACR,IAAI;2CAAC;mBAhCL,QAAQ;IADpB,IAAA,gBAAM,EAAC,YAAY,CAAC;GACR,QAAQ,CAiCpB"} \ No newline at end of file diff --git a/apps/api/dist/usage/usage.interceptor.d.ts b/apps/api/dist/usage/usage.interceptor.d.ts new file mode 100644 index 0000000..82f468a --- /dev/null +++ b/apps/api/dist/usage/usage.interceptor.d.ts @@ -0,0 +1,9 @@ +import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common'; +import { Observable } from 'rxjs'; +import { UsageService } from './usage.service'; +export declare class UsageInterceptor implements NestInterceptor { + private usageService; + private readonly logger; + constructor(usageService: UsageService); + intercept(context: ExecutionContext, next: CallHandler): Promise<Observable<any>>; +} diff --git a/apps/api/dist/usage/usage.interceptor.js b/apps/api/dist/usage/usage.interceptor.js new file mode 100644 index 0000000..17fd215 --- /dev/null +++ b/apps/api/dist/usage/usage.interceptor.js @@ -0,0 +1,81 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var UsageInterceptor_1; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UsageInterceptor = void 0; +const common_1 = require("@nestjs/common"); +const rxjs_1 = require("rxjs"); +const usage_service_1 = require("./usage.service"); +const tenant_entity_1 = require("../auth/entities/tenant.entity"); +let UsageInterceptor = UsageInterceptor_1 = class UsageInterceptor { + usageService; + logger = new common_1.Logger(UsageInterceptor_1.name); + constructor(usageService) { + this.usageService = usageService; + } + async intercept(context, next) { + const request = context.switchToHttp().getRequest(); + const tenant = request.tenant; + const apiKey = request.apiKey; + if (tenant && apiKey && !request.url.includes('/auth/management')) { + this.logger.debug(`📊 Monitoring request for Tenant: ${tenant.id}`); + const plan = tenant.plan || tenant_entity_1.TenantPlan.FREE; + const limit = tenant_entity_1.QUOTA_LIMITS[plan]; + const { allowed: quotaAllowed, used: monthlyUsed } = await this.usageService.checkQuota(tenant.id, limit); + if (!quotaAllowed) { + throw new common_1.HttpException({ + statusCode: common_1.HttpStatus.TOO_MANY_REQUESTS, + error: 'Quota Exceeded', + message: 'Monthly API usage quota exceeded', + used: monthlyUsed, + limit, + upgrade_url: 'https://map-dashbord.intaleqapp.com/#billing' + }, common_1.HttpStatus.TOO_MANY_REQUESTS); + } + const rpmLimit = tenant_entity_1.RATE_LIMITS[plan]; + const { allowed: rateAllowed, used: currentRpm } = await this.usageService.checkRateLimit(tenant.id, rpmLimit); + if (!rateAllowed) { + throw new common_1.HttpException({ + statusCode: common_1.HttpStatus.TOO_MANY_REQUESTS, + error: 'Rate Limit Exceeded', + message: `Request rate limit exceeded (${rpmLimit} req/min for ${plan} plan)`, + current_rate: currentRpm, + limit: rpmLimit, + retry_after: '60s' + }, common_1.HttpStatus.TOO_MANY_REQUESTS); + } + } + const startTime = Date.now(); + return next.handle().pipe((0, rxjs_1.tap)(() => { + if (tenant && apiKey) { + const response = context.switchToHttp().getResponse(); + const responseTimeMs = Date.now() - startTime; + this.logger.log(`📈 Usage Recorded: ${request.method} ${request.url.split('?')[0]} for Tenant ${tenant.id}`); + this.usageService.recordRequest({ + tenantId: tenant.id, + apiKeyId: apiKey.id, + endpoint: request.url.split('?')[0], + method: request.method, + statusCode: response.statusCode, + responseTimeMs, + userAgent: request.headers['user-agent'], + ipAddress: request.ip || request.headers['x-forwarded-for'], + }); + } + })); + } +}; +exports.UsageInterceptor = UsageInterceptor; +exports.UsageInterceptor = UsageInterceptor = UsageInterceptor_1 = __decorate([ + (0, common_1.Injectable)(), + __metadata("design:paramtypes", [usage_service_1.UsageService]) +], UsageInterceptor); +//# sourceMappingURL=usage.interceptor.js.map \ No newline at end of file diff --git a/apps/api/dist/usage/usage.interceptor.js.map b/apps/api/dist/usage/usage.interceptor.js.map new file mode 100644 index 0000000..b30af87 --- /dev/null +++ b/apps/api/dist/usage/usage.interceptor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"usage.interceptor.js","sourceRoot":"","sources":["../../src/usage/usage.interceptor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/apps/api/dist/usage/usage.module.d.ts b/apps/api/dist/usage/usage.module.d.ts new file mode 100644 index 0000000..77116fb --- /dev/null +++ b/apps/api/dist/usage/usage.module.d.ts @@ -0,0 +1,2 @@ +export declare class UsageModule { +} diff --git a/apps/api/dist/usage/usage.module.js b/apps/api/dist/usage/usage.module.js new file mode 100644 index 0000000..2c787d6 --- /dev/null +++ b/apps/api/dist/usage/usage.module.js @@ -0,0 +1,28 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UsageModule = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const usage_entity_1 = require("./usage.entity"); +const usage_service_1 = require("./usage.service"); +const usage_controller_1 = require("./usage.controller"); +let UsageModule = class UsageModule { +}; +exports.UsageModule = UsageModule; +exports.UsageModule = UsageModule = __decorate([ + (0, common_1.Module)({ + imports: [ + typeorm_1.TypeOrmModule.forFeature([usage_entity_1.UsageLog]), + ], + providers: [usage_service_1.UsageService], + controllers: [usage_controller_1.UsageController], + exports: [usage_service_1.UsageService], + }) +], UsageModule); +//# sourceMappingURL=usage.module.js.map \ No newline at end of file diff --git a/apps/api/dist/usage/usage.module.js.map b/apps/api/dist/usage/usage.module.js.map new file mode 100644 index 0000000..ba47759 --- /dev/null +++ b/apps/api/dist/usage/usage.module.js.map @@ -0,0 +1 @@ +{"version":3,"file":"usage.module.js","sourceRoot":"","sources":["../../src/usage/usage.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,6CAAgD;AAChD,iDAA0C;AAC1C,mDAA+C;AAC/C,yDAAqD;AAU9C,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IARvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,uBAAa,CAAC,UAAU,CAAC,CAAC,uBAAQ,CAAC,CAAC;SACrC;QACD,SAAS,EAAE,CAAC,4BAAY,CAAC;QACzB,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"} \ No newline at end of file diff --git a/apps/api/dist/usage/usage.service.d.ts b/apps/api/dist/usage/usage.service.d.ts new file mode 100644 index 0000000..e9da965 --- /dev/null +++ b/apps/api/dist/usage/usage.service.d.ts @@ -0,0 +1,39 @@ +import { Repository } from 'typeorm'; +import { UsageLog } from './usage.entity'; +import { RedisService } from '../common/redis.service'; +export declare class UsageService { + private usageRepository; + private redisService; + private readonly logger; + constructor(usageRepository: Repository<UsageLog>, redisService: RedisService); + recordRequest(data: { + tenantId: string; + apiKeyId: string; + endpoint: string; + method: string; + statusCode: number; + responseTimeMs: number; + userAgent?: string; + ipAddress?: string; + }): Promise<void>; + getMonthlyUsage(tenantId: string): Promise<number>; + checkQuota(tenantId: string, limit: number): Promise<{ + allowed: boolean; + used: number; + }>; + checkRateLimit(tenantId: string, limit: number): Promise<{ + allowed: boolean; + used: number; + }>; + getUsageHistory(tenantId: string, days?: number): Promise<any>; + getUsageSummary(tenantId: string, plan?: string): Promise<{ + monthlyUsage: number; + monthlyLimit: any; + totalToday: number; + avgLatency: number; + successRate: number; + lastUpdated: Date; + }>; + private getMonthlyKey; + private getRateLimitKey; +} diff --git a/apps/api/dist/usage/usage.service.js b/apps/api/dist/usage/usage.service.js new file mode 100644 index 0000000..22f3aa8 --- /dev/null +++ b/apps/api/dist/usage/usage.service.js @@ -0,0 +1,135 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +var UsageService_1; +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.UsageService = void 0; +const common_1 = require("@nestjs/common"); +const typeorm_1 = require("@nestjs/typeorm"); +const typeorm_2 = require("typeorm"); +const usage_entity_1 = require("./usage.entity"); +const redis_service_1 = require("../common/redis.service"); +let UsageService = UsageService_1 = class UsageService { + usageRepository; + redisService; + logger = new common_1.Logger(UsageService_1.name); + constructor(usageRepository, redisService) { + this.usageRepository = usageRepository; + this.redisService = redisService; + } + async recordRequest(data) { + this.usageRepository.save(data).catch((err) => { + this.logger.error(`Failed to save usage log to DB: ${err.message}`); + }); + const monthKey = this.getMonthlyKey(data.tenantId); + try { + await this.redisService.getClient().incr(monthKey); + } + catch (err) { + this.logger.error(`Failed to increment Redis usage counter: ${err.message}`); + } + } + async getMonthlyUsage(tenantId) { + const key = this.getMonthlyKey(tenantId); + const val = await this.redisService.getClient().get(key); + return val ? parseInt(val, 10) : 0; + } + async checkQuota(tenantId, limit) { + const used = await this.getMonthlyUsage(tenantId); + return { + allowed: used < limit, + used, + }; + } + async checkRateLimit(tenantId, limit) { + const key = this.getRateLimitKey(tenantId); + try { + const client = this.redisService.getClient(); + const usedRaw = await client.get(key); + const used = usedRaw ? parseInt(usedRaw, 10) : 0; + if (used >= limit) { + return { allowed: false, used }; + } + const multi = client.multi(); + multi.incr(key); + if (!usedRaw) { + multi.expire(key, 60); + } + await multi.exec(); + return { allowed: true, used: used + 1 }; + } + catch (err) { + this.logger.error(`Rate limit check failed for ${tenantId}: ${err.message}`); + return { allowed: true, used: 0 }; + } + } + async getUsageHistory(tenantId, days = 30) { + return this.usageRepository + .createQueryBuilder('usage') + .select("DATE_TRUNC('day', usage.createdAt)", 'date') + .addSelect('COUNT(*)', 'count') + .where('usage.tenantId = :tenantId', { tenantId }) + .andWhere("usage.createdAt >= NOW() - (:days || ' days')::INTERVAL", { days: days.toString() }) + .groupBy("DATE_TRUNC('day', usage.createdAt)") + .orderBy('date', 'ASC') + .getRawMany(); + } + async getUsageSummary(tenantId, plan = 'FREE') { + const monthlyUsage = await this.getMonthlyUsage(tenantId); + const QUOTA_LIMITS = { + 'FREE': 8000, + 'PRO': 50000, + 'ENTERPRISE': 1000000 + }; + const monthlyLimit = QUOTA_LIMITS[plan] || 8000; + const stats = await this.usageRepository + .createQueryBuilder('usage') + .select('COUNT(*)', 'totalToday') + .addSelect('AVG(usage.responseTimeMs)', 'avgLatency') + .addSelect('COUNT(CASE WHEN usage.statusCode >= 200 AND usage.statusCode < 300 THEN 1 END)', 'successCount') + .where('usage.tenantId = :tenantId', { tenantId }) + .andWhere('usage.createdAt >= CURRENT_DATE') + .getRawOne(); + const totalToday = parseInt(stats.totalToday || '0', 10); + const avgLatency = Math.round(parseFloat(stats.avgLatency || '0')); + const successRate = totalToday > 0 + ? Math.round((parseInt(stats.successCount || '0', 10) / totalToday) * 100) + : 100; + return { + monthlyUsage, + monthlyLimit, + totalToday, + avgLatency, + successRate, + lastUpdated: new Date() + }; + } + getMonthlyKey(tenantId) { + const now = new Date(); + const yearMonth = `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, '0')}`; + return `usage:${tenantId}:${yearMonth}`; + } + getRateLimitKey(tenantId) { + const now = new Date(); + const window = `${now.getFullYear()}${now.getMonth()}${now.getDate()}${now.getHours()}${now.getMinutes()}`; + return `ratelimit:${tenantId}:${window}`; + } +}; +exports.UsageService = UsageService; +exports.UsageService = UsageService = UsageService_1 = __decorate([ + (0, common_1.Injectable)(), + __param(0, (0, typeorm_1.InjectRepository)(usage_entity_1.UsageLog)), + __metadata("design:paramtypes", [typeof (_a = typeof typeorm_2.Repository !== "undefined" && typeorm_2.Repository) === "function" ? _a : Object, redis_service_1.RedisService]) +], UsageService); +//# sourceMappingURL=usage.service.js.map \ No newline at end of file diff --git a/apps/api/dist/usage/usage.service.js.map b/apps/api/dist/usage/usage.service.js.map new file mode 100644 index 0000000..0a06b40 --- /dev/null +++ b/apps/api/dist/usage/usage.service.js.map @@ -0,0 +1 @@ +{"version":3,"file":"usage.service.js","sourceRoot":"","sources":["../../src/usage/usage.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAoD;AACpD,6CAAmD;AACnD,qCAAqC;AACrC,iDAA0C;AAC1C,2DAAuD;AAGhD,IAAM,YAAY,oBAAlB,MAAM,YAAY;IAKb;IACA;IALO,MAAM,GAAG,IAAI,eAAM,CAAC,cAAY,CAAC,IAAI,CAAC,CAAC;IAExD,YAEU,eAAqC,EACrC,YAA0B;QAD1B,oBAAe,GAAf,eAAe,CAAsB;QACrC,iBAAY,GAAZ,YAAY,CAAc;IACjC,CAAC;IAKJ,KAAK,CAAC,aAAa,CAAC,IASnB;QAEC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAGH,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,eAAe,CAAC,QAAgB;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzD,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAKD,KAAK,CAAC,UAAU,CAAC,QAAgB,EAAE,KAAa;QAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAClD,OAAO;YACL,OAAO,EAAE,IAAI,GAAG,KAAK;YACrB,IAAI;SACL,CAAC;IACJ,CAAC;IAKD,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,KAAa;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjD,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;gBAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAClC,CAAC;YAGD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,CAAC;YACD,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YAEnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACpC,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,OAAe,EAAE;QACvD,OAAO,IAAI,CAAC,eAAe;aACxB,kBAAkB,CAAC,OAAO,CAAC;aAC3B,MAAM,CAAC,oCAAoC,EAAE,MAAM,CAAC;aACpD,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC;aAC9B,KAAK,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,CAAC;aACjD,QAAQ,CAAC,yDAAyD,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;aAC9F,OAAO,CAAC,oCAAoC,CAAC;aAC7C,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;aACtB,UAAU,EAAE,CAAC;IAClB,CAAC;IAKD,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,OAAe,MAAM;QAC3D,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAG1D,MAAM,YAAY,GAAG;YACjB,MAAM,EAAE,IAAI;YACZ,KAAK,EAAE,KAAK;YACZ,YAAY,EAAE,OAAO;SACxB,CAAC;QACF,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;QAGhD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe;aACrC,kBAAkB,CAAC,OAAO,CAAC;aAC3B,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC;aAChC,SAAS,CAAC,2BAA2B,EAAE,YAAY,CAAC;aACpD,SAAS,CAAC,gFAAgF,EAAE,cAAc,CAAC;aAC3G,KAAK,CAAC,4BAA4B,EAAE,EAAE,QAAQ,EAAE,CAAC;aACjD,QAAQ,CAAC,iCAAiC,CAAC;aAC3C,SAAS,EAAE,CAAC;QAEf,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,UAAU,GAAG,CAAC;YAChC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,IAAI,GAAG,EAAE,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG,GAAG,CAAC;YAC1E,CAAC,CAAC,GAAG,CAAC;QAER,OAAO;YACL,YAAY;YACZ,YAAY;YACZ,UAAU;YACV,UAAU;YACV,WAAW;YACX,WAAW,EAAE,IAAI,IAAI,EAAE;SACxB,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,QAAgB;QACpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACxF,OAAO,SAAS,QAAQ,IAAI,SAAS,EAAE,CAAC;IAC1C,CAAC;IAEO,eAAe,CAAC,QAAgB;QACtC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC;QAC3G,OAAO,aAAa,QAAQ,IAAI,MAAM,EAAE,CAAC;IAC3C,CAAC;CACF,CAAA;AAvJY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,0BAAgB,EAAC,uBAAQ,CAAC,CAAA;yDACF,oBAAU,oBAAV,oBAAU,gCACb,4BAAY;GANzB,YAAY,CAuJxB"} \ No newline at end of file diff --git a/apps/api/src/maps/candidate-road.entity.ts b/apps/api/src/maps/candidate-road.entity.ts index aac5894..4b7e42b 100644 --- a/apps/api/src/maps/candidate-road.entity.ts +++ b/apps/api/src/maps/candidate-road.entity.ts @@ -67,6 +67,12 @@ export class CandidateRoad { @Column({ type: 'varchar', length: 32, nullable: true }) highway: string; + // Oneway direction detected from telemetry heading data + // 0 = two-way (default), 1 = one-way in geometry direction, -1 = one-way opposite to geometry + // اتجاه الطريق أحادي الاتجاه المكتشف من بيانات الاتجاه في التتبع + @Column({ type: 'smallint', default: 0 }) + oneway: number; + @CreateDateColumn() discoveredAt: Date; diff --git a/docker-compose.map2.yml b/docker-compose.map2.yml index 736e8f9..5d74879 100644 --- a/docker-compose.map2.yml +++ b/docker-compose.map2.yml @@ -40,7 +40,8 @@ services: volumes: - ./infrastructure/osm-data-v2:/data - ./infrastructure/docker/graphhopper/config.yml:/graphhopper/config.yml - command: ["-i", "/data/map2_enriched.osm.pbf", "-c", "config.yml"] + # مسار مطلق — انظر التعليق في docker-compose.yml + command: ["-i", "/data/map2_enriched.osm.pbf", "-c", "/graphhopper/config.yml"] depends_on: - db2 diff --git a/docker-compose.yml b/docker-compose.yml index bbabd42..a4f9a39 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -38,29 +38,29 @@ services: # Routing Engine: GraphHopper routing: - image: israelhikingmap/graphhopper:latest + build: + context: . + dockerfile: ./infrastructure/docker/graphhopper/Dockerfile container_name: map-routing platform: linux/amd64 ports: - "8989:8080" environment: - - JAVA_OPTS=-Xmx4g -Xms512m + - JAVA_OPTS=-Xmx8g -Xms1g deploy: resources: limits: - memory: 6g + memory: 10g volumes: - ./infrastructure/osm-data:/data - ./infrastructure/docker/graphhopper/config.yml:/graphhopper/config.yml - # مسار مطلق للـ config: المسار النسبي "config.yml" كان يُحل نسبةً إلى - # مجلد عمل الحاوية فيقرأ GraphHopper إعداداته الداخلية بدل ملفنا المركّب. - # الدليل في اللوج: "loaded graph at:/data/default-gh" بدل /data/graph-cache. - command: ["-i", "/data/master_map.osm.pbf", "-c", "/graphhopper/config.yml"] + command: ["server", "/graphhopper/config.yml"] healthcheck: test: ["CMD-SHELL", "curl -f http://localhost:8080/health || exit 1"] - interval: 30s - timeout: 10s - retries: 3 + interval: 60s + timeout: 30s + retries: 5 + start_period: 1200s depends_on: - db diff --git a/infrastructure/docker/graphhopper/Dockerfile b/infrastructure/docker/graphhopper/Dockerfile new file mode 100644 index 0000000..93420ee --- /dev/null +++ b/infrastructure/docker/graphhopper/Dockerfile @@ -0,0 +1,16 @@ +# GraphHopper الرسمي — بديل صورة israelhikingmap التي تتجاهل oneway/roundabout للسيارات +FROM eclipse-temurin:21-jre-alpine + +RUN apk add --no-cache curl + +WORKDIR /graphhopper + +ARG GH_VERSION=11.0 +RUN curl -fL "https://github.com/graphhopper/graphhopper/releases/download/${GH_VERSION}/graphhopper-web-${GH_VERSION}.jar" \ + -o graphhopper-web.jar + +EXPOSE 8080 8081 + +# sh -c ضروري لتمرير JAVA_OPTS فعلياً (الصورة القديمة كانت تتجاهله) +ENTRYPOINT ["sh", "-c", "exec java $JAVA_OPTS -jar /graphhopper/graphhopper-web.jar \"$@\"", "--"] +CMD ["server", "/graphhopper/config.yml"] diff --git a/infrastructure/docker/graphhopper/config.yml b/infrastructure/docker/graphhopper/config.yml index e01f92f..346f04f 100644 --- a/infrastructure/docker/graphhopper/config.yml +++ b/infrastructure/docker/graphhopper/config.yml @@ -19,7 +19,8 @@ graphhopper: import.osm.ignored_highways: "footway,cycleway,path,pedestrian,steps" # قائمة واحدة بلا مسافات — GraphHopper يفصل على الفاصلة فقط - graph.encoded_values: road_class,road_environment,max_speed,road_access,surface,roundabout,lanes + # car_access إلزامية لأن custom_model يستخدمها لفرض اتجاه السير (انظر priority أدناه) + graph.encoded_values: road_class,road_environment,max_speed,road_access,surface,roundabout,lanes,car_access profiles: - name: car @@ -49,6 +50,11 @@ graphhopper: - if: "road_class == LIVING_STREET || road_class == SERVICE" limit_to: 14 priority: + # فرض اتجاه السير: بدون هذه القاعدة تبقى car_access مخزّنة في الغراف + # لكن غير مُطبَّقة في حساب الوزن، فيُخترق كل oneway. القاعدة تأتي + # افتراضياً من car.json، ولا تُدمج حين يُكتب custom_model سطرياً. + - if: "!car_access" + multiply_by: 0 # تفضيل الشرايين الرئيسية بدل قصّ الطريق عبر الأحياء - if: "road_class == LIVING_STREET" multiply_by: 0.5 diff --git a/infrastructure/scripts/apply-delta.sh b/infrastructure/scripts/apply-delta.sh index d54770f..d1c9cc3 100644 --- a/infrastructure/scripts/apply-delta.sh +++ b/infrastructure/scripts/apply-delta.sh @@ -30,12 +30,13 @@ docker compose exec -T db psql -U mapuser -d mapdb -t -A -X > "${DELTA_OSM}" 2>/ WITH ways AS ( SELECT id, confidence, "uniqueDriverCount" AS drivers, COALESCE(highway, 'residential') AS highway, + COALESCE(oneway, 0) AS oneway, start_node, end_node, ROW_NUMBER() OVER (ORDER BY id) AS way_seq FROM approved_roads ), pts AS ( - SELECT w.way_seq, w.confidence, w.drivers, w.highway, w.start_node, w.end_node, + SELECT w.way_seq, w.confidence, w.drivers, w.highway, w.oneway, w.start_node, w.end_node, dp.path[1] AS pt_order, COUNT(*) OVER (PARTITION BY w.way_seq) AS npts, ST_Y(dp.geom) AS lat, ST_X(dp.geom) AS lon @@ -64,13 +65,16 @@ nodes_xml AS ( ways_xml AS ( SELECT string_agg(w.x, E'\n') AS x FROM ( SELECT format( - ' <way id="%s" version="1">%s%s%s%s%s </way>', + ' <way id="%s" version="1">%s%s%s%s%s%s </way>', -way_seq, string_agg(format(E'\n <nd ref="%s"/>', node_ref), '' ORDER BY pt_order), format(E'\n <tag k="highway" v="%s"/>', min(highway)), E'\n <tag k="source" v="intaleq:telemetry"/>', format(E'\n <tag k="confidence" v="%s"/>', round(min(confidence)::numeric, 2)), - format(E'\n <tag k="intaleq:drivers" v="%s"/>\n', min(drivers)) + format(E'\n <tag k="intaleq:drivers" v="%s"/>', min(drivers)), + CASE WHEN min(oneway) = 1 THEN E'\n <tag k="oneway" v="yes"/>' + WHEN min(oneway) = -1 THEN E'\n <tag k="oneway" v="-1"/>' + ELSE '' END ) AS x FROM pts_ref GROUP BY way_seq ) w diff --git a/infrastructure/scripts/normalize-oneway.sh b/infrastructure/scripts/normalize-oneway.sh index 874af8c..3d1d5e1 100755 --- a/infrastructure/scripts/normalize-oneway.sh +++ b/infrastructure/scripts/normalize-oneway.sh @@ -63,9 +63,11 @@ mv "$TMP" "$PBF" # ── إعادة بناء الرسم ───────────────────────────────────────────────────── # GraphHopper لا يعيد قراءة الـ PBF إن كان graph-cache موجوداً. -echo "🧹 حذف graph-cache وإعادة بناء الرسم..." +# نحذف المجلدين: graph-cache (من إعدادنا) و default-gh (اسم GraphHopper +# الافتراضي، وهو المستخدم فعلياً إن لم يُقرأ config.yml). +echo "🧹 حذف الرسم المخزّن وإعادة البناء..." docker compose stop routing || true -rm -rf "$DATA_DIR/graph-cache" +rm -rf "$DATA_DIR/graph-cache" "$DATA_DIR/default-gh" docker compose up -d routing echo "⏳ انتظار جهوزية المحرك (قد يستغرق البناء عدة دقائق)..." diff --git a/packages/flutter-sdk/.dart_tool/extension_discovery/README.md b/packages/flutter-sdk/.dart_tool/extension_discovery/README.md new file mode 100644 index 0000000..9dc6757 --- /dev/null +++ b/packages/flutter-sdk/.dart_tool/extension_discovery/README.md @@ -0,0 +1,31 @@ +Extension Discovery Cache +========================= + +This folder is used by `package:extension_discovery` to cache lists of +packages that contains extensions for other packages. + +DO NOT USE THIS FOLDER +---------------------- + + * Do not read (or rely) the contents of this folder. + * Do write to this folder. + +If you're interested in the lists of extensions stored in this folder use the +API offered by package `extension_discovery` to get this information. + +If this package doesn't work for your use-case, then don't try to read the +contents of this folder. It may change, and will not remain stable. + +Use package `extension_discovery` +--------------------------------- + +If you want to access information from this folder. + +Feel free to delete this folder +------------------------------- + +Files in this folder act as a cache, and the cache is discarded if the files +are older than the modification time of `.dart_tool/package_config.json`. + +Hence, it should never be necessary to clear this cache manually, if you find a +need to do please file a bug. diff --git a/packages/flutter-sdk/.dart_tool/extension_discovery/vs_code.json b/packages/flutter-sdk/.dart_tool/extension_discovery/vs_code.json new file mode 100644 index 0000000..ff787a9 --- /dev/null +++ b/packages/flutter-sdk/.dart_tool/extension_discovery/vs_code.json @@ -0,0 +1 @@ +{"version":2,"entries":[{"package":"intaleq_maps","rootUri":"../","packageUri":"lib/"}]} \ No newline at end of file diff --git a/packages/flutter-sdk/.dart_tool/package_config.json b/packages/flutter-sdk/.dart_tool/package_config.json index 9dfe7ae..30ee4e8 100644 --- a/packages/flutter-sdk/.dart_tool/package_config.json +++ b/packages/flutter-sdk/.dart_tool/package_config.json @@ -21,7 +21,7 @@ }, { "name": "characters", - "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/characters-1.4.0", + "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/characters-1.4.1", "packageUri": "lib/", "languageVersion": "3.4" }, @@ -51,21 +51,21 @@ }, { "name": "flutter", - "rootUri": "file:///Users/hamzaaleghwairyeen/development/flutter/packages/flutter", + "rootUri": "file:///Users/hamzaaleghwairyeen/flutter/packages/flutter", "packageUri": "lib/", - "languageVersion": "3.7" + "languageVersion": "3.9" }, { "name": "flutter_test", - "rootUri": "file:///Users/hamzaaleghwairyeen/development/flutter/packages/flutter_test", + "rootUri": "file:///Users/hamzaaleghwairyeen/flutter/packages/flutter_test", "packageUri": "lib/", - "languageVersion": "3.7" + "languageVersion": "3.9" }, { "name": "flutter_web_plugins", - "rootUri": "file:///Users/hamzaaleghwairyeen/development/flutter/packages/flutter_web_plugins", + "rootUri": "file:///Users/hamzaaleghwairyeen/flutter/packages/flutter_web_plugins", "packageUri": "lib/", - "languageVersion": "3.7" + "languageVersion": "3.9" }, { "name": "http", @@ -87,19 +87,19 @@ }, { "name": "leak_tracker", - "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/leak_tracker-10.0.9", + "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/leak_tracker-11.0.2", "packageUri": "lib/", "languageVersion": "3.2" }, { "name": "leak_tracker_flutter_testing", - "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.9", + "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/leak_tracker_flutter_testing-3.0.10", "packageUri": "lib/", "languageVersion": "3.2" }, { "name": "leak_tracker_testing", - "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.1", + "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/leak_tracker_testing-3.0.2", "packageUri": "lib/", "languageVersion": "3.2" }, @@ -129,21 +129,21 @@ }, { "name": "matcher", - "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/matcher-0.12.17", + "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/matcher-0.12.18", "packageUri": "lib/", - "languageVersion": "3.4" + "languageVersion": "3.7" }, { "name": "material_color_utilities", - "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/material_color_utilities-0.11.1", + "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/material_color_utilities-0.13.0", "packageUri": "lib/", - "languageVersion": "2.17" + "languageVersion": "3.5" }, { "name": "meta", - "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/meta-1.16.0", + "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/meta-1.17.0", "packageUri": "lib/", - "languageVersion": "2.12" + "languageVersion": "3.5" }, { "name": "path", @@ -165,9 +165,9 @@ }, { "name": "sky_engine", - "rootUri": "file:///Users/hamzaaleghwairyeen/development/flutter/bin/cache/pkg/sky_engine", + "rootUri": "file:///Users/hamzaaleghwairyeen/flutter/bin/cache/pkg/sky_engine", "packageUri": "lib/", - "languageVersion": "3.7" + "languageVersion": "3.9" }, { "name": "source_span", @@ -201,9 +201,9 @@ }, { "name": "test_api", - "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/test_api-0.7.4", + "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/test_api-0.7.9", "packageUri": "lib/", - "languageVersion": "3.5" + "languageVersion": "3.7" }, { "name": "typed_data", @@ -213,9 +213,9 @@ }, { "name": "vector_math", - "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/vector_math-2.1.4", + "rootUri": "file:///Users/hamzaaleghwairyeen/.pub-cache/hosted/pub.dev/vector_math-2.2.0", "packageUri": "lib/", - "languageVersion": "2.14" + "languageVersion": "3.1" }, { "name": "vm_service", @@ -243,8 +243,8 @@ } ], "generator": "pub", - "generatorVersion": "3.8.1", - "flutterRoot": "file:///Users/hamzaaleghwairyeen/development/flutter", - "flutterVersion": "3.32.8", + "generatorVersion": "3.11.0", + "flutterRoot": "file:///Users/hamzaaleghwairyeen/flutter", + "flutterVersion": "3.41.2", "pubCache": "file:///Users/hamzaaleghwairyeen/.pub-cache" } diff --git a/packages/flutter-sdk/.dart_tool/package_graph.json b/packages/flutter-sdk/.dart_tool/package_graph.json index 2cb0178..5248373 100644 --- a/packages/flutter-sdk/.dart_tool/package_graph.json +++ b/packages/flutter-sdk/.dart_tool/package_graph.json @@ -25,28 +25,18 @@ "name": "flutter_test", "version": "0.0.0", "dependencies": [ - "async", - "boolean_selector", - "characters", "clock", "collection", "fake_async", "flutter", - "leak_tracker", "leak_tracker_flutter_testing", - "leak_tracker_testing", "matcher", - "material_color_utilities", "meta", "path", - "source_span", "stack_trace", "stream_channel", - "string_scanner", - "term_glyph", "test_api", - "vector_math", - "vm_service" + "vector_math" ] }, { @@ -80,23 +70,6 @@ "vector_math" ] }, - { - "name": "vm_service", - "version": "15.0.0", - "dependencies": [] - }, - { - "name": "term_glyph", - "version": "1.2.2", - "dependencies": [] - }, - { - "name": "string_scanner", - "version": "1.4.1", - "dependencies": [ - "source_span" - ] - }, { "name": "stream_channel", "version": "2.1.4", @@ -104,76 +77,19 @@ "async" ] }, - { - "name": "source_span", - "version": "1.10.1", - "dependencies": [ - "collection", - "path", - "term_glyph" - ] - }, { "name": "meta", - "version": "1.16.0", + "version": "1.17.0", "dependencies": [] }, - { - "name": "material_color_utilities", - "version": "0.11.1", - "dependencies": [ - "collection" - ] - }, - { - "name": "leak_tracker_testing", - "version": "3.0.1", - "dependencies": [ - "leak_tracker", - "matcher", - "meta" - ] - }, - { - "name": "leak_tracker", - "version": "10.0.9", - "dependencies": [ - "clock", - "collection", - "meta", - "path", - "vm_service" - ] - }, { "name": "collection", "version": "1.19.1", "dependencies": [] }, - { - "name": "characters", - "version": "1.4.0", - "dependencies": [] - }, - { - "name": "boolean_selector", - "version": "2.1.2", - "dependencies": [ - "source_span", - "string_scanner" - ] - }, - { - "name": "async", - "version": "2.13.0", - "dependencies": [ - "collection", - "meta" - ] - }, { "name": "leak_tracker_flutter_testing", - "version": "3.0.9", + "version": "3.0.10", "dependencies": [ "flutter", "leak_tracker", @@ -184,7 +100,7 @@ }, { "name": "vector_math", - "version": "2.1.4", + "version": "2.2.0", "dependencies": [] }, { @@ -214,7 +130,7 @@ }, { "name": "matcher", - "version": "0.12.17", + "version": "0.12.18", "dependencies": [ "async", "meta", @@ -225,7 +141,7 @@ }, { "name": "test_api", - "version": "0.7.4", + "version": "0.7.9", "dependencies": [ "async", "boolean_selector", @@ -253,6 +169,14 @@ "typed_data" ] }, + { + "name": "async", + "version": "2.13.0", + "dependencies": [ + "collection", + "meta" + ] + }, { "name": "maplibre_gl_web", "version": "0.25.0", @@ -278,6 +202,56 @@ "version": "0.0.0", "dependencies": [] }, + { + "name": "material_color_utilities", + "version": "0.13.0", + "dependencies": [ + "collection" + ] + }, + { + "name": "characters", + "version": "1.4.1", + "dependencies": [] + }, + { + "name": "leak_tracker_testing", + "version": "3.0.2", + "dependencies": [ + "leak_tracker", + "matcher", + "meta" + ] + }, + { + "name": "term_glyph", + "version": "1.2.2", + "dependencies": [] + }, + { + "name": "string_scanner", + "version": "1.4.1", + "dependencies": [ + "source_span" + ] + }, + { + "name": "source_span", + "version": "1.10.1", + "dependencies": [ + "collection", + "path", + "term_glyph" + ] + }, + { + "name": "boolean_selector", + "version": "2.1.2", + "dependencies": [ + "source_span", + "string_scanner" + ] + }, { "name": "typed_data", "version": "1.4.0", @@ -298,12 +272,7 @@ "name": "flutter_web_plugins", "version": "0.0.0", "dependencies": [ - "characters", - "collection", - "flutter", - "material_color_utilities", - "meta", - "vector_math" + "flutter" ] }, { @@ -344,6 +313,22 @@ "name": "ffi", "version": "2.2.0", "dependencies": [] + }, + { + "name": "leak_tracker", + "version": "11.0.2", + "dependencies": [ + "clock", + "collection", + "meta", + "path", + "vm_service" + ] + }, + { + "name": "vm_service", + "version": "15.0.0", + "dependencies": [] } ], "configVersion": 1 diff --git a/packages/flutter-sdk/pubspec.lock b/packages/flutter-sdk/pubspec.lock index 10b6913..780c97a 100644 --- a/packages/flutter-sdk/pubspec.lock +++ b/packages/flutter-sdk/pubspec.lock @@ -29,10 +29,10 @@ packages: dependency: transitive description: name: characters - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.4.1" clock: dependency: transitive description: @@ -108,26 +108,26 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" + sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" url: "https://pub.dev" source: hosted - version: "10.0.9" + version: "11.0.2" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 + sha256: "1dbc140bb5a23c75ea9c4811222756104fbcd1a27173f0c34ca01e16bea473c1" url: "https://pub.dev" source: hosted - version: "3.0.9" + version: "3.0.10" leak_tracker_testing: dependency: transitive description: name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" + sha256: "8d5a2d49f4a66b49744b23b018848400d23e54caf9463f4eb20df3eb8acb2eb1" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" lints: dependency: "direct dev" description: @@ -164,26 +164,26 @@ packages: dependency: transitive description: name: matcher - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" url: "https://pub.dev" source: hosted - version: "0.12.17" + version: "0.12.18" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" url: "https://pub.dev" source: hosted - version: "0.11.1" + version: "0.13.0" meta: dependency: transitive description: name: meta - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c + sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394" url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" path: dependency: transitive description: @@ -257,10 +257,10 @@ packages: dependency: transitive description: name: test_api - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd + sha256: "93167629bfc610f71560ab9312acdda4959de4df6fac7492c89ff0d3886f6636" url: "https://pub.dev" source: hosted - version: "0.7.4" + version: "0.7.9" typed_data: dependency: transitive description: @@ -273,10 +273,10 @@ packages: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.2.0" vm_service: dependency: transitive description: @@ -302,5 +302,5 @@ packages: source: hosted version: "6.6.1" sdks: - dart: ">=3.8.0 <4.0.0" + dart: ">=3.9.0-0 <4.0.0" flutter: ">=3.22.0"