From 9d1a8d35192b15b215b0da2299a3372f14c31521 Mon Sep 17 00:00:00 2001 From: llwslc Date: Thu, 16 Feb 2023 19:45:12 +0800 Subject: [PATCH 1/5] test: add library test --- test/tre/contracts/ConvertLib.sol | 8 ++++++++ test/tre/contracts/MetaCoin.sol | 6 ++++++ test/tre/migrations/2_deploy_contracts.js | 3 +++ test/tre/tronbox.js | 9 ++++++++- 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 test/tre/contracts/ConvertLib.sol diff --git a/test/tre/contracts/ConvertLib.sol b/test/tre/contracts/ConvertLib.sol new file mode 100644 index 00000000..9bcd6e59 --- /dev/null +++ b/test/tre/contracts/ConvertLib.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.4.22 <0.9.0; + +library ConvertLib { + function convert(uint256 amount, uint256 conversionRate) public pure returns (uint256 convertedAmount) { + return amount * conversionRate; + } +} diff --git a/test/tre/contracts/MetaCoin.sol b/test/tre/contracts/MetaCoin.sol index ea803339..cdf22926 100644 --- a/test/tre/contracts/MetaCoin.sol +++ b/test/tre/contracts/MetaCoin.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.4.22 <0.9.0; +import "./ConvertLib.sol"; + // This is just a simple example of a coin-like contract. // It is not standards compatible and cannot be expected to talk to other // coin/token contracts. @@ -30,6 +32,10 @@ contract MetaCoin { return balances[addr]; } + function getConvertedBalance(address addr) public view returns (uint){ + return ConvertLib.convert(getBalance(addr), 2); + } + function getOwner() public view returns (address) { return owner; } diff --git a/test/tre/migrations/2_deploy_contracts.js b/test/tre/migrations/2_deploy_contracts.js index d6c80d08..d1664ba6 100644 --- a/test/tre/migrations/2_deploy_contracts.js +++ b/test/tre/migrations/2_deploy_contracts.js @@ -1,5 +1,8 @@ +const ConvertLib = artifacts.require('./ConvertLib.sol') const MetaCoin = artifacts.require('./MetaCoin.sol') module.exports = function(deployer) { + deployer.deploy(ConvertLib) + deployer.link(ConvertLib, MetaCoin) deployer.deploy(MetaCoin, 10000) } diff --git a/test/tre/tronbox.js b/test/tre/tronbox.js index 57cc4479..b9a4cb15 100644 --- a/test/tre/tronbox.js +++ b/test/tre/tronbox.js @@ -27,6 +27,13 @@ Then, run the migration with: fullHost: 'https://api.shasta.trongrid.io', network_id: '2' }, + nile: { + privateKey: process.env.PRIVATE_KEY_NILE, + userFeePercentage: 100, + feeLimit: 1000 * 1e6, + fullHost: 'https://api.nileex.io', + network_id: '3' + }, development: { // For tronbox/tre docker image privateKey: '0000000000000000000000000000000000000000000000000000000000000001', @@ -37,7 +44,7 @@ Then, run the migration with: }, compilers: { solc: { - version: '0.8.0' + version: '0.8.7' } } } From c4331029d65f2a7b2677db6c899ee3caa435f663 Mon Sep 17 00:00:00 2001 From: llwslc Date: Thu, 16 Feb 2023 19:46:39 +0800 Subject: [PATCH 2/5] feat: support solidity 0.8.17 --- src/components/TronSolc.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/components/TronSolc.js b/src/components/TronSolc.js index 20bc8cf4..8ab1c7d7 100644 --- a/src/components/TronSolc.js +++ b/src/components/TronSolc.js @@ -30,9 +30,10 @@ let supportedVersions = [ '0.8.6', '0.8.7', '0.8.11', + '0.8.17', ] -const maxVersion = '0.8.11' +const maxVersion = '0.8.17' function getWrapper(options = {}) { From f65db91c535183d802f5c180e73f25d0c910c999 Mon Sep 17 00:00:00 2001 From: llwslc Date: Thu, 16 Feb 2023 19:47:13 +0800 Subject: [PATCH 3/5] chore: bump solc --- package-lock.json | 63 +++++++++++------------------------------------ package.json | 4 +-- 2 files changed, 16 insertions(+), 51 deletions(-) diff --git a/package-lock.json b/package-lock.json index 215ab668..7c8c3019 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "tronbox", - "version": "3.1.0", + "version": "3.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "tronbox", - "version": "3.1.0", + "version": "3.1.1", "dependencies": { "@truffle/contract-sources": "^0.1.6", "@truffle/error": "0.0.7", @@ -43,7 +43,7 @@ "safe-eval": "^0.4.1", "semver": "^6.1.1", "serve-static": "^1.10.0", - "solc": "0.8.6", + "solc": "^0.8.17", "source-map-support": "^0.5.3", "spawn-args": "^0.1.0", "superagent": "^5.1.0", @@ -7057,14 +7057,6 @@ "node": ">=0.10.0" } }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, "node_modules/left-pad": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", @@ -9148,14 +9140,6 @@ "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", @@ -9894,42 +9878,31 @@ "dev": true }, "node_modules/solc": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.6.tgz", - "integrity": "sha512-miiDaWdaUnD7A6Cktb/2ug9f+ajcOCDYRr7vgbPEsMoutSlBtp5rca57oMg8iHSuM7jilwdxePujWI/+rbNftQ==", + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.17.tgz", + "integrity": "sha512-Dtidk2XtTTmkB3IKdyeg6wLYopJnBVxdoykN8oP8VY3PQjN16BScYoUJTXFm2OP7P0hXNAqWiJNmmfuELtLf8g==", "dependencies": { "command-exists": "^1.2.8", - "commander": "3.0.2", + "commander": "^8.1.0", "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", "js-sha3": "0.8.0", "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", "semver": "^5.5.0", "tmp": "0.0.33" }, "bin": { - "solcjs": "solcjs" + "solcjs": "solc.js" }, "engines": { - "node": ">=8.0.0" + "node": ">=10.0.0" } }, "node_modules/solc/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==" - }, - "node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" } }, "node_modules/solc/node_modules/js-sha3": { @@ -9937,14 +9910,6 @@ "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" }, - "node_modules/solc/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/solc/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", diff --git a/package.json b/package.json index 622da693..7f7d819e 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "tronbox", "namespace": "tronprotocol", - "version": "3.1.0", + "version": "3.1.1", "description": "TronBox - Simple development framework for Tron", "keywords": [ "TronBox", @@ -52,7 +52,7 @@ "safe-eval": "^0.4.1", "semver": "^6.1.1", "serve-static": "^1.10.0", - "solc": "0.8.6", + "solc": "^0.8.17", "source-map-support": "^0.5.3", "spawn-args": "^0.1.0", "superagent": "^5.1.0", From 952c0ba8deb5c07abd47df68fd71581d0f8da85d Mon Sep 17 00:00:00 2001 From: llwslc Date: Thu, 16 Feb 2023 19:48:05 +0800 Subject: [PATCH 4/5] docs: update changelog and signature --- CHANGELOG.md | 3 +++ FURTHER_INFO.md | 1 + signature.json | 14 +++++++------- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74e971c6..0574a1ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +__3.1.0__ +* Add support for Solidity compiler 0.8.17 + __3.1.0__ * Bump chokidar from 1.7.0 to 3.5.3 * Bump yargs from 8.0.2 to 15.4.1 diff --git a/FURTHER_INFO.md b/FURTHER_INFO.md index 9934fa39..124b16bf 100644 --- a/FURTHER_INFO.md +++ b/FURTHER_INFO.md @@ -60,6 +60,7 @@ You can find the signature public key [here](https://keybase.io/tronbox/pgp_keys 0.8.6 0.8.7 0.8.11 +0.8.17 ``` For more versions details: https://github.com/tronprotocol/solidity/releases diff --git a/signature.json b/signature.json index 0bc5df7b..3949b4a5 100644 --- a/signature.json +++ b/signature.json @@ -314,7 +314,7 @@ }, { "path": "build/components/TronSolc.js", - "sha512": "b3b02dc79c9e4998c4403f7d733260aee97bffcf3aea1188de07e839ed9977099f31d678b96d5de23d6c061b8b808a298e775211fb0a19347b38064b89d4185b" + "sha512": "ac75db6da1a33bf0ebf34a9ef8dcc23845adc6fce64de850be58bc2b58562025fbfe59b27541969902340f6bef97c0986333cc5a53f66c5e9a9c3e5b9e0cd727" }, { "path": "build/components/Box/lib/utils/unbox.js", @@ -362,7 +362,7 @@ }, { "path": "CHANGELOG.md", - "sha512": "23fd032af81ae1b2575a547ece58c9c95de046edba41e3658ec5524301638a51ac09eecfdf6db7cbd6192fbe531d692d75a166db32010cf78c745a42bda6a8a9" + "sha512": "ddc3ec3e4f85f98fc2a5a0f176fd9191ad274d487c46be96354aa17846b93429917bb89d872a79f20e24217c3cd26562da66d17e24208c8f47ebd9d430ac1b24" }, { "path": "CONTRIBUTING.md", @@ -370,7 +370,7 @@ }, { "path": "FURTHER_INFO.md", - "sha512": "96b7079cabd09a94b13cbf25a7bfe31c9d95d159c1f430abb899e8b2484e173e824420875ac63ba02d1c0960a1808f402788c671971daf071ba4931e4c0a309c" + "sha512": "40f32fe466ee9a019c094ee314dbc7995e5f18735145051035a6499aefc22004a5115535f4bdbb12a5b1e0b39bf298d995c41997e5f6268b00645c307c6c9658" }, { "path": "README.md", @@ -412,7 +412,7 @@ "scripts", "version" ], - "sha512": "d8f4fd1bc74cb55e5ccc677c71db0ad02846b6e08a2c4d11ac6563e8c1a2e8cd1673447e6fce632cdaa7af3d04341e78fe7c689352537c372debdcf4f9d59220" + "sha512": "4c59cfab40ca7a2f4de077a64d6fbb387682f6543340df445ce44573a9d8dcbb5ef7d593b490089b4b466bba2db006497d11e477af4a089d2bda1a4fc0cb6426" } }, { @@ -421,7 +421,7 @@ "packageJson": { "name": "tronbox", "namespace": "tronprotocol", - "version": "3.1.0", + "version": "3.1.1", "description": "TronBox - Simple development framework for Tron", "keywords": [ "TronBox", @@ -472,7 +472,7 @@ "safe-eval": "^0.4.1", "semver": "^6.1.1", "serve-static": "^1.10.0", - "solc": "0.8.6", + "solc": "^0.8.17", "source-map-support": "^0.5.3", "spawn-args": "^0.1.0", "superagent": "^5.1.0", @@ -541,5 +541,5 @@ } } ], - "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: OpenPGP.js v4.10.10\nComment: https://openpgpjs.org\n\nwsFzBAEBCAAGBQJj22ESACEJEAEScGf7i0tYFiEEuL4l7hUU5AsLzHjPARJw\nZ/uLS1gsMg/7BSlXken5mGbBmEPY0IHAMvkRBvYsoIUr97we5cospL0xrfET\ny3toLAS3ZWR1qyft9oHwvVffQZY2hxF16VY21kLt3Kdq/pcffcxYYGW4UR4v\ng1i+wc1AsjVQ60y98E3Th46BVK1lnJrV3ArjfNvPz6yJ+7exQ/npBQxi/+Xs\nP/E0U9LZiztbCdvfWaQCbQhXVCzoujLkeDAFKsJZnif79pFfIc/OiX4inlSL\n1BEZuAhCY5jNsG3FOjUUsdn9Ng2v57E6cfj/ioHi3KzoK7VnGExWumsm71Nm\na//dQM1I0bsJ1oirKZ8tOcynWE4inUBuIqSw0khPf2AauCke6ZErd9gCULmx\nRjY9erYeasD5dpWwC0Uj20C8V6AWOa6cH6qj2a+VtK0k17Bw1171Q5ORntFk\nEWyvnfD5926fTfsc3Gpo1Fd/EIogitpdjUK+wNow1GTIe6KTQbZxqfdEm7MX\nSoGXZQsl5yA7FhBzSJbDoxY8KTnIPMMxe14IQNYu18+c4wSRX2sFj1puF3Ld\nkQs+odpFRgu9nkwjqEfhxRcBtpDAGMDrKgkg+PbEcCOTg4q5NLRToD2IK6+Y\n74p7PKUBwmJNSLgdR2/43m3YQXOLzX7dMbWr+st1Xs755XidMuixKF/xeavA\nXjVCdiTsw9+7dcdQm2+81nLiVEnrQ7I+h2E=\n=yHYw\n-----END PGP SIGNATURE-----\n" + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: OpenPGP.js v4.10.10\nComment: https://openpgpjs.org\n\nwsFzBAEBCAAGBQJj7hZOACEJEAEScGf7i0tYFiEEuL4l7hUU5AsLzHjPARJw\nZ/uLS1iIHxAAu2Z5MPdFFHifsNy+oDLLnJTYhFQP0uboR7LETIx/fkhznxkW\nw6zbfZMHqzlI/WsSIYmiKr6V1Q/WMDnmL4B1XmDuxOsdvusGXf6ZO8BGcHsj\nFecuScaoUs0lOH6jf4IPYF8lVxkJ6Ys0XOJgBHUgrqUCL+5CElsgxDDgOXGK\nDkjenO5fKtiTVPNW4YQdskYjwR6S9XSMgkpoj8yxddMTfL9m4HG0hEs5tof1\nTyYy9gq+/7DIquLVONE1x/OVb64iGaYB2BT2321yWwed42uUaKoAZY4F3I1f\nsCts1zvyaGsue6A3OOwqhEkpJ0GG/P//DT8x2u50SnaYbtVGwd+sH64z20Hu\n+EbzVtgJX8gfHWY/3m5fZM7H2kjgP/KVAwVVzWbgQhVCBwIcqQWb7X1t17+k\n8ltVJMn6Qm0mNx4i/2AAO/7jWCKfq7HxjHi1NVQXQUTvR+/xNjL7mryyzrVD\nyIplJ9RFOGH4nxdIwQ0XAXcTpbidKH+v6u2m+m0SNFMelWI847kCqAqf8clL\nF2qCp3pcY1kN7GZjDLmA2jg3XfNWe5pYdrRSEW/GjSrMN0LSQVoZRNgwMjZN\nzzBvellz0QsvRhi3x+zHWup9mIJnfGpU1UQIWR4WcW0OZDg5J0m6gBJGK9AV\nsVqYEj9at/ab1rNPBTB99O8WzI72eyN5YjQ=\n=9axx\n-----END PGP SIGNATURE-----\n" } \ No newline at end of file From d2cdb84876899cd20ddb317b300a02c91414cac6 Mon Sep 17 00:00:00 2001 From: llwslc Date: Fri, 17 Feb 2023 17:43:35 +0800 Subject: [PATCH 5/5] docs: update changelog and signature --- CHANGELOG.md | 2 +- signature.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0574a1ca..34830fc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -__3.1.0__ +__3.1.1__ * Add support for Solidity compiler 0.8.17 __3.1.0__ diff --git a/signature.json b/signature.json index 3949b4a5..4a650666 100644 --- a/signature.json +++ b/signature.json @@ -362,7 +362,7 @@ }, { "path": "CHANGELOG.md", - "sha512": "ddc3ec3e4f85f98fc2a5a0f176fd9191ad274d487c46be96354aa17846b93429917bb89d872a79f20e24217c3cd26562da66d17e24208c8f47ebd9d430ac1b24" + "sha512": "a317b32d049d5e7b6b993d83044ab53af1b172cf7b627ee60af0be8ea699469092354463b383340f588cef4fbeec12888206b3959fefe04121f575f119d7a65e" }, { "path": "CONTRIBUTING.md", @@ -541,5 +541,5 @@ } } ], - "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: OpenPGP.js v4.10.10\nComment: https://openpgpjs.org\n\nwsFzBAEBCAAGBQJj7hZOACEJEAEScGf7i0tYFiEEuL4l7hUU5AsLzHjPARJw\nZ/uLS1iIHxAAu2Z5MPdFFHifsNy+oDLLnJTYhFQP0uboR7LETIx/fkhznxkW\nw6zbfZMHqzlI/WsSIYmiKr6V1Q/WMDnmL4B1XmDuxOsdvusGXf6ZO8BGcHsj\nFecuScaoUs0lOH6jf4IPYF8lVxkJ6Ys0XOJgBHUgrqUCL+5CElsgxDDgOXGK\nDkjenO5fKtiTVPNW4YQdskYjwR6S9XSMgkpoj8yxddMTfL9m4HG0hEs5tof1\nTyYy9gq+/7DIquLVONE1x/OVb64iGaYB2BT2321yWwed42uUaKoAZY4F3I1f\nsCts1zvyaGsue6A3OOwqhEkpJ0GG/P//DT8x2u50SnaYbtVGwd+sH64z20Hu\n+EbzVtgJX8gfHWY/3m5fZM7H2kjgP/KVAwVVzWbgQhVCBwIcqQWb7X1t17+k\n8ltVJMn6Qm0mNx4i/2AAO/7jWCKfq7HxjHi1NVQXQUTvR+/xNjL7mryyzrVD\nyIplJ9RFOGH4nxdIwQ0XAXcTpbidKH+v6u2m+m0SNFMelWI847kCqAqf8clL\nF2qCp3pcY1kN7GZjDLmA2jg3XfNWe5pYdrRSEW/GjSrMN0LSQVoZRNgwMjZN\nzzBvellz0QsvRhi3x+zHWup9mIJnfGpU1UQIWR4WcW0OZDg5J0m6gBJGK9AV\nsVqYEj9at/ab1rNPBTB99O8WzI72eyN5YjQ=\n=9axx\n-----END PGP SIGNATURE-----\n" + "signature": "-----BEGIN PGP SIGNATURE-----\nVersion: OpenPGP.js v4.10.10\nComment: https://openpgpjs.org\n\nwsFzBAEBCAAGBQJj70woACEJEAEScGf7i0tYFiEEuL4l7hUU5AsLzHjPARJw\nZ/uLS1iOhhAAh3X+Du6F6FRSthpAJ9UpwsMkne6pZVCw7WeHr/57scINTnOH\ndEX9QnoZuWoiFFXB97XnQkVVs+PfBpYgIYzm/KRCOPNxXdJeMDbBXSachkDm\nGhxKrNPHgOxso4DHv56AfUGFCtm1vN68zQpSdi4L0BGF2nYk13XmmnzzUkr5\nA3NT5If/fI26ajBt2JqTxsQb/cuwwMpeqogUqUazTyHP7sncwU5RsfZmrYrp\nzzbzeDInBnDGSLu6tsWIVd7klcN1HZUL3loIVwmOSyidpeB2YCpFMX5/e3d+\n4MRoTQw8q4K2z+HBs4RA14ZMaj2hEJdj4YqFkVjvk6SvpqYQTvQDkP7lj5kw\nTKWKzOshC4z8MvuueiWzWlNdiieNSUZAsSvZ+y1eaZjxPM/7gsDLWOIn1ffS\nc3ayzbKKFgWa9tMwSTi0O0ncRiaKGbZd0W7TzoZsYo+4Vg9noIFcRo1gKn4m\nQZQWPncKPNWUS1fVcFywKsWRfksh+VBspWktVkcqzNy3m5ikUzxnB+BBlYPj\ntnv67kEp51dXNlwU32rctVIzjd996i34H/hxDbuXdcYZiQX+31f2iTcRniZ8\nbax4iB0DXDG2AtxTTop/BSNS7pD6uriIy2gZQU7NWOKI4eUb2jnUoGdEpH4E\nQm3XznTyrk/266gYfU1Zxf6dKrio6V/tAaU=\n=vV/A\n-----END PGP SIGNATURE-----\n" } \ No newline at end of file