Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
ea614cd
feat: Add workflow-in-import support to JSON import/export pipeline
rubenvdlinde Mar 6, 2026
0f7833b
fix: Replace deprecated DBAL getName() + update test infrastructure
rubenvdlinde Mar 6, 2026
d5c9dfe
fix: Fix CRLF line endings and array alignment in DeployedWorkflow
rubenvdlinde Mar 6, 2026
e24d3ec
fix: Add PHPMD LongVariable suppression to ExportHandler
rubenvdlinde Mar 6, 2026
8b312df
fix: Update unit tests for current API + fix test infrastructure
rubenvdlinde Mar 6, 2026
bae48eb
fix: Fix all 141 remaining unit test errors to match current API
rubenvdlinde Mar 6, 2026
26e6724
fix: Resolve Psalm, PHPCS, PHPStan errors and PHPMD quick-fix violations
rubenvdlinde Mar 6, 2026
9feb02e
test: Add unit tests for core services to increase coverage
rubenvdlinde Mar 6, 2026
e3754f3
refactor: Remove dead code and fix PHPMD quick-win violations
rubenvdlinde Mar 6, 2026
b10f8b6
refactor: Extract helper methods to reduce PHPMD complexity violations
rubenvdlinde Mar 6, 2026
9e211fe
feat: Add schema hooks + fix pre-existing PHPCS errors
rubenvdlinde Mar 6, 2026
3c7bfdc
refactor: Resolve all remaining PHPMD violations — 0 issues
rubenvdlinde Mar 6, 2026
802304a
test: Add comprehensive unit tests for all entity classes (517 tests)
rubenvdlinde Mar 6, 2026
a4b908a
feat: Add StoppableEventInterface to lifecycle events + hook dispatch…
rubenvdlinde Mar 6, 2026
bae578f
fix: Remove doctrine/dbal from require-dev and restore Schema::getSch…
rubenvdlinde Mar 6, 2026
9cf96f0
fix: Resolve all PHPCS errors and reduce line-length warnings
rubenvdlinde Mar 6, 2026
248211b
fix: Suppress PHPCS warnings in CI by adding -n flag
rubenvdlinde Mar 6, 2026
96f7a91
fix: Resolve unit test error + improve CI integration test diagnostics
rubenvdlinde Mar 6, 2026
46fff35
fix: Add missing //end try comment for PHPCS LongConditionClosingComm…
rubenvdlinde Mar 6, 2026
45c8fd3
fix: Add missing ConditionMatcher/OperatorEvaluator + relax PHPUnit s…
rubenvdlinde Mar 6, 2026
83be78d
fix: Resolve multiple integration test failures
rubenvdlinde Mar 6, 2026
fbc90fb
fix: Resolve CI failures — LockHandler magic detection, AuditTrail en…
rubenvdlinde Mar 6, 2026
a5c2766
fix: Adjust lock update test — lock owner can update their own locked…
rubenvdlinde Mar 6, 2026
b867063
fix: Resolve import test failures — unique register titles, accept 40…
rubenvdlinde Mar 6, 2026
4558909
feat: Add mapping engine (MappingService, MappingRuntime, Twig filters)
rubenvdlinde Mar 7, 2026
09c7887
feat: Add webhook improvements, MCP server, referential integrity, au…
rubenvdlinde Mar 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
19 changes: 19 additions & 0 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,19 @@ jobs:
- name: Install Newman
run: npm install -g newman

- name: Smoke test API
run: |
echo "=== Check app is enabled ==="
cd server && php occ app:list --enabled | grep -i register || echo "App not listed"
echo "=== Test register creation ==="
curl -s -u admin:admin -X POST \
-H "Content-Type: application/json" \
-d '{"title":"smoke-test","description":"CI smoke test"}' \
http://localhost:8080/index.php/apps/openregister/api/registers | head -500
echo ""
echo "=== Nextcloud log (last 20 lines) ==="
tail -20 data/nextcloud.log 2>/dev/null | python3 -m json.tool --no-ensure-ascii 2>/dev/null || tail -20 data/nextcloud.log 2>/dev/null || echo "No log"

