├── .github └── workflows │ └── CI.yml ├── .gitignore ├── .gitmodules ├── .prettierignore ├── .solhint.json ├── .vscode └── settings.json ├── README.md ├── foundry.toml ├── package.json ├── shell └── full_install.sh ├── src ├── Permutations.sol ├── UserFactory.sol ├── arrays.sol ├── coins.sol ├── convert.sol ├── errors.sol ├── larping.sol ├── sorting.sol └── test │ └── larping.t.sol └── yarn.lock /.github/workflows/CI.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | push: 4 | branches: 5 | - master 6 | pull_request: 7 | 8 | jobs: 9 | run-ci: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v2 13 | with: 14 | submodules: recursive 15 | - uses: actions/setup-node@v2 16 | - name: Install dev dependencies 17 | run: npm install 18 | 19 | - name: Install Foundry 20 | uses: onbjerg/foundry-toolchain@v1 21 | with: 22 | version: nightly 23 | 24 | - name: Run tests 25 | run: forge test 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out/ 2 | cache/ 3 | node_modules/ 4 | .env -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/ds-test"] 2 | path = lib/ds-test 3 | url = https://github.com/dapphub/ds-test 4 | [submodule "lib/forge-std"] 5 | path = lib/forge-std 6 | url = https://github.com/foundry-rs/forge-std 7 | [submodule "lib/solmate"] 8 | path = lib/solmate 9 | url = https://github.com/Rari-Capital/solmate 10 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | src/larping.sol 2 | -------------------------------------------------------------------------------- /.solhint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "solhint:recommended", 3 | "rules": { 4 | "compiler-version": ["error",">=0.8.0"], 5 | "avoid-low-level-calls": "off" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true, 3 | "solidity.formatter": "prettier", 4 | "[solidity]": { 5 | "editor.defaultFormatter": "JuanBlanco.solidity" 6 | } 7 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Forge test-utils 2 | 3 | For all of below except the user factory you will need to add your own types if they are not provided. Feel free to PR them. 4 | 5 | ## Showcase of most important 6 | 7 | ### larping 8 | 9 | ```solidity 10 | using larping for *; 11 | ohm.transfer.larp(target, amount, true); // mock a true return, via vm.mockCall 12 | ohm.balanceOf(target, amount); // mock return amount... view function 13 | // larpp is for payable 14 | ``` 15 | ### errors 16 | 17 | ```solidity 18 | using errors for *; 19 | SomeError.selector.with(); // via vm.expectRevert... is expected args 20 | SomeError.selector.with(); 21 | ``` 22 | 23 | ### convert 24 | 25 | ```solidity 26 | uint128 x = uint64(5).c64u128u(); 27 | x = uint64(5).c64u128ushl(2); 28 | x = uint64(5).c64u128ushr(2); // be careful with shifting 29 | ``` 30 | 31 | ### UserFactory 32 | 33 | ```solidity 34 | UserFactory factory = new UserFactory(); 35 | address someUser = factory.next(); 36 | address[] memory users = factory.create(40); 37 | // users are distinct 38 | ``` 39 | 40 | ### coins 41 | 42 | ```solidity 43 | using coins for *; 44 | coins.ohm; // ohm address 45 | coins.usdc; // usdc address 46 | ``` 47 | 48 | ### Permutations 49 | 50 | ```solidity 51 | contract Tester is Test, Permutations { 52 | function test() external { 53 | uint256[] memory input = new uint256[](4); 54 | input[0] = 1; 55 | input[1] = 2; 56 | input[2] = 3; 57 | input[3] = 4; 58 | 59 | uint256[] memory result = permuteBy(13, input, false); // take 12th permutation of input and don't del data afterwards 60 | result = permutation(17, true); // take 16th and delete 61 | result = permutation(15, true); // this will fail 62 | } 63 | } 64 | ``` 65 | -------------------------------------------------------------------------------- /foundry.toml: -------------------------------------------------------------------------------- 1 | [default] 2 | remappings = [ 3 | 'ds-test/=lib/ds-test/src/', 4 | 'forge-std/=lib/forge-std/src/' 5 | ] 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "forge-template", 3 | "author": "OlympusDAO", 4 | "version": "1.0.0", 5 | "description": "A forge template", 6 | "homepage": "https://github.com/OlympusDAO/forge-template#forge-template", 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/OlympusDAO/forge-template.git" 10 | }, 11 | "scripts": { 12 | "build": "./shell/full_install.sh", 13 | "env": "source .env", 14 | "prettier": "prettier --write 'src/**/*.sol'", 15 | "prettier:list": "prettier --list-different 'src/**/*.sol'", 16 | "prettier:check": "prettier --check 'src/**/*.sol'", 17 | "solhint": "solhint --config ./.solhint.json 'src/**/*.sol' --fix", 18 | "solhint:check": "solhint --config ./.solhint.json 'src/**/*.sol'", 19 | "lint": "npm run prettier && npm run solhint", 20 | "lint:check": "npm run prettier:check && npm run solhint:check", 21 | "test": "forge test" 22 | }, 23 | "devDependencies": { 24 | "prettier": "^2.5.1", 25 | "prettier-plugin-solidity": "^1.0.0-beta.19", 26 | "solhint": "^3.3.6" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /shell/full_install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | yarn 4 | forge install 5 | forge update 6 | forge build 7 | 8 | -------------------------------------------------------------------------------- /src/Permutations.sol: -------------------------------------------------------------------------------- 1 | pragma solidity >=0.8.0; 2 | 3 | // credits to OlympusDAO 4 | contract Permutations { 5 | uint256[][] public permutations; 6 | uint256[] public permuted; 7 | 8 | function permutation(uint256 i, bool del) 9 | internal 10 | returns (uint256[] memory result) 11 | { 12 | result = permutations[i]; 13 | if (del) delete permutations; 14 | } 15 | 16 | /// @param i index of permutation to receive 17 | /// @param input input elements which are to be permuted input.length! - 1 times (original permutation is untouched) 18 | /// @param del delete permutations after receiving permutation output 19 | function permuteBy( 20 | uint256 i, 21 | uint256[] memory input, 22 | bool del 23 | ) internal returns (uint256[] memory result) { 24 | permuted = input; 25 | heaps(input.length, permuted); // permute 26 | result = permutations[i]; // return i - 1th permutation 27 | if (del) delete permutations; // clean 28 | delete permuted; 29 | } 30 | 31 | /// @notice calculates k! permutations by calculating (1)*(k-1)! and (k-1)(k-1)! permutations 32 | function heaps(uint256 k, uint256[] storage arr) internal { 33 | if (k == 1) { 34 | permutations.push(arr); 35 | } else { 36 | heaps(k - 1, arr); 37 | 38 | for (uint256 i; i < k - 1; i++) { 39 | if (k % 2 == 0) (arr[i], arr[k - 1]) = (arr[k - 1], arr[i]); 40 | else (arr[0], arr[k - 1]) = (arr[k - 1], arr[0]); 41 | heaps(k - 1, arr); 42 | } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/UserFactory.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: Unlicense 2 | pragma solidity >=0.8.0; 3 | 4 | import {Vm} from "forge-std/Vm.sol"; 5 | 6 | //common utilities for forge tests 7 | contract UserFactory { 8 | address internal constant HEVM_ADDRESS = 9 | address(bytes20(uint160(uint256(keccak256("hevm cheat code"))))); 10 | 11 | Vm internal immutable vm = Vm(HEVM_ADDRESS); 12 | 13 | bytes32 internal nextUser = keccak256(abi.encodePacked("users")); 14 | 15 | function next() public returns (address payable) { 16 | //bytes32 to address conversion 17 | address payable user = payable(address(uint160(uint256(nextUser)))); 18 | nextUser = keccak256(abi.encodePacked(nextUser)); 19 | return user; 20 | } 21 | 22 | //create users with 100 ether balance 23 | function create(uint256 userNum) public returns (address[] memory) { 24 | address[] memory usrs = new address[](userNum); 25 | for (uint256 i = 0; i < userNum; i++) { 26 | address user = next(); 27 | vm.deal(user, 100 ether); 28 | usrs[i] = user; 29 | } 30 | return usrs; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/arrays.sol: -------------------------------------------------------------------------------- 1 | pragma solidity >=0.8.0; 2 | 3 | library arrays { 4 | function atomicu64(uint64 amount) 5 | internal 6 | pure 7 | returns (uint64[] memory result) 8 | { 9 | result = new uint64[](1); 10 | result[0] = amount; 11 | } 12 | 13 | function atomicu64(uint64 amount1, uint64 amount2) 14 | internal 15 | pure 16 | returns (uint64[] memory result) 17 | { 18 | result = new uint64[](2); 19 | result[0] = amount1; 20 | result[1] = amount2; 21 | } 22 | 23 | function atomicu64( 24 | uint64 amount1, 25 | uint64 amount2, 26 | uint64 amount3 27 | ) internal pure returns (uint64[] memory result) { 28 | result = new uint64[](3); 29 | result[0] = amount1; 30 | result[1] = amount2; 31 | result[2] = amount3; 32 | } 33 | 34 | function atomicu224(uint224 amount) 35 | internal 36 | pure 37 | returns (uint224[] memory result) 38 | { 39 | result = new uint224[](1); 40 | result[0] = amount; 41 | } 42 | 43 | function atomicu256(uint256 amount) 44 | internal 45 | pure 46 | returns (uint256[] memory result) 47 | { 48 | result = new uint256[](1); 49 | result[0] = amount; 50 | } 51 | 52 | function atomicu256(uint256 amount1, uint256 amount2) 53 | internal 54 | pure 55 | returns (uint256[] memory result) 56 | { 57 | result = new uint256[](2); 58 | result[0] = amount1; 59 | result[1] = amount2; 60 | } 61 | 62 | function atomicu256( 63 | uint256 amount1, 64 | uint256 amount2, 65 | uint256 amount3 66 | ) internal pure returns (uint256[] memory result) { 67 | result = new uint256[](3); 68 | result[0] = amount1; 69 | result[1] = amount2; 70 | result[2] = amount3; 71 | } 72 | 73 | // chain this for memory arrays 74 | function add(uint256[] memory array, uint256 element) 75 | internal 76 | pure 77 | returns (uint256[] memory) 78 | { 79 | uint256 i; 80 | while (element != 0) { 81 | if (array[i] == 0) { 82 | array[i] = element; 83 | element = 0; 84 | } 85 | i++; 86 | } 87 | return array; 88 | } 89 | 90 | function inflate(uint256[] memory arr, uint256 by) 91 | internal 92 | pure 93 | returns (uint256[] memory) 94 | { 95 | uint256 l = arr.length; 96 | for (uint256 i; i < l; i++) { 97 | arr[i] += by; 98 | } 99 | return arr; 100 | } 101 | 102 | function clean(uint256[] memory array) 103 | internal 104 | pure 105 | returns (uint256[] memory) 106 | { 107 | return new uint256[](array.length); 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /src/coins.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: AGPL-3.0-only 2 | pragma solidity >=0.8.0; 3 | 4 | library coins { 5 | address public constant ohm = 0x64aa3364F17a4D01c6f1751Fd97C2BD3D7e7f1D5; 6 | address public constant gohm = 0x0ab87046fBb341D058F17CBC4c1133F25a20a52f; 7 | address public constant sohm = 0x04F2694C8fcee23e8Fd0dfEA1d4f5Bb8c352111F; 8 | address public constant weth = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; 9 | 10 | // STABLES 11 | address public constant dai = 0x6B175474E89094C44Da98b954EedeAC495271d0F; 12 | address public constant usdc = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; 13 | address public constant usdt = 0xdAC17F958D2ee523a2206206994597C13D831ec7; 14 | address public constant mim = 0x99D8a9C45b2ecA8864373A26D1459e3Dff1e17F3; 15 | address public constant frax = 0x853d955aCEf822Db058eb8505911ED77F175b99e; 16 | address public constant lusd = 0x5f98805A4E8be255a32880FDeC7F6728C6568bA0; 17 | address public constant agEUR = 0x1a7e4e63778B4f12a199C062f3eFdD288afCBce8; 18 | address public constant fei = 0x956F47F50A910163D8BF957Cf5846D573E7f87CA; 19 | 20 | // ANY TOKENS 21 | address public constant cvx = 0x4e3FBD56CD56c3e72c1403e103b45Db9da5B9D2B; 22 | address public constant crv = 0xD533a949740bb3306d119CC777fa900bA034cd52; 23 | address public constant angle = 0x31429d1856aD1377A8A0079410B297e1a9e214c2; 24 | address public constant lqty = 0x6DEA81C8171D0bA574754EF6F8b412F2Ed88c54D; 25 | address public constant fxs = 0x3432B6A60D23Ca0dFCa7761B7ab56459D9C964D0; 26 | address public constant btrfly = 0xC0d4Ceb216B3BA9C3701B291766fDCbA977ceC3A; 27 | address public constant xbtrfly = 28 | 0xCC94Faf235cC5D3Bf4bEd3a30db5984306c86aBC; 29 | address public constant alcx = 0xdBdb4d16EdA451D0503b854CF79D55697F90c8DF; 30 | address public constant toke = 0x2e9d63788249371f1DFC918a52f8d799F4a38C94; 31 | address public constant tribe = 0xc7283b66Eb1EB5FB86327f08e1B5816b0720212B; 32 | address public constant cvxcrv = 0x62B9c7356A2Dc64a1969e19C23e4f579F9810Aa7; 33 | address public constant sushi = 0x6B3595068778DD592e39A122f4f5a5cF09C90fE2; 34 | 35 | // AAVE 36 | address public constant adai = 0x028171bCA77440897B824Ca71D1c56caC55b68A3; 37 | address public constant aweth = 0x030bA81f1c18d280636F32af80b9AAd02Cf0854e; 38 | address public constant ausdc = 0xBcca60bB61934080951369a648Fb03DF4F96263C; 39 | address public constant afrax = 0xd4937682df3C8aEF4FE912A96A74121C0829E664; 40 | } 41 | -------------------------------------------------------------------------------- /src/convert.sol: -------------------------------------------------------------------------------- 1 | pragma solidity >=0.8.0; 2 | 3 | // convert library 4 | // naming key: 5 | // c[optional "sh" (shift)] 6 | // if t1 < t2 then number is first converted then shifted 7 | // if t2 <= t1 then number is first shifted then converted 8 | 9 | // (uintx -> uinty) -> (uintx -> inty) -> (intx -> uinty) -> (intx -> inty) 10 | // organized in that order, ascending based on arg first then return 11 | library convert { 12 | /// uint64,uint128 13 | function c64u128u(uint64 number) internal pure returns (uint128) { 14 | return uint128(number); 15 | } 16 | 17 | function c64u128ushl(uint64 number, uint256 shift) 18 | internal 19 | pure 20 | returns (uint128) 21 | { 22 | return uint128(number) << uint128(shift); 23 | } 24 | 25 | function c64u128ushr(uint64 number, uint256 shift) 26 | internal 27 | pure 28 | returns (uint128) 29 | { 30 | return uint128(number) >> shift; 31 | } 32 | 33 | /// uint224,uint256 34 | function c224uu(uint224 number) internal pure returns (uint256) { 35 | return uint256(number); 36 | } 37 | 38 | function c224uushl(uint224 number, uint256 shift) 39 | internal 40 | pure 41 | returns (uint256) 42 | { 43 | return uint256(number) << shift; 44 | } 45 | 46 | function c224uushr(uint224 number, uint256 shift) 47 | internal 48 | pure 49 | returns (uint256) 50 | { 51 | return uint256(number) >> shift; 52 | } 53 | 54 | /// uint256,uint32 55 | function cu32u(uint256 number) internal pure returns (uint32) { 56 | return uint32(number); 57 | } 58 | 59 | function cu32ushl(uint256 number, uint256 shift) 60 | internal 61 | pure 62 | returns (uint32) 63 | { 64 | return uint32(number << shift); 65 | } 66 | 67 | function cu32ushr(uint256 number, uint256 shift) 68 | internal 69 | pure 70 | returns (uint32) 71 | { 72 | return uint32(number >> shift); 73 | } 74 | 75 | /// uint256,uint48 76 | function cu48u(uint256 number) internal pure returns (uint48) { 77 | return uint48(number); 78 | } 79 | 80 | function cu48ushl(uint256 number, uint256 shift) 81 | internal 82 | pure 83 | returns (uint48) 84 | { 85 | return uint48(number << shift); 86 | } 87 | 88 | function cu48ushr(uint256 number, uint256 shift) 89 | internal 90 | pure 91 | returns (uint48) 92 | { 93 | return uint48(number >> shift); 94 | } 95 | 96 | /// uint256,uint64 97 | function cu64u(uint256 number) internal pure returns (uint64) { 98 | return uint64(number); 99 | } 100 | 101 | function cu64ushl(uint256 number, uint256 shift) 102 | internal 103 | pure 104 | returns (uint64) 105 | { 106 | return uint64(number << shift); 107 | } 108 | 109 | function cu64ushr(uint256 number, uint256 shift) 110 | internal 111 | pure 112 | returns (uint64) 113 | { 114 | return uint64(number >> shift); 115 | } 116 | 117 | /// uint256,uint128 118 | function cu128u(uint256 number) internal pure returns (uint128) { 119 | return uint128(number); 120 | } 121 | 122 | function cu128ushl(uint256 number, uint256 shift) 123 | internal 124 | pure 125 | returns (uint128) 126 | { 127 | return uint128(number << shift); 128 | } 129 | 130 | function cu128ushr(uint256 number, uint256 shift) 131 | internal 132 | pure 133 | returns (uint128) 134 | { 135 | return uint128(number >> shift); 136 | } 137 | 138 | /// uint256,uint224 139 | function cu224u(uint256 number) internal pure returns (uint224) { 140 | return uint224(number); 141 | } 142 | 143 | function cu224ushl(uint256 number, uint256 shift) 144 | internal 145 | pure 146 | returns (uint224) 147 | { 148 | return uint224(number << shift); 149 | } 150 | 151 | function cu224ushr(uint256 number, uint256 shift) 152 | internal 153 | pure 154 | returns (uint224) 155 | { 156 | return uint224(number >> shift); 157 | } 158 | 159 | /// uint32,int32 160 | function c32u32i(uint32 number) internal pure returns (int32) { 161 | return int32(number); 162 | } 163 | 164 | function c32u32ishl(uint32 number, uint256 shift) 165 | internal 166 | pure 167 | returns (int32) 168 | { 169 | return int32(number << uint32(shift)); 170 | } 171 | 172 | function c32u32ishr(uint32 number, uint256 shift) 173 | internal 174 | pure 175 | returns (int32) 176 | { 177 | return int32(number >> shift); 178 | } 179 | 180 | /// uint224,int224 181 | function c224u224i(uint224 number) internal pure returns (int224) { 182 | return int224(number); 183 | } 184 | 185 | function c224u224ishl(uint224 number, uint256 shift) 186 | internal 187 | pure 188 | returns (int224) 189 | { 190 | return int224(number << uint224(shift)); 191 | } 192 | 193 | function c224u224ishr(uint224 number, uint256 shift) 194 | internal 195 | pure 196 | returns (int224) 197 | { 198 | return int224(number >> shift); 199 | } 200 | 201 | /// uint256,int32 202 | function cu32i(uint256 number) internal pure returns (int32) { 203 | return int32(uint32(number)); 204 | } 205 | 206 | function cu32ishl(uint256 number, uint256 shift) 207 | internal 208 | pure 209 | returns (int32) 210 | { 211 | return int32(uint32(number << shift)); 212 | } 213 | 214 | function cu32ishr(uint256 number, uint256 shift) 215 | internal 216 | pure 217 | returns (int32) 218 | { 219 | return int32(uint32(number >> shift)); 220 | } 221 | 222 | /// uint256,int128 223 | function cu128i(uint256 number) internal pure returns (int128) { 224 | return int128(uint128(number)); 225 | } 226 | 227 | function cu128ishl(uint256 number, uint256 shift) 228 | internal 229 | pure 230 | returns (int128) 231 | { 232 | return int128(uint128(number << shift)); 233 | } 234 | 235 | function cu128ishr(uint256 number, uint256 shift) 236 | internal 237 | pure 238 | returns (int128) 239 | { 240 | return int128(uint128(number >> shift)); 241 | } 242 | 243 | /// uint256,int256 244 | function cui(uint256 number) internal pure returns (int256) { 245 | return int256(number); 246 | } 247 | 248 | function cuishl(uint256 number, uint256 shift) 249 | internal 250 | pure 251 | returns (int256) 252 | { 253 | return int256(number << shift); 254 | } 255 | 256 | function cuishr(uint256 number, uint256 shift) 257 | internal 258 | pure 259 | returns (int256) 260 | { 261 | return int256(number >> shift); 262 | } 263 | 264 | /// int32,uint32 265 | function c32i32u(int32 number) internal pure returns (uint32) { 266 | return uint32(number); 267 | } 268 | 269 | function c32i32ushl(int32 number, uint256 shift) 270 | internal 271 | pure 272 | returns (uint32) 273 | { 274 | return uint32(number) << uint32(shift); 275 | } 276 | 277 | function c32i32ushr(int32 number, uint256 shift) 278 | internal 279 | pure 280 | returns (uint32) 281 | { 282 | return uint32(number) >> shift; 283 | } 284 | 285 | /// int32,uint256 286 | function c32iu(int32 number) internal pure returns (uint256) { 287 | return uint256(uint32(number)); 288 | } 289 | 290 | function c32iushl(int32 number, uint256 shift) 291 | internal 292 | pure 293 | returns (uint256) 294 | { 295 | return uint256(uint32(number)) << shift; 296 | } 297 | 298 | function c32iushr(int32 number, uint256 shift) 299 | internal 300 | pure 301 | returns (uint256) 302 | { 303 | return uint256(uint32(number)) >> shift; 304 | } 305 | 306 | /// int256,uint32 307 | function ci32u(int256 number) internal pure returns (uint32) { 308 | return uint32(uint256(number)); 309 | } 310 | 311 | function ci32ushl(int256 number, uint32 shift) 312 | internal 313 | pure 314 | returns (uint32) 315 | { 316 | return uint32(uint256(number) << shift); 317 | } 318 | 319 | function ci32ushr(int256 number, uint32 shift) 320 | internal 321 | pure 322 | returns (uint32) 323 | { 324 | return uint32(uint256(number) >> shift); 325 | } 326 | 327 | /// int256,uint128 328 | function ci128u(int256 number) internal pure returns (uint128) { 329 | return uint128(uint256(number)); 330 | } 331 | 332 | function ci128ushl(int256 number, uint128 shift) 333 | internal 334 | pure 335 | returns (uint128) 336 | { 337 | return uint128(uint256(number) << shift); 338 | } 339 | 340 | function ci128ushr(int256 number, uint128 shift) 341 | internal 342 | pure 343 | returns (uint128) 344 | { 345 | return uint128(uint256(number) >> shift); 346 | } 347 | 348 | /// int256,uint224 349 | function ci224u(int256 number) internal pure returns (uint224) { 350 | return uint224(uint256(number)); 351 | } 352 | 353 | function ci224ushl(int256 number, uint224 shift) 354 | internal 355 | pure 356 | returns (uint224) 357 | { 358 | return uint224(uint256(number) << shift); 359 | } 360 | 361 | function ci224ushr(int256 number, uint224 shift) 362 | internal 363 | pure 364 | returns (uint224) 365 | { 366 | return uint224(uint256(number) >> shift); 367 | } 368 | 369 | /// int256,uint256 370 | function ciu(int256 number) internal pure returns (uint256) { 371 | return uint256(number); 372 | } 373 | 374 | function ciushl(int256 number, uint256 shift) 375 | internal 376 | pure 377 | returns (uint256) 378 | { 379 | return uint256(number) << shift; 380 | } 381 | 382 | function ciushr(int256 number, uint256 shift) 383 | internal 384 | pure 385 | returns (uint256) 386 | { 387 | return uint256(number) >> shift; 388 | } 389 | 390 | /// int128,int256 391 | function c128ii(int128 number) internal pure returns (int256) { 392 | return int256(number); 393 | } 394 | 395 | function c128iishl(int128 number, uint256 shift) 396 | internal 397 | pure 398 | returns (int256) 399 | { 400 | return int256(number) << shift; 401 | } 402 | 403 | function c128iishr(int128 number, uint256 shift) 404 | internal 405 | pure 406 | returns (int256) 407 | { 408 | return int256(number) >> shift; 409 | } 410 | 411 | /// int256,int128 412 | function ci128i(int256 number) internal pure returns (int128) { 413 | return int128(number); 414 | } 415 | 416 | function ci128ishl(int256 number, uint256 shift) 417 | internal 418 | pure 419 | returns (int128) 420 | { 421 | return int128(number << shift); 422 | } 423 | 424 | function ci128ishr(int256 number, uint256 shift) 425 | internal 426 | pure 427 | returns (int128) 428 | { 429 | return int128(number >> shift); 430 | } 431 | } 432 | -------------------------------------------------------------------------------- /src/errors.sol: -------------------------------------------------------------------------------- 1 | pragma solidity >=0.8.0; 2 | 3 | /// DEPS 4 | import {Vm} from "forge-std/Vm.sol"; 5 | 6 | // errors library 7 | // .selector.with 8 | // larping.sol method does not work due to 9 | // https://github.com/ethereum/solidity/issues/12991 10 | library errors { 11 | address private constant HEVM_ADDRESS = 12 | address(bytes20(uint160(uint256(keccak256("hevm cheat code"))))); 13 | 14 | Vm private constant vm = Vm(HEVM_ADDRESS); 15 | 16 | // no arg 17 | function with(bytes4 errorSel) internal { 18 | vm.expectRevert(abi.encodeWithSelector(errorSel)); 19 | } 20 | 21 | function with(bytes4 errorSel, address arg1) internal { 22 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1)); 23 | } 24 | 25 | function with(bytes4 errorSel, bool arg1) internal { 26 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1)); 27 | } 28 | 29 | function with(bytes4 errorSel, bytes32 arg1) internal { 30 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1)); 31 | } 32 | 33 | function with(bytes4 errorSel, string memory arg1) internal { 34 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1)); 35 | } 36 | 37 | function with(bytes4 errorSel, uint256 arg1) internal { 38 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1)); 39 | } 40 | 41 | function with( 42 | bytes4 errorSel, 43 | address arg1, 44 | address arg2 45 | ) internal { 46 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1, arg2)); 47 | } 48 | 49 | function with( 50 | bytes4 errorSel, 51 | bool arg1, 52 | bool arg2 53 | ) internal { 54 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1, arg2)); 55 | } 56 | 57 | function with( 58 | bytes4 errorSel, 59 | bytes32 arg1, 60 | bytes32 arg2 61 | ) internal { 62 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1, arg2)); 63 | } 64 | 65 | function with( 66 | bytes4 errorSel, 67 | string memory arg1, 68 | string memory arg2 69 | ) internal { 70 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1, arg2)); 71 | } 72 | 73 | function with( 74 | bytes4 errorSel, 75 | uint256 arg1, 76 | uint256 arg2 77 | ) internal { 78 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1, arg2)); 79 | } 80 | 81 | function with( 82 | bytes4 errorSel, 83 | address arg1, 84 | address arg2, 85 | address arg3 86 | ) internal { 87 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1, arg2, arg3)); 88 | } 89 | 90 | function with( 91 | bytes4 errorSel, 92 | bool arg1, 93 | bool arg2, 94 | bool arg3 95 | ) internal { 96 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1, arg2, arg3)); 97 | } 98 | 99 | function with( 100 | bytes4 errorSel, 101 | bytes32 arg1, 102 | bytes32 arg2, 103 | bytes32 arg3 104 | ) internal { 105 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1, arg2, arg3)); 106 | } 107 | 108 | function with( 109 | bytes4 errorSel, 110 | string memory arg1, 111 | string memory arg2, 112 | string memory arg3 113 | ) internal { 114 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1, arg2, arg3)); 115 | } 116 | 117 | function with( 118 | bytes4 errorSel, 119 | uint256 arg1, 120 | uint256 arg2, 121 | uint256 arg3 122 | ) internal { 123 | vm.expectRevert(abi.encodeWithSelector(errorSel, arg1, arg2, arg3)); 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /src/larping.sol: -------------------------------------------------------------------------------- 1 | pragma solidity >=0.8.0; 2 | 3 | /// DEPS 4 | import {Vm} from "forge-std/Vm.sol"; 5 | 6 | // larping library 7 | library larping { 8 | address private constant HEVM_ADDRESS = 9 | address(bytes20(uint160(uint256(keccak256("hevm cheat code"))))); 10 | 11 | Vm private constant vm = Vm(HEVM_ADDRESS); 12 | 13 | // ,address 14 | function larp(function () external returns(address) f, address returned1) internal { 15 | vm.mockCall( 16 | f.address, 17 | abi.encodeWithSelector(f.selector), 18 | abi.encode(returned1) 19 | ); 20 | } 21 | 22 | function larpp(function () external payable returns(address) f, address returned1) internal { 23 | vm.mockCall( 24 | f.address, 25 | abi.encodeWithSelector(f.selector), 26 | abi.encode(returned1) 27 | ); 28 | } 29 | 30 | function larpv(function () external view returns(address) f, address returned1) internal { 31 | vm.mockCall( 32 | f.address, 33 | abi.encodeWithSelector(f.selector), 34 | abi.encode(returned1) 35 | ); 36 | } 37 | 38 | // ,bool 39 | function larp(function () external returns(bool) f, bool returned1) internal { 40 | vm.mockCall( 41 | f.address, 42 | abi.encodeWithSelector(f.selector), 43 | abi.encode(returned1) 44 | ); 45 | } 46 | 47 | function larpp(function () external payable returns(bool) f, bool returned1) internal { 48 | vm.mockCall( 49 | f.address, 50 | abi.encodeWithSelector(f.selector), 51 | abi.encode(returned1) 52 | ); 53 | } 54 | 55 | function larpv(function () external view returns(bool) f, bool returned1) internal { 56 | vm.mockCall( 57 | f.address, 58 | abi.encodeWithSelector(f.selector), 59 | abi.encode(returned1) 60 | ); 61 | } 62 | 63 | // ,bytes32 64 | function larp(function () external returns(bytes32) f, bytes32 returned1) internal { 65 | vm.mockCall( 66 | f.address, 67 | abi.encodeWithSelector(f.selector), 68 | abi.encode(returned1) 69 | ); 70 | } 71 | 72 | function larpp(function () external payable returns(bytes32) f, bytes32 returned1) internal { 73 | vm.mockCall( 74 | f.address, 75 | abi.encodeWithSelector(f.selector), 76 | abi.encode(returned1) 77 | ); 78 | } 79 | 80 | function larpv(function () external view returns(bytes32) f, bytes32 returned1) internal { 81 | vm.mockCall( 82 | f.address, 83 | abi.encodeWithSelector(f.selector), 84 | abi.encode(returned1) 85 | ); 86 | } 87 | 88 | // ,string 89 | function larp(function () external returns(string memory) f, string memory returned1) internal { 90 | vm.mockCall( 91 | f.address, 92 | abi.encodeWithSelector(f.selector), 93 | abi.encode(returned1) 94 | ); 95 | } 96 | 97 | function larpp(function () external payable returns(string memory) f, string memory returned1) internal { 98 | vm.mockCall( 99 | f.address, 100 | abi.encodeWithSelector(f.selector), 101 | abi.encode(returned1) 102 | ); 103 | } 104 | 105 | function larpv(function () external view returns(string memory) f, string memory returned1) internal { 106 | vm.mockCall( 107 | f.address, 108 | abi.encodeWithSelector(f.selector), 109 | abi.encode(returned1) 110 | ); 111 | } 112 | 113 | // ,uint256 114 | function larp(function () external returns(uint256) f, uint256 returned1) internal { 115 | vm.mockCall( 116 | f.address, 117 | abi.encodeWithSelector(f.selector), 118 | abi.encode(returned1) 119 | ); 120 | } 121 | 122 | function larpp(function () external payable returns(uint256) f, uint256 returned1) internal { 123 | vm.mockCall( 124 | f.address, 125 | abi.encodeWithSelector(f.selector), 126 | abi.encode(returned1) 127 | ); 128 | } 129 | 130 | function larpv(function () external view returns(uint256) f, uint256 returned1) internal { 131 | vm.mockCall( 132 | f.address, 133 | abi.encodeWithSelector(f.selector), 134 | abi.encode(returned1) 135 | ); 136 | } 137 | 138 | // ,uint8 139 | function larp(function () external returns(uint8) f, uint8 returned1) internal { 140 | vm.mockCall( 141 | f.address, 142 | abi.encodeWithSelector(f.selector), 143 | abi.encode(returned1) 144 | ); 145 | } 146 | 147 | function larpp(function () external payable returns(uint8) f, uint8 returned1) internal { 148 | vm.mockCall( 149 | f.address, 150 | abi.encodeWithSelector(f.selector), 151 | abi.encode(returned1) 152 | ); 153 | } 154 | 155 | function larpv(function () external view returns(uint8) f, uint8 returned1) internal { 156 | vm.mockCall( 157 | f.address, 158 | abi.encodeWithSelector(f.selector), 159 | abi.encode(returned1) 160 | ); 161 | } 162 | 163 | // address,bool 164 | function larp(function (address) external returns(bool) f, address addr1, bool returned1) internal { 165 | vm.mockCall( 166 | f.address, 167 | abi.encodeWithSelector(f.selector, addr1), 168 | abi.encode(returned1) 169 | ); 170 | } 171 | 172 | function larpp(function (address) external payable returns(bool) f, address addr1, bool returned1) internal { 173 | vm.mockCall( 174 | f.address, 175 | abi.encodeWithSelector(f.selector, addr1), 176 | abi.encode(returned1) 177 | ); 178 | } 179 | 180 | function larpv(function (address) external view returns(bool) f, address addr1, bool returned1) internal { 181 | vm.mockCall( 182 | f.address, 183 | abi.encodeWithSelector(f.selector, addr1), 184 | abi.encode(returned1) 185 | ); 186 | } 187 | 188 | // address,uint256 189 | function larp(function (address) external returns(uint256) f, address addr1, uint256 returned1) internal { 190 | vm.mockCall( 191 | f.address, 192 | abi.encodeWithSelector(f.selector, addr1), 193 | abi.encode(returned1) 194 | ); 195 | } 196 | 197 | function larpp(function (address) external payable returns(uint256) f, address addr1, uint256 returned1) internal { 198 | vm.mockCall( 199 | f.address, 200 | abi.encodeWithSelector(f.selector, addr1), 201 | abi.encode(returned1) 202 | ); 203 | } 204 | 205 | function larpv(function (address) external view returns(uint256) f, address addr1, uint256 returned1) internal { 206 | vm.mockCall( 207 | f.address, 208 | abi.encodeWithSelector(f.selector, addr1), 209 | abi.encode(returned1) 210 | ); 211 | } 212 | 213 | // address,address,uint256 214 | function larp(function (address,address) external returns(uint256) f, address addr1, address addr2, uint256 returned1) internal { 215 | vm.mockCall( 216 | f.address, 217 | abi.encodeWithSelector(f.selector, addr1, addr2), 218 | abi.encode(returned1) 219 | ); 220 | } 221 | 222 | function larpp(function (address,address) external payable returns(uint256) f, address addr1, address addr2, uint256 returned1) internal { 223 | vm.mockCall( 224 | f.address, 225 | abi.encodeWithSelector(f.selector, addr1, addr2), 226 | abi.encode(returned1) 227 | ); 228 | } 229 | 230 | function larpv(function (address,address) external view returns(uint256) f, address addr1, address addr2, uint256 returned1) internal { 231 | vm.mockCall( 232 | f.address, 233 | abi.encodeWithSelector(f.selector, addr1, addr2), 234 | abi.encode(returned1) 235 | ); 236 | } 237 | 238 | // address,uint256,bool 239 | function larp(function (address,uint256) external returns(bool) f, address addr1, uint256 num1, bool returned1) internal { 240 | vm.mockCall( 241 | f.address, 242 | abi.encodeWithSelector(f.selector, addr1, num1), 243 | abi.encode(returned1) 244 | ); 245 | } 246 | 247 | function larpp(function (address,uint256) external payable returns(bool) f, address addr1, uint256 num1, bool returned1) internal { 248 | vm.mockCall( 249 | f.address, 250 | abi.encodeWithSelector(f.selector, addr1, num1), 251 | abi.encode(returned1) 252 | ); 253 | } 254 | 255 | function larpv(function (address,uint256) external view returns(bool) f, address addr1, uint256 num1, bool returned1) internal { 256 | vm.mockCall( 257 | f.address, 258 | abi.encodeWithSelector(f.selector, addr1, num1), 259 | abi.encode(returned1) 260 | ); 261 | } 262 | 263 | // bytes3,address,bool 264 | function larp(function (bytes3,address) external returns(bool) f, bytes3 byt31, address num1, bool returned1) internal { 265 | vm.mockCall( 266 | f.address, 267 | abi.encodeWithSelector(f.selector, byt31, num1), 268 | abi.encode(returned1) 269 | ); 270 | } 271 | 272 | function larpp(function (bytes3,address) external payable returns(bool) f, bytes3 byt31, address num1, bool returned1) internal { 273 | vm.mockCall( 274 | f.address, 275 | abi.encodeWithSelector(f.selector, byt31, num1), 276 | abi.encode(returned1) 277 | ); 278 | } 279 | 280 | function larpv(function (bytes3,address) external view returns(bool) f, bytes3 byt31, address num1, bool returned1) internal { 281 | vm.mockCall( 282 | f.address, 283 | abi.encodeWithSelector(f.selector, byt31, num1), 284 | abi.encode(returned1) 285 | ); 286 | } 287 | 288 | // address,address,uint256,bool 289 | function larp(function (address,address,uint256) external returns(bool) f, address addr1, address addr2, uint256 num1, bool returned1) internal { 290 | vm.mockCall( 291 | f.address, 292 | abi.encodeWithSelector(f.selector, addr1, addr2, num1), 293 | abi.encode(returned1) 294 | ); 295 | } 296 | 297 | function larpp(function (address,address,uint256) external payable returns(bool) f, address addr1, address addr2, uint256 num1, bool returned1) internal { 298 | vm.mockCall( 299 | f.address, 300 | abi.encodeWithSelector(f.selector, addr1, addr2, num1), 301 | abi.encode(returned1) 302 | ); 303 | } 304 | 305 | function larpv(function (address,address,uint256) external view returns(bool) f, address addr1, address addr2, uint256 num1, bool returned1) internal { 306 | vm.mockCall( 307 | f.address, 308 | abi.encodeWithSelector(f.selector, addr1, addr2, num1), 309 | abi.encode(returned1) 310 | ); 311 | } 312 | 313 | // address,uint256,uint256,bool 314 | function larp(function (address,uint256,uint256) external returns(bool) f, address addr1, uint256 num1, uint256 num2, bool returned1) internal { 315 | vm.mockCall( 316 | f.address, 317 | abi.encodeWithSelector(f.selector, addr1, num1, num2), 318 | abi.encode(returned1) 319 | ); 320 | } 321 | 322 | function larpp(function (address,uint256,uint256) external payable returns(bool) f, address addr1, uint256 num1, uint256 num2, bool returned1) internal { 323 | vm.mockCall( 324 | f.address, 325 | abi.encodeWithSelector(f.selector, addr1, num1, num2), 326 | abi.encode(returned1) 327 | ); 328 | } 329 | 330 | function larpv(function (address,uint256,uint256) external view returns(bool) f, address addr1, uint256 num1, uint256 num2, bool returned1) internal { 331 | vm.mockCall( 332 | f.address, 333 | abi.encodeWithSelector(f.selector, addr1, num1, num2), 334 | abi.encode(returned1) 335 | ); 336 | } 337 | } -------------------------------------------------------------------------------- /src/sorting.sol: -------------------------------------------------------------------------------- 1 | pragma solidity ^0.8.10; 2 | 3 | /** 4 | * @title Quicksort library in Solidity 5 | * @author Subhod I (https://gist.github.com/subhodi/b3b86cc13ad2636420963e692a4d896f), 6 | * fried adapted to 0.8.10 and added memory variant + sortPartner 7 | */ 8 | library sorting { 9 | function sort( 10 | uint256[] memory arr, 11 | int256 left, 12 | int256 right 13 | ) internal returns (uint256[] memory) { 14 | int256 i = left; 15 | int256 j = right; 16 | 17 | if (i == j) return arr; 18 | 19 | uint256 pivot = arr[uint256(left + (right - left) / 2)]; 20 | 21 | while (i <= j) { 22 | while (arr[uint256(i)] < pivot) i++; 23 | while (pivot < arr[uint256(j)]) j--; 24 | if (i <= j) { 25 | (arr[uint256(i)], arr[uint256(j)]) = ( 26 | arr[uint256(j)], 27 | arr[uint256(i)] 28 | ); 29 | i++; 30 | j--; 31 | } 32 | } 33 | 34 | if (left < j) sort(arr, left, j); 35 | if (i < right) sort(arr, i, right); 36 | 37 | return arr; 38 | } 39 | 40 | function sortPartner( 41 | uint256[] memory arr, 42 | uint256[] memory partner, 43 | int256 left, 44 | int256 right 45 | ) internal returns (uint256[] memory, uint256[] memory) { 46 | int256 i = left; 47 | int256 j = right; 48 | 49 | if (i == j) return (arr, partner); 50 | 51 | uint256 pivot = arr[uint256(left + (right - left) / 2)]; 52 | 53 | while (i <= j) { 54 | while (arr[uint256(i)] < pivot) i++; 55 | while (pivot < arr[uint256(j)]) j--; 56 | if (i <= j) { 57 | (arr[uint256(i)], arr[uint256(j)]) = ( 58 | arr[uint256(j)], 59 | arr[uint256(i)] 60 | ); 61 | (partner[uint256(i)], partner[uint256(j)]) = ( 62 | partner[uint256(j)], 63 | partner[uint256(i)] 64 | ); 65 | i++; 66 | j--; 67 | } 68 | } 69 | 70 | if (left < j) sort(arr, left, j); 71 | if (i < right) sort(arr, i, right); 72 | 73 | return (arr, partner); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/test/larping.t.sol: -------------------------------------------------------------------------------- 1 | pragma solidity >=0.8.0; 2 | 3 | /// DEPS 4 | import "forge-std/Test.sol"; 5 | import "solmate/tokens/ERC20.sol"; 6 | 7 | /// LOCAL 8 | import "src/larping.sol"; 9 | import "src/coins.sol"; 10 | import "src/UserFactory.sol"; 11 | 12 | contract PERC20 is ERC20 { 13 | constructor( 14 | string memory _name, 15 | string memory _symbol, 16 | uint8 _decimals 17 | ) ERC20(_name, _symbol, _decimals) {} 18 | 19 | function pays(address rec, uint256 amount) 20 | external 21 | payable 22 | returns (bool) 23 | {} 24 | } 25 | 26 | contract larpingTest is Test { 27 | using larping for *; 28 | PERC20 ohm; 29 | UserFactory usr; 30 | 31 | function setUp() public { 32 | ohm = PERC20(coins.ohm); 33 | usr = new UserFactory(); 34 | } 35 | 36 | function testSimpleLarping() public { 37 | address rec = usr.next(); 38 | address sen = usr.next(); 39 | 40 | ohm.transfer.larp(rec, 1e21, true); 41 | ohm.transferFrom.larp(sen, rec, 1e21, true); 42 | ohm.balanceOf.larpv(rec, 1e21); 43 | ohm.name.larpv("dai"); 44 | ohm.symbol.larpv("DAI"); 45 | ohm.totalSupply.larpv(1e3); 46 | ohm.allowance.larpv(rec, sen, 1e21); 47 | ohm.decimals.larpv(20); 48 | ohm.approve.larp(sen, 1e21, true); 49 | ohm.pays.larpp(rec, 1e21, true); 50 | 51 | assertTrue(ohm.transfer(rec, 1e21)); 52 | assertTrue(ohm.transferFrom(sen, rec, 1e21)); 53 | assertEq(ohm.balanceOf(rec), 1e21); 54 | assertEq(ohm.name(), "dai"); 55 | assertEq(ohm.symbol(), "DAI"); 56 | assertEq(ohm.totalSupply(), 1e3); 57 | assertEq(ohm.allowance(rec, sen), 1e21); 58 | assertEq(ohm.decimals(), 20); 59 | assertTrue(ohm.approve(sen, 1e21)); 60 | assertTrue(ohm.pays(rec, 1e21)); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0": 6 | version "7.16.7" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" 8 | integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== 9 | dependencies: 10 | "@babel/highlight" "^7.16.7" 11 | 12 | "@babel/helper-validator-identifier@^7.16.7": 13 | version "7.16.7" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" 15 | integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== 16 | 17 | "@babel/highlight@^7.16.7": 18 | version "7.17.12" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" 20 | integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.16.7" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": 27 | version "0.14.1" 28 | resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.1.tgz#179afb29f4e295a77cc141151f26b3848abc3c46" 29 | integrity sha512-eLjj2L6AuQjBB6s/ibwCAc0DwrR5Ge+ys+wgWo+bviU7fV2nTMQhU63CGaDKXg9iTmMxwhkyoggdIR7ZGRfMgw== 30 | dependencies: 31 | antlr4ts "^0.5.0-alpha.4" 32 | 33 | acorn-jsx@^5.0.0: 34 | version "5.3.2" 35 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 36 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 37 | 38 | acorn@^6.0.7: 39 | version "6.4.2" 40 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" 41 | integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== 42 | 43 | ajv@^6.10.2, ajv@^6.6.1, ajv@^6.9.1: 44 | version "6.12.6" 45 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 46 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 47 | dependencies: 48 | fast-deep-equal "^3.1.1" 49 | fast-json-stable-stringify "^2.0.0" 50 | json-schema-traverse "^0.4.1" 51 | uri-js "^4.2.2" 52 | 53 | ansi-escapes@^3.2.0: 54 | version "3.2.0" 55 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" 56 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== 57 | 58 | ansi-regex@^3.0.0: 59 | version "3.0.1" 60 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" 61 | integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== 62 | 63 | ansi-regex@^4.1.0: 64 | version "4.1.1" 65 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" 66 | integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== 67 | 68 | ansi-regex@^5.0.1: 69 | version "5.0.1" 70 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 71 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 72 | 73 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 74 | version "3.2.1" 75 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 76 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 77 | dependencies: 78 | color-convert "^1.9.0" 79 | 80 | antlr4@4.7.1: 81 | version "4.7.1" 82 | resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" 83 | integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== 84 | 85 | antlr4ts@^0.5.0-alpha.4: 86 | version "0.5.0-alpha.4" 87 | resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" 88 | integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== 89 | 90 | argparse@^1.0.7: 91 | version "1.0.10" 92 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 93 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 94 | dependencies: 95 | sprintf-js "~1.0.2" 96 | 97 | ast-parents@0.0.1: 98 | version "0.0.1" 99 | resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" 100 | integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== 101 | 102 | astral-regex@^1.0.0: 103 | version "1.0.0" 104 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 105 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 106 | 107 | balanced-match@^1.0.0: 108 | version "1.0.2" 109 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 110 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 111 | 112 | brace-expansion@^1.1.7: 113 | version "1.1.11" 114 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 115 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 116 | dependencies: 117 | balanced-match "^1.0.0" 118 | concat-map "0.0.1" 119 | 120 | caller-callsite@^2.0.0: 121 | version "2.0.0" 122 | resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" 123 | integrity sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ== 124 | dependencies: 125 | callsites "^2.0.0" 126 | 127 | caller-path@^2.0.0: 128 | version "2.0.0" 129 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" 130 | integrity sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A== 131 | dependencies: 132 | caller-callsite "^2.0.0" 133 | 134 | callsites@^2.0.0: 135 | version "2.0.0" 136 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" 137 | integrity sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ== 138 | 139 | callsites@^3.0.0: 140 | version "3.1.0" 141 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 142 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 143 | 144 | chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.2: 145 | version "2.4.2" 146 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 147 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 148 | dependencies: 149 | ansi-styles "^3.2.1" 150 | escape-string-regexp "^1.0.5" 151 | supports-color "^5.3.0" 152 | 153 | chardet@^0.7.0: 154 | version "0.7.0" 155 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 156 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 157 | 158 | cli-cursor@^2.1.0: 159 | version "2.1.0" 160 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 161 | integrity sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw== 162 | dependencies: 163 | restore-cursor "^2.0.0" 164 | 165 | cli-width@^2.0.0: 166 | version "2.2.1" 167 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" 168 | integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== 169 | 170 | color-convert@^1.9.0: 171 | version "1.9.3" 172 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 173 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 174 | dependencies: 175 | color-name "1.1.3" 176 | 177 | color-name@1.1.3: 178 | version "1.1.3" 179 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 180 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 181 | 182 | commander@2.18.0: 183 | version "2.18.0" 184 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" 185 | integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ== 186 | 187 | concat-map@0.0.1: 188 | version "0.0.1" 189 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 190 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 191 | 192 | cosmiconfig@^5.0.7: 193 | version "5.2.1" 194 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" 195 | integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== 196 | dependencies: 197 | import-fresh "^2.0.0" 198 | is-directory "^0.3.1" 199 | js-yaml "^3.13.1" 200 | parse-json "^4.0.0" 201 | 202 | cross-spawn@^6.0.5: 203 | version "6.0.5" 204 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 205 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 206 | dependencies: 207 | nice-try "^1.0.4" 208 | path-key "^2.0.1" 209 | semver "^5.5.0" 210 | shebang-command "^1.2.0" 211 | which "^1.2.9" 212 | 213 | debug@^4.0.1: 214 | version "4.3.4" 215 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 216 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 217 | dependencies: 218 | ms "2.1.2" 219 | 220 | deep-is@~0.1.3: 221 | version "0.1.4" 222 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 223 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 224 | 225 | doctrine@^3.0.0: 226 | version "3.0.0" 227 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 228 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 229 | dependencies: 230 | esutils "^2.0.2" 231 | 232 | emoji-regex@^10.0.0: 233 | version "10.1.0" 234 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.1.0.tgz#d50e383743c0f7a5945c47087295afc112e3cf66" 235 | integrity sha512-xAEnNCT3w2Tg6MA7ly6QqYJvEoY1tm9iIjJ3yMKK9JPlWuRHAMoe5iETwQnx3M9TVbFMfsrBgWKR+IsmswwNjg== 236 | 237 | emoji-regex@^7.0.1: 238 | version "7.0.3" 239 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 240 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 241 | 242 | emoji-regex@^8.0.0: 243 | version "8.0.0" 244 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 245 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 246 | 247 | error-ex@^1.3.1: 248 | version "1.3.2" 249 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 250 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 251 | dependencies: 252 | is-arrayish "^0.2.1" 253 | 254 | escape-string-regexp@^1.0.5: 255 | version "1.0.5" 256 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 257 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 258 | 259 | escape-string-regexp@^4.0.0: 260 | version "4.0.0" 261 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 262 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 263 | 264 | eslint-scope@^4.0.3: 265 | version "4.0.3" 266 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" 267 | integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== 268 | dependencies: 269 | esrecurse "^4.1.0" 270 | estraverse "^4.1.1" 271 | 272 | eslint-utils@^1.3.1: 273 | version "1.4.3" 274 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" 275 | integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== 276 | dependencies: 277 | eslint-visitor-keys "^1.1.0" 278 | 279 | eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: 280 | version "1.3.0" 281 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" 282 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== 283 | 284 | eslint@^5.6.0: 285 | version "5.16.0" 286 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" 287 | integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== 288 | dependencies: 289 | "@babel/code-frame" "^7.0.0" 290 | ajv "^6.9.1" 291 | chalk "^2.1.0" 292 | cross-spawn "^6.0.5" 293 | debug "^4.0.1" 294 | doctrine "^3.0.0" 295 | eslint-scope "^4.0.3" 296 | eslint-utils "^1.3.1" 297 | eslint-visitor-keys "^1.0.0" 298 | espree "^5.0.1" 299 | esquery "^1.0.1" 300 | esutils "^2.0.2" 301 | file-entry-cache "^5.0.1" 302 | functional-red-black-tree "^1.0.1" 303 | glob "^7.1.2" 304 | globals "^11.7.0" 305 | ignore "^4.0.6" 306 | import-fresh "^3.0.0" 307 | imurmurhash "^0.1.4" 308 | inquirer "^6.2.2" 309 | js-yaml "^3.13.0" 310 | json-stable-stringify-without-jsonify "^1.0.1" 311 | levn "^0.3.0" 312 | lodash "^4.17.11" 313 | minimatch "^3.0.4" 314 | mkdirp "^0.5.1" 315 | natural-compare "^1.4.0" 316 | optionator "^0.8.2" 317 | path-is-inside "^1.0.2" 318 | progress "^2.0.0" 319 | regexpp "^2.0.1" 320 | semver "^5.5.1" 321 | strip-ansi "^4.0.0" 322 | strip-json-comments "^2.0.1" 323 | table "^5.2.3" 324 | text-table "^0.2.0" 325 | 326 | espree@^5.0.1: 327 | version "5.0.1" 328 | resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" 329 | integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== 330 | dependencies: 331 | acorn "^6.0.7" 332 | acorn-jsx "^5.0.0" 333 | eslint-visitor-keys "^1.0.0" 334 | 335 | esprima@^4.0.0: 336 | version "4.0.1" 337 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 338 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 339 | 340 | esquery@^1.0.1: 341 | version "1.4.0" 342 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" 343 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== 344 | dependencies: 345 | estraverse "^5.1.0" 346 | 347 | esrecurse@^4.1.0: 348 | version "4.3.0" 349 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 350 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 351 | dependencies: 352 | estraverse "^5.2.0" 353 | 354 | estraverse@^4.1.1: 355 | version "4.3.0" 356 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 357 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 358 | 359 | estraverse@^5.1.0, estraverse@^5.2.0: 360 | version "5.3.0" 361 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 362 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 363 | 364 | esutils@^2.0.2: 365 | version "2.0.3" 366 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 367 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 368 | 369 | external-editor@^3.0.3: 370 | version "3.1.0" 371 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" 372 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== 373 | dependencies: 374 | chardet "^0.7.0" 375 | iconv-lite "^0.4.24" 376 | tmp "^0.0.33" 377 | 378 | fast-deep-equal@^3.1.1: 379 | version "3.1.3" 380 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 381 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 382 | 383 | fast-diff@^1.1.2: 384 | version "1.2.0" 385 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" 386 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 387 | 388 | fast-json-stable-stringify@^2.0.0: 389 | version "2.1.0" 390 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 391 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 392 | 393 | fast-levenshtein@~2.0.6: 394 | version "2.0.6" 395 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 396 | integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== 397 | 398 | figures@^2.0.0: 399 | version "2.0.0" 400 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" 401 | integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== 402 | dependencies: 403 | escape-string-regexp "^1.0.5" 404 | 405 | file-entry-cache@^5.0.1: 406 | version "5.0.1" 407 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 408 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 409 | dependencies: 410 | flat-cache "^2.0.1" 411 | 412 | flat-cache@^2.0.1: 413 | version "2.0.1" 414 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 415 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 416 | dependencies: 417 | flatted "^2.0.0" 418 | rimraf "2.6.3" 419 | write "1.0.3" 420 | 421 | flatted@^2.0.0: 422 | version "2.0.2" 423 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" 424 | integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== 425 | 426 | fs.realpath@^1.0.0: 427 | version "1.0.0" 428 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 429 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 430 | 431 | functional-red-black-tree@^1.0.1: 432 | version "1.0.1" 433 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 434 | integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== 435 | 436 | glob@^7.1.2, glob@^7.1.3: 437 | version "7.2.3" 438 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 439 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 440 | dependencies: 441 | fs.realpath "^1.0.0" 442 | inflight "^1.0.4" 443 | inherits "2" 444 | minimatch "^3.1.1" 445 | once "^1.3.0" 446 | path-is-absolute "^1.0.0" 447 | 448 | globals@^11.7.0: 449 | version "11.12.0" 450 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 451 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 452 | 453 | has-flag@^3.0.0: 454 | version "3.0.0" 455 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 456 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 457 | 458 | iconv-lite@^0.4.24: 459 | version "0.4.24" 460 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 461 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 462 | dependencies: 463 | safer-buffer ">= 2.1.2 < 3" 464 | 465 | ignore@^4.0.6: 466 | version "4.0.6" 467 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 468 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 469 | 470 | import-fresh@^2.0.0: 471 | version "2.0.0" 472 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" 473 | integrity sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg== 474 | dependencies: 475 | caller-path "^2.0.0" 476 | resolve-from "^3.0.0" 477 | 478 | import-fresh@^3.0.0: 479 | version "3.3.0" 480 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 481 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 482 | dependencies: 483 | parent-module "^1.0.0" 484 | resolve-from "^4.0.0" 485 | 486 | imurmurhash@^0.1.4: 487 | version "0.1.4" 488 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 489 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 490 | 491 | inflight@^1.0.4: 492 | version "1.0.6" 493 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 494 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 495 | dependencies: 496 | once "^1.3.0" 497 | wrappy "1" 498 | 499 | inherits@2: 500 | version "2.0.4" 501 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 502 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 503 | 504 | inquirer@^6.2.2: 505 | version "6.5.2" 506 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" 507 | integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== 508 | dependencies: 509 | ansi-escapes "^3.2.0" 510 | chalk "^2.4.2" 511 | cli-cursor "^2.1.0" 512 | cli-width "^2.0.0" 513 | external-editor "^3.0.3" 514 | figures "^2.0.0" 515 | lodash "^4.17.12" 516 | mute-stream "0.0.7" 517 | run-async "^2.2.0" 518 | rxjs "^6.4.0" 519 | string-width "^2.1.0" 520 | strip-ansi "^5.1.0" 521 | through "^2.3.6" 522 | 523 | is-arrayish@^0.2.1: 524 | version "0.2.1" 525 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 526 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 527 | 528 | is-directory@^0.3.1: 529 | version "0.3.1" 530 | resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" 531 | integrity sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw== 532 | 533 | is-fullwidth-code-point@^2.0.0: 534 | version "2.0.0" 535 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 536 | integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== 537 | 538 | is-fullwidth-code-point@^3.0.0: 539 | version "3.0.0" 540 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 541 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 542 | 543 | isexe@^2.0.0: 544 | version "2.0.0" 545 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 546 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 547 | 548 | js-tokens@^4.0.0: 549 | version "4.0.0" 550 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 551 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 552 | 553 | js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: 554 | version "3.14.1" 555 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 556 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 557 | dependencies: 558 | argparse "^1.0.7" 559 | esprima "^4.0.0" 560 | 561 | json-parse-better-errors@^1.0.1: 562 | version "1.0.2" 563 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 564 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 565 | 566 | json-schema-traverse@^0.4.1: 567 | version "0.4.1" 568 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 569 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 570 | 571 | json-stable-stringify-without-jsonify@^1.0.1: 572 | version "1.0.1" 573 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 574 | integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== 575 | 576 | levn@^0.3.0, levn@~0.3.0: 577 | version "0.3.0" 578 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 579 | integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== 580 | dependencies: 581 | prelude-ls "~1.1.2" 582 | type-check "~0.3.2" 583 | 584 | lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14: 585 | version "4.17.21" 586 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 587 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 588 | 589 | lru-cache@^6.0.0: 590 | version "6.0.0" 591 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 592 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 593 | dependencies: 594 | yallist "^4.0.0" 595 | 596 | mimic-fn@^1.0.0: 597 | version "1.2.0" 598 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 599 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 600 | 601 | minimatch@^3.0.4, minimatch@^3.1.1: 602 | version "3.1.2" 603 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 604 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 605 | dependencies: 606 | brace-expansion "^1.1.7" 607 | 608 | minimist@^1.2.6: 609 | version "1.2.6" 610 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 611 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 612 | 613 | mkdirp@^0.5.1: 614 | version "0.5.6" 615 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" 616 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== 617 | dependencies: 618 | minimist "^1.2.6" 619 | 620 | ms@2.1.2: 621 | version "2.1.2" 622 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 623 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 624 | 625 | mute-stream@0.0.7: 626 | version "0.0.7" 627 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" 628 | integrity sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ== 629 | 630 | natural-compare@^1.4.0: 631 | version "1.4.0" 632 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 633 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 634 | 635 | nice-try@^1.0.4: 636 | version "1.0.5" 637 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 638 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 639 | 640 | once@^1.3.0: 641 | version "1.4.0" 642 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 643 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 644 | dependencies: 645 | wrappy "1" 646 | 647 | onetime@^2.0.0: 648 | version "2.0.1" 649 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 650 | integrity sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ== 651 | dependencies: 652 | mimic-fn "^1.0.0" 653 | 654 | optionator@^0.8.2: 655 | version "0.8.3" 656 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 657 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 658 | dependencies: 659 | deep-is "~0.1.3" 660 | fast-levenshtein "~2.0.6" 661 | levn "~0.3.0" 662 | prelude-ls "~1.1.2" 663 | type-check "~0.3.2" 664 | word-wrap "~1.2.3" 665 | 666 | os-tmpdir@~1.0.2: 667 | version "1.0.2" 668 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 669 | integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== 670 | 671 | parent-module@^1.0.0: 672 | version "1.0.1" 673 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 674 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 675 | dependencies: 676 | callsites "^3.0.0" 677 | 678 | parse-json@^4.0.0: 679 | version "4.0.0" 680 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 681 | integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== 682 | dependencies: 683 | error-ex "^1.3.1" 684 | json-parse-better-errors "^1.0.1" 685 | 686 | path-is-absolute@^1.0.0: 687 | version "1.0.1" 688 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 689 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 690 | 691 | path-is-inside@^1.0.2: 692 | version "1.0.2" 693 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 694 | integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== 695 | 696 | path-key@^2.0.1: 697 | version "2.0.1" 698 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 699 | integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== 700 | 701 | prelude-ls@~1.1.2: 702 | version "1.1.2" 703 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 704 | integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== 705 | 706 | prettier-plugin-solidity@^1.0.0-beta.19: 707 | version "1.0.0-beta.19" 708 | resolved "https://registry.yarnpkg.com/prettier-plugin-solidity/-/prettier-plugin-solidity-1.0.0-beta.19.tgz#7c3607fc4028f5e6a425259ff03e45eedf733df3" 709 | integrity sha512-xxRQ5ZiiZyUoMFLE9h7HnUDXI/daf1tnmL1msEdcKmyh7ZGQ4YklkYLC71bfBpYU2WruTb5/SFLUaEb3RApg5g== 710 | dependencies: 711 | "@solidity-parser/parser" "^0.14.0" 712 | emoji-regex "^10.0.0" 713 | escape-string-regexp "^4.0.0" 714 | semver "^7.3.5" 715 | solidity-comments-extractor "^0.0.7" 716 | string-width "^4.2.3" 717 | 718 | prettier@^1.14.3: 719 | version "1.19.1" 720 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" 721 | integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== 722 | 723 | prettier@^2.5.1: 724 | version "2.6.2" 725 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.2.tgz#e26d71a18a74c3d0f0597f55f01fb6c06c206032" 726 | integrity sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew== 727 | 728 | progress@^2.0.0: 729 | version "2.0.3" 730 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 731 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 732 | 733 | punycode@^2.1.0: 734 | version "2.1.1" 735 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 736 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 737 | 738 | regexpp@^2.0.1: 739 | version "2.0.1" 740 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 741 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 742 | 743 | resolve-from@^3.0.0: 744 | version "3.0.0" 745 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" 746 | integrity sha1-six699nWiBvItuZTM17rywoYh0g= 747 | 748 | resolve-from@^4.0.0: 749 | version "4.0.0" 750 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 751 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 752 | 753 | restore-cursor@^2.0.0: 754 | version "2.0.0" 755 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 756 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= 757 | dependencies: 758 | onetime "^2.0.0" 759 | signal-exit "^3.0.2" 760 | 761 | rimraf@2.6.3: 762 | version "2.6.3" 763 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 764 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 765 | dependencies: 766 | glob "^7.1.3" 767 | 768 | run-async@^2.2.0: 769 | version "2.4.1" 770 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" 771 | integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== 772 | 773 | rxjs@^6.4.0: 774 | version "6.6.7" 775 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" 776 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== 777 | dependencies: 778 | tslib "^1.9.0" 779 | 780 | "safer-buffer@>= 2.1.2 < 3": 781 | version "2.1.2" 782 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 783 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 784 | 785 | semver@^5.5.0, semver@^5.5.1: 786 | version "5.7.1" 787 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 788 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 789 | 790 | semver@^6.3.0: 791 | version "6.3.0" 792 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 793 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 794 | 795 | semver@^7.3.5: 796 | version "7.3.7" 797 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" 798 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 799 | dependencies: 800 | lru-cache "^6.0.0" 801 | 802 | shebang-command@^1.2.0: 803 | version "1.2.0" 804 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 805 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 806 | dependencies: 807 | shebang-regex "^1.0.0" 808 | 809 | shebang-regex@^1.0.0: 810 | version "1.0.0" 811 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 812 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 813 | 814 | signal-exit@^3.0.2: 815 | version "3.0.7" 816 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 817 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 818 | 819 | slice-ansi@^2.1.0: 820 | version "2.1.0" 821 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 822 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 823 | dependencies: 824 | ansi-styles "^3.2.0" 825 | astral-regex "^1.0.0" 826 | is-fullwidth-code-point "^2.0.0" 827 | 828 | solhint@^3.3.6: 829 | version "3.3.7" 830 | resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.7.tgz#b5da4fedf7a0fee954cb613b6c55a5a2b0063aa7" 831 | integrity sha512-NjjjVmXI3ehKkb3aNtRJWw55SUVJ8HMKKodwe0HnejA+k0d2kmhw7jvpa+MCTbcEgt8IWSwx0Hu6aCo/iYOZzQ== 832 | dependencies: 833 | "@solidity-parser/parser" "^0.14.1" 834 | ajv "^6.6.1" 835 | antlr4 "4.7.1" 836 | ast-parents "0.0.1" 837 | chalk "^2.4.2" 838 | commander "2.18.0" 839 | cosmiconfig "^5.0.7" 840 | eslint "^5.6.0" 841 | fast-diff "^1.1.2" 842 | glob "^7.1.3" 843 | ignore "^4.0.6" 844 | js-yaml "^3.12.0" 845 | lodash "^4.17.11" 846 | semver "^6.3.0" 847 | optionalDependencies: 848 | prettier "^1.14.3" 849 | 850 | solidity-comments-extractor@^0.0.7: 851 | version "0.0.7" 852 | resolved "https://registry.yarnpkg.com/solidity-comments-extractor/-/solidity-comments-extractor-0.0.7.tgz#99d8f1361438f84019795d928b931f4e5c39ca19" 853 | integrity sha512-wciNMLg/Irp8OKGrh3S2tfvZiZ0NEyILfcRCXCD4mp7SgK/i9gzLfhY2hY7VMCQJ3kH9UB9BzNdibIVMchzyYw== 854 | 855 | sprintf-js@~1.0.2: 856 | version "1.0.3" 857 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 858 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 859 | 860 | string-width@^2.1.0: 861 | version "2.1.1" 862 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 863 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 864 | dependencies: 865 | is-fullwidth-code-point "^2.0.0" 866 | strip-ansi "^4.0.0" 867 | 868 | string-width@^3.0.0: 869 | version "3.1.0" 870 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 871 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 872 | dependencies: 873 | emoji-regex "^7.0.1" 874 | is-fullwidth-code-point "^2.0.0" 875 | strip-ansi "^5.1.0" 876 | 877 | string-width@^4.2.3: 878 | version "4.2.3" 879 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 880 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 881 | dependencies: 882 | emoji-regex "^8.0.0" 883 | is-fullwidth-code-point "^3.0.0" 884 | strip-ansi "^6.0.1" 885 | 886 | strip-ansi@^4.0.0: 887 | version "4.0.0" 888 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 889 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 890 | dependencies: 891 | ansi-regex "^3.0.0" 892 | 893 | strip-ansi@^5.1.0: 894 | version "5.2.0" 895 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 896 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 897 | dependencies: 898 | ansi-regex "^4.1.0" 899 | 900 | strip-ansi@^6.0.1: 901 | version "6.0.1" 902 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 903 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 904 | dependencies: 905 | ansi-regex "^5.0.1" 906 | 907 | strip-json-comments@^2.0.1: 908 | version "2.0.1" 909 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 910 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 911 | 912 | supports-color@^5.3.0: 913 | version "5.5.0" 914 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 915 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 916 | dependencies: 917 | has-flag "^3.0.0" 918 | 919 | table@^5.2.3: 920 | version "5.4.6" 921 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" 922 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== 923 | dependencies: 924 | ajv "^6.10.2" 925 | lodash "^4.17.14" 926 | slice-ansi "^2.1.0" 927 | string-width "^3.0.0" 928 | 929 | text-table@^0.2.0: 930 | version "0.2.0" 931 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 932 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 933 | 934 | through@^2.3.6: 935 | version "2.3.8" 936 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 937 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 938 | 939 | tmp@^0.0.33: 940 | version "0.0.33" 941 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 942 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 943 | dependencies: 944 | os-tmpdir "~1.0.2" 945 | 946 | tslib@^1.9.0: 947 | version "1.14.1" 948 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 949 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 950 | 951 | type-check@~0.3.2: 952 | version "0.3.2" 953 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 954 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 955 | dependencies: 956 | prelude-ls "~1.1.2" 957 | 958 | uri-js@^4.2.2: 959 | version "4.4.1" 960 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 961 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 962 | dependencies: 963 | punycode "^2.1.0" 964 | 965 | which@^1.2.9: 966 | version "1.3.1" 967 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 968 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 969 | dependencies: 970 | isexe "^2.0.0" 971 | 972 | word-wrap@~1.2.3: 973 | version "1.2.3" 974 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 975 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 976 | 977 | wrappy@1: 978 | version "1.0.2" 979 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 980 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 981 | 982 | write@1.0.3: 983 | version "1.0.3" 984 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 985 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 986 | dependencies: 987 | mkdirp "^0.5.1" 988 | 989 | yallist@^4.0.0: 990 | version "4.0.0" 991 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 992 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 993 | --------------------------------------------------------------------------------