From 679325377e837caa4319e79d9d101e0876c7c8d5 Mon Sep 17 00:00:00 2001 From: stadolf Date: Fri, 12 Jul 2024 15:14:41 +0200 Subject: [PATCH] adds test case for faked tokens executed coverage Signed-off-by: stadolf --- audit/TESTS.md | 34 +- lcov.info | 3445 ++++++++++++++++++++++++++++++++++++++++++ src/Tokenizer.sol | 1 - test/Tokenizer.t.sol | 24 +- 4 files changed, 3483 insertions(+), 21 deletions(-) create mode 100644 lcov.info diff --git a/audit/TESTS.md b/audit/TESTS.md index 11936809..1405513a 100644 --- a/audit/TESTS.md +++ b/audit/TESTS.md @@ -29,20 +29,20 @@ yarn deploy:local ## Coverage -2023-07-28 - -| File | % Lines | % Statements | % Branches | % Funcs | -| ---------------------------------------- | --------------- | --------------- | -------------- | -------------- | -| src/BioPriceFeed.sol | 100.00% (4/4) | 100.00% (5/5) | 100.00% (0/0) | 100.00% (2/2) | -| src/IPNFT.sol | 78.05% (32/41) | 77.27% (34/44) | 85.71% (12/14) | 78.57% (11/14) | -| src/IPToken.sol | 100.00% (14/14) | 100.00% (18/18) | 100.00% (2/2) | 100.00% (7/7) | -| src/Mintpass.sol | 75.76% (25/33) | 78.05% (32/41) | 62.50% (10/16) | 78.57% (11/14) | -| src/Permissioner.sol | 87.50% (7/8) | 90.91% (10/11) | 100.00% (2/2) | 83.33% (5/6) | -| src/SalesShareDistributor.sol | 94.87% (37/39) | 95.56% (43/45) | 94.44% (17/18) | 71.43% (5/7) | -| src/SchmackoSwap.sol | 88.24% (30/34) | 80.00% (36/45) | 83.33% (15/18) | 75.00% (6/8) | -| src/SignedMintAuthorizer.sol | 71.43% (5/7) | 80.00% (8/10) | 100.00% (0/0) | 75.00% (3/4) | -| src/TimelockedToken.sol | 82.76% (24/29) | 76.47% (26/34) | 100.00% (6/6) | 58.33% (7/12) | -| src/Tokenizer.sol | 76.47% (13/17) | 78.95% (15/19) | 100.00% (4/4) | 50.00% (2/4) | -| src/crowdsale/CrowdSale.sol | 98.81% (83/84) | 98.82% (84/85) | 95.00% (38/40) | 92.86% (13/14) | -| src/crowdsale/LockingCrowdSale.sol | 100.00% (24/24) | 100.00% (25/25) | 100.00% (6/6) | 100.00% (7/7) | -| src/crowdsale/StakedLockingCrowdSale.sol | 94.23% (49/52) | 94.64% (53/56) | 88.89% (16/18) | 80.00% (8/10) | +2024-07-12 + +| File | % Lines | % Statements | % Branches | % Funcs | +| ---------------------------------------- | --------------- | ---------------- | -------------- | -------------- | +| src/BioPriceFeed.sol | 100.00% (6/6) | 100.00% (7/7) | 100.00% (0/0) | 100.00% (3/3) | +| src/IPNFT.sol | 90.48% (38/42) | 89.58% (43/48) | 85.71% (12/14) | 80.00% (12/15) | +| src/IPToken.sol | 100.00% (16/16) | 100.00% (24/24) | 100.00% (4/4) | 100.00% (7/7) | +| src/Mintpass.sol | 77.14% (27/35) | 76.09% (35/46) | 68.75% (11/16) | 80.00% (12/15) | +| src/Permissioner.sol | 87.50% (7/8) | 90.91% (10/11) | 100.00% (2/2) | 66.67% (4/6) | +| src/SalesShareDistributor.sol | 97.37% (37/38) | 98.00% (49/50) | 93.75% (15/16) | 85.71% (6/7) | +| src/SchmackoSwap.sol | 88.24% (30/34) | 80.85% (38/47) | 83.33% (15/18) | 75.00% (6/8) | +| src/SignedMintAuthorizer.sol | 70.00% (7/10) | 76.92% (10/13) | 100.00% (0/0) | 80.00% (4/5) | +| src/TimelockedToken.sol | 82.76% (24/29) | 80.00% (32/40) | 100.00% (6/6) | 58.33% (7/12) | +| src/Tokenizer.sol | 100.00% (34/34) | 100.00% (47/47) | 90.00% (9/10) | 90.91% (10/11) | +| src/crowdsale/CrowdSale.sol | 98.92% (92/93) | 99.09% (109/110) | 95.45% (42/44) | 93.75% (15/16) | +| src/crowdsale/LockingCrowdSale.sol | 100.00% (24/24) | 100.00% (28/28) | 100.00% (6/6) | 100.00% (7/7) | +| src/crowdsale/StakedLockingCrowdSale.sol | 94.23% (49/52) | 95.08% (58/61) | 88.89% (16/18) | 80.00% (8/10) | diff --git a/lcov.info b/lcov.info new file mode 100644 index 00000000..ce8626db --- /dev/null +++ b/lcov.info @@ -0,0 +1,3445 @@ +TN: +SF:script/DeployShareDistributor.s.sol +FN:13,DeployShareDistributor.run +FNDA:0,DeployShareDistributor.run +DA:14,0 +DA:14,0 +DA:15,0 +DA:15,0 +DA:15,0 +DA:17,0 +DA:17,0 +DA:17,0 +DA:19,0 +DA:19,0 +DA:19,0 +DA:26,0 +DA:26,0 +DA:27,0 +DA:27,0 +DA:29,0 +DA:29,0 +FN:34,DeploySalesShareDistributorImplementation.run +FNDA:0,DeploySalesShareDistributorImplementation.run +DA:35,0 +DA:35,0 +DA:36,0 +DA:36,0 +DA:36,0 +DA:37,0 +DA:37,0 +DA:39,0 +DA:39,0 +FNF:2 +FNH:0 +LF:11 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/DeploySuite.s.sol +FN:17,DeploySuite.run +FNDA:0,DeploySuite.run +DA:18,0 +DA:18,0 +DA:18,0 +DA:19,0 +DA:19,0 +DA:21,0 +DA:21,0 +DA:21,0 +DA:23,0 +DA:23,0 +DA:23,0 +DA:24,0 +DA:24,0 +DA:24,0 +DA:25,0 +DA:25,0 +DA:27,0 +DA:27,0 +DA:28,0 +DA:28,0 +DA:29,0 +DA:29,0 +DA:31,0 +DA:31,0 +FNF:1 +FNH:0 +LF:10 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/DeployTokenizer.s.sol +FN:16,DeployTokenizerInfrastructure.run +FNDA:0,DeployTokenizerInfrastructure.run +DA:17,0 +DA:17,0 +DA:18,0 +DA:18,0 +DA:18,0 +DA:19,0 +DA:19,0 +DA:19,0 +DA:21,0 +DA:21,0 +DA:21,0 +DA:26,0 +DA:26,0 +DA:26,0 +DA:27,0 +DA:27,0 +DA:29,0 +DA:29,0 +DA:29,0 +DA:30,0 +DA:30,0 +DA:30,0 +DA:31,0 +DA:31,0 +DA:33,0 +DA:33,0 +DA:34,0 +DA:34,0 +DA:35,0 +DA:35,0 +DA:36,0 +DA:36,0 +DA:37,0 +DA:37,0 +FN:42,DeploytokenizerImplementation.run +FNDA:0,DeploytokenizerImplementation.run +DA:43,0 +DA:43,0 +DA:44,0 +DA:44,0 +DA:44,0 +DA:45,0 +DA:45,0 +DA:47,0 +DA:47,0 +FNF:2 +FNH:0 +LF:18 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/IPNFT.s.sol +FN:10,Deploy.run +FNDA:0,Deploy.run +DA:11,0 +DA:11,0 +DA:12,0 +DA:12,0 +DA:12,0 +DA:18,0 +DA:18,0 +DA:20,0 +DA:20,0 +FN:25,Upgrade.run +FNDA:0,Upgrade.run +DA:26,0 +DA:26,0 +DA:27,0 +DA:27,0 +DA:27,0 +DA:31,0 +DA:31,0 +DA:31,0 +DA:33,0 +DA:33,0 +DA:33,0 +DA:34,0 +DA:34,0 +DA:36,0 +DA:36,0 +DA:37,0 +DA:37,0 +FN:42,DeployIpnftImpl.run +FNDA:0,DeployIpnftImpl.run +DA:43,0 +DA:43,0 +DA:44,0 +DA:44,0 +DA:44,0 +DA:45,0 +DA:45,0 +DA:46,0 +DA:46,0 +FNF:3 +FNH:0 +LF:15 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/IPToken.s.sol +FN:9,DeployIPTokenImpl.run +FNDA:0,DeployIPTokenImpl.run +DA:10,0 +DA:10,0 +DA:11,0 +DA:11,0 +DA:11,0 +DA:12,0 +DA:12,0 +DA:14,0 +DA:14,0 +FNF:1 +FNH:0 +LF:4 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/SchmackoSwap.s.sol +FN:9,SchmackoSwapScript.setUp +FNDA:0,SchmackoSwapScript.setUp +FN:11,SchmackoSwapScript.run +FNDA:0,SchmackoSwapScript.run +DA:12,0 +DA:12,0 +DA:13,0 +DA:13,0 +DA:13,0 +DA:15,0 +DA:15,0 +DA:16,0 +DA:16,0 +FNF:2 +FNH:0 +LF:4 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/Tokens.s.sol +FN:14,DeployTestTokensManually.run +FNDA:0,DeployTestTokensManually.run +DA:15,0 +DA:15,0 +DA:15,0 +DA:16,0 +DA:16,0 +DA:16,0 +DA:17,0 +DA:17,0 +DA:17,0 +DA:19,0 +DA:19,0 +DA:20,0 +DA:20,0 +DA:20,0 +DA:21,0 +DA:21,0 +DA:22,0 +DA:22,0 +DA:24,0 +DA:24,0 +FN:29,DeployTokenVesting.run +FNDA:0,DeployTokenVesting.run +DA:30,0 +DA:30,0 +DA:31,0 +DA:31,0 +DA:31,0 +DA:33,0 +DA:33,0 +DA:33,0 +DA:34,0 +DA:34,0 +DA:34,0 +DA:36,0 +DA:36,0 +DA:36,0 +DA:37,0 +DA:37,0 +DA:39,0 +DA:39,0 +FNF:2 +FNH:0 +LF:15 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/dev/ApproveAndBuy.s.sol +FN:21,ApproveAndBuy.prepareAddresses +FNDA:0,ApproveAndBuy.prepareAddresses +DA:22,0 +DA:22,0 +DA:23,0 +DA:23,0 +DA:24,0 +DA:24,0 +DA:25,0 +DA:25,0 +DA:26,0 +DA:26,0 +FN:29,ApproveAndBuy.fulfillListing +FNDA:0,ApproveAndBuy.fulfillListing +DA:30,0 +DA:30,0 +DA:30,0 +DA:33,0 +DA:33,0 +DA:34,0 +DA:34,0 +DA:35,0 +DA:35,0 +DA:37,0 +DA:37,0 +DA:38,0 +DA:38,0 +DA:39,0 +DA:39,0 +DA:40,0 +DA:40,0 +FN:43,ApproveAndBuy.run +FNDA:0,ApproveAndBuy.run +DA:44,0 +DA:44,0 +DA:51,0 +DA:51,0 +DA:52,0 +DA:52,0 +FNF:3 +FNH:0 +LF:16 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/dev/Common.sol +FN:22,CommonScript.prepareAddresses +FNDA:0,CommonScript.prepareAddresses +DA:23,0 +DA:23,0 +DA:24,0 +DA:24,0 +DA:25,0 +DA:25,0 +DA:26,0 +DA:26,0 +DA:27,0 +DA:27,0 +FN:30,CommonScript.dealERC20 +FNDA:0,CommonScript.dealERC20 +DA:31,0 +DA:31,0 +DA:32,0 +DA:32,0 +DA:33,0 +DA:33,0 +FNF:2 +FNH:0 +LF:8 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/dev/CrowdSale.s.sol +FN:24,DeployCrowdSale.run +FNDA:0,DeployCrowdSale.run +DA:25,0 +DA:25,0 +DA:26,0 +DA:26,0 +DA:27,0 +DA:27,0 +DA:27,0 +DA:28,0 +DA:28,0 +DA:30,0 +DA:30,0 +FN:39,DeployStakedCrowdSale.run +FNDA:0,DeployStakedCrowdSale.run +DA:40,0 +DA:40,0 +DA:41,0 +DA:41,0 +DA:42,0 +DA:42,0 +DA:42,0 +DA:44,0 +DA:44,0 +DA:44,0 +DA:45,0 +DA:45,0 +DA:46,0 +DA:46,0 +DA:47,0 +DA:47,0 +DA:49,0 +DA:49,0 +FN:63,FixtureCrowdSale.prepareAddresses +FNDA:0,FixtureCrowdSale.prepareAddresses +DA:64,0 +DA:64,0 +DA:66,0 +DA:66,0 +DA:68,0 +DA:68,0 +DA:70,0 +DA:70,0 +DA:72,0 +DA:72,0 +DA:73,0 +DA:73,0 +FN:76,FixtureCrowdSale.placeBid +FNDA:0,FixtureCrowdSale.placeBid +DA:77,0 +DA:77,0 +DA:78,0 +DA:78,0 +DA:79,0 +DA:79,0 +DA:80,0 +DA:80,0 +DA:81,0 +DA:81,0 +FN:84,FixtureCrowdSale.prepareRun +FNDA:0,FixtureCrowdSale.prepareRun +DA:86,0 +DA:86,0 +DA:87,0 +DA:87,0 +DA:89,0 +DA:89,0 +DA:99,0 +DA:99,0 +DA:100,0 +DA:100,0 +DA:101,0 +DA:101,0 +FN:104,FixtureCrowdSale.startSale +FNDA:0,FixtureCrowdSale.startSale +DA:105,0 +DA:105,0 +DA:105,0 +DA:106,0 +DA:106,0 +DA:107,0 +DA:107,0 +DA:108,0 +DA:108,0 +FN:111,FixtureCrowdSale.afterRun +FNDA:0,FixtureCrowdSale.afterRun +DA:112,0 +DA:112,0 +DA:113,0 +DA:113,0 +FN:116,FixtureCrowdSale.run +FNDA:0,FixtureCrowdSale.run +DA:117,0 +DA:117,0 +DA:119,0 +DA:119,0 +DA:119,0 +DA:121,0 +DA:121,0 +DA:121,0 +DA:123,0 +DA:123,0 +DA:123,0 +DA:124,0 +DA:124,0 +DA:125,0 +DA:125,0 +DA:126,0 +DA:126,0 +DA:128,0 +DA:128,0 +FN:140,FixtureStakedCrowdSale.prepareAddresses +FNDA:0,FixtureStakedCrowdSale.prepareAddresses +DA:141,0 +DA:141,0 +DA:142,0 +DA:142,0 +DA:144,0 +DA:144,0 +DA:145,0 +DA:145,0 +FN:148,FixtureStakedCrowdSale.prepareRun +FNDA:0,FixtureStakedCrowdSale.prepareRun +DA:149,0 +DA:149,0 +DA:150,0 +DA:150,0 +DA:151,0 +DA:151,0 +FN:154,FixtureStakedCrowdSale.startSale +FNDA:0,FixtureStakedCrowdSale.startSale +DA:155,0 +DA:155,0 +DA:155,0 +DA:156,0 +DA:156,0 +DA:157,0 +DA:157,0 +DA:158,0 +DA:158,0 +FN:161,FixtureStakedCrowdSale.afterRun +FNDA:0,FixtureStakedCrowdSale.afterRun +DA:162,0 +DA:162,0 +DA:164,0 +DA:164,0 +DA:164,0 +DA:165,0 +DA:165,0 +FN:170,ClaimSale.run +FNDA:0,ClaimSale.run +DA:171,0 +DA:171,0 +DA:172,0 +DA:172,0 +DA:172,0 +DA:173,0 +DA:173,0 +DA:173,0 +DA:175,0 +DA:175,0 +DA:175,0 +DA:176,0 +DA:176,0 +DA:176,0 +DA:177,0 +DA:177,0 +DA:179,0 +DA:179,0 +DA:180,0 +DA:180,0 +DA:181,0 +DA:181,0 +DA:182,0 +DA:182,0 +DA:184,0 +DA:184,0 +DA:184,0 +DA:186,0 +DA:186,0 +DA:186,0 +DA:187,0 +DA:187,0 +DA:188,0 +DA:188,0 +DA:189,0 +DA:189,0 +FNF:13 +FNH:0 +LF:73 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/dev/Ipnft.s.sol +FN:24,DeployIpnftSuite.run +FNDA:0,DeployIpnftSuite.run +DA:25,0 +DA:25,0 +DA:26,0 +DA:26,0 +DA:27,0 +DA:27,0 +DA:27,0 +DA:34,0 +DA:34,0 +DA:34,0 +DA:36,0 +DA:36,0 +DA:36,0 +DA:37,0 +DA:37,0 +DA:39,0 +DA:39,0 +DA:40,0 +DA:40,0 +DA:41,0 +DA:41,0 +DA:43,0 +DA:43,0 +FN:52,FixtureIpnft.prepareAddresses +FNDA:0,FixtureIpnft.prepareAddresses +DA:53,0 +DA:53,0 +DA:54,0 +DA:54,0 +DA:55,0 +DA:55,0 +DA:56,0 +DA:56,0 +FN:59,FixtureIpnft.mintIpnft +FNDA:0,FixtureIpnft.mintIpnft +DA:60,0 +DA:60,0 +DA:61,0 +DA:61,0 +DA:61,0 +DA:63,0 +DA:63,0 +DA:63,0 +DA:67,0 +DA:67,0 +DA:67,0 +DA:69,0 +DA:69,0 +DA:73,0 +DA:73,0 +DA:74,0 +DA:74,0 +FN:77,FixtureIpnft.createListing +FNDA:0,FixtureIpnft.createListing +DA:78,0 +DA:78,0 +DA:79,0 +DA:79,0 +DA:80,0 +DA:80,0 +DA:80,0 +DA:81,0 +DA:81,0 +DA:82,0 +DA:82,0 +FN:85,FixtureIpnft.run +FNDA:0,FixtureIpnft.run +DA:86,0 +DA:86,0 +DA:88,0 +DA:88,0 +DA:88,0 +DA:90,0 +DA:90,0 +DA:91,0 +DA:91,0 +DA:93,0 +DA:93,0 +DA:93,0 +DA:96,0 +DA:96,0 +FNF:5 +FNH:0 +LF:32 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/dev/Periphery.s.sol +FN:12,DeployPeriphery.run +FNDA:0,DeployPeriphery.run +DA:13,0 +DA:13,0 +DA:14,0 +DA:14,0 +DA:15,0 +DA:15,0 +DA:15,0 +DA:16,0 +DA:16,0 +DA:16,0 +DA:17,0 +DA:17,0 +DA:19,0 +DA:19,0 +DA:20,0 +DA:20,0 +FNF:1 +FNH:0 +LF:7 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/dev/SignTermsMessage.s.sol +FN:9,SignTermsMessage.run +FNDA:0,SignTermsMessage.run +DA:10,0 +DA:10,0 +DA:10,0 +DA:11,0 +DA:11,0 +DA:14,0 +DA:14,0 +DA:14,0 +DA:16,0 +DA:16,0 +DA:16,0 +DA:17,0 +DA:17,0 +DA:17,0 +DA:19,0 +DA:19,0 +FNF:1 +FNH:0 +LF:6 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/dev/Synthesizer.s.sol +FN:34,DeploySynthesizer.run +FNDA:0,DeploySynthesizer.run +DA:35,0 +DA:35,0 +DA:36,0 +DA:36,0 +DA:37,0 +DA:37,0 +DA:37,0 +DA:38,0 +DA:38,0 +DA:38,0 +DA:40,0 +DA:40,0 +DA:41,0 +DA:41,0 +DA:42,0 +DA:42,0 +DA:43,0 +DA:43,0 +FN:57,FixtureSynthesizer.prepareAddresses +FNDA:0,FixtureSynthesizer.prepareAddresses +DA:58,0 +DA:58,0 +DA:59,0 +DA:59,0 +DA:60,0 +DA:60,0 +FN:63,FixtureSynthesizer.run +FNDA:0,FixtureSynthesizer.run +DA:64,0 +DA:64,0 +DA:66,0 +DA:66,0 +DA:66,0 +DA:68,0 +DA:68,0 +DA:69,0 +DA:69,0 +DA:69,0 +DA:70,0 +DA:70,0 +DA:70,0 +DA:71,0 +DA:71,0 +DA:72,0 +DA:72,0 +DA:73,0 +DA:73,0 +DA:75,0 +DA:75,0 +DA:76,0 +DA:76,0 +FN:84,UpgradeSynthesizerToTokenizer.run +FNDA:0,UpgradeSynthesizerToTokenizer.run +DA:85,0 +DA:85,0 +DA:86,0 +DA:86,0 +DA:86,0 +DA:88,0 +DA:88,0 +DA:89,0 +DA:89,0 +DA:89,0 +DA:90,0 +DA:90,0 +DA:91,0 +DA:91,0 +DA:91,0 +DA:93,0 +DA:93,0 +DA:93,0 +DA:95,0 +DA:95,0 +DA:97,0 +DA:97,0 +DA:98,0 +DA:98,0 +FNF:4 +FNH:0 +LF:31 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/dev/Tokenizer.s.sol +FN:16,DeployTokenizer.run +FNDA:0,DeployTokenizer.run +DA:17,0 +DA:17,0 +DA:18,0 +DA:18,0 +DA:19,0 +DA:19,0 +DA:19,0 +DA:20,0 +DA:20,0 +DA:20,0 +DA:21,0 +DA:21,0 +DA:23,0 +DA:23,0 +DA:23,0 +DA:24,0 +DA:24,0 +DA:26,0 +DA:26,0 +DA:27,0 +DA:27,0 +DA:28,0 +DA:28,0 +FN:42,FixtureTokenizer.prepareAddresses +FNDA:0,FixtureTokenizer.prepareAddresses +DA:43,0 +DA:43,0 +DA:44,0 +DA:44,0 +DA:45,0 +DA:45,0 +FN:48,FixtureTokenizer.run +FNDA:0,FixtureTokenizer.run +DA:49,0 +DA:49,0 +DA:51,0 +DA:51,0 +DA:51,0 +DA:53,0 +DA:53,0 +DA:54,0 +DA:54,0 +DA:54,0 +DA:55,0 +DA:55,0 +DA:55,0 +DA:56,0 +DA:56,0 +DA:57,0 +DA:57,0 +DA:58,0 +DA:58,0 +DA:60,0 +DA:60,0 +FNF:3 +FNH:0 +LF:22 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/dev/Tokens.s.sol +FN:13,DeployTokens.run +FNDA:0,DeployTokens.run +DA:14,0 +DA:14,0 +DA:15,0 +DA:15,0 +DA:16,0 +DA:16,0 +DA:16,0 +DA:18,0 +DA:18,0 +DA:18,0 +DA:19,0 +DA:19,0 +DA:19,0 +DA:20,0 +DA:20,0 +DA:22,0 +DA:22,0 +DA:23,0 +DA:23,0 +DA:24,0 +DA:24,0 +FN:29,DeployFakeTokens.run +FNDA:0,DeployFakeTokens.run +DA:30,0 +DA:30,0 +DA:31,0 +DA:31,0 +DA:32,0 +DA:32,0 +DA:32,0 +DA:33,0 +DA:33,0 +DA:34,0 +DA:34,0 +DA:35,0 +DA:35,0 +DA:37,0 +DA:37,0 +DA:37,0 +DA:38,0 +DA:38,0 +DA:39,0 +DA:39,0 +DA:40,0 +DA:40,0 +DA:41,0 +DA:41,0 +DA:43,0 +DA:43,0 +DA:44,0 +DA:44,0 +FNF:2 +FNH:0 +LF:22 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/prod/RolloutTokenizerV13.s.sol +FN:10,RolloutTokenizerV13.run +FNDA:0,RolloutTokenizerV13.run +DA:11,0 +DA:11,0 +DA:13,0 +DA:13,0 +DA:13,0 +DA:14,0 +DA:14,0 +DA:14,0 +DA:16,0 +DA:16,0 +DA:16,0 +DA:18,0 +DA:18,0 +DA:19,0 +DA:19,0 +DA:20,0 +DA:20,0 +DA:22,0 +DA:22,0 +FNF:1 +FNH:0 +LF:8 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/prod/RolloutV23.sol +FN:14,RolloutV23.run +FNDA:0,RolloutV23.run +DA:15,0 +DA:15,0 +DA:15,0 +DA:17,0 +DA:17,0 +DA:18,0 +DA:18,0 +DA:19,0 +DA:19,0 +DA:19,0 +DA:21,0 +DA:21,0 +DA:21,0 +DA:23,0 +DA:23,0 +DA:24,0 +DA:24,0 +DA:25,0 +DA:25,0 +DA:27,0 +DA:27,0 +DA:27,0 +DA:28,0 +DA:28,0 +DA:28,0 +DA:30,0 +DA:30,0 +DA:30,0 +DA:37,0 +DA:37,0 +DA:38,0 +DA:38,0 +DA:39,0 +DA:39,0 +DA:41,0 +DA:41,0 +DA:42,0 +DA:42,0 +DA:43,0 +DA:43,0 +DA:45,0 +DA:45,0 +DA:46,0 +DA:46,0 +FNF:1 +FNH:0 +LF:19 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/prod/RolloutV23Sale.sol +FN:12,RolloutV23Sale.run +FNDA:0,RolloutV23Sale.run +DA:13,0 +DA:13,0 +DA:14,0 +DA:14,0 +DA:16,0 +DA:16,0 +DA:16,0 +DA:17,0 +DA:17,0 +DA:18,0 +DA:18,0 +DA:20,0 +DA:20,0 +FNF:1 +FNH:0 +LF:6 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:script/prod/RolloutV24.sol +FN:19,RolloutV24.run +FNDA:0,RolloutV24.run +DA:20,0 +DA:20,0 +DA:21,0 +DA:21,0 +DA:21,0 +DA:24,0 +DA:24,0 +DA:25,0 +DA:25,0 +DA:25,0 +DA:26,0 +DA:26,0 +DA:26,0 +DA:27,0 +DA:27,0 +DA:27,0 +DA:28,0 +DA:28,0 +DA:30,0 +DA:30,0 +DA:31,0 +DA:31,0 +DA:32,0 +DA:32,0 +DA:33,0 +DA:33,0 +FNF:1 +FNH:0 +LF:11 +LH:0 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/BioPriceFeed.sol +FN:44,BioPriceFeed. +FNDA:18,BioPriceFeed. +DA:45,6 +DA:45,6 +DA:46,18 +DA:46,18 +FN:49,BioPriceFeed.getPrice +FNDA:7,BioPriceFeed.getPrice +DA:50,7 +DA:50,7 +DA:50,7 +DA:51,7 +DA:51,7 +FN:63,BioPriceFeed.signal +FNDA:5,BioPriceFeed.signal +DA:64,4 +DA:64,4 +DA:65,4 +DA:65,4 +FNF:3 +FNH:3 +LF:6 +LH:6 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/IPNFT.sol +FN:60,IPNFT. +FNDA:84,IPNFT. +DA:61,79 +DA:61,79 +FN:65,IPNFT.initialize +FNDA:47,IPNFT.initialize +DA:66,46 +DA:66,46 +DA:67,46 +DA:67,46 +DA:68,46 +DA:68,46 +DA:69,46 +DA:69,46 +DA:70,46 +DA:70,46 +FN:73,IPNFT.pause +FNDA:1,IPNFT.pause +DA:74,1 +DA:74,1 +FN:77,IPNFT.unpause +FNDA:0,IPNFT.unpause +DA:78,0 +DA:78,0 +FN:81,IPNFT.setAuthorizer +FNDA:50,IPNFT.setAuthorizer +DA:82,50 +DA:82,50 +DA:83,50 +DA:83,50 +FN:87,IPNFT.contractURI +FNDA:0,IPNFT.contractURI +DA:88,0 +DA:88,0 +FN:95,IPNFT.reserve +FNDA:46,IPNFT.reserve +DA:96,45 +DA:96,45 +BRDA:96,0,0,- +BRDA:96,0,1,45 +DA:97,0 +DA:97,0 +DA:99,45 +DA:99,45 +DA:100,45 +DA:100,45 +DA:101,45 +DA:101,45 +DA:102,45 +DA:102,45 +FN:116,IPNFT.mintReservation +FNDA:44,IPNFT.mintReservation +DA:123,44 +DA:123,44 +DA:123,44 +BRDA:123,1,0,1 +BRDA:123,1,1,43 +DA:124,1 +DA:124,1 +DA:127,43 +DA:127,43 +BRDA:127,2,0,1 +BRDA:127,2,1,42 +DA:128,1 +DA:128,1 +DA:131,42 +DA:131,42 +BRDA:131,3,0,1 +BRDA:131,3,1,41 +DA:132,1 +DA:132,1 +DA:135,41 +DA:135,41 +DA:136,41 +DA:136,41 +DA:137,41 +DA:137,41 +DA:139,41 +DA:139,41 +DA:140,41 +DA:140,41 +DA:141,41 +DA:141,41 +DA:142,41 +DA:142,41 +FN:151,IPNFT.grantReadAccess +FNDA:3,IPNFT.grantReadAccess +DA:152,3 +DA:152,3 +DA:152,3 +DA:152,3 +BRDA:152,4,0,1 +BRDA:152,4,1,2 +DA:153,1 +DA:153,1 +DA:156,2 +DA:156,2 +BRDA:156,5,0,1 +BRDA:156,5,1,1 +DA:157,1 +DA:157,1 +DA:160,1 +DA:160,1 +DA:161,1 +DA:161,1 +FN:170,IPNFT.canRead +FNDA:5,IPNFT.canRead +DA:171,5 +DA:171,5 +FN:175,IPNFT.withdrawAll +FNDA:3,IPNFT.withdrawAll +DA:176,2 +DA:176,2 +DA:176,2 +DA:177,2 +DA:177,2 +BRDA:177,6,0,- +BRDA:177,6,1,2 +FN:181,IPNFT._authorizeUpgrade +FNDA:1,IPNFT._authorizeUpgrade +FN:188,IPNFT._burn +FNDA:1,IPNFT._burn +DA:189,1 +DA:189,1 +FN:193,IPNFT.tokenURI +FNDA:1,IPNFT.tokenURI +DA:194,1 +DA:194,1 +DA:194,1 +FN:197,IPNFT.supportsInterface +FNDA:0,IPNFT.supportsInterface +DA:198,0 +DA:198,0 +DA:198,0 +FNF:15 +FNH:12 +LF:42 +LH:38 +BRF:14 +BRH:12 +end_of_record +TN: +SF:src/IPToken.sol +FN:38,IPToken.initialize +FNDA:276,IPToken.initialize +DA:42,275 +DA:42,275 +DA:43,275 +DA:43,275 +DA:44,275 +DA:44,275 +FN:47,IPToken. +FNDA:9,IPToken. +DA:48,4 +DA:48,4 +FN:51,IPToken.onlyTokenizerOrIPNFTController +FNDA:266,IPToken.onlyTokenizerOrIPNFTController +DA:52,266 +DA:52,266 +DA:52,266 +DA:52,266 +DA:52,266 +DA:52,265 +DA:52,265 +DA:52,265 +BRDA:52,0,0,5 +BRDA:52,0,1,285 +DA:53,1 +DA:53,1 +FN:58,IPToken.metadata +FNDA:292,IPToken.metadata +DA:59,292 +DA:59,292 +FN:67,IPToken.issue +FNDA:290,IPToken.issue +DA:68,285 +BRDA:68,1,0,2 +BRDA:68,1,1,283 +DA:69,2 +DA:69,2 +DA:71,283 +DA:71,283 +DA:72,283 +DA:72,283 +FN:78,IPToken.cap +FNDA:266,IPToken.cap +DA:79,265 +DA:79,265 +DA:80,265 +DA:80,265 +FN:87,IPToken.uri +FNDA:1,IPToken.uri +DA:88,1 +DA:88,1 +DA:88,1 +DA:90,1 +DA:90,1 +DA:90,1 +DA:105,1 +DA:105,1 +DA:105,1 +FNF:7 +FNH:7 +LF:16 +LH:16 +BRF:4 +BRH:4 +end_of_record +TN: +SF:src/Mintpass.sol +FN:34,Mintpass. +FNDA:11,Mintpass. +DA:35,11 +DA:35,11 +DA:36,11 +DA:36,11 +FN:55,Mintpass.isRedeemable +FNDA:3,Mintpass.isRedeemable +DA:56,11 +DA:56,11 +BRDA:56,0,0,1 +BRDA:56,0,1,10 +DA:57,10 +DA:57,10 +DA:57,10 +FN:61,Mintpass.batchMint +FNDA:15,Mintpass.batchMint +DA:62,13 +DA:62,13 +FN:66,Mintpass.authorizeReservation +FNDA:2,Mintpass.authorizeReservation +DA:67,2 +DA:67,2 +FN:73,Mintpass.authorizeMint +FNDA:2,Mintpass.authorizeMint +DA:74,2 +DA:74,2 +DA:74,2 +DA:76,2 +DA:76,2 +DA:76,2 +BRDA:76,1,0,- +BRDA:76,1,1,2 +DA:77,0 +DA:77,0 +DA:79,2 +DA:79,2 +BRDA:79,2,0,- +BRDA:79,2,1,2 +DA:80,0 +DA:80,0 +DA:82,2 +DA:82,2 +FN:88,Mintpass.redeem +FNDA:2,Mintpass.redeem +DA:89,2 +DA:89,2 +DA:89,2 +DA:90,2 +DA:90,2 +BRDA:90,3,0,- +BRDA:90,3,1,2 +DA:91,0 +DA:91,0 +DA:93,2 +DA:93,2 +DA:94,2 +DA:94,2 +FN:99,Mintpass.revoke +FNDA:2,Mintpass.revoke +DA:100,1 +DA:100,1 +BRDA:100,4,0,- +BRDA:100,4,1,1 +DA:101,0 +DA:101,0 +DA:103,1 +DA:103,1 +DA:104,1 +DA:104,1 +FN:109,Mintpass.tokenURI +FNDA:3,Mintpass.tokenURI +DA:110,3 +DA:110,3 +DA:111,3 +DA:111,3 +BRDA:111,5,0,1 +BRDA:111,5,1,3 +DA:112,1 +DA:112,1 +DA:114,3 +DA:114,3 +BRDA:114,6,0,- +BRDA:114,6,1,3 +DA:115,0 +DA:115,0 +DA:118,3 +DA:118,3 +DA:118,3 +FN:138,Mintpass.name +FNDA:0,Mintpass.name +DA:139,0 +DA:139,0 +FN:142,Mintpass.symbol +FNDA:0,Mintpass.symbol +DA:143,0 +DA:143,0 +FN:146,Mintpass.supportsInterface +FNDA:0,Mintpass.supportsInterface +DA:147,0 +DA:147,0 +DA:147,0 +DA:147,0 +DA:147,0 +FN:150,Mintpass.totalSupply +FNDA:1,Mintpass.totalSupply +DA:151,2 +DA:151,2 +DA:151,2 +FN:154,Mintpass._exists +FNDA:12,Mintpass._exists +DA:155,12 +DA:155,12 +DA:155,12 +FN:158,Mintpass.ownerOf +FNDA:8,Mintpass.ownerOf +DA:159,10 +DA:159,10 +DA:159,10 +FN:170,Mintpass._beforeTokenTransfers +FNDA:15,Mintpass._beforeTokenTransfers +DA:171,15 +DA:171,15 +BRDA:171,7,0,1 +BRDA:171,7,1,14 +DA:172,14 +DA:172,14 +FNF:15 +FNH:12 +LF:35 +LH:27 +BRF:16 +BRH:11 +end_of_record +TN: +SF:src/Permissioner.sol +FN:23,BlindPermissioner.accept +FNDA:275,BlindPermissioner.accept +FN:29,ForbidAllPermissioner.accept +FNDA:0,ForbidAllPermissioner.accept +DA:30,0 +DA:30,0 +FN:47,TermsAcceptedPermissioner.accept +FNDA:10,TermsAcceptedPermissioner.accept +DA:48,10 +DA:48,10 +BRDA:48,0,0,3 +BRDA:48,0,1,7 +DA:49,3 +DA:49,3 +DA:51,7 +DA:51,7 +FN:58,TermsAcceptedPermissioner.isValidSignature +FNDA:2,TermsAcceptedPermissioner.isValidSignature +DA:59,12 +DA:59,12 +DA:59,12 +DA:60,12 +DA:60,12 +DA:60,12 +FN:63,TermsAcceptedPermissioner.specificTermsV1 +FNDA:0,TermsAcceptedPermissioner.specificTermsV1 +DA:64,18 +DA:64,18 +DA:64,18 +FN:81,TermsAcceptedPermissioner.specificTermsV1 +FNDA:6,TermsAcceptedPermissioner.specificTermsV1 +DA:82,18 +DA:82,18 +FNF:6 +FNH:4 +LF:8 +LH:7 +BRF:2 +BRH:2 +end_of_record +TN: +SF:src/SalesShareDistributor.sol +FN:47,SalesShareDistributor.initialize +FNDA:7,SalesShareDistributor.initialize +DA:48,7 +DA:48,7 +FN:57,SalesShareDistributor.claimableTokens +FNDA:5,SalesShareDistributor.claimableTokens +DA:58,9 +DA:58,9 +DA:60,9 +DA:60,9 +DA:60,9 +DA:60,9 +BRDA:60,0,0,1 +BRDA:60,0,1,8 +DA:61,1 +DA:61,1 +DA:64,8 +DA:64,8 +DA:64,8 +DA:66,8 +DA:66,8 +FN:74,SalesShareDistributor.claim +FNDA:5,SalesShareDistributor.claim +DA:75,5 +DA:75,5 +DA:75,5 +DA:76,5 +DA:76,5 +BRDA:76,1,0,1 +BRDA:76,1,1,4 +DA:77,1 +DA:77,1 +DA:79,4 +DA:79,4 +DA:81,4 +DA:81,4 +DA:81,4 +DA:83,3 +DA:83,3 +DA:85,3 +DA:85,3 +BRDA:85,2,0,- +BRDA:85,2,1,3 +DA:87,0 +DA:87,0 +DA:89,3 +DA:89,3 +DA:90,3 +DA:90,3 +DA:91,3 +DA:91,3 +FN:103,SalesShareDistributor.afterSale +FNDA:7,SalesShareDistributor.afterSale +DA:104,7 +DA:104,7 +DA:105,7 +DA:105,7 +DA:107,7 +DA:107,7 +DA:107,7 +BRDA:107,3,0,1 +BRDA:107,3,1,6 +DA:108,1 +DA:108,1 +DA:111,6 +DA:111,6 +BRDA:111,4,0,1 +BRDA:111,4,1,5 +DA:112,1 +DA:112,1 +DA:114,5 +DA:114,5 +DA:114,5 +DA:115,5 +DA:115,5 +BRDA:115,5,0,1 +BRDA:115,5,1,4 +DA:116,1 +DA:116,1 +DA:118,4 +DA:118,4 +DA:118,4 +BRDA:118,6,0,1 +BRDA:118,6,1,3 +DA:119,1 +DA:119,1 +DA:122,3 +DA:122,3 +FN:141,SalesShareDistributor.UNSAFE_afterSale +FNDA:260,SalesShareDistributor.UNSAFE_afterSale +DA:142,260 +DA:142,260 +DA:142,260 +DA:144,260 +DA:144,260 +DA:144,260 +DA:148,260 +DA:148,260 +DA:148,260 +BRDA:148,7,0,1 +BRDA:148,7,1,259 +DA:149,1 +DA:149,1 +DA:153,259 +DA:153,259 +DA:153,259 +DA:169,259 +DA:169,259 +DA:170,259 +DA:170,259 +FN:173,SalesShareDistributor._startClaimingPhase +FNDA:262,SalesShareDistributor._startClaimingPhase +DA:178,262 +DA:178,262 +DA:179,262 +DA:179,262 +FN:182,SalesShareDistributor._authorizeUpgrade +FNDA:0,SalesShareDistributor._authorizeUpgrade +FNF:7 +FNH:6 +LF:38 +LH:37 +BRF:16 +BRH:15 +end_of_record +TN: +SF:src/SchmackoSwap.sol +FN:94,SchmackoSwap.list +FNDA:11,SchmackoSwap.list +DA:95,11 +DA:95,11 +DA:95,11 +FN:102,SchmackoSwap.list +FNDA:5,SchmackoSwap.list +DA:103,16 +DA:103,16 +BRDA:103,0,0,2 +BRDA:103,0,1,14 +DA:104,2 +DA:104,2 +DA:107,14 +DA:107,14 +DA:107,14 +DA:117,14 +DA:117,14 +DA:117,14 +DA:119,14 +DA:119,14 +DA:121,14 +DA:121,14 +DA:124,14 +DA:124,14 +FN:129,SchmackoSwap.cancel +FNDA:2,SchmackoSwap.cancel +DA:130,2 +DA:130,2 +DA:131,2 +DA:131,2 +BRDA:131,1,0,1 +BRDA:131,1,1,1 +DA:132,1 +DA:132,1 +DA:135,1 +DA:135,1 +BRDA:135,2,0,- +BRDA:135,2,1,1 +DA:136,0 +DA:136,0 +DA:138,1 +DA:138,1 +DA:139,1 +DA:139,1 +FN:144,SchmackoSwap.fulfill +FNDA:11,SchmackoSwap.fulfill +DA:145,11 +DA:145,11 +DA:146,11 +DA:146,11 +DA:146,11 +BRDA:146,3,0,1 +BRDA:146,3,1,10 +DA:146,1 +DA:147,10 +DA:147,10 +BRDA:147,4,0,- +BRDA:147,4,1,10 +DA:147,0 +DA:148,10 +DA:148,10 +BRDA:148,5,0,- +BRDA:148,5,1,10 +DA:148,0 +DA:150,10 +DA:150,10 +DA:152,10 +DA:152,10 +DA:154,10 +DA:154,10 +DA:155,9 +DA:155,9 +DA:157,7 +DA:157,7 +FN:164,SchmackoSwap.changeBuyerAllowance +FNDA:15,SchmackoSwap.changeBuyerAllowance +DA:165,15 +DA:165,15 +DA:167,15 +DA:167,15 +DA:167,15 +BRDA:167,6,0,2 +BRDA:167,6,1,13 +DA:167,2 +DA:168,13 +DA:168,13 +BRDA:168,7,0,1 +BRDA:168,7,1,12 +DA:168,1 +DA:169,12 +DA:169,12 +BRDA:169,8,0,1 +BRDA:169,8,1,11 +DA:171,11 +DA:171,11 +DA:173,11 +DA:173,11 +FN:176,SchmackoSwap.changeBuyerAllowance +FNDA:0,SchmackoSwap.changeBuyerAllowance +DA:177,0 +DA:177,0 +DA:177,0 +DA:177,0 +DA:178,0 +DA:178,0 +FN:182,SchmackoSwap.isAllowed +FNDA:5,SchmackoSwap.isAllowed +DA:183,5 +DA:183,5 +FN:186,SchmackoSwap.supportsInterface +FNDA:0,SchmackoSwap.supportsInterface +DA:187,0 +DA:187,0 +DA:187,0 +FNF:8 +FNH:6 +LF:34 +LH:30 +BRF:18 +BRH:15 +end_of_record +TN: +SF:src/SignedMintAuthorizer.sol +FN:15,SignedMintAuthorizer. +FNDA:5,SignedMintAuthorizer. +DA:16,2 +DA:16,2 +DA:17,3 +DA:17,3 +FN:20,SignedMintAuthorizer.trustSigner +FNDA:0,SignedMintAuthorizer.trustSigner +DA:21,0 +DA:21,0 +DA:22,0 +DA:22,0 +FN:29,SignedMintAuthorizer.authorizeMint +FNDA:5,SignedMintAuthorizer.authorizeMint +DA:30,5 +DA:30,5 +DA:30,5 +DA:32,5 +DA:32,5 +DA:32,5 +DA:34,5 +DA:34,5 +DA:34,5 +DA:36,5 +DA:36,5 +FN:41,SignedMintAuthorizer.authorizeReservation +FNDA:2,SignedMintAuthorizer.authorizeReservation +DA:42,2 +DA:42,2 +FN:47,SignedMintAuthorizer.redeem +FNDA:2,SignedMintAuthorizer.redeem +DA:48,0 +DA:48,0 +FNF:5 +FNH:4 +LF:10 +LH:7 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/TimelockedToken.sol +FN:38,TimelockedToken.initialize +FNDA:22,TimelockedToken.initialize +DA:39,22 +DA:39,22 +FN:45,TimelockedToken.name +FNDA:0,TimelockedToken.name +DA:46,0 +DA:46,0 +DA:46,0 +FN:52,TimelockedToken.symbol +FNDA:0,TimelockedToken.symbol +DA:53,0 +DA:53,0 +DA:53,0 +FN:59,TimelockedToken.decimals +FNDA:0,TimelockedToken.decimals +DA:60,0 +DA:60,0 +DA:60,0 +FN:66,TimelockedToken.transfer +FNDA:1,TimelockedToken.transfer +DA:67,1 +DA:67,1 +FN:73,TimelockedToken.approve +FNDA:1,TimelockedToken.approve +DA:74,1 +DA:74,1 +FN:80,TimelockedToken.transferFrom +FNDA:0,TimelockedToken.transferFrom +DA:81,0 +DA:81,0 +FN:87,TimelockedToken.allowance +FNDA:0,TimelockedToken.allowance +DA:88,0 +DA:88,0 +FN:94,TimelockedToken.balanceOf +FNDA:31,TimelockedToken.balanceOf +DA:95,31 +DA:95,31 +FN:105,TimelockedToken.lock +FNDA:29,TimelockedToken.lock +DA:106,29 +DA:106,29 +DA:106,29 +DA:106,29 +DA:106,27 +DA:106,27 +DA:106,27 +BRDA:106,0,0,3 +BRDA:106,0,1,26 +DA:107,3 +DA:107,3 +DA:110,26 +DA:110,26 +DA:111,26 +DA:111,26 +DA:111,26 +BRDA:111,1,0,1 +BRDA:111,1,1,25 +DA:112,1 +DA:112,1 +DA:115,25 +DA:115,25 +DA:116,25 +DA:116,25 +DA:117,25 +DA:117,25 +DA:118,25 +DA:118,25 +DA:120,25 +DA:120,25 +FN:127,TimelockedToken.release +FNDA:8,TimelockedToken.release +DA:128,13 +DA:128,13 +DA:129,13 +DA:129,13 +BRDA:129,2,0,4 +BRDA:129,2,1,9 +DA:130,4 +DA:130,4 +DA:132,9 +DA:132,9 +DA:133,9 +DA:133,9 +DA:134,9 +DA:134,9 +DA:135,9 +DA:135,9 +DA:137,9 +DA:137,9 +FN:144,TimelockedToken.releaseMany +FNDA:2,TimelockedToken.releaseMany +DA:145,2 +DA:145,2 +DA:145,6 +DA:145,4 +DA:146,5 +DA:146,5 +FNF:12 +FNH:7 +LF:29 +LH:24 +BRF:6 +BRH:6 +end_of_record +TN: +SF:src/Tokenizer.sol +FN:55,Tokenizer.initialize +FNDA:23,Tokenizer.initialize +DA:56,21 +DA:56,21 +DA:57,21 +DA:57,21 +DA:58,21 +DA:58,21 +DA:59,21 +DA:59,21 +FN:63,Tokenizer. +FNDA:17,Tokenizer. +DA:64,12 +DA:64,12 +DA:65,15 +DA:65,15 +FN:68,Tokenizer.getIPNFTContract +FNDA:259,Tokenizer.getIPNFTContract +DA:69,259 +DA:69,259 +FN:72,Tokenizer.onlyController +FNDA:9,Tokenizer.onlyController +DA:73,9 +DA:73,9 +DA:73,9 +DA:75,9 +DA:75,9 +DA:75,9 +DA:75,9 +BRDA:75,0,0,- +BRDA:75,0,1,3 +DA:76,1 +DA:76,1 +DA:79,8 +DA:79,8 +DA:79,8 +DA:79,8 +BRDA:79,1,0,2 +BRDA:79,1,1,1 +DA:80,3 +DA:80,3 +FN:89,Tokenizer.setIPTokenImplementation +FNDA:24,Tokenizer.setIPTokenImplementation +DA:93,28 +DA:93,28 +DA:93,28 +DA:93,28 +BRDA:93,2,0,1 +BRDA:93,2,1,27 +DA:94,1 +DA:94,1 +DA:97,27 +DA:97,27 +DA:98,27 +DA:98,27 +FN:104,Tokenizer.reinit +FNDA:6,Tokenizer.reinit +DA:105,5 +DA:105,5 +DA:106,5 +DA:106,5 +DA:107,5 +DA:107,5 +DA:109,5 +DA:109,5 +FN:121,Tokenizer.tokenizeIpnft +FNDA:280,Tokenizer.tokenizeIpnft +DA:128,280 +DA:128,280 +DA:128,280 +DA:128,280 +BRDA:128,3,0,2 +BRDA:128,3,1,278 +DA:129,2 +DA:129,2 +DA:131,278 +DA:131,278 +DA:131,278 +DA:131,278 +BRDA:131,4,0,3 +BRDA:131,4,1,275 +DA:132,3 +DA:132,3 +DA:136,275 +DA:136,275 +DA:137,275 +DA:137,275 +DA:137,275 +DA:138,275 +DA:138,275 +DA:140,275 +DA:140,275 +DA:143,275 +DA:143,275 +DA:154,275 +DA:154,275 +DA:155,275 +DA:155,275 +FN:164,Tokenizer.issue +FNDA:9,Tokenizer.issue +DA:165,5 +DA:165,5 +FN:173,Tokenizer.cap +FNDA:3,Tokenizer.cap +DA:174,1 +DA:174,1 +FN:178,Tokenizer.controllerOf +FNDA:274,Tokenizer.controllerOf +DA:179,566 +DA:179,566 +DA:179,566 +FN:183,Tokenizer._authorizeUpgrade +FNDA:0,Tokenizer._authorizeUpgrade +FNF:11 +FNH:10 +LF:34 +LH:34 +BRF:10 +BRH:9 +end_of_record +TN: +SF:src/crowdsale/CrowdSale.sol +FN:88,CrowdSale. +FNDA:45,CrowdSale. +FN:94,CrowdSale.setCurrentFeesBp +FNDA:6,CrowdSale.setCurrentFeesBp +DA:95,5 +DA:95,5 +BRDA:95,0,0,1 +BRDA:95,0,1,4 +DA:96,1 +DA:96,1 +DA:98,4 +DA:98,4 +DA:99,4 +DA:99,4 +FN:109,CrowdSale.startSale +FNDA:293,CrowdSale.startSale +DA:111,293 +DA:111,293 +DA:111,293 +DA:111,292 +DA:111,292 +BRDA:111,1,0,1 +BRDA:111,1,1,292 +DA:112,1 +DA:112,1 +DA:115,292 +DA:115,292 +DA:115,292 +BRDA:115,2,0,- +BRDA:115,2,1,291 +DA:116,0 +DA:116,0 +DA:120,291 +DA:120,291 +DA:120,291 +DA:120,291 +DA:120,288 +BRDA:120,3,0,3 +BRDA:120,3,1,287 +DA:121,3 +DA:121,3 +DA:124,287 +DA:124,287 +DA:125,287 +DA:125,287 +DA:125,287 +DA:125,287 +BRDA:125,4,0,1 +BRDA:125,4,1,286 +DA:126,1 +DA:126,1 +DA:129,286 +DA:129,286 +DA:130,286 +DA:130,286 +DA:132,286 +DA:132,286 +DA:133,285 +DA:133,285 +FN:139,CrowdSale.getSaleInfo +FNDA:12,CrowdSale.getSaleInfo +DA:140,12 +DA:140,12 +FN:148,CrowdSale.contribution +FNDA:2,CrowdSale.contribution +DA:149,2 +DA:149,2 +FN:158,CrowdSale.placeBid +FNDA:1755,CrowdSale.placeBid +DA:159,1755 +DA:159,1755 +BRDA:159,5,0,1 +BRDA:159,5,1,1754 +DA:160,1 +DA:160,1 +DA:163,1754 +DA:163,1754 +DA:164,1754 +DA:164,1754 +BRDA:164,6,0,1 +BRDA:164,6,1,1753 +DA:165,1 +DA:165,1 +DA:170,1753 +DA:170,1753 +DA:170,1753 +DA:170,1752 +BRDA:170,7,0,1 +BRDA:170,7,1,1752 +DA:171,1 +DA:171,1 +DA:174,1752 +DA:174,1752 +DA:174,1752 +DA:174,1752 +BRDA:174,8,0,1 +BRDA:174,8,1,1 +DA:175,2 +DA:175,2 +DA:178,1751 +DA:178,1751 +FN:186,CrowdSale.settle +FNDA:282,CrowdSale.settle +DA:187,282 +DA:187,282 +DA:188,282 +DA:188,282 +DA:190,282 +DA:190,282 +BRDA:190,9,0,1 +BRDA:190,9,1,281 +DA:191,1 +DA:191,1 +DA:194,281 +DA:194,281 +BRDA:194,10,0,1 +BRDA:194,10,1,280 +DA:195,1 +DA:195,1 +DA:198,280 +DA:198,280 +BRDA:198,11,0,- +BRDA:198,11,1,178 +DA:199,178 +DA:199,178 +DA:200,178 +DA:200,178 +DA:201,178 +DA:201,178 +DA:203,102 +DA:203,102 +DA:204,102 +DA:204,102 +DA:206,102 +DA:206,102 +DA:207,102 +DA:207,102 +FN:216,CrowdSale.claimResults +FNDA:279,CrowdSale.claimResults +DA:217,279 +DA:217,279 +DA:218,279 +BRDA:218,12,0,1 +BRDA:218,12,1,278 +DA:219,1 +DA:219,1 +DA:221,278 +DA:221,278 +DA:223,278 +DA:223,278 +DA:224,278 +DA:224,278 +BRDA:224,13,0,2 +BRDA:224,13,1,98 +DA:225,98 +DA:225,98 +DA:226,98 +DA:226,98 +BRDA:226,14,0,2 +BRDA:226,14,1,98 +DA:227,2 +DA:227,2 +DA:227,2 +DA:228,2 +DA:228,2 +DA:229,2 +DA:229,2 +DA:233,98 +DA:233,98 +DA:234,98 +DA:234,98 +DA:235,180 +DA:235,180 +BRDA:235,15,0,178 +BRDA:235,15,1,2 +DA:237,178 +DA:237,178 +DA:238,178 +DA:238,178 +DA:240,2 +DA:240,2 +FN:244,CrowdSale._afterSaleSettled +FNDA:89,CrowdSale._afterSaleSettled +FN:254,CrowdSale.getClaimableAmounts +FNDA:0,CrowdSale.getClaimableAmounts +DA:255,614 +DA:255,614 +DA:256,614 +DA:256,614 +DA:256,614 +DA:257,614 +DA:257,614 +DA:259,614 +DA:259,614 +BRDA:259,16,0,601 +BRDA:259,16,1,614 +DA:260,601 +DA:260,601 +FN:270,CrowdSale.claim +FNDA:1750,CrowdSale.claim +DA:271,1750 +DA:271,1750 +DA:272,1750 +DA:272,1750 +BRDA:272,17,0,1134 +BRDA:272,17,1,616 +DA:273,1134 +DA:273,1134 +DA:273,1134 +DA:276,616 +DA:276,616 +BRDA:276,18,0,1 +BRDA:276,18,1,615 +DA:277,1 +DA:277,1 +DA:280,615 +DA:280,615 +DA:282,615 +DA:282,615 +DA:282,615 +DA:282,615 +BRDA:282,19,0,1 +BRDA:282,19,1,1 +DA:283,2 +DA:283,2 +DA:285,614 +DA:285,614 +DA:287,614 +DA:287,614 +DA:288,614 +DA:288,614 +FN:299,CrowdSale.claim +FNDA:614,CrowdSale.claim +DA:301,614 +DA:301,614 +BRDA:301,20,0,606 +BRDA:301,20,1,614 +DA:302,614 +DA:302,614 +DA:304,606 +DA:304,606 +DA:306,606 +DA:306,606 +BRDA:306,21,0,593 +BRDA:306,21,1,606 +DA:307,593 +DA:307,593 +DA:309,606 +DA:309,606 +FN:319,CrowdSale.claimFailed +FNDA:1134,CrowdSale.claimFailed +DA:320,1134 +DA:320,1134 +DA:321,1134 +DA:321,1134 +DA:322,1134 +DA:322,1134 +DA:323,1134 +DA:323,1134 +DA:324,1134 +DA:324,1134 +FN:335,CrowdSale._bid +FNDA:1751,CrowdSale._bid +DA:336,1751 +DA:336,1751 +DA:337,1751 +DA:337,1751 +DA:338,1751 +DA:338,1751 +DA:339,1751 +DA:339,1751 +FN:345,CrowdSale._claimAuctionTokens +FNDA:587,CrowdSale._claimAuctionTokens +DA:346,587 +DA:346,587 +FN:352,CrowdSale._afterSaleStarted +FNDA:268,CrowdSale._afterSaleStarted +DA:353,268 +DA:353,268 +FNF:16 +FNH:15 +LF:93 +LH:92 +BRF:44 +BRH:42 +end_of_record +TN: +SF:src/crowdsale/LockingCrowdSale.sol +FN:34,LockingCrowdSale.startSale +FNDA:1,LockingCrowdSale.startSale +DA:35,1 +DA:35,1 +FN:45,LockingCrowdSale.createOrReturnTimelockContract +FNDA:1,LockingCrowdSale.createOrReturnTimelockContract +DA:46,18 +DA:46,18 +DA:48,18 +DA:48,18 +DA:48,18 +DA:48,18 +BRDA:48,0,0,17 +BRDA:48,0,1,18 +DA:49,17 +DA:49,17 +DA:50,17 +DA:50,17 +FN:61,LockingCrowdSale.startSale +FNDA:18,LockingCrowdSale.startSale +DA:62,18 +DA:62,18 +DA:64,18 +DA:64,18 +BRDA:64,1,0,1 +BRDA:64,1,1,17 +DA:65,1 +DA:65,1 +DA:67,17 +DA:67,17 +DA:69,17 +DA:69,17 +DA:70,17 +DA:70,17 +FN:73,LockingCrowdSale._afterSaleStarted +FNDA:5,LockingCrowdSale._afterSaleStarted +DA:74,5 +DA:74,5 +FN:84,LockingCrowdSale._afterSaleSettled +FNDA:13,LockingCrowdSale._afterSaleSettled +DA:85,13 +DA:85,13 +DA:86,13 +DA:86,13 +DA:87,13 +DA:87,13 +DA:87,13 +DA:88,13 +DA:88,13 +FN:97,LockingCrowdSale._claimAuctionTokens +FNDA:19,LockingCrowdSale._claimAuctionTokens +DA:98,19 +DA:98,19 +DA:99,19 +DA:99,19 +DA:102,19 +DA:102,19 +DA:102,19 +BRDA:102,2,0,2 +BRDA:102,2,1,17 +DA:104,2 +DA:104,2 +DA:106,17 +DA:106,17 +FN:116,LockingCrowdSale._makeNewLockedTokenContract +FNDA:17,LockingCrowdSale._makeNewLockedTokenContract +DA:117,17 +DA:117,17 +DA:118,17 +DA:118,17 +DA:119,17 +DA:119,17 +FNF:7 +FNH:7 +LF:24 +LH:24 +BRF:6 +BRH:6 +end_of_record +TN: +SF:src/crowdsale/StakedLockingCrowdSale.sol +FN:56,StakedLockingCrowdSale.startSale +FNDA:1,StakedLockingCrowdSale.startSale +DA:57,1 +DA:57,1 +FN:65,StakedLockingCrowdSale.trustVestingContract +FNDA:15,StakedLockingCrowdSale.trustVestingContract +DA:66,15 +DA:66,15 +BRDA:66,0,0,1 +BRDA:66,0,1,14 +DA:67,1 +DA:67,1 +DA:69,14 +DA:69,14 +DA:70,14 +DA:70,14 +FN:73,StakedLockingCrowdSale.untrustVestingContract +FNDA:0,StakedLockingCrowdSale.untrustVestingContract +DA:74,0 +DA:74,0 +DA:75,0 +DA:75,0 +FN:89,StakedLockingCrowdSale.startSale +FNDA:17,StakedLockingCrowdSale.startSale +DA:96,17 +DA:96,17 +DA:96,17 +BRDA:96,1,0,- +BRDA:96,1,1,16 +DA:97,0 +DA:97,0 +DA:101,16 +DA:101,16 +BRDA:101,2,0,2 +BRDA:101,2,1,14 +DA:102,2 +DA:102,2 +DA:105,14 +DA:105,14 +DA:105,14 +DA:105,14 +BRDA:105,3,0,1 +BRDA:105,3,1,13 +DA:106,1 +DA:106,1 +DA:109,13 +DA:109,13 +BRDA:109,4,0,1 +BRDA:109,4,1,12 +DA:110,1 +DA:110,1 +DA:115,12 +DA:115,12 +DA:115,12 +BRDA:115,5,0,- +BRDA:115,5,1,5 +DA:116,5 +DA:116,5 +DA:119,12 +DA:119,12 +DA:120,12 +DA:120,12 +DA:121,12 +DA:121,12 +FN:127,StakedLockingCrowdSale.stakesOf +FNDA:5,StakedLockingCrowdSale.stakesOf +DA:128,5 +DA:128,5 +FN:134,StakedLockingCrowdSale._afterSaleStarted +FNDA:12,StakedLockingCrowdSale._afterSaleStarted +DA:135,12 +DA:135,12 +DA:135,12 +DA:136,12 +DA:136,12 +FN:156,StakedLockingCrowdSale.getClaimableStakes +FNDA:0,StakedLockingCrowdSale.getClaimableStakes +DA:157,17 +DA:157,17 +DA:159,17 +DA:159,17 +DA:160,17 +DA:160,17 +FN:167,StakedLockingCrowdSale._bid +FNDA:24,StakedLockingCrowdSale._bid +DA:168,24 +DA:168,24 +DA:170,24 +DA:170,24 +DA:170,24 +DA:172,24 +DA:172,24 +DA:174,24 +DA:174,24 +DA:176,24 +DA:176,24 +DA:177,24 +DA:177,24 +FN:185,StakedLockingCrowdSale.claim +FNDA:17,StakedLockingCrowdSale.claim +DA:186,17 +DA:186,17 +DA:187,17 +DA:187,17 +DA:188,17 +DA:188,17 +DA:188,17 +DA:192,17 +DA:192,17 +DA:195,17 +DA:195,17 +DA:197,17 +DA:197,17 +BRDA:197,6,0,10 +BRDA:197,6,1,17 +DA:198,10 +DA:198,10 +DA:201,17 +DA:201,17 +DA:203,17 +DA:203,17 +BRDA:203,7,0,2 +BRDA:203,7,1,15 +DA:204,2 +DA:204,2 +DA:208,15 +DA:208,15 +DA:208,15 +DA:209,15 +DA:209,15 +DA:209,15 +BRDA:209,8,0,1 +BRDA:209,8,1,14 +DA:211,1 +DA:211,1 +DA:213,14 +DA:213,14 +DA:214,14 +DA:214,14 +FN:222,StakedLockingCrowdSale.claimFailed +FNDA:3,StakedLockingCrowdSale.claimFailed +DA:223,3 +DA:223,3 +DA:224,3 +DA:224,3 +DA:226,3 +DA:226,3 +DA:227,3 +DA:227,3 +DA:229,3 +DA:229,3 +FNF:10 +FNH:8 +LF:52 +LH:49 +BRF:18 +BRH:16 +end_of_record +TN: +SF:src/helpers/FakeERC20.sol +FN:11,FakeERC20. +FNDA:16,FakeERC20. +FN:13,FakeERC20.setDecimals +FNDA:7,FakeERC20.setDecimals +DA:14,7 +DA:14,7 +FN:17,FakeERC20.decimals +FNDA:631,FakeERC20.decimals +DA:18,631 +DA:18,631 +FN:21,FakeERC20.mint +FNDA:2379,FakeERC20.mint +DA:22,2379 +DA:22,2379 +FNF:4 +FNH:4 +LF:3 +LH:3 +BRF:0 +BRH:0 +end_of_record +TN: +SF:src/helpers/Strings.sol +FN:5,Strings.stringToUint +FNDA:0,Strings.stringToUint +DA:6,0 +DA:6,0 +DA:6,0 +DA:7,0 +DA:7,0 +DA:8,0 +DA:8,0 +DA:8,0 +DA:8,0 +DA:9,0 +DA:9,0 +DA:9,0 +DA:9,0 +DA:9,0 +DA:9,0 +BRDA:9,0,0,- +BRDA:9,0,1,- +DA:10,0 +DA:10,0 +DA:13,0 +DA:13,0 +FNF:1 +FNH:0 +LF:6 +LH:0 +BRF:2 +BRH:0 +end_of_record +TN: +SF:src/helpers/test-upgrades/IPNFTV23.sol +FN:74,IPNFTV23. +FNDA:0,IPNFTV23. +DA:75,0 +DA:75,0 +FN:79,IPNFTV23.initialize +FNDA:3,IPNFTV23.initialize +DA:80,3 +DA:80,3 +DA:81,3 +DA:81,3 +DA:82,3 +DA:82,3 +DA:83,3 +DA:83,3 +DA:84,3 +DA:84,3 +FN:87,IPNFTV23.pause +FNDA:0,IPNFTV23.pause +DA:88,0 +DA:88,0 +FN:91,IPNFTV23.unpause +FNDA:0,IPNFTV23.unpause +DA:92,0 +DA:92,0 +FN:95,IPNFTV23.setAuthorizer +FNDA:3,IPNFTV23.setAuthorizer +DA:96,3 +DA:96,3 +FN:100,IPNFTV23.contractURI +FNDA:0,IPNFTV23.contractURI +DA:101,0 +DA:101,0 +FN:108,IPNFTV23.reserve +FNDA:2,IPNFTV23.reserve +DA:109,2 +DA:109,2 +BRDA:109,0,0,- +BRDA:109,0,1,2 +DA:110,0 +DA:110,0 +DA:112,2 +DA:112,2 +DA:113,2 +DA:113,2 +DA:114,2 +DA:114,2 +DA:115,2 +DA:115,2 +FN:129,IPNFTV23.mintReservation +FNDA:2,IPNFTV23.mintReservation +DA:136,2 +DA:136,2 +DA:136,2 +BRDA:136,1,0,- +BRDA:136,1,1,2 +DA:137,0 +DA:137,0 +DA:140,2 +DA:140,2 +BRDA:140,2,0,- +BRDA:140,2,1,2 +DA:141,0 +DA:141,0 +DA:144,2 +DA:144,2 +BRDA:144,3,0,- +BRDA:144,3,1,2 +DA:145,0 +DA:145,0 +DA:148,2 +DA:148,2 +DA:149,2 +DA:149,2 +DA:150,2 +DA:150,2 +DA:152,2 +DA:152,2 +DA:153,2 +DA:153,2 +DA:154,2 +DA:154,2 +DA:155,2 +DA:155,2 +FN:164,IPNFTV23.grantReadAccess +FNDA:0,IPNFTV23.grantReadAccess +DA:165,0 +DA:165,0 +DA:165,0 +DA:165,0 +BRDA:165,4,0,- +BRDA:165,4,1,- +DA:166,0 +DA:166,0 +DA:169,0 +DA:169,0 +BRDA:169,5,0,- +BRDA:169,5,1,- +DA:170,0 +DA:170,0 +DA:173,0 +DA:173,0 +DA:174,0 +DA:174,0 +FN:183,IPNFTV23.canRead +FNDA:0,IPNFTV23.canRead +DA:184,0 +DA:184,0 +FN:188,IPNFTV23.withdrawAll +FNDA:0,IPNFTV23.withdrawAll +DA:189,0 +DA:189,0 +DA:189,0 +DA:190,0 +DA:190,0 +BRDA:190,6,0,- +BRDA:190,6,1,- +FN:194,IPNFTV23._authorizeUpgrade +FNDA:3,IPNFTV23._authorizeUpgrade +FN:201,IPNFTV23._burn +FNDA:0,IPNFTV23._burn +DA:202,0 +DA:202,0 +FN:206,IPNFTV23.tokenURI +FNDA:0,IPNFTV23.tokenURI +DA:207,0 +DA:207,0 +DA:207,0 +FN:210,IPNFTV23.supportsInterface +FNDA:0,IPNFTV23.supportsInterface +DA:211,0 +DA:211,0 +DA:211,0 +FNF:15 +FNH:5 +LF:41 +LH:21 +BRF:14 +BRH:4 +end_of_record +TN: +SF:src/helpers/test-upgrades/IPNFTV25.sol +FN:63,IPNFTV25. +FNDA:0,IPNFTV25. +DA:64,0 +DA:64,0 +FN:68,IPNFTV25.initialize +FNDA:0,IPNFTV25.initialize +DA:69,0 +DA:69,0 +DA:70,0 +DA:70,0 +DA:71,0 +DA:71,0 +DA:72,0 +DA:72,0 +DA:73,0 +DA:73,0 +FN:76,IPNFTV25.pause +FNDA:1,IPNFTV25.pause +DA:77,1 +DA:77,1 +FN:80,IPNFTV25.unpause +FNDA:0,IPNFTV25.unpause +DA:81,0 +DA:81,0 +FN:84,IPNFTV25.setAuthorizer +FNDA:0,IPNFTV25.setAuthorizer +DA:85,0 +DA:85,0 +FN:88,IPNFTV25.reinit +FNDA:1,IPNFTV25.reinit +DA:89,1 +DA:89,1 +FN:93,IPNFTV25.contractURI +FNDA:0,IPNFTV25.contractURI +DA:94,0 +DA:94,0 +FN:101,IPNFTV25.reserve +FNDA:1,IPNFTV25.reserve +DA:102,0 +DA:102,0 +BRDA:102,0,0,- +BRDA:102,0,1,- +DA:103,0 +DA:103,0 +DA:105,0 +DA:105,0 +DA:106,0 +DA:106,0 +DA:107,0 +DA:107,0 +DA:108,0 +DA:108,0 +FN:122,IPNFTV25.mintReservation +FNDA:0,IPNFTV25.mintReservation +DA:129,0 +DA:129,0 +DA:129,0 +BRDA:129,1,0,- +BRDA:129,1,1,- +DA:130,0 +DA:130,0 +DA:133,0 +DA:133,0 +BRDA:133,2,0,- +BRDA:133,2,1,- +DA:134,0 +DA:134,0 +DA:137,0 +DA:137,0 +BRDA:137,3,0,- +BRDA:137,3,1,- +DA:138,0 +DA:138,0 +DA:141,0 +DA:141,0 +DA:142,0 +DA:142,0 +DA:143,0 +DA:143,0 +DA:145,0 +DA:145,0 +DA:146,0 +DA:146,0 +DA:147,0 +DA:147,0 +DA:148,0 +DA:148,0 +FN:156,IPNFTV25.updateSymbol +FNDA:0,IPNFTV25.updateSymbol +DA:157,0 +DA:157,0 +DA:157,0 +DA:157,0 +BRDA:157,4,0,- +BRDA:157,4,1,- +DA:158,0 +DA:158,0 +DA:160,0 +DA:160,0 +FN:163,IPNFTV25._updateSymbol +FNDA:0,IPNFTV25._updateSymbol +DA:164,0 +DA:164,0 +DA:165,0 +DA:165,0 +FN:174,IPNFTV25.grantReadAccess +FNDA:0,IPNFTV25.grantReadAccess +DA:175,0 +DA:175,0 +DA:175,0 +DA:175,0 +BRDA:175,5,0,- +BRDA:175,5,1,- +DA:176,0 +DA:176,0 +DA:179,0 +DA:179,0 +BRDA:179,6,0,- +BRDA:179,6,1,- +DA:180,0 +DA:180,0 +DA:183,0 +DA:183,0 +DA:184,0 +DA:184,0 +FN:193,IPNFTV25.canRead +FNDA:0,IPNFTV25.canRead +DA:194,0 +DA:194,0 +FN:198,IPNFTV25.withdrawAll +FNDA:0,IPNFTV25.withdrawAll +DA:199,0 +DA:199,0 +DA:199,0 +DA:200,0 +DA:200,0 +BRDA:200,7,0,- +BRDA:200,7,1,- +FN:204,IPNFTV25._authorizeUpgrade +FNDA:0,IPNFTV25._authorizeUpgrade +FN:211,IPNFTV25._burn +FNDA:0,IPNFTV25._burn +DA:212,0 +DA:212,0 +FN:216,IPNFTV25.tokenURI +FNDA:0,IPNFTV25.tokenURI +DA:217,0 +DA:217,0 +DA:217,0 +FN:220,IPNFTV25.supportsInterface +FNDA:0,IPNFTV25.supportsInterface +DA:221,0 +DA:221,0 +DA:221,0 +FNF:18 +FNH:3 +LF:47 +LH:2 +BRF:16 +BRH:0 +end_of_record +TN: +SF:src/helpers/test-upgrades/IPToken12.sol +FN:37,IPToken12.initialize +FNDA:0,IPToken12.initialize +DA:38,0 +DA:38,0 +DA:39,0 +DA:39,0 +DA:40,0 +DA:40,0 +FN:43,IPToken12. +FNDA:0,IPToken12. +DA:44,0 +DA:44,0 +FN:47,IPToken12.onlyIssuerOrOwner +FNDA:0,IPToken12.onlyIssuerOrOwner +DA:48,0 +DA:48,0 +DA:48,0 +DA:48,0 +DA:48,0 +DA:48,0 +DA:48,0 +BRDA:48,0,0,- +BRDA:48,0,1,- +DA:49,0 +DA:49,0 +FN:54,IPToken12.issuer +FNDA:0,IPToken12.issuer +DA:55,0 +DA:55,0 +FN:58,IPToken12.metadata +FNDA:0,IPToken12.metadata +DA:59,0 +DA:59,0 +FN:66,IPToken12.hash +FNDA:0,IPToken12.hash +DA:67,0 +DA:67,0 +DA:67,0 +FN:75,IPToken12.issue +FNDA:0,IPToken12.issue +DA:76,0 +BRDA:76,1,0,- +BRDA:76,1,1,- +DA:76,0 +DA:77,0 +DA:77,0 +DA:78,0 +DA:78,0 +FN:84,IPToken12.cap +FNDA:0,IPToken12.cap +DA:85,0 +DA:85,0 +DA:86,0 +DA:86,0 +FN:93,IPToken12.uri +FNDA:0,IPToken12.uri +DA:94,0 +DA:94,0 +DA:94,0 +DA:96,0 +DA:96,0 +DA:96,0 +DA:111,0 +DA:111,0 +DA:111,0 +FNF:9 +FNH:0 +LF:17 +LH:0 +BRF:4 +BRH:0 +end_of_record +TN: +SF:src/helpers/test-upgrades/Molecules.sol +FN:36,Molecules.initialize +FNDA:0,Molecules.initialize +DA:37,0 +DA:37,0 +DA:38,0 +DA:38,0 +DA:39,0 +DA:39,0 +FN:42,Molecules.onlyIssuerOrOwner +FNDA:0,Molecules.onlyIssuerOrOwner +DA:43,0 +DA:43,0 +DA:43,0 +DA:43,0 +DA:43,0 +DA:43,0 +DA:43,0 +BRDA:43,0,0,- +BRDA:43,0,1,- +DA:44,0 +DA:44,0 +FN:49,Molecules.issuer +FNDA:0,Molecules.issuer +DA:50,0 +DA:50,0 +FN:53,Molecules.metadata +FNDA:0,Molecules.metadata +DA:54,0 +DA:54,0 +FN:61,Molecules.hash +FNDA:0,Molecules.hash +DA:62,0 +DA:62,0 +DA:62,0 +FN:70,Molecules.issue +FNDA:0,Molecules.issue +DA:71,0 +BRDA:71,1,0,- +BRDA:71,1,1,- +DA:71,0 +DA:72,0 +DA:72,0 +DA:73,0 +DA:73,0 +FN:79,Molecules.cap +FNDA:0,Molecules.cap +DA:80,0 +DA:80,0 +DA:81,0 +DA:81,0 +FN:88,Molecules.uri +FNDA:0,Molecules.uri +DA:89,0 +DA:89,0 +DA:89,0 +DA:91,0 +DA:91,0 +DA:91,0 +DA:106,0 +DA:106,0 +DA:106,0 +FNF:8 +FNH:0 +LF:16 +LH:0 +BRF:4 +BRH:0 +end_of_record +TN: +SF:src/helpers/test-upgrades/SynthPermissioner.sol +FN:23,BlindPermissioner.accept +FNDA:0,BlindPermissioner.accept +FN:29,ForbidAllPermissioner.accept +FNDA:0,ForbidAllPermissioner.accept +DA:30,0 +DA:30,0 +FN:47,TermsAcceptedPermissioner.accept +FNDA:0,TermsAcceptedPermissioner.accept +DA:48,0 +DA:48,0 +BRDA:48,0,0,- +BRDA:48,0,1,- +DA:49,0 +DA:49,0 +DA:51,0 +DA:51,0 +FN:58,TermsAcceptedPermissioner.isValidSignature +FNDA:0,TermsAcceptedPermissioner.isValidSignature +DA:59,0 +DA:59,0 +DA:59,0 +DA:60,0 +DA:60,0 +DA:60,0 +FN:63,TermsAcceptedPermissioner.specificTermsV1 +FNDA:0,TermsAcceptedPermissioner.specificTermsV1 +DA:64,0 +DA:64,0 +DA:64,0 +FN:81,TermsAcceptedPermissioner.specificTermsV1 +FNDA:0,TermsAcceptedPermissioner.specificTermsV1 +DA:82,0 +DA:82,0 +FNF:6 +FNH:0 +LF:8 +LH:0 +BRF:2 +BRH:0 +end_of_record +TN: +SF:src/helpers/test-upgrades/Synthesizer.sol +FN:44,Synthesizer.initialize +FNDA:0,Synthesizer.initialize +DA:45,0 +DA:45,0 +DA:46,0 +DA:46,0 +DA:47,0 +DA:47,0 +DA:48,0 +DA:48,0 +FN:52,Synthesizer. +FNDA:0,Synthesizer. +DA:53,0 +DA:53,0 +DA:54,0 +DA:54,0 +FN:67,Synthesizer.synthesizeIpnft +FNDA:0,Synthesizer.synthesizeIpnft +DA:74,0 +DA:74,0 +DA:74,0 +DA:74,0 +BRDA:74,0,0,- +BRDA:74,0,1,- +DA:75,0 +DA:75,0 +DA:79,0 +DA:79,0 +DA:80,0 +DA:80,0 +DA:80,0 +DA:81,0 +DA:81,0 +DA:83,0 +DA:83,0 +DA:83,0 +DA:85,0 +DA:85,0 +DA:85,0 +DA:85,0 +BRDA:85,1,0,- +BRDA:85,1,1,- +DA:86,0 +DA:86,0 +DA:89,0 +DA:89,0 +DA:91,0 +DA:91,0 +DA:92,0 +DA:92,0 +DA:93,0 +DA:93,0 +FN:97,Synthesizer._authorizeUpgrade +FNDA:0,Synthesizer._authorizeUpgrade +FNF:4 +FNH:0 +LF:18 +LH:0 +BRF:4 +BRH:0 +end_of_record +TN: +SF:src/helpers/test-upgrades/Tokenizer12.sol +FN:55,Tokenizer12.initialize +FNDA:0,Tokenizer12.initialize +DA:56,0 +DA:56,0 +DA:57,0 +DA:57,0 +DA:58,0 +DA:58,0 +DA:59,0 +DA:59,0 +FN:63,Tokenizer12. +FNDA:0,Tokenizer12. +DA:64,0 +DA:64,0 +DA:65,0 +DA:65,0 +FN:72,Tokenizer12.setIPTokenImplementation +FNDA:0,Tokenizer12.setIPTokenImplementation +DA:76,0 +DA:76,0 +DA:76,0 +DA:76,0 +BRDA:76,0,0,- +BRDA:76,0,1,- +DA:77,0 +DA:77,0 +DA:80,0 +DA:80,0 +DA:81,0 +DA:81,0 +FN:88,Tokenizer12.reinit +FNDA:0,Tokenizer12.reinit +DA:89,0 +DA:89,0 +FN:102,Tokenizer12.tokenizeIpnft +FNDA:0,Tokenizer12.tokenizeIpnft +DA:109,0 +DA:109,0 +DA:109,0 +DA:109,0 +BRDA:109,1,0,- +BRDA:109,1,1,- +DA:110,0 +DA:110,0 +DA:114,0 +DA:114,0 +DA:115,0 +DA:115,0 +DA:115,0 +DA:116,0 +DA:116,0 +DA:118,0 +DA:118,0 +DA:118,0 +DA:120,0 +DA:120,0 +DA:120,0 +DA:120,0 +BRDA:120,2,0,- +BRDA:120,2,1,- +DA:121,0 +DA:121,0 +DA:124,0 +DA:124,0 +DA:127,0 +DA:127,0 +DA:128,0 +DA:128,0 +DA:129,0 +DA:129,0 +FN:133,Tokenizer12._authorizeUpgrade +FNDA:0,Tokenizer12._authorizeUpgrade +FNF:6 +FNH:0 +LF:23 +LH:0 +BRF:6 +BRH:0 +end_of_record +TN: +SF:test/ContractReceivers.t.sol +FN:21,BoringContractWallet. +FNDA:7,BoringContractWallet. +DA:22,7 +DA:22,7 +FN:27,CleverContractWallet.startSelling +FNDA:1,CleverContractWallet.startSelling +DA:31,1 +DA:31,1 +BRDA:31,0,0,- +BRDA:31,0,1,1 +DA:31,0 +DA:32,1 +DA:32,1 +DA:33,1 +DA:33,1 +DA:34,1 +DA:34,1 +DA:35,1 +DA:35,1 +DA:37,1 +DA:37,1 +FN:40,CleverContractWallet.buy +FNDA:1,CleverContractWallet.buy +DA:41,1 +DA:41,1 +BRDA:41,1,0,- +BRDA:41,1,1,1 +DA:41,0 +DA:42,1 +DA:42,1 +DA:42,1 +DA:44,1 +DA:44,1 +DA:45,1 +DA:45,1 +DA:45,1 +DA:46,1 +DA:46,1 +FN:49,CleverContractWallet.release +FNDA:1,CleverContractWallet.release +DA:50,1 +DA:50,1 +BRDA:50,2,0,- +BRDA:50,2,1,1 +DA:50,0 +DA:51,1 +DA:51,1 +DA:51,1 +DA:52,1 +DA:52,1 +BRDA:52,3,0,- +BRDA:52,3,1,1 +DA:52,0 +FN:55,CleverContractWallet.onERC721Received +FNDA:1,CleverContractWallet.onERC721Received +DA:56,1 +DA:56,1 +FN:59,CleverContractWallet.supportsInterface +FNDA:0,CleverContractWallet.supportsInterface +DA:60,0 +DA:60,0 +DA:60,0 +DA:60,0 +DA:60,0 +FNF:6 +FNH:5 +LF:17 +LH:16 +BRF:8 +BRH:4 +end_of_record +TN: +SF:test/IPNFT.t.sol +FN:17,Kamikaze.bazingaa +FNDA:1,Kamikaze.bazingaa +DA:18,1 +DA:18,1 +FNF:1 +FNH:1 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +TN: +SF:test/IPNFTMintHelper.sol +FN:20,IPNFTMintHelper.reserveAToken +FNDA:1,IPNFTMintHelper.reserveAToken +DA:21,1 +DA:21,1 +DA:22,1 +DA:22,1 +DA:22,1 +DA:23,1 +DA:23,1 +DA:24,1 +DA:24,1 +FN:27,IPNFTMintHelper.mintAToken +FNDA:3,IPNFTMintHelper.mintAToken +DA:28,3 +DA:28,3 +DA:28,3 +FN:31,IPNFTMintHelper.mintAToken +FNDA:3,IPNFTMintHelper.mintAToken +DA:32,3 +DA:32,3 +DA:33,3 +DA:33,3 +DA:33,3 +DA:35,3 +DA:35,3 +DA:36,3 +DA:36,3 +DA:37,3 +DA:37,3 +FNF:3 +FNH:3 +LF:10 +LH:10 +BRF:0 +BRH:0 +end_of_record +TN: +SF:test/Tokenizer.t.sol +FN:29,GovernorOfTheFuture.controllerOf +FNDA:3,GovernorOfTheFuture.controllerOf +DA:30,0 +DA:30,0 +DA:30,0 +FN:33,GovernorOfTheFuture.aMajorityWantsToIssueTokensTo +FNDA:1,GovernorOfTheFuture.aMajorityWantsToIssueTokensTo +DA:34,1 +DA:34,1 +FN:40,TokenizerWithHandover.handoverControl +FNDA:1,TokenizerWithHandover.handoverControl +DA:41,1 +DA:41,1 +FN:46,FakeIPT. +FNDA:0,FakeIPT. +DA:47,0 +DA:47,0 +FNF:4 +FNH:3 +LF:4 +LH:2 +BRF:0 +BRH:0 +end_of_record +TN: +SF:test/helpers/AcceptAllAuthorizer.sol +FN:7,AcceptAllAuthorizer.authorizeMint +FNDA:39,AcceptAllAuthorizer.authorizeMint +DA:8,39 +DA:8,39 +FN:11,AcceptAllAuthorizer.authorizeReservation +FNDA:43,AcceptAllAuthorizer.authorizeReservation +DA:12,43 +DA:12,43 +FN:15,AcceptAllAuthorizer.redeem +FNDA:39,AcceptAllAuthorizer.redeem +DA:16,0 +DA:16,0 +FNF:3 +FNH:3 +LF:3 +LH:2 +BRF:0 +BRH:0 +end_of_record +TN: +SF:test/helpers/CrowdSaleHelpers.sol +FN:11,CrowdSaleHelpers.makeSale +FNDA:31,CrowdSaleHelpers.makeSale +DA:12,31 +DA:12,31 +DA:12,31 +FNF:1 +FNH:1 +LF:1 +LH:1 +BRF:0 +BRH:0 +end_of_record +TN: +SF:test/helpers/MakeGnosisWallet.sol +FN:13,MakeGnosisWallet.makeGnosisWallet +FNDA:2,MakeGnosisWallet.makeGnosisWallet +DA:14,2 +DA:14,2 +DA:14,2 +DA:16,2 +DA:16,2 +DA:16,2 +DA:17,2 +DA:17,2 +DA:17,2 +DA:18,2 +DA:18,2 +DA:19,2 +DA:19,2 +FNF:1 +FNH:1 +LF:5 +LH:5 +BRF:0 +BRH:0 +end_of_record +TN: +SF:test/helpers/Strings.sol +FN:5,Strings.substring +FNDA:0,Strings.substring +DA:6,0 +DA:6,0 +DA:6,0 +DA:7,0 +DA:7,0 +DA:7,0 +DA:8,0 +DA:8,0 +DA:8,0 +DA:8,0 +DA:9,0 +DA:9,0 +DA:11,0 +DA:11,0 +DA:11,0 +FNF:1 +FNH:0 +LF:5 +LH:0 +BRF:0 +BRH:0 +end_of_record diff --git a/src/Tokenizer.sol b/src/Tokenizer.sol index d06586db..a6d9b38d 100644 --- a/src/Tokenizer.sol +++ b/src/Tokenizer.sol @@ -69,7 +69,6 @@ contract Tokenizer is UUPSUpgradeable, OwnableUpgradeable, IControlIPTs { return ipnft; } - //todo: try breaking this with a faked IPToken modifier onlyController(IPToken ipToken) { TokenMetadata memory metadata = ipToken.metadata(); diff --git a/test/Tokenizer.t.sol b/test/Tokenizer.t.sol index e23b593f..3a3300c3 100644 --- a/test/Tokenizer.t.sol +++ b/test/Tokenizer.t.sol @@ -17,16 +17,16 @@ import { IPNFT } from "../src/IPNFT.sol"; import { AcceptAllAuthorizer } from "./helpers/AcceptAllAuthorizer.sol"; import { FakeERC20 } from "../src/helpers/FakeERC20.sol"; -import { MustControlIpnft, AlreadyTokenized, Tokenizer, ZeroAddress } from "../src/Tokenizer.sol"; +import { MustControlIpnft, AlreadyTokenized, Tokenizer, ZeroAddress, IPTNotControlledByTokenizer } from "../src/Tokenizer.sol"; -import { IPToken, TokenCapped } from "../src/IPToken.sol"; +import { IPToken, TokenCapped, Metadata as TokenMetadata } from "../src/IPToken.sol"; import { IControlIPTs } from "../src/IControlIPTs.sol"; import { Molecules } from "../src/helpers/test-upgrades/Molecules.sol"; import { Synthesizer } from "../src/helpers/test-upgrades/Synthesizer.sol"; import { IPermissioner, BlindPermissioner } from "../src/Permissioner.sol"; contract GovernorOfTheFuture is IControlIPTs { - function controllerOf(uint256 ipnftId) external view override returns (address) { + function controllerOf(uint256) external view override returns (address) { return address(0); //no one but me controls IPTs! } @@ -42,6 +42,12 @@ contract TokenizerWithHandover is Tokenizer { } } +contract FakeIPT is IPToken { + constructor(uint256 ipnftId) { + _metadata = TokenMetadata({ ipnftId: ipnftId, originalOwner: msg.sender, agreementCid: "ipfs://agreementCid" }); + } +} + contract TokenizerTest is Test { using SafeERC20Upgradeable for IPToken; @@ -212,6 +218,18 @@ contract TokenizerTest is Test { vm.stopPrank(); } + function testCannotBypassModifiersWithFakeTokens() public { + address attacker = makeAddr("attacker"); + vm.startPrank(originalOwner); + IPToken realTokenContract = tokenizer.tokenizeIpnft(1, 100_000, "IPT", agreementCid, ""); + + vm.startPrank(attacker); + IPToken fakeIpt = new FakeIPT(1); + + vm.expectRevert(IPTNotControlledByTokenizer.selector); + tokenizer.issue(fakeIpt, 100_000, attacker); + } + function testGnosisSafeCanInteractWithIPToken() public { vm.startPrank(deployer); SafeProxyFactory fac = new SafeProxyFactory();