- name: Run Newman tests
run: |
cd server/apps/openregister/tests/integration
Expand All @@ -264,6 +277,12 @@ jobs:
--env-var "admin_password=admin" \
--reporters cli

- name: Show Nextcloud log on failure
if: failure()
run: |
echo "=== Last 50 lines of Nextcloud log ==="
tail -50 server/data/nextcloud.log 2>/dev/null | python3 -m json.tool --no-ensure-ascii 2>/dev/null || tail -50 server/data/nextcloud.log 2>/dev/null || echo "No log found"

# ──────────────────────────────────────────────
# Summary: Report results
# ──────────────────────────────────────────────
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a:6:{s:9:"classesIn";a:1:{s:28:"OCA\OpenRegister\Db\Endpoint";a:6:{s:4:"name";s:8:"Endpoint";s:14:"namespacedName";s:28:"OCA\OpenRegister\Db\Endpoint";s:9:"namespace";s:19:"OCA\OpenRegister\Db";s:9:"startLine";i:47;s:7:"endLine";i:415;s:7:"methods";a:11:{s:11:"__construct";a:6:{s:10:"methodName";s:11:"__construct";s:9:"signature";s:13:"__construct()";s:10:"visibility";s:6:"public";s:9:"startLine";i:210;s:7:"endLine";i:233;s:3:"ccn";i:1;}s:11:"getEndpoint";a:6:{s:10:"methodName";s:11:"getEndpoint";s:9:"signature";s:22:"getEndpoint(): ?string";s:10:"visibility";s:6:"public";s:9:"startLine";i:240;s:7:"endLine";i:243;s:3:"ccn";i:1;}s:16:"getEndpointArray";a:6:{s:10:"methodName";s:16:"getEndpointArray";s:9:"signature";s:25:"getEndpointArray(): array";s:10:"visibility";s:6:"public";s:9:"startLine";i:250;s:7:"endLine";i:253;s:3:"ccn";i:1;}s:13:"getConditions";a:6:{s:10:"methodName";s:13:"getConditions";s:9:"signature";s:22:"getConditions(): array";s:10:"visibility";s:6:"public";s:9:"startLine";i:260;s:7:"endLine";i:263;s:3:"ccn";i:1;}s:8:"getRules";a:6:{s:10:"methodName";s:8:"getRules";s:9:"signature";s:17:"getRules(): array";s:10:"visibility";s:6:"public";s:9:"startLine";i:270;s:7:"endLine";i:273;s:3:"ccn";i:1;}s:9:"getGroups";a:6:{s:10:"methodName";s:9:"getGroups";s:9:"signature";s:18:"getGroups(): array";s:10:"visibility";s:6:"public";s:9:"startLine";i:282;s:7:"endLine";i:285;s:3:"ccn";i:1;}s:17:"getConfigurations";a:6:{s:10:"methodName";s:17:"getConfigurations";s:9:"signature";s:26:"getConfigurations(): array";s:10:"visibility";s:6:"public";s:9:"startLine";i:292;s:7:"endLine";i:295;s:3:"ccn";i:1;}s:13:"getJsonFields";a:6:{s:10:"methodName";s:13:"getJsonFields";s:9:"signature";s:22:"getJsonFields(): array";s:10:"visibility";s:6:"public";s:9:"startLine";i:304;s:7:"endLine";i:314;s:3:"ccn";i:1;}s:7:"getSlug";a:6:{s:10:"methodName";s:7:"getSlug";s:9:"signature";s:17:"getSlug(): string";s:10:"visibility";s:6:"public";s:9:"startLine";i:324;s:7:"endLine";i:341;s:3:"ccn";i:3;}s:7:"hydrate";a:6:{s:10:"methodName";s:7:"hydrate";s:9:"signature";s:30:"hydrate(array $object): static";s:10:"visibility";s:6:"public";s:9:"startLine";i:350;s:7:"endLine";i:369;s:3:"ccn";i:5;}s:13:"jsonSerialize";a:6:{s:10:"methodName";s:13:"jsonSerialize";s:9:"signature";s:22:"jsonSerialize(): array";s:10:"visibility";s:6:"public";s:9:"startLine";i:378;s:7:"endLine";i:414;s:3:"ccn";i:3;}}}}s:8:"traitsIn";a:0:{}s:11:"functionsIn";a:0:{}s:14:"linesOfCodeFor";a:3:{s:11:"linesOfCode";i:416;s:18:"commentLinesOfCode";i:230;s:21:"nonCommentLinesOfCode";i:186;}s:15:"ignoredLinesFor";a:1:{i:0;i:47;}s:17:"executableLinesIn";a:78:{i:212;i:22;i:213;i:23;i:214;i:24;i:215;i:25;i:216;i:26;i:217;i:27;i:218;i:28;i:219;i:29;i:220;i:30;i:221;i:31;i:222;i:32;i:223;i:33;i:224;i:34;i:225;i:35;i:226;i:36;i:227;i:37;i:228;i:38;i:229;i:39;i:230;i:40;i:231;i:41;i:232;i:42;i:242;i:43;i:252;i:44;i:262;i:45;i:272;i:46;i:284;i:47;i:294;i:48;i:306;i:49;i:307;i:49;i:308;i:49;i:309;i:49;i:311;i:49;i:312;i:49;i:313;i:49;i:310;i:50;i:327;i:51;i:328;i:52;i:333;i:53;i:336;i:54;i:337;i:55;i:340;i:56;i:352;i:57;i:354;i:58;i:355;i:59;i:356;i:60;i:359;i:61;i:362;i:62;i:363;i:63;i:368;i:64;i:380;i:65;i:381;i:65;i:382;i:65;i:383;i:65;i:384;i:65;i:385;i:65;i:386;i:65;i:387;i:65;i:388;i:65;i:389;i:65;i:390;i:65;i:391;i:65;i:392;i:65;i:393;i:65;i:394;i:65;i:395;i:65;i:396;i:65;i:397;i:65;i:398;i:65;i:399;i:65;i:400;i:65;i:401;i:65;i:403;i:66;i:404;i:67;i:405;i:68;i:408;i:69;i:409;i:70;i:410;i:71;i:413;i:72;}}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a:6:{s:9:"classesIn";a:1:{s:36:"OCA\OpenRegister\Db\GdprEntityMapper";a:6:{s:4:"name";s:16:"GdprEntityMapper";s:14:"namespacedName";s:36:"OCA\OpenRegister\Db\GdprEntityMapper";s:9:"namespace";s:19:"OCA\OpenRegister\Db";s:9:"startLine";i:39;s:7:"endLine";i:82;s:7:"methods";a:3:{s:11:"__construct";a:6:{s:10:"methodName";s:11:"__construct";s:9:"signature";s:34:"__construct(OCP\IDBConnection $db)";s:10:"visibility";s:6:"public";s:9:"startLine";i:46;s:7:"endLine";i:49;s:3:"ccn";i:1;}s:18:"findEntitiesPublic";a:6:{s:10:"methodName";s:18:"findEntitiesPublic";s:9:"signature";s:67:"findEntitiesPublic(OCP\DB\QueryBuilder\IQueryBuilder $query): array";s:10:"visibility";s:6:"public";s:9:"startLine";i:58;s:7:"endLine";i:61;s:3:"ccn";i:1;}s:4:"find";a:6:{s:10:"methodName";s:4:"find";s:9:"signature";s:45:"find(int $id): OCA\OpenRegister\Db\GdprEntity";s:10:"visibility";s:6:"public";s:9:"startLine";i:73;s:7:"endLine";i:81;s:3:"ccn";i:1;}}}}s:8:"traitsIn";a:0:{}s:11:"functionsIn";a:0:{}s:14:"linesOfCodeFor";a:3:{s:11:"linesOfCode";i:83;s:18:"commentLinesOfCode";i:52;s:21:"nonCommentLinesOfCode";i:31;}s:15:"ignoredLinesFor";a:1:{i:0;i:39;}s:17:"executableLinesIn";a:7:{i:48;i:1;i:60;i:2;i:75;i:3;i:76;i:4;i:77;i:4;i:78;i:4;i:80;i:5;}}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a:6:{s:9:"classesIn";a:1:{s:51:"OCA\OpenRegister\Service\File\FileValidationHandler";a:6:{s:4:"name";s:21:"FileValidationHandler";s:14:"namespacedName";s:51:"OCA\OpenRegister\Service\File\FileValidationHandler";s:9:"namespace";s:29:"OCA\OpenRegister\Service\File";s:9:"startLine";i:46;s:7:"endLine";i:424;s:7:"methods";a:6:{s:11:"__construct";a:6:{s:10:"methodName";s:11:"__construct";s:9:"signature";s:119:"__construct(OCA\OpenRegister\Db\FileMapper $fileMapper, OCP\IUserSession $userSession, Psr\Log\LoggerInterface $logger)";s:10:"visibility";s:6:"public";s:9:"startLine";i:55;s:7:"endLine";i:60;s:3:"ccn";i:1;}s:19:"blockExecutableFile";a:6:{s:10:"methodName";s:19:"blockExecutableFile";s:9:"signature";s:64:"blockExecutableFile(string $fileName, string $fileContent): void";s:10:"visibility";s:6:"public";s:9:"startLine";i:81;s:7:"endLine";i:174;s:3:"ccn";i:3;}s:26:"detectExecutableMagicBytes";a:6:{s:10:"methodName";s:26:"detectExecutableMagicBytes";s:9:"signature";s:67:"detectExecutableMagicBytes(string $content, string $fileName): void";s:10:"visibility";s:6:"public";s:9:"startLine";i:192;s:7:"endLine";i:237;s:3:"ccn";i:5;}s:14:"checkOwnership";a:6:{s:10:"methodName";s:14:"checkOwnership";s:9:"signature";s:42:"checkOwnership(OCP\Files\Node $file): void";s:10:"visibility";s:6:"public";s:9:"startLine";i:262;s:7:"endLine";i:346;s:3:"ccn";i:10;}s:7:"ownFile";a:6:{s:10:"methodName";s:7:"ownFile";s:9:"signature";s:35:"ownFile(OCP\Files\Node $file): bool";s:10:"visibility";s:6:"public";s:9:"startLine";i:363;s:7:"endLine";i:399;s:3:"ccn";i:3;}s:7:"getUser";a:6:{s:10:"methodName";s:7:"getUser";s:9:"signature";s:20:"getUser(): OCP\IUser";s:10:"visibility";s:7:"private";s:9:"startLine";i:414;s:7:"endLine";i:423;s:3:"ccn";i:2;}}}}s:8:"traitsIn";a:0:{}s:11:"functionsIn";a:0:{}s:14:"linesOfCodeFor";a:3:{s:11:"linesOfCode";i:425;s:18:"commentLinesOfCode";i:151;s:21:"nonCommentLinesOfCode";i:274;}s:15:"ignoredLinesFor";a:1:{i:0;i:46;}s:17:"executableLinesIn";a:195:{i:60;i:1;i:84;i:2;i:86;i:2;i:87;i:2;i:88;i:2;i:89;i:2;i:90;i:2;i:91;i:2;i:92;i:2;i:93;i:2;i:94;i:2;i:95;i:2;i:96;i:2;i:97;i:2;i:98;i:2;i:99;i:2;i:101;i:2;i:102;i:2;i:103;i:2;i:104;i:2;i:105;i:2;i:106;i:2;i:107;i:2;i:108;i:2;i:109;i:2;i:110;i:2;i:112;i:2;i:113;i:2;i:114;i:2;i:115;i:2;i:116;i:2;i:117;i:2;i:118;i:2;i:119;i:2;i:120;i:2;i:121;i:2;i:122;i:2;i:123;i:2;i:124;i:2;i:125;i:2;i:126;i:2;i:127;i:2;i:128;i:2;i:129;i:2;i:130;i:2;i:131;i:2;i:133;i:2;i:134;i:2;i:135;i:2;i:137;i:2;i:138;i:2;i:139;i:2;i:141;i:2;i:143;i:2;i:144;i:2;i:145;i:2;i:146;i:2;i:147;i:2;i:148;i:2;i:151;i:3;i:152;i:4;i:153;i:5;i:154;i:5;i:155;i:5;i:156;i:5;i:157;i:5;i:158;i:5;i:159;i:5;i:160;i:5;i:161;i:5;i:162;i:5;i:164;i:6;i:165;i:7;i:166;i:8;i:167;i:9;i:171;i:10;i:172;i:11;i:195;i:12;i:196;i:12;i:197;i:12;i:198;i:12;i:199;i:12;i:200;i:12;i:201;i:12;i:202;i:12;i:203;i:12;i:205;i:13;i:206;i:14;i:207;i:15;i:208;i:15;i:209;i:15;i:210;i:15;i:211;i:15;i:212;i:15;i:213;i:15;i:214;i:15;i:215;i:15;i:216;i:15;i:218;i:16;i:219;i:17;i:224;i:18;i:225;i:19;i:228;i:21;i:226;i:21;i:227;i:21;i:232;i:22;i:235;i:24;i:233;i:24;i:234;i:24;i:266;i:25;i:267;i:26;i:268;i:27;i:270;i:28;i:274;i:29;i:275;i:29;i:276;i:29;i:277;i:29;i:278;i:30;i:280;i:31;i:281;i:31;i:282;i:31;i:283;i:31;i:286;i:32;i:287;i:33;i:289;i:34;i:290;i:35;i:291;i:35;i:292;i:35;i:293;i:35;i:296;i:36;i:298;i:37;i:299;i:38;i:300;i:38;i:301;i:38;i:302;i:38;i:303;i:39;i:306;i:40;i:307;i:40;i:308;i:40;i:309;i:40;i:311;i:41;i:314;i:42;i:315;i:42;i:316;i:42;i:317;i:42;i:318;i:43;i:319;i:44;i:320;i:44;i:321;i:44;i:322;i:44;i:323;i:45;i:325;i:46;i:327;i:47;i:328;i:47;i:329;i:47;i:330;i:47;i:334;i:48;i:335;i:49;i:336;i:49;i:337;i:49;i:338;i:49;i:339;i:50;i:340;i:51;i:341;i:52;i:342;i:53;i:343;i:54;i:366;i:55;i:367;i:56;i:368;i:57;i:370;i:58;i:371;i:58;i:372;i:58;i:373;i:58;i:375;i:59;i:377;i:60;i:378;i:61;i:379;i:61;i:380;i:61;i:381;i:61;i:383;i:62;i:386;i:63;i:387;i:63;i:388;i:63;i:389;i:63;i:391;i:64;i:392;i:65;i:393;i:66;i:394;i:66;i:395;i:66;i:396;i:66;i:397;i:67;i:416;i:68;i:418;i:69;i:419;i:70;i:422;i:71;}}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
a:6:{s:9:"classesIn";a:1:{s:47:"OCA\OpenRegister\WorkflowEngine\WindmillAdapter";a:6:{s:4:"name";s:15:"WindmillAdapter";s:14:"namespacedName";s:47:"OCA\OpenRegister\WorkflowEngine\WindmillAdapter";s:9:"namespace";s:31:"OCA\OpenRegister\WorkflowEngine";s:9:"startLine";i:32;s:7:"endLine";i:375;s:7:"methods";a:15:{s:11:"__construct";a:6:{s:10:"methodName";s:11:"__construct";s:9:"signature";s:91:"__construct(OCP\Http\Client\IClientService $clientService, Psr\Log\LoggerInterface $logger)";s:10:"visibility";s:6:"public";s:9:"startLine";i:62;s:7:"endLine";i:69;s:3:"ccn";i:1;}s:9:"configure";a:6:{s:10:"methodName";s:9:"configure";s:9:"signature";s:51:"configure(string $baseUrl, array $authConfig): void";s:10:"visibility";s:6:"public";s:9:"startLine";i:79;s:7:"endLine";i:84;s:3:"ccn";i:1;}s:14:"deployWorkflow";a:6:{s:10:"methodName";s:14:"deployWorkflow";s:9:"signature";s:49:"deployWorkflow(array $workflowDefinition): string";s:10:"visibility";s:6:"public";s:9:"startLine";i:93;s:7:"endLine";i:104;s:3:"ccn";i:1;}s:14:"updateWorkflow";a:6:{s:10:"methodName";s:14:"updateWorkflow";s:9:"signature";s:69:"updateWorkflow(string $workflowId, array $workflowDefinition): string";s:10:"visibility";s:6:"public";s:9:"startLine";i:114;s:7:"endLine";i:125;s:3:"ccn";i:1;}s:11:"getWorkflow";a:6:{s:10:"methodName";s:11:"getWorkflow";s:9:"signature";s:38:"getWorkflow(string $workflowId): array";s:10:"visibility";s:6:"public";s:9:"startLine";i:134;s:7:"endLine";i:143;s:3:"ccn";i:1;}s:14:"deleteWorkflow";a:6:{s:10:"methodName";s:14:"deleteWorkflow";s:9:"signature";s:40:"deleteWorkflow(string $workflowId): void";s:10:"visibility";s:6:"public";s:9:"startLine";i:152;s:7:"endLine";i:159;s:3:"ccn";i:1;}s:16:"activateWorkflow";a:6:{s:10:"methodName";s:16:"activateWorkflow";s:9:"signature";s:42:"activateWorkflow(string $workflowId): void";s:10:"visibility";s:6:"public";s:9:"startLine";i:168;s:7:"endLine";i:171;s:3:"ccn";i:1;}s:18:"deactivateWorkflow";a:6:{s:10:"methodName";s:18:"deactivateWorkflow";s:9:"signature";s:44:"deactivateWorkflow(string $workflowId): void";s:10:"visibility";s:6:"public";s:9:"startLine";i:180;s:7:"endLine";i:184;s:3:"ccn";i:1;}s:15:"executeWorkflow";a:6:{s:10:"methodName";s:15:"executeWorkflow";s:9:"signature";s:110:"executeWorkflow(string $workflowId, array $data, int $timeout): OCA\OpenRegister\WorkflowEngine\WorkflowResult";s:10:"visibility";s:6:"public";s:9:"startLine";i:195;s:7:"endLine";i:235;s:3:"ccn";i:4;}s:13:"getWebhookUrl";a:6:{s:10:"methodName";s:13:"getWebhookUrl";s:9:"signature";s:41:"getWebhookUrl(string $workflowId): string";s:10:"visibility";s:6:"public";s:9:"startLine";i:244;s:7:"endLine";i:247;s:3:"ccn";i:1;}s:13:"listWorkflows";a:6:{s:10:"methodName";s:13:"listWorkflows";s:9:"signature";s:22:"listWorkflows(): array";s:10:"visibility";s:6:"public";s:9:"startLine";i:254;s:7:"endLine";i:282;s:3:"ccn";i:3;}s:11:"healthCheck";a:6:{s:10:"methodName";s:11:"healthCheck";s:9:"signature";s:19:"healthCheck(): bool";s:10:"visibility";s:6:"public";s:9:"startLine";i:289;s:7:"endLine";i:307;s:3:"ccn";i:2;}s:19:"buildRequestOptions";a:6:{s:10:"methodName";s:19:"buildRequestOptions";s:9:"signature";s:40:"buildRequestOptions(array $extra): array";s:10:"visibility";s:7:"private";s:9:"startLine";i:316;s:7:"endLine";i:324;s:3:"ccn";i:1;}s:16:"buildAuthHeaders";a:6:{s:10:"methodName";s:16:"buildAuthHeaders";s:9:"signature";s:25:"buildAuthHeaders(): array";s:10:"visibility";s:7:"private";s:9:"startLine";i:331;s:7:"endLine";i:340;s:3:"ccn";i:2;}s:21:"parseWorkflowResponse";a:6:{s:10:"methodName";s:21:"parseWorkflowResponse";s:9:"signature";s:91:"parseWorkflowResponse(?array $responseData): OCA\OpenRegister\WorkflowEngine\WorkflowResult";s:10:"visibility";s:7:"private";s:9:"startLine";i:349;s:7:"endLine";i:374;s:3:"ccn";i:2;}}}}s:8:"traitsIn";a:0:{}s:11:"functionsIn";a:0:{}s:14:"linesOfCodeFor";a:3:{s:11:"linesOfCode";i:376;s:18:"commentLinesOfCode";i:159;s:21:"nonCommentLinesOfCode";i:217;}s:15:"ignoredLinesFor";a:1:{i:0;i:32;}s:17:"executableLinesIn";a:125:{i:66;i:4;i:67;i:5;i:68;i:6;i:81;i:8;i:82;i:9;i:83;i:10;i:95;i:11;i:96;i:12;i:97;i:12;i:98;i:12;i:99;i:12;i:101;i:13;i:103;i:14;i:116;i:15;i:117;i:16;i:118;i:16;i:119;i:16;i:120;i:16;i:122;i:17;i:124;i:18;i:136;i:19;i:137;i:20;i:138;i:20;i:139;i:20;i:140;i:20;i:142;i:21;i:154;i:22;i:155;i:23;i:156;i:23;i:157;i:23;i:158;i:23;i:171;i:24;i:184;i:25;i:198;i:26;i:199;i:27;i:200;i:27;i:201;i:27;i:202;i:27;i:203;i:27;i:204;i:27;i:205;i:27;i:206;i:27;i:207;i:27;i:209;i:28;i:211;i:29;i:212;i:30;i:213;i:31;i:214;i:31;i:215;i:31;i:216;i:31;i:217;i:31;i:218;i:31;i:219;i:31;i:221;i:32;i:222;i:33;i:224;i:34;i:225;i:34;i:226;i:34;i:227;i:34;i:230;i:35;i:231;i:35;i:232;i:35;i:233;i:35;i:246;i:36;i:257;i:37;i:258;i:38;i:259;i:38;i:260;i:38;i:261;i:38;i:263;i:39;i:264;i:40;i:266;i:41;i:267;i:42;i:268;i:42;i:269;i:42;i:270;i:42;i:273;i:43;i:274;i:44;i:275;i:45;i:276;i:45;i:277;i:45;i:278;i:45;i:280;i:46;i:292;i:47;i:293;i:48;i:294;i:48;i:295;i:48;i:296;i:48;i:298;i:49;i:299;i:50;i:300;i:51;i:301;i:51;i:302;i:51;i:303;i:51;i:305;i:52;i:318;i:54;i:319;i:54;i:320;i:54;i:321;i:54;i:322;i:54;i:323;i:54;i:333;i:55;i:335;i:56;i:336;i:57;i:339;i:58;i:351;i:59;i:352;i:60;i:355;i:61;i:357;i:62;i:358;i:63;i:359;i:63;i:360;i:63;i:361;i:63;i:362;i:64;i:363;i:64;i:364;i:64;i:365;i:64;i:366;i:65;i:367;i:65;i:368;i:65;i:369;i:65;i:370;i:66;i:371;i:66;i:372;i:66;i:373;i:62;}}

Large diffs are not rendered by default.

Loading
Loading