├── .github └── workflows │ └── ci.yaml ├── .gitmodules ├── LICENSE ├── README.md ├── assets ├── protec.jpg ├── protec.png ├── protect.jpg └── protected.png ├── cache └── solidity-files-cache.json ├── foundry.toml ├── out ├── Contract.t.sol │ └── ContractTest.json ├── Protec.sol │ └── Protec.json ├── Protected.s.sol │ └── ProtectedScript.json ├── Script.sol │ └── Script.json ├── Surl.sol │ └── Surl.json ├── Vm.sol │ └── Vm.json ├── console.sol │ └── console.json ├── console2.sol │ └── console2.json ├── strings.sol │ └── strings.json └── test.sol │ ├── DSTest.json │ ├── Test.json │ ├── stdError.json │ ├── stdMath.json │ └── stdStorage.json ├── remappings.txt ├── script └── Protected.s.sol ├── src └── Protec.sol └── test └── Contract.t.sol /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: ci 2 | 3 | on: [push] 4 | 5 | env: 6 | FOUNDRY_PROFILE: ci 7 | 8 | jobs: 9 | test: 10 | strategy: 11 | fail-fast: true 12 | name: Run Unix Tests 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v3 16 | with: 17 | submodules: recursive 18 | 19 | - name: Install Foundry 20 | uses: foundry-rs/foundry-toolchain@v1 21 | with: 22 | version: nightly 23 | 24 | - name: Run Forge build 25 | run: | 26 | forge --version 27 | forge build --sizes 28 | id: build 29 | 30 | - name: Run Forge tests 31 | run: | 32 | forge test -vvv 33 | id: test 34 | 35 | script: 36 | strategy: 37 | fail-fast: true 38 | name: Run Unix Scripts 39 | runs-on: ubuntu-latest 40 | steps: 41 | - uses: actions/checkout@v3 42 | with: 43 | submodules: recursive 44 | 45 | - name: Install Foundry 46 | uses: foundry-rs/foundry-toolchain@v1 47 | with: 48 | version: nightly 49 | 50 | - name: Run Forge build 51 | run: | 52 | forge --version 53 | forge build --sizes 54 | id: build 55 | 56 | - name: Run scripts 57 | run: | 58 | ls -lsa 59 | ls script/ 60 | for file in script/*; do 61 | forge script $file 62 | done -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/surl"] 2 | path = lib/surl 3 | url = https://github.com/memester-xyz/surl 4 | [submodule "lib/forge-std"] 5 | path = lib/forge-std 6 | url = https://github.com/foundry-rs/forge-std 7 | [submodule "lib/solenv"] 8 | path = lib/solenv 9 | url = https://github.com/memester-xyz/solenv 10 | [submodule "lib/solidity-stringutils"] 11 | path = lib/solidity-stringutils 12 | url = https://github.com/Arachnid/solidity-stringutils 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # protec • [![ci](https://github.com/abigger87/protec/actions/workflows/ci.yaml/badge.svg?label=ci)](https://github.com/abigger87/protec/actions/workflows/ci.yaml) [![license](https://img.shields.io/badge/License-Apache_2.0-blue.svg?label=license)](https://opensource.org/licenses/Apache-2.0) [![size](https://img.shields.io/github/languages/code-size/abigger87/protec.svg?color=orange&label=size)](https://img.shields.io/github/languages/code-size/abigger87/protec?label=size) 4 | 5 | Safely Execute Foreign Function Interface Commands. 6 | 7 | 8 | > **Warning** 9 | > 10 | > This repo contains **highly** experimental code. Expect rapid iteration. 11 | > 12 | > The current implementation does not currently work since environment variables are not refreshed. 13 | 14 | 15 | ## What? 16 | 17 | **protec** is a wrapper to prevent library abuse of the [foundry](https://github.com/foundry-rs/foundry)'s [fii](https://book.getfoundry.sh/cheatcodes/ffi.html) command. It attempts to completely block any call by setting the `FOUNDRY_FFI` environment variable to `false`. 18 | 19 | 20 | ## Installation 21 | 22 | ``` 23 | forge install abigger87/protec 24 | ``` 25 | 26 | ## Usage 27 | 28 | 29 | 1. Add this import to your script or test: 30 | ```solidity 31 | import {Protec} from "protec/Protec.sol"; 32 | ``` 33 | 34 | 2. Inherit the Protec contract (eg in a test): 35 | ```solidity 36 | contract MyContract is Test, Protec { 37 | // ... 38 | } 39 | ``` 40 | 41 | 3. That's it! Any call to `vm.ffi` that libraries perform will revert. 42 | 43 | 44 | ## Acknowledgements 45 | 46 | - [Unix](https://github.com/abigger87/unix) 47 | - [Shannon](https://github.com/abigger87/shannon) _SOON™_ 48 | - [Surl](https://github.com/memester-xyz/surl) 49 | - [Solenv](https://github.com/memester-xyz/solenv) 50 | -------------------------------------------------------------------------------- /assets/protec.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/refcell/protec/e475d8b3d045ef3e24de388c5258e615d96f2b56/assets/protec.jpg -------------------------------------------------------------------------------- /assets/protec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/refcell/protec/e475d8b3d045ef3e24de388c5258e615d96f2b56/assets/protec.png -------------------------------------------------------------------------------- /assets/protect.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/refcell/protec/e475d8b3d045ef3e24de388c5258e615d96f2b56/assets/protect.jpg -------------------------------------------------------------------------------- /assets/protected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/refcell/protec/e475d8b3d045ef3e24de388c5258e615d96f2b56/assets/protected.png -------------------------------------------------------------------------------- /cache/solidity-files-cache.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "ethers-rs-sol-cache-3", 3 | "paths": { 4 | "artifacts": "out", 5 | "build_infos": "out/build-info", 6 | "sources": "src", 7 | "tests": "test", 8 | "scripts": "script", 9 | "libraries": [ 10 | "lib" 11 | ] 12 | }, 13 | "files": { 14 | "lib/forge-std/lib/ds-test/src/test.sol": { 15 | "lastModificationDate": 1657394211194, 16 | "contentHash": "962996f0e05d5218857a538a62d7c47e", 17 | "sourceName": "lib/forge-std/lib/ds-test/src/test.sol", 18 | "solcConfig": { 19 | "settings": { 20 | "optimizer": { 21 | "enabled": true, 22 | "runs": 200 23 | }, 24 | "metadata": { 25 | "bytecodeHash": "ipfs" 26 | }, 27 | "outputSelection": { 28 | "*": { 29 | "": [ 30 | "ast" 31 | ], 32 | "*": [ 33 | "abi", 34 | "evm.bytecode", 35 | "evm.deployedBytecode", 36 | "evm.methodIdentifiers" 37 | ] 38 | } 39 | }, 40 | "evmVersion": "london", 41 | "libraries": {} 42 | } 43 | }, 44 | "imports": [], 45 | "versionRequirement": ">=0.5.0", 46 | "artifacts": { 47 | "DSTest": { 48 | "0.8.15+commit.e14f2714.Darwin.appleclang": "test.sol/DSTest.json" 49 | } 50 | } 51 | }, 52 | "lib/forge-std/src/Script.sol": { 53 | "lastModificationDate": 1657394209909, 54 | "contentHash": "a24c6682dfdd459618422202d7b97fec", 55 | "sourceName": "lib/forge-std/src/Script.sol", 56 | "solcConfig": { 57 | "settings": { 58 | "optimizer": { 59 | "enabled": true, 60 | "runs": 200 61 | }, 62 | "metadata": { 63 | "bytecodeHash": "ipfs" 64 | }, 65 | "outputSelection": { 66 | "*": { 67 | "": [ 68 | "ast" 69 | ], 70 | "*": [ 71 | "abi", 72 | "evm.bytecode", 73 | "evm.deployedBytecode", 74 | "evm.methodIdentifiers" 75 | ] 76 | } 77 | }, 78 | "evmVersion": "london", 79 | "libraries": {} 80 | } 81 | }, 82 | "imports": [ 83 | "lib/forge-std/src/Vm.sol", 84 | "lib/forge-std/src/console.sol", 85 | "lib/forge-std/src/console2.sol" 86 | ], 87 | "versionRequirement": ">=0.6.0, <0.9.0", 88 | "artifacts": { 89 | "Script": { 90 | "0.8.15+commit.e14f2714.Darwin.appleclang": "Script.sol/Script.json" 91 | } 92 | } 93 | }, 94 | "lib/forge-std/src/Test.sol": { 95 | "lastModificationDate": 1657394209909, 96 | "contentHash": "adda574ef53cb30afda008ea43fbb506", 97 | "sourceName": "lib/forge-std/src/Test.sol", 98 | "solcConfig": { 99 | "settings": { 100 | "optimizer": { 101 | "enabled": true, 102 | "runs": 200 103 | }, 104 | "metadata": { 105 | "bytecodeHash": "ipfs" 106 | }, 107 | "outputSelection": { 108 | "*": { 109 | "": [ 110 | "ast" 111 | ], 112 | "*": [ 113 | "abi", 114 | "evm.bytecode", 115 | "evm.deployedBytecode", 116 | "evm.methodIdentifiers" 117 | ] 118 | } 119 | }, 120 | "evmVersion": "london", 121 | "libraries": {} 122 | } 123 | }, 124 | "imports": [ 125 | "lib/forge-std/lib/ds-test/src/test.sol", 126 | "lib/forge-std/src/Script.sol", 127 | "lib/forge-std/src/Vm.sol", 128 | "lib/forge-std/src/console.sol", 129 | "lib/forge-std/src/console2.sol" 130 | ], 131 | "versionRequirement": ">=0.6.0, <0.9.0", 132 | "artifacts": { 133 | "Test": { 134 | "0.8.15+commit.e14f2714.Darwin.appleclang": "Test.sol/Test.json" 135 | }, 136 | "stdError": { 137 | "0.8.15+commit.e14f2714.Darwin.appleclang": "Test.sol/stdError.json" 138 | }, 139 | "stdMath": { 140 | "0.8.15+commit.e14f2714.Darwin.appleclang": "Test.sol/stdMath.json" 141 | }, 142 | "stdStorage": { 143 | "0.8.15+commit.e14f2714.Darwin.appleclang": "Test.sol/stdStorage.json" 144 | } 145 | } 146 | }, 147 | "lib/forge-std/src/Vm.sol": { 148 | "lastModificationDate": 1657394209910, 149 | "contentHash": "518663349da38fd074c8f60cb1e29325", 150 | "sourceName": "lib/forge-std/src/Vm.sol", 151 | "solcConfig": { 152 | "settings": { 153 | "optimizer": { 154 | "enabled": true, 155 | "runs": 200 156 | }, 157 | "metadata": { 158 | "bytecodeHash": "ipfs" 159 | }, 160 | "outputSelection": { 161 | "*": { 162 | "": [ 163 | "ast" 164 | ], 165 | "*": [ 166 | "abi", 167 | "evm.bytecode", 168 | "evm.deployedBytecode", 169 | "evm.methodIdentifiers" 170 | ] 171 | } 172 | }, 173 | "evmVersion": "london", 174 | "libraries": {} 175 | } 176 | }, 177 | "imports": [], 178 | "versionRequirement": ">=0.6.0", 179 | "artifacts": { 180 | "Vm": { 181 | "0.8.15+commit.e14f2714.Darwin.appleclang": "Vm.sol/Vm.json" 182 | } 183 | } 184 | }, 185 | "lib/forge-std/src/console.sol": { 186 | "lastModificationDate": 1657394209910, 187 | "contentHash": "100b8a33b917da1147740d7ab8b0ded3", 188 | "sourceName": "lib/forge-std/src/console.sol", 189 | "solcConfig": { 190 | "settings": { 191 | "optimizer": { 192 | "enabled": true, 193 | "runs": 200 194 | }, 195 | "metadata": { 196 | "bytecodeHash": "ipfs" 197 | }, 198 | "outputSelection": { 199 | "*": { 200 | "": [ 201 | "ast" 202 | ], 203 | "*": [ 204 | "abi", 205 | "evm.bytecode", 206 | "evm.deployedBytecode", 207 | "evm.methodIdentifiers" 208 | ] 209 | } 210 | }, 211 | "evmVersion": "london", 212 | "libraries": {} 213 | } 214 | }, 215 | "imports": [], 216 | "versionRequirement": ">=0.4.22, <0.9.0", 217 | "artifacts": { 218 | "console": { 219 | "0.8.15+commit.e14f2714.Darwin.appleclang": "console.sol/console.json" 220 | } 221 | } 222 | }, 223 | "lib/forge-std/src/console2.sol": { 224 | "lastModificationDate": 1657394209910, 225 | "contentHash": "5df91f8e93efbfcccf68973dc1b74a70", 226 | "sourceName": "lib/forge-std/src/console2.sol", 227 | "solcConfig": { 228 | "settings": { 229 | "optimizer": { 230 | "enabled": true, 231 | "runs": 200 232 | }, 233 | "metadata": { 234 | "bytecodeHash": "ipfs" 235 | }, 236 | "outputSelection": { 237 | "*": { 238 | "": [ 239 | "ast" 240 | ], 241 | "*": [ 242 | "abi", 243 | "evm.bytecode", 244 | "evm.deployedBytecode", 245 | "evm.methodIdentifiers" 246 | ] 247 | } 248 | }, 249 | "evmVersion": "london", 250 | "libraries": {} 251 | } 252 | }, 253 | "imports": [], 254 | "versionRequirement": ">=0.4.22, <0.9.0", 255 | "artifacts": { 256 | "console2": { 257 | "0.8.15+commit.e14f2714.Darwin.appleclang": "console2.sol/console2.json" 258 | } 259 | } 260 | }, 261 | "lib/solidity-stringutils/src/strings.sol": { 262 | "lastModificationDate": 1657397066432, 263 | "contentHash": "a35219f3ed241165477dabdfe496165a", 264 | "sourceName": "lib/solidity-stringutils/src/strings.sol", 265 | "solcConfig": { 266 | "settings": { 267 | "optimizer": { 268 | "enabled": true, 269 | "runs": 200 270 | }, 271 | "metadata": { 272 | "bytecodeHash": "ipfs" 273 | }, 274 | "outputSelection": { 275 | "*": { 276 | "": [ 277 | "ast" 278 | ], 279 | "*": [ 280 | "abi", 281 | "evm.bytecode", 282 | "evm.deployedBytecode", 283 | "evm.methodIdentifiers" 284 | ] 285 | } 286 | }, 287 | "evmVersion": "london", 288 | "libraries": {} 289 | } 290 | }, 291 | "imports": [], 292 | "versionRequirement": "^0.8.0", 293 | "artifacts": { 294 | "strings": { 295 | "0.8.15+commit.e14f2714.Darwin.appleclang": "strings.sol/strings.json" 296 | } 297 | } 298 | }, 299 | "lib/surl/src/Surl.sol": { 300 | "lastModificationDate": 1657394784752, 301 | "contentHash": "744d9919c40ea980a848225bde4dcc9d", 302 | "sourceName": "lib/surl/src/Surl.sol", 303 | "solcConfig": { 304 | "settings": { 305 | "optimizer": { 306 | "enabled": true, 307 | "runs": 200 308 | }, 309 | "metadata": { 310 | "bytecodeHash": "ipfs" 311 | }, 312 | "outputSelection": { 313 | "*": { 314 | "": [ 315 | "ast" 316 | ], 317 | "*": [ 318 | "abi", 319 | "evm.bytecode", 320 | "evm.deployedBytecode", 321 | "evm.methodIdentifiers" 322 | ] 323 | } 324 | }, 325 | "evmVersion": "london", 326 | "libraries": {} 327 | } 328 | }, 329 | "imports": [ 330 | "lib/forge-std/src/Vm.sol" 331 | ], 332 | "versionRequirement": "^0.8.13", 333 | "artifacts": { 334 | "Surl": { 335 | "0.8.15+commit.e14f2714.Darwin.appleclang": "Surl.sol/Surl.json" 336 | } 337 | } 338 | }, 339 | "script/Protected.s.sol": { 340 | "lastModificationDate": 1657396535034, 341 | "contentHash": "9bbcae30f2f6d30637a7d7f2ebdb4c16", 342 | "sourceName": "script/Protected.s.sol", 343 | "solcConfig": { 344 | "settings": { 345 | "optimizer": { 346 | "enabled": true, 347 | "runs": 200 348 | }, 349 | "metadata": { 350 | "bytecodeHash": "ipfs" 351 | }, 352 | "outputSelection": { 353 | "*": { 354 | "": [ 355 | "ast" 356 | ], 357 | "*": [ 358 | "abi", 359 | "evm.bytecode", 360 | "evm.deployedBytecode", 361 | "evm.methodIdentifiers" 362 | ] 363 | } 364 | }, 365 | "evmVersion": "london", 366 | "libraries": {} 367 | } 368 | }, 369 | "imports": [ 370 | "lib/forge-std/src/Script.sol", 371 | "lib/forge-std/src/Vm.sol", 372 | "lib/forge-std/src/console.sol", 373 | "lib/forge-std/src/console2.sol", 374 | "lib/solidity-stringutils/src/strings.sol", 375 | "lib/surl/src/Surl.sol", 376 | "src/Protec.sol" 377 | ], 378 | "versionRequirement": "^0.8.13", 379 | "artifacts": { 380 | "ProtectedScript": { 381 | "0.8.15+commit.e14f2714.Darwin.appleclang": "Protected.s.sol/ProtectedScript.json" 382 | } 383 | } 384 | }, 385 | "src/Protec.sol": { 386 | "lastModificationDate": 1657397359467, 387 | "contentHash": "487e0545e57e895f3af9142a0f286211", 388 | "sourceName": "src/Protec.sol", 389 | "solcConfig": { 390 | "settings": { 391 | "optimizer": { 392 | "enabled": true, 393 | "runs": 200 394 | }, 395 | "metadata": { 396 | "bytecodeHash": "ipfs" 397 | }, 398 | "outputSelection": { 399 | "*": { 400 | "": [ 401 | "ast" 402 | ], 403 | "*": [ 404 | "abi", 405 | "evm.bytecode", 406 | "evm.deployedBytecode", 407 | "evm.methodIdentifiers" 408 | ] 409 | } 410 | }, 411 | "evmVersion": "london", 412 | "libraries": {} 413 | } 414 | }, 415 | "imports": [ 416 | "lib/forge-std/src/Vm.sol", 417 | "lib/forge-std/src/console2.sol", 418 | "lib/solidity-stringutils/src/strings.sol" 419 | ], 420 | "versionRequirement": "^0.8.13", 421 | "artifacts": { 422 | "Protec": { 423 | "0.8.15+commit.e14f2714.Darwin.appleclang": "Protec.sol/Protec.json" 424 | } 425 | } 426 | }, 427 | "test/Contract.t.sol": { 428 | "lastModificationDate": 1657394064937, 429 | "contentHash": "848ba83feec29a2e4d286c118102ae20", 430 | "sourceName": "test/Contract.t.sol", 431 | "solcConfig": { 432 | "settings": { 433 | "optimizer": { 434 | "enabled": true, 435 | "runs": 200 436 | }, 437 | "metadata": { 438 | "bytecodeHash": "ipfs" 439 | }, 440 | "outputSelection": { 441 | "*": { 442 | "": [ 443 | "ast" 444 | ], 445 | "*": [ 446 | "abi", 447 | "evm.bytecode", 448 | "evm.deployedBytecode", 449 | "evm.methodIdentifiers" 450 | ] 451 | } 452 | }, 453 | "evmVersion": "london", 454 | "libraries": {} 455 | } 456 | }, 457 | "imports": [ 458 | "lib/forge-std/lib/ds-test/src/test.sol", 459 | "lib/forge-std/src/Script.sol", 460 | "lib/forge-std/src/Test.sol", 461 | "lib/forge-std/src/Vm.sol", 462 | "lib/forge-std/src/console.sol", 463 | "lib/forge-std/src/console2.sol" 464 | ], 465 | "versionRequirement": "^0.8.13", 466 | "artifacts": { 467 | "ContractTest": { 468 | "0.8.15+commit.e14f2714.Darwin.appleclang": "Contract.t.sol/ContractTest.json" 469 | } 470 | } 471 | } 472 | } 473 | } -------------------------------------------------------------------------------- /foundry.toml: -------------------------------------------------------------------------------- 1 | [default] 2 | src = 'src' 3 | out = 'out' 4 | libs = ['lib'] 5 | ffi = true -------------------------------------------------------------------------------- /out/Contract.t.sol/ContractTest.json: -------------------------------------------------------------------------------- 1 | { 2 | "abi": [ 3 | { 4 | "anonymous": false, 5 | "inputs": [ 6 | { 7 | "indexed": false, 8 | "internalType": "string", 9 | "name": "", 10 | "type": "string" 11 | } 12 | ], 13 | "name": "log", 14 | "type": "event" 15 | }, 16 | { 17 | "anonymous": false, 18 | "inputs": [ 19 | { 20 | "indexed": false, 21 | "internalType": "address", 22 | "name": "", 23 | "type": "address" 24 | } 25 | ], 26 | "name": "log_address", 27 | "type": "event" 28 | }, 29 | { 30 | "anonymous": false, 31 | "inputs": [ 32 | { 33 | "indexed": false, 34 | "internalType": "uint256[]", 35 | "name": "val", 36 | "type": "uint256[]" 37 | } 38 | ], 39 | "name": "log_array", 40 | "type": "event" 41 | }, 42 | { 43 | "anonymous": false, 44 | "inputs": [ 45 | { 46 | "indexed": false, 47 | "internalType": "int256[]", 48 | "name": "val", 49 | "type": "int256[]" 50 | } 51 | ], 52 | "name": "log_array", 53 | "type": "event" 54 | }, 55 | { 56 | "anonymous": false, 57 | "inputs": [ 58 | { 59 | "indexed": false, 60 | "internalType": "address[]", 61 | "name": "val", 62 | "type": "address[]" 63 | } 64 | ], 65 | "name": "log_array", 66 | "type": "event" 67 | }, 68 | { 69 | "anonymous": false, 70 | "inputs": [ 71 | { 72 | "indexed": false, 73 | "internalType": "bytes", 74 | "name": "", 75 | "type": "bytes" 76 | } 77 | ], 78 | "name": "log_bytes", 79 | "type": "event" 80 | }, 81 | { 82 | "anonymous": false, 83 | "inputs": [ 84 | { 85 | "indexed": false, 86 | "internalType": "bytes32", 87 | "name": "", 88 | "type": "bytes32" 89 | } 90 | ], 91 | "name": "log_bytes32", 92 | "type": "event" 93 | }, 94 | { 95 | "anonymous": false, 96 | "inputs": [ 97 | { 98 | "indexed": false, 99 | "internalType": "int256", 100 | "name": "", 101 | "type": "int256" 102 | } 103 | ], 104 | "name": "log_int", 105 | "type": "event" 106 | }, 107 | { 108 | "anonymous": false, 109 | "inputs": [ 110 | { 111 | "indexed": false, 112 | "internalType": "string", 113 | "name": "key", 114 | "type": "string" 115 | }, 116 | { 117 | "indexed": false, 118 | "internalType": "address", 119 | "name": "val", 120 | "type": "address" 121 | } 122 | ], 123 | "name": "log_named_address", 124 | "type": "event" 125 | }, 126 | { 127 | "anonymous": false, 128 | "inputs": [ 129 | { 130 | "indexed": false, 131 | "internalType": "string", 132 | "name": "key", 133 | "type": "string" 134 | }, 135 | { 136 | "indexed": false, 137 | "internalType": "uint256[]", 138 | "name": "val", 139 | "type": "uint256[]" 140 | } 141 | ], 142 | "name": "log_named_array", 143 | "type": "event" 144 | }, 145 | { 146 | "anonymous": false, 147 | "inputs": [ 148 | { 149 | "indexed": false, 150 | "internalType": "string", 151 | "name": "key", 152 | "type": "string" 153 | }, 154 | { 155 | "indexed": false, 156 | "internalType": "int256[]", 157 | "name": "val", 158 | "type": "int256[]" 159 | } 160 | ], 161 | "name": "log_named_array", 162 | "type": "event" 163 | }, 164 | { 165 | "anonymous": false, 166 | "inputs": [ 167 | { 168 | "indexed": false, 169 | "internalType": "string", 170 | "name": "key", 171 | "type": "string" 172 | }, 173 | { 174 | "indexed": false, 175 | "internalType": "address[]", 176 | "name": "val", 177 | "type": "address[]" 178 | } 179 | ], 180 | "name": "log_named_array", 181 | "type": "event" 182 | }, 183 | { 184 | "anonymous": false, 185 | "inputs": [ 186 | { 187 | "indexed": false, 188 | "internalType": "string", 189 | "name": "key", 190 | "type": "string" 191 | }, 192 | { 193 | "indexed": false, 194 | "internalType": "bytes", 195 | "name": "val", 196 | "type": "bytes" 197 | } 198 | ], 199 | "name": "log_named_bytes", 200 | "type": "event" 201 | }, 202 | { 203 | "anonymous": false, 204 | "inputs": [ 205 | { 206 | "indexed": false, 207 | "internalType": "string", 208 | "name": "key", 209 | "type": "string" 210 | }, 211 | { 212 | "indexed": false, 213 | "internalType": "bytes32", 214 | "name": "val", 215 | "type": "bytes32" 216 | } 217 | ], 218 | "name": "log_named_bytes32", 219 | "type": "event" 220 | }, 221 | { 222 | "anonymous": false, 223 | "inputs": [ 224 | { 225 | "indexed": false, 226 | "internalType": "string", 227 | "name": "key", 228 | "type": "string" 229 | }, 230 | { 231 | "indexed": false, 232 | "internalType": "int256", 233 | "name": "val", 234 | "type": "int256" 235 | }, 236 | { 237 | "indexed": false, 238 | "internalType": "uint256", 239 | "name": "decimals", 240 | "type": "uint256" 241 | } 242 | ], 243 | "name": "log_named_decimal_int", 244 | "type": "event" 245 | }, 246 | { 247 | "anonymous": false, 248 | "inputs": [ 249 | { 250 | "indexed": false, 251 | "internalType": "string", 252 | "name": "key", 253 | "type": "string" 254 | }, 255 | { 256 | "indexed": false, 257 | "internalType": "uint256", 258 | "name": "val", 259 | "type": "uint256" 260 | }, 261 | { 262 | "indexed": false, 263 | "internalType": "uint256", 264 | "name": "decimals", 265 | "type": "uint256" 266 | } 267 | ], 268 | "name": "log_named_decimal_uint", 269 | "type": "event" 270 | }, 271 | { 272 | "anonymous": false, 273 | "inputs": [ 274 | { 275 | "indexed": false, 276 | "internalType": "string", 277 | "name": "key", 278 | "type": "string" 279 | }, 280 | { 281 | "indexed": false, 282 | "internalType": "int256", 283 | "name": "val", 284 | "type": "int256" 285 | } 286 | ], 287 | "name": "log_named_int", 288 | "type": "event" 289 | }, 290 | { 291 | "anonymous": false, 292 | "inputs": [ 293 | { 294 | "indexed": false, 295 | "internalType": "string", 296 | "name": "key", 297 | "type": "string" 298 | }, 299 | { 300 | "indexed": false, 301 | "internalType": "string", 302 | "name": "val", 303 | "type": "string" 304 | } 305 | ], 306 | "name": "log_named_string", 307 | "type": "event" 308 | }, 309 | { 310 | "anonymous": false, 311 | "inputs": [ 312 | { 313 | "indexed": false, 314 | "internalType": "string", 315 | "name": "key", 316 | "type": "string" 317 | }, 318 | { 319 | "indexed": false, 320 | "internalType": "uint256", 321 | "name": "val", 322 | "type": "uint256" 323 | } 324 | ], 325 | "name": "log_named_uint", 326 | "type": "event" 327 | }, 328 | { 329 | "anonymous": false, 330 | "inputs": [ 331 | { 332 | "indexed": false, 333 | "internalType": "string", 334 | "name": "", 335 | "type": "string" 336 | } 337 | ], 338 | "name": "log_string", 339 | "type": "event" 340 | }, 341 | { 342 | "anonymous": false, 343 | "inputs": [ 344 | { 345 | "indexed": false, 346 | "internalType": "uint256", 347 | "name": "", 348 | "type": "uint256" 349 | } 350 | ], 351 | "name": "log_uint", 352 | "type": "event" 353 | }, 354 | { 355 | "anonymous": false, 356 | "inputs": [ 357 | { 358 | "indexed": false, 359 | "internalType": "bytes", 360 | "name": "", 361 | "type": "bytes" 362 | } 363 | ], 364 | "name": "logs", 365 | "type": "event" 366 | }, 367 | { 368 | "inputs": [], 369 | "name": "IS_SCRIPT", 370 | "outputs": [ 371 | { 372 | "internalType": "bool", 373 | "name": "", 374 | "type": "bool" 375 | } 376 | ], 377 | "stateMutability": "view", 378 | "type": "function" 379 | }, 380 | { 381 | "inputs": [], 382 | "name": "IS_TEST", 383 | "outputs": [ 384 | { 385 | "internalType": "bool", 386 | "name": "", 387 | "type": "bool" 388 | } 389 | ], 390 | "stateMutability": "view", 391 | "type": "function" 392 | }, 393 | { 394 | "inputs": [ 395 | { 396 | "internalType": "address", 397 | "name": "token", 398 | "type": "address" 399 | }, 400 | { 401 | "internalType": "address", 402 | "name": "to", 403 | "type": "address" 404 | }, 405 | { 406 | "internalType": "uint256", 407 | "name": "give", 408 | "type": "uint256" 409 | } 410 | ], 411 | "name": "deal", 412 | "outputs": [], 413 | "stateMutability": "nonpayable", 414 | "type": "function" 415 | }, 416 | { 417 | "inputs": [ 418 | { 419 | "internalType": "address", 420 | "name": "token", 421 | "type": "address" 422 | }, 423 | { 424 | "internalType": "address", 425 | "name": "to", 426 | "type": "address" 427 | }, 428 | { 429 | "internalType": "uint256", 430 | "name": "give", 431 | "type": "uint256" 432 | }, 433 | { 434 | "internalType": "bool", 435 | "name": "adjust", 436 | "type": "bool" 437 | } 438 | ], 439 | "name": "deal", 440 | "outputs": [], 441 | "stateMutability": "nonpayable", 442 | "type": "function" 443 | }, 444 | { 445 | "inputs": [ 446 | { 447 | "internalType": "address", 448 | "name": "to", 449 | "type": "address" 450 | }, 451 | { 452 | "internalType": "uint256", 453 | "name": "give", 454 | "type": "uint256" 455 | } 456 | ], 457 | "name": "deal", 458 | "outputs": [], 459 | "stateMutability": "nonpayable", 460 | "type": "function" 461 | }, 462 | { 463 | "inputs": [ 464 | { 465 | "internalType": "string", 466 | "name": "what", 467 | "type": "string" 468 | }, 469 | { 470 | "internalType": "bytes", 471 | "name": "args", 472 | "type": "bytes" 473 | } 474 | ], 475 | "name": "deployCode", 476 | "outputs": [ 477 | { 478 | "internalType": "address", 479 | "name": "addr", 480 | "type": "address" 481 | } 482 | ], 483 | "stateMutability": "nonpayable", 484 | "type": "function" 485 | }, 486 | { 487 | "inputs": [ 488 | { 489 | "internalType": "string", 490 | "name": "what", 491 | "type": "string" 492 | } 493 | ], 494 | "name": "deployCode", 495 | "outputs": [ 496 | { 497 | "internalType": "address", 498 | "name": "addr", 499 | "type": "address" 500 | } 501 | ], 502 | "stateMutability": "nonpayable", 503 | "type": "function" 504 | }, 505 | { 506 | "inputs": [], 507 | "name": "failed", 508 | "outputs": [ 509 | { 510 | "internalType": "bool", 511 | "name": "", 512 | "type": "bool" 513 | } 514 | ], 515 | "stateMutability": "nonpayable", 516 | "type": "function" 517 | }, 518 | { 519 | "inputs": [ 520 | { 521 | "internalType": "address", 522 | "name": "who", 523 | "type": "address" 524 | } 525 | ], 526 | "name": "hoax", 527 | "outputs": [], 528 | "stateMutability": "nonpayable", 529 | "type": "function" 530 | }, 531 | { 532 | "inputs": [ 533 | { 534 | "internalType": "address", 535 | "name": "who", 536 | "type": "address" 537 | }, 538 | { 539 | "internalType": "address", 540 | "name": "origin", 541 | "type": "address" 542 | } 543 | ], 544 | "name": "hoax", 545 | "outputs": [], 546 | "stateMutability": "nonpayable", 547 | "type": "function" 548 | }, 549 | { 550 | "inputs": [ 551 | { 552 | "internalType": "address", 553 | "name": "who", 554 | "type": "address" 555 | }, 556 | { 557 | "internalType": "address", 558 | "name": "origin", 559 | "type": "address" 560 | }, 561 | { 562 | "internalType": "uint256", 563 | "name": "give", 564 | "type": "uint256" 565 | } 566 | ], 567 | "name": "hoax", 568 | "outputs": [], 569 | "stateMutability": "nonpayable", 570 | "type": "function" 571 | }, 572 | { 573 | "inputs": [ 574 | { 575 | "internalType": "address", 576 | "name": "who", 577 | "type": "address" 578 | }, 579 | { 580 | "internalType": "uint256", 581 | "name": "give", 582 | "type": "uint256" 583 | } 584 | ], 585 | "name": "hoax", 586 | "outputs": [], 587 | "stateMutability": "nonpayable", 588 | "type": "function" 589 | }, 590 | { 591 | "inputs": [ 592 | { 593 | "internalType": "uint256", 594 | "name": "time", 595 | "type": "uint256" 596 | } 597 | ], 598 | "name": "rewind", 599 | "outputs": [], 600 | "stateMutability": "nonpayable", 601 | "type": "function" 602 | }, 603 | { 604 | "inputs": [], 605 | "name": "setUp", 606 | "outputs": [], 607 | "stateMutability": "nonpayable", 608 | "type": "function" 609 | }, 610 | { 611 | "inputs": [ 612 | { 613 | "internalType": "uint256", 614 | "name": "time", 615 | "type": "uint256" 616 | } 617 | ], 618 | "name": "skip", 619 | "outputs": [], 620 | "stateMutability": "nonpayable", 621 | "type": "function" 622 | }, 623 | { 624 | "inputs": [ 625 | { 626 | "internalType": "address", 627 | "name": "who", 628 | "type": "address" 629 | }, 630 | { 631 | "internalType": "uint256", 632 | "name": "give", 633 | "type": "uint256" 634 | } 635 | ], 636 | "name": "startHoax", 637 | "outputs": [], 638 | "stateMutability": "nonpayable", 639 | "type": "function" 640 | }, 641 | { 642 | "inputs": [ 643 | { 644 | "internalType": "address", 645 | "name": "who", 646 | "type": "address" 647 | }, 648 | { 649 | "internalType": "address", 650 | "name": "origin", 651 | "type": "address" 652 | }, 653 | { 654 | "internalType": "uint256", 655 | "name": "give", 656 | "type": "uint256" 657 | } 658 | ], 659 | "name": "startHoax", 660 | "outputs": [], 661 | "stateMutability": "nonpayable", 662 | "type": "function" 663 | }, 664 | { 665 | "inputs": [ 666 | { 667 | "internalType": "address", 668 | "name": "who", 669 | "type": "address" 670 | } 671 | ], 672 | "name": "startHoax", 673 | "outputs": [], 674 | "stateMutability": "nonpayable", 675 | "type": "function" 676 | }, 677 | { 678 | "inputs": [ 679 | { 680 | "internalType": "address", 681 | "name": "who", 682 | "type": "address" 683 | }, 684 | { 685 | "internalType": "address", 686 | "name": "origin", 687 | "type": "address" 688 | } 689 | ], 690 | "name": "startHoax", 691 | "outputs": [], 692 | "stateMutability": "nonpayable", 693 | "type": "function" 694 | }, 695 | { 696 | "inputs": [], 697 | "name": "testExample", 698 | "outputs": [], 699 | "stateMutability": "nonpayable", 700 | "type": "function" 701 | }, 702 | { 703 | "inputs": [ 704 | { 705 | "internalType": "address", 706 | "name": "token", 707 | "type": "address" 708 | }, 709 | { 710 | "internalType": "address", 711 | "name": "to", 712 | "type": "address" 713 | }, 714 | { 715 | "internalType": "uint256", 716 | "name": "give", 717 | "type": "uint256" 718 | } 719 | ], 720 | "name": "tip", 721 | "outputs": [], 722 | "stateMutability": "nonpayable", 723 | "type": "function" 724 | }, 725 | { 726 | "inputs": [], 727 | "name": "vm", 728 | "outputs": [ 729 | { 730 | "internalType": "contract Vm", 731 | "name": "", 732 | "type": "address" 733 | } 734 | ], 735 | "stateMutability": "view", 736 | "type": "function" 737 | } 738 | ], 739 | "bytecode": { 740 | "object": "0x60806040526000805462ff00ff19166201000117905534801561002157600080fd5b506129c5806100316000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806397754ae9116100b8578063c88a5e6d1161007c578063c88a5e6d1461027f578063d06d822914610292578063d82555f1146102a5578063e9a79a7b146102b8578063f8ccbf47146102cb578063fa7626d4146102de57600080fd5b806397754ae91461021b5780639a8325a01461022e578063af9bbe5f14610241578063b9c071b414610254578063ba414fa61461026757600080fd5b80632d6c17a31161010a5780632d6c17a3146101b25780633a768463146101c55780633bf82db1146101da5780633f5a4a2a146101ed5780636bce989b146101f55780636f5970751461020857600080fd5b80630a9254e414610147578063108554f214610149578063233240ee1461015c57806329a9e3001461016f57806329ce9dde14610182575b600080fd5b005b610147610157366004612264565b6102ed565b61014761016a36600461228e565b6103be565b61014761017d3660046122b0565b610492565b6101956101903660046123b0565b61053d565b6040516001600160a01b0390911681526020015b60405180910390f35b6101476101c0366004612428565b610664565b61019560008051602061295083398151915281565b6101476101e8366004612441565b6106a0565b61014761077a565b610147610203366004612441565b610784565b61014761021636600461228e565b610796565b61014761022936600461248b565b610839565b61019561023c3660046124da565b610a59565b61014761024f366004612441565b610b53565b610147610262366004612428565b610bfa565b61026f610c18565b60405190151581526020016101a9565b61014761028d366004612264565b610d3b565b6101476102a03660046122b0565b610d6e565b6101476102b3366004612441565b610e19565b6101476102c6366004612264565b610f0a565b60005461026f9062010000900460ff1681565b60005461026f9060ff1681565b565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906103209085908590600401612517565b600060405180830381600087803b15801561033a57600080fd5b505af115801561034e573d6000803e3d6000fd5b50506040516303223eab60e11b81526001600160a01b038516600482015260008051602061295083398151915292506306447d5691506024015b600060405180830381600087803b1580156103a257600080fd5b505af11580156103b6573d6000803e3d6000fd5b505050505050565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906103f5908490600160801b90600401612517565b600060405180830381600087803b15801561040f57600080fd5b505af1158015610423573d6000803e3d6000fd5b505060405163ca669fa760e01b81526001600160a01b0384166004820152600080516020612950833981519152925063ca669fa791506024015b600060405180830381600087803b15801561047757600080fd5b505af115801561048b573d6000803e3d6000fd5b5050505050565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906104c9908590600160801b90600401612517565b600060405180830381600087803b1580156104e357600080fd5b505af11580156104f7573d6000803e3d6000fd5b50506040516323f2866760e11b81526001600160a01b0380861660048301528416602482015260008051602061295083398151915292506347e50cce9150604401610388565b604051638d1cc92560e01b8152600090819060008051602061295083398151915290638d1cc92590610573908790600401612560565b6000604051808303816000875af1158015610592573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105ba9190810190612593565b836040516020016105cc92919061260a565b60405160208183030381529060405290508051602082016000f091506001600160a01b03821661065d5760405162461bcd60e51b815260206004820152603160248201527f54657374206465706c6f79436f646528737472696e672c6279746573293a204460448201527032b83637bcb6b2b73a103330b4b632b21760791b60648201526084015b60405180910390fd5b5092915050565b60008051602061295083398151915263e5d6bf02610682834261264f565b6040518263ffffffff1660e01b815260040161045d91815260200190565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906106d39086908590600401612517565b600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b50506040516308b6ac0f60e31b81526001600160a01b0380871660048301528516602482015260008051602061295083398151915292506345b5607891506044015b600060405180830381600087803b15801561075d57600080fd5b505af1158015610771573d6000803e3d6000fd5b50505050505050565b6102eb6001610fa9565b6107918383836000610839565b505050565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906107cd908490600160801b90600401612517565b600060405180830381600087803b1580156107e757600080fd5b505af11580156107fb573d6000803e3d6000fd5b50506040516303223eab60e11b81526001600160a01b038416600482015260008051602061295083398151915292506306447d56915060240161045d565b604080516001600160a01b0385811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b179052915160009287169161088d91612666565b6000604051808303816000865af19150503d80600081146108ca576040519150601f19603f3d011682016040523d82523d6000602084013e6108cf565b606091505b509150506000818060200190518101906108e99190612682565b90506109558461094f876109266370a0823160e01b61090960018d611020565b9060038201805463ffffffff191660e09290921c91909117905590565b90600282018054600181018255600091825260209091206001600160a01b039290921691015590565b90611045565b82156103b65760408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b17905290516000916001600160a01b0389169161099d9190612666565b6000604051808303816000865af19150503d80600081146109da576040519150601f19603f3d011682016040523d82523d6000602084013e6109df565b606091505b509150506000818060200190518101906109f99190612682565b905082861015610a1e57610a0d868461264f565b610a17908261264f565b9050610a35565b610a28838761264f565b610a32908261269b565b90505b610a4f8161094f6318160ddd60e01b61090960018d611020565b5050505050505050565b604051638d1cc92560e01b8152600090819060008051602061295083398151915290638d1cc92590610a8f908690600401612560565b6000604051808303816000875af1158015610aae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ad69190810190612593565b90508051602082016000f091506001600160a01b038216610b4d5760405162461bcd60e51b815260206004820152602b60248201527f54657374206465706c6f79436f646528737472696e67293a204465706c6f796d60448201526a32b73a103330b4b632b21760a91b6064820152608401610654565b50919050565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d90610b869086908590600401612517565b600060405180830381600087803b158015610ba057600080fd5b505af1158015610bb4573d6000803e3d6000fd5b50506040516323f2866760e11b81526001600160a01b0380871660048301528516602482015260008051602061295083398151915292506347e50cce9150604401610743565b60008051602061295083398151915263e5d6bf02610682834261269b565b60008054610100900460ff1615610c385750600054610100900460ff1690565b60006000805160206129508339815191523b15610d3657604051600090600080516020612950833981519152907f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc490610ca09083906519985a5b195960d21b90602001612517565b60408051601f1981840301815290829052610cbe92916020016126b3565b60408051601f1981840301815290829052610cd891612666565b6000604051808303816000865af19150503d8060008114610d15576040519150601f19603f3d011682016040523d82523d6000602084013e610d1a565b606091505b5091505080806020019051810190610d3291906126e4565b9150505b919050565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906103889085908590600401612517565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d90610da5908590600160801b90600401612517565b600060405180830381600087803b158015610dbf57600080fd5b505af1158015610dd3573d6000803e3d6000fd5b50506040516308b6ac0f60e31b81526001600160a01b0380861660048301528416602482015260008051602061295083398151915292506345b560789150604401610388565b7f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583604051610ee4906040808252600790820152665741524e494e4760c81b6060820152608060208201819052605e908201527f546573742074697028616464726573732c616464726573732c75696e7432353660a08201527f293a2054686520607469706020737464636865617420686173206265656e206460c08201527f6570726563617465642e2055736520606465616c6020696e73746561642e000060e08201526101000190565b60405180910390a16107918161094f846109266370a0823160e01b61090960018a611020565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d90610f3d9085908590600401612517565b600060405180830381600087803b158015610f5757600080fd5b505af1158015610f6b573d6000803e3d6000fd5b505060405163ca669fa760e01b81526001600160a01b0385166004820152600080516020612950833981519152925063ca669fa79150602401610388565b8061101d577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405161100d9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a161101d611053565b50565b6005820180546001600160a01b0319166001600160a01b039290921691909117905590565b61104f828261114c565b5050565b6000805160206129508339815191523b1561113b57604051600090600080516020612950833981519152907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc4906110bc9083906519985a5b195960d21b90600190602001612701565b60408051601f19818403018152908290526110da92916020016126b3565b60408051601f19818403018152908290526110f491612666565b6000604051808303816000865af19150503d8060008114611131576040519150601f19603f3d011682016040523d82523d6000602084013e611136565b606091505b505050505b6000805461ff001916610100179055565b600582015460038301546004840154600285018054604080516020808402820181019092528281526001600160a01b039096169560e09590951b94600093909290918301828280156111bd57602002820191906000526020600020905b8154815260200190600101908083116111a9575b505050505090506000836111d083611490565b6040516020016111e19291906126b3565b60408051601f198184030181528282526001600160a01b038816600090815260018b0160209081528382206001600160e01b03198a168352815292812091945090929091611233918691889101612722565b60408051601f198184030181529181528151602092830120835290820192909252016000205460ff1661126b5761126987611530565b505b6001600160a01b0385166000908152602088815260408083206001600160e01b03198816845282528083209051909183916112aa918791899101612722565b6040516020818303038152906040528051906020012081526020019081526020016000205460001b9050600080876001600160a01b0316846040516112ef9190612666565b600060405180830381855afa9150503d806000811461132a576040519150601f19603f3d011682016040523d82523d6000602084013e61132f565b606091505b50915061134890508161134388602061275c565b61219e565b604051630667f9d760e41b8152909250600091506000805160206129508339815191529063667f9d7090611382908b908790600401612517565b6020604051808303816000875af11580156113a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c59190612682565b90508082146113e65760405162461bcd60e51b81526004016106549061277b565b6040516370ca10bb60e01b8152600080516020612950833981519152906370ca10bb9061141b908b9087908e90600401612701565b600060405180830381600087803b15801561143557600080fd5b505af1158015611449573d6000803e3d6000fd5b50505060058b0180546001600160a01b03191690555060038a01805463ffffffff1916905561147c60028b01600061221b565b896004016000905550505050505050505050565b60606000825160206114a2919061275c565b67ffffffffffffffff8111156114ba576114ba6122e3565b6040519080825280601f01601f1916602001820160405280156114e4576020820181803683370190505b50905060005b835181101561065d57600084828151811061150757611507612816565b6020026020010151905080826020026020018401525080806115289061282c565b9150506114ea565b600581015460038201546004830154600284018054604080516020808402820181019092528281526000966001600160a01b03169560e01b9493879391929091908301828280156115a057602002820191906000526020600020905b81548152602001906001019080831161158c575b5050506001600160a01b038716600090815260018a01602090815260408083206001600160e01b03198a16845282528083209051959650949193506115ea92508591879101612722565b60408051601f198184030181529181528151602092830120835290820192909252016000205460ff1615611686576001600160a01b0384166000908152602087815260408083206001600160e01b03198716845282528083209051909291611656918591879101612722565b60405160208183030381529060405280519060200120815260200190815260200160002054945050505050919050565b60008361169283611490565b6040516020016116a39291906126b3565b604051602081830303815290604052905060008051602061297083398151915260001c6001600160a01b031663266cf1096040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561170057600080fd5b505af1158015611714573d6000803e3d6000fd5b50505050600080866001600160a01b0316836040516117339190612666565b600060405180830381855afa9150503d806000811461176e576040519150601f19603f3d011682016040523d82523d6000602084013e611773565b606091505b50915061178790508161134387602061275c565b6040516365bc948160e01b81526001600160a01b038916600482015290925060009150600080516020612950833981519152906365bc9481906024016000604051808303816000875af11580156117e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261180a91908101906128c5565b5090508051600103611ab157600060008051602061297083398151915260001c6001600160a01b031663667f9d70898460008151811061184c5761184c612816565b60200260200101516040518363ffffffff1660e01b8152600401611871929190612517565b6020604051808303816000875af1158015611890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b49190612682565b905080611912577f080fc4a96620c4462e705b23f346413fe3796bb63c6f8d8591baec0e231577a588836000815181106118f0576118f0612816565b602002602001015160001c604051611909929190612517565b60405180910390a15b8083146119315760405162461bcd60e51b81526004016106549061277b565b7f9c9555b1e3102e3cf48f427d79cb678f5d9bd1ed0ad574389461e255f95170ed88888789604051602001611967929190612722565b604051602081830303815290604052805190602001208560008151811061199057611990612816565b602002602001015160001c6040516119ab949392919061291f565b60405180910390a1816000815181106119c6576119c6612816565b6020908102919091018101516001600160a01b038a1660009081528c835260408082206001600160e01b03198c1683528452808220905192939092611a0f918a918c9101612722565b60408051601f1981840301815291815281516020928301208352828201939093529082016000908120939093556001600160a01b038b16835260018d810182528284206001600160e01b03198c16855282528284209251909391611a77918a918c9101612722565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550612029565b600181511115611fb95760005b8151811015611fb357600060008051602061297083398151915260001c6001600160a01b031663667f9d708a858581518110611afc57611afc612816565b60200260200101516040518363ffffffff1660e01b8152600401611b21929190612517565b6020604051808303816000875af1158015611b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b649190612682565b905080611bc1577f080fc4a96620c4462e705b23f346413fe3796bb63c6f8d8591baec0e231577a589848481518110611b9f57611b9f612816565b602002602001015160001c604051611bb8929190612517565b60405180910390a15b60008051602061297083398151915260001c6001600160a01b03166370ca10bb8a858581518110611bf457611bf4612816565b602002602001015161133760f01b6040518463ffffffff1660e01b8152600401611c2093929190612701565b600060405180830381600087803b158015611c3a57600080fd5b505af1158015611c4e573d6000803e3d6000fd5b50505050600060608a6001600160a01b031687604051611c6e9190612666565b600060405180830381855afa9150503d8060008114611ca9576040519150601f19603f3d011682016040523d82523d6000602084013e611cae565b606091505b509092509050611cc3816113438b602061275c565b9550818015611cd6575061133760f01b86145b15611f11577f9c9555b1e3102e3cf48f427d79cb678f5d9bd1ed0ad574389461e255f95170ed8b8b8a8c604051602001611d11929190612722565b60405160208183030381529060405280519060200120888881518110611d3957611d39612816565b602002602001015160001c604051611d54949392919061291f565b60405180910390a1848481518110611d6e57611d6e612816565b6020908102919091018101516001600160a01b038d1660009081528f835260408082206001600160e01b03198f1683528452808220905192939092611db7918d918f9101612722565b6040516020818303038152906040528051906020012081526020019081526020016000208190555060018d60010160008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c6001600160e01b0319166001600160e01b031916815260200190815260200160002060008a8c604051602001611e42929190612722565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff02191690831515021790555060008051602061297083398151915260001c6001600160a01b03166370ca10bb8c878781518110611eb057611eb0612816565b6020026020010151866040518463ffffffff1660e01b8152600401611ed793929190612701565b600060405180830381600087803b158015611ef157600080fd5b505af1158015611f05573d6000803e3d6000fd5b50505050505050611fb3565b60008051602061297083398151915260001c6001600160a01b03166370ca10bb8c878781518110611f4457611f44612816565b6020026020010151866040518463ffffffff1660e01b8152600401611f6b93929190612701565b600060405180830381600087803b158015611f8557600080fd5b505af1158015611f99573d6000803e3d6000fd5b505050505050508080611fab9061282c565b915050611abe565b50612029565b6040805162461bcd60e51b81526020600482015260248101919091527f73746453746f726167652066696e642853746453746f72616765293a204e6f2060448201527f73746f726167652075736520646574656374656420666f72207461726765742e6064820152608401610654565b6001600160a01b038716600090815260018a01602090815260408083206001600160e01b03198a1684528252808320905190929161206b9188918a9101612722565b60408051601f198184030181529181528151602092830120835290820192909252016000205460ff166120f85760405162461bcd60e51b815260206004820152602f60248201527f73746453746f726167652066696e642853746453746f72616765293a20536c6f60448201526e3a143994903737ba103337bab7321760891b6064820152608401610654565b6005890180546001600160a01b031916905560038901805463ffffffff1916905561212760028a01600061221b565b600060048a018190556001600160a01b038816815260208a815260408083206001600160e01b03198a1684528252808320905190929161216b9188918a9101612722565b60405160208183030381529060405280519060200120815260200190815260200160002054975050505050505050919050565b600080600060208551116121b35784516121b6565b60205b905060005b81811015612211576121ce81600861275c565b866121d9838861269b565b815181106121e9576121e9612816565b01602001516001600160f81b031916901c9290921791806122098161282c565b9150506121bb565b5090949350505050565b508054600082559060005260206000209081019061101d91905b808211156122495760008155600101612235565b5090565b80356001600160a01b0381168114610d3657600080fd5b6000806040838503121561227757600080fd5b6122808361224d565b946020939093013593505050565b6000602082840312156122a057600080fd5b6122a98261224d565b9392505050565b600080604083850312156122c357600080fd5b6122cc8361224d565b91506122da6020840161224d565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612322576123226122e3565b604052919050565b600067ffffffffffffffff821115612344576123446122e3565b50601f01601f191660200190565b60006123656123608461232a565b6122f9565b905082815283838301111561237957600080fd5b828260208301376000602084830101529392505050565b600082601f8301126123a157600080fd5b6122a983833560208501612352565b600080604083850312156123c357600080fd5b823567ffffffffffffffff808211156123db57600080fd5b6123e786838701612390565b935060208501359150808211156123fd57600080fd5b508301601f8101851361240f57600080fd5b61241e85823560208401612352565b9150509250929050565b60006020828403121561243a57600080fd5b5035919050565b60008060006060848603121561245657600080fd5b61245f8461224d565b925061246d6020850161224d565b9150604084013590509250925092565b801515811461101d57600080fd5b600080600080608085870312156124a157600080fd5b6124aa8561224d565b93506124b86020860161224d565b92506040850135915060608501356124cf8161247d565b939692955090935050565b6000602082840312156124ec57600080fd5b813567ffffffffffffffff81111561250357600080fd5b61250f84828501612390565b949350505050565b6001600160a01b03929092168252602082015260400190565b60005b8381101561254b578181015183820152602001612533565b8381111561255a576000848401525b50505050565b602081526000825180602084015261257f816040850160208701612530565b601f01601f19169190910160400192915050565b6000602082840312156125a557600080fd5b815167ffffffffffffffff8111156125bc57600080fd5b8201601f810184136125cd57600080fd5b80516125db6123608261232a565b8181528560208385010111156125f057600080fd5b612601826020830160208601612530565b95945050505050565b6000835161261c818460208801612530565b835190830190612630818360208801612530565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b60008282101561266157612661612639565b500390565b60008251612678818460208701612530565b9190910192915050565b60006020828403121561269457600080fd5b5051919050565b600082198211156126ae576126ae612639565b500190565b6001600160e01b03198316815281516000906126d6816004850160208701612530565b919091016004019392505050565b6000602082840312156126f657600080fd5b81516122a98161247d565b6001600160a01b039390931683526020830191909152604082015260600190565b825160009082906020808701845b8381101561274c57815185529382019390820190600101612730565b5050948252509092019392505050565b600081600019048311821515161561277657612776612639565b500290565b6020808252606f908201527f73746453746f726167652066696e642853746453746f72616765293a2050616360408201527f6b656420736c6f742e205468697320776f756c642063617573652064616e676560608201527f726f7573206f76657277726974696e6720616e642063757272656e746c79206960808201526e39b713ba1039bab83837b93a32b21760891b60a082015260c00190565b634e487b7160e01b600052603260045260246000fd5b60006001820161283e5761283e612639565b5060010190565b600082601f83011261285657600080fd5b8151602067ffffffffffffffff821115612872576128726122e3565b8160051b6128818282016122f9565b928352848101820192828101908785111561289b57600080fd5b83870192505b848310156128ba578251825291830191908301906128a1565b979650505050505050565b600080604083850312156128d857600080fd5b825167ffffffffffffffff808211156128f057600080fd5b6128fc86838701612845565b9350602085015191508082111561291257600080fd5b5061241e85828601612845565b6001600160a01b039490941684526001600160e01b0319929092166020840152604083015260608201526080019056fe0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da26469706673582212206bb8fd5228ed2b0468fdc100e4928e61bee05957d60ce53670a6abf5966172aa64736f6c634300080f0033", 741 | "sourceMap": "95:133:9:-:0;;;1572:26:0;;;-1:-1:-1;;171:28:1;;;;;95:133:9;;;;;;;;;;;;;;;;", 742 | "linkReferences": {} 743 | }, 744 | "deployedBytecode": { 745 | "object": "0x608060405234801561001057600080fd5b50600436106101425760003560e01c806397754ae9116100b8578063c88a5e6d1161007c578063c88a5e6d1461027f578063d06d822914610292578063d82555f1146102a5578063e9a79a7b146102b8578063f8ccbf47146102cb578063fa7626d4146102de57600080fd5b806397754ae91461021b5780639a8325a01461022e578063af9bbe5f14610241578063b9c071b414610254578063ba414fa61461026757600080fd5b80632d6c17a31161010a5780632d6c17a3146101b25780633a768463146101c55780633bf82db1146101da5780633f5a4a2a146101ed5780636bce989b146101f55780636f5970751461020857600080fd5b80630a9254e414610147578063108554f214610149578063233240ee1461015c57806329a9e3001461016f57806329ce9dde14610182575b600080fd5b005b610147610157366004612264565b6102ed565b61014761016a36600461228e565b6103be565b61014761017d3660046122b0565b610492565b6101956101903660046123b0565b61053d565b6040516001600160a01b0390911681526020015b60405180910390f35b6101476101c0366004612428565b610664565b61019560008051602061295083398151915281565b6101476101e8366004612441565b6106a0565b61014761077a565b610147610203366004612441565b610784565b61014761021636600461228e565b610796565b61014761022936600461248b565b610839565b61019561023c3660046124da565b610a59565b61014761024f366004612441565b610b53565b610147610262366004612428565b610bfa565b61026f610c18565b60405190151581526020016101a9565b61014761028d366004612264565b610d3b565b6101476102a03660046122b0565b610d6e565b6101476102b3366004612441565b610e19565b6101476102c6366004612264565b610f0a565b60005461026f9062010000900460ff1681565b60005461026f9060ff1681565b565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906103209085908590600401612517565b600060405180830381600087803b15801561033a57600080fd5b505af115801561034e573d6000803e3d6000fd5b50506040516303223eab60e11b81526001600160a01b038516600482015260008051602061295083398151915292506306447d5691506024015b600060405180830381600087803b1580156103a257600080fd5b505af11580156103b6573d6000803e3d6000fd5b505050505050565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906103f5908490600160801b90600401612517565b600060405180830381600087803b15801561040f57600080fd5b505af1158015610423573d6000803e3d6000fd5b505060405163ca669fa760e01b81526001600160a01b0384166004820152600080516020612950833981519152925063ca669fa791506024015b600060405180830381600087803b15801561047757600080fd5b505af115801561048b573d6000803e3d6000fd5b5050505050565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906104c9908590600160801b90600401612517565b600060405180830381600087803b1580156104e357600080fd5b505af11580156104f7573d6000803e3d6000fd5b50506040516323f2866760e11b81526001600160a01b0380861660048301528416602482015260008051602061295083398151915292506347e50cce9150604401610388565b604051638d1cc92560e01b8152600090819060008051602061295083398151915290638d1cc92590610573908790600401612560565b6000604051808303816000875af1158015610592573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105ba9190810190612593565b836040516020016105cc92919061260a565b60405160208183030381529060405290508051602082016000f091506001600160a01b03821661065d5760405162461bcd60e51b815260206004820152603160248201527f54657374206465706c6f79436f646528737472696e672c6279746573293a204460448201527032b83637bcb6b2b73a103330b4b632b21760791b60648201526084015b60405180910390fd5b5092915050565b60008051602061295083398151915263e5d6bf02610682834261264f565b6040518263ffffffff1660e01b815260040161045d91815260200190565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906106d39086908590600401612517565b600060405180830381600087803b1580156106ed57600080fd5b505af1158015610701573d6000803e3d6000fd5b50506040516308b6ac0f60e31b81526001600160a01b0380871660048301528516602482015260008051602061295083398151915292506345b5607891506044015b600060405180830381600087803b15801561075d57600080fd5b505af1158015610771573d6000803e3d6000fd5b50505050505050565b6102eb6001610fa9565b6107918383836000610839565b505050565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906107cd908490600160801b90600401612517565b600060405180830381600087803b1580156107e757600080fd5b505af11580156107fb573d6000803e3d6000fd5b50506040516303223eab60e11b81526001600160a01b038416600482015260008051602061295083398151915292506306447d56915060240161045d565b604080516001600160a01b0385811660248084019190915283518084039091018152604490920183526020820180516001600160e01b03166370a0823160e01b179052915160009287169161088d91612666565b6000604051808303816000865af19150503d80600081146108ca576040519150601f19603f3d011682016040523d82523d6000602084013e6108cf565b606091505b509150506000818060200190518101906108e99190612682565b90506109558461094f876109266370a0823160e01b61090960018d611020565b9060038201805463ffffffff191660e09290921c91909117905590565b90600282018054600181018255600091825260209091206001600160a01b039290921691015590565b90611045565b82156103b65760408051600481526024810182526020810180516001600160e01b03166318160ddd60e01b17905290516000916001600160a01b0389169161099d9190612666565b6000604051808303816000865af19150503d80600081146109da576040519150601f19603f3d011682016040523d82523d6000602084013e6109df565b606091505b509150506000818060200190518101906109f99190612682565b905082861015610a1e57610a0d868461264f565b610a17908261264f565b9050610a35565b610a28838761264f565b610a32908261269b565b90505b610a4f8161094f6318160ddd60e01b61090960018d611020565b5050505050505050565b604051638d1cc92560e01b8152600090819060008051602061295083398151915290638d1cc92590610a8f908690600401612560565b6000604051808303816000875af1158015610aae573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ad69190810190612593565b90508051602082016000f091506001600160a01b038216610b4d5760405162461bcd60e51b815260206004820152602b60248201527f54657374206465706c6f79436f646528737472696e67293a204465706c6f796d60448201526a32b73a103330b4b632b21760a91b6064820152608401610654565b50919050565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d90610b869086908590600401612517565b600060405180830381600087803b158015610ba057600080fd5b505af1158015610bb4573d6000803e3d6000fd5b50506040516323f2866760e11b81526001600160a01b0380871660048301528516602482015260008051602061295083398151915292506347e50cce9150604401610743565b60008051602061295083398151915263e5d6bf02610682834261269b565b60008054610100900460ff1615610c385750600054610100900460ff1690565b60006000805160206129508339815191523b15610d3657604051600090600080516020612950833981519152907f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc490610ca09083906519985a5b195960d21b90602001612517565b60408051601f1981840301815290829052610cbe92916020016126b3565b60408051601f1981840301815290829052610cd891612666565b6000604051808303816000865af19150503d8060008114610d15576040519150601f19603f3d011682016040523d82523d6000602084013e610d1a565b606091505b5091505080806020019051810190610d3291906126e4565b9150505b919050565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d906103889085908590600401612517565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d90610da5908590600160801b90600401612517565b600060405180830381600087803b158015610dbf57600080fd5b505af1158015610dd3573d6000803e3d6000fd5b50506040516308b6ac0f60e31b81526001600160a01b0380861660048301528416602482015260008051602061295083398151915292506345b560789150604401610388565b7f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583604051610ee4906040808252600790820152665741524e494e4760c81b6060820152608060208201819052605e908201527f546573742074697028616464726573732c616464726573732c75696e7432353660a08201527f293a2054686520607469706020737464636865617420686173206265656e206460c08201527f6570726563617465642e2055736520606465616c6020696e73746561642e000060e08201526101000190565b60405180910390a16107918161094f846109266370a0823160e01b61090960018a611020565b60405163c88a5e6d60e01b81526000805160206129508339815191529063c88a5e6d90610f3d9085908590600401612517565b600060405180830381600087803b158015610f5757600080fd5b505af1158015610f6b573d6000803e3d6000fd5b505060405163ca669fa760e01b81526001600160a01b0385166004820152600080516020612950833981519152925063ca669fa79150602401610388565b8061101d577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405161100d9060208082526017908201527f4572726f723a20417373657274696f6e204661696c6564000000000000000000604082015260600190565b60405180910390a161101d611053565b50565b6005820180546001600160a01b0319166001600160a01b039290921691909117905590565b61104f828261114c565b5050565b6000805160206129508339815191523b1561113b57604051600090600080516020612950833981519152907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc4906110bc9083906519985a5b195960d21b90600190602001612701565b60408051601f19818403018152908290526110da92916020016126b3565b60408051601f19818403018152908290526110f491612666565b6000604051808303816000865af19150503d8060008114611131576040519150601f19603f3d011682016040523d82523d6000602084013e611136565b606091505b505050505b6000805461ff001916610100179055565b600582015460038301546004840154600285018054604080516020808402820181019092528281526001600160a01b039096169560e09590951b94600093909290918301828280156111bd57602002820191906000526020600020905b8154815260200190600101908083116111a9575b505050505090506000836111d083611490565b6040516020016111e19291906126b3565b60408051601f198184030181528282526001600160a01b038816600090815260018b0160209081528382206001600160e01b03198a168352815292812091945090929091611233918691889101612722565b60408051601f198184030181529181528151602092830120835290820192909252016000205460ff1661126b5761126987611530565b505b6001600160a01b0385166000908152602088815260408083206001600160e01b03198816845282528083209051909183916112aa918791899101612722565b6040516020818303038152906040528051906020012081526020019081526020016000205460001b9050600080876001600160a01b0316846040516112ef9190612666565b600060405180830381855afa9150503d806000811461132a576040519150601f19603f3d011682016040523d82523d6000602084013e61132f565b606091505b50915061134890508161134388602061275c565b61219e565b604051630667f9d760e41b8152909250600091506000805160206129508339815191529063667f9d7090611382908b908790600401612517565b6020604051808303816000875af11580156113a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c59190612682565b90508082146113e65760405162461bcd60e51b81526004016106549061277b565b6040516370ca10bb60e01b8152600080516020612950833981519152906370ca10bb9061141b908b9087908e90600401612701565b600060405180830381600087803b15801561143557600080fd5b505af1158015611449573d6000803e3d6000fd5b50505060058b0180546001600160a01b03191690555060038a01805463ffffffff1916905561147c60028b01600061221b565b896004016000905550505050505050505050565b60606000825160206114a2919061275c565b67ffffffffffffffff8111156114ba576114ba6122e3565b6040519080825280601f01601f1916602001820160405280156114e4576020820181803683370190505b50905060005b835181101561065d57600084828151811061150757611507612816565b6020026020010151905080826020026020018401525080806115289061282c565b9150506114ea565b600581015460038201546004830154600284018054604080516020808402820181019092528281526000966001600160a01b03169560e01b9493879391929091908301828280156115a057602002820191906000526020600020905b81548152602001906001019080831161158c575b5050506001600160a01b038716600090815260018a01602090815260408083206001600160e01b03198a16845282528083209051959650949193506115ea92508591879101612722565b60408051601f198184030181529181528151602092830120835290820192909252016000205460ff1615611686576001600160a01b0384166000908152602087815260408083206001600160e01b03198716845282528083209051909291611656918591879101612722565b60405160208183030381529060405280519060200120815260200190815260200160002054945050505050919050565b60008361169283611490565b6040516020016116a39291906126b3565b604051602081830303815290604052905060008051602061297083398151915260001c6001600160a01b031663266cf1096040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561170057600080fd5b505af1158015611714573d6000803e3d6000fd5b50505050600080866001600160a01b0316836040516117339190612666565b600060405180830381855afa9150503d806000811461176e576040519150601f19603f3d011682016040523d82523d6000602084013e611773565b606091505b50915061178790508161134387602061275c565b6040516365bc948160e01b81526001600160a01b038916600482015290925060009150600080516020612950833981519152906365bc9481906024016000604051808303816000875af11580156117e2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261180a91908101906128c5565b5090508051600103611ab157600060008051602061297083398151915260001c6001600160a01b031663667f9d70898460008151811061184c5761184c612816565b60200260200101516040518363ffffffff1660e01b8152600401611871929190612517565b6020604051808303816000875af1158015611890573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118b49190612682565b905080611912577f080fc4a96620c4462e705b23f346413fe3796bb63c6f8d8591baec0e231577a588836000815181106118f0576118f0612816565b602002602001015160001c604051611909929190612517565b60405180910390a15b8083146119315760405162461bcd60e51b81526004016106549061277b565b7f9c9555b1e3102e3cf48f427d79cb678f5d9bd1ed0ad574389461e255f95170ed88888789604051602001611967929190612722565b604051602081830303815290604052805190602001208560008151811061199057611990612816565b602002602001015160001c6040516119ab949392919061291f565b60405180910390a1816000815181106119c6576119c6612816565b6020908102919091018101516001600160a01b038a1660009081528c835260408082206001600160e01b03198c1683528452808220905192939092611a0f918a918c9101612722565b60408051601f1981840301815291815281516020928301208352828201939093529082016000908120939093556001600160a01b038b16835260018d810182528284206001600160e01b03198c16855282528284209251909391611a77918a918c9101612722565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550612029565b600181511115611fb95760005b8151811015611fb357600060008051602061297083398151915260001c6001600160a01b031663667f9d708a858581518110611afc57611afc612816565b60200260200101516040518363ffffffff1660e01b8152600401611b21929190612517565b6020604051808303816000875af1158015611b40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b649190612682565b905080611bc1577f080fc4a96620c4462e705b23f346413fe3796bb63c6f8d8591baec0e231577a589848481518110611b9f57611b9f612816565b602002602001015160001c604051611bb8929190612517565b60405180910390a15b60008051602061297083398151915260001c6001600160a01b03166370ca10bb8a858581518110611bf457611bf4612816565b602002602001015161133760f01b6040518463ffffffff1660e01b8152600401611c2093929190612701565b600060405180830381600087803b158015611c3a57600080fd5b505af1158015611c4e573d6000803e3d6000fd5b50505050600060608a6001600160a01b031687604051611c6e9190612666565b600060405180830381855afa9150503d8060008114611ca9576040519150601f19603f3d011682016040523d82523d6000602084013e611cae565b606091505b509092509050611cc3816113438b602061275c565b9550818015611cd6575061133760f01b86145b15611f11577f9c9555b1e3102e3cf48f427d79cb678f5d9bd1ed0ad574389461e255f95170ed8b8b8a8c604051602001611d11929190612722565b60405160208183030381529060405280519060200120888881518110611d3957611d39612816565b602002602001015160001c604051611d54949392919061291f565b60405180910390a1848481518110611d6e57611d6e612816565b6020908102919091018101516001600160a01b038d1660009081528f835260408082206001600160e01b03198f1683528452808220905192939092611db7918d918f9101612722565b6040516020818303038152906040528051906020012081526020019081526020016000208190555060018d60010160008d6001600160a01b03166001600160a01b0316815260200190815260200160002060008c6001600160e01b0319166001600160e01b031916815260200190815260200160002060008a8c604051602001611e42929190612722565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff02191690831515021790555060008051602061297083398151915260001c6001600160a01b03166370ca10bb8c878781518110611eb057611eb0612816565b6020026020010151866040518463ffffffff1660e01b8152600401611ed793929190612701565b600060405180830381600087803b158015611ef157600080fd5b505af1158015611f05573d6000803e3d6000fd5b50505050505050611fb3565b60008051602061297083398151915260001c6001600160a01b03166370ca10bb8c878781518110611f4457611f44612816565b6020026020010151866040518463ffffffff1660e01b8152600401611f6b93929190612701565b600060405180830381600087803b158015611f8557600080fd5b505af1158015611f99573d6000803e3d6000fd5b505050505050508080611fab9061282c565b915050611abe565b50612029565b6040805162461bcd60e51b81526020600482015260248101919091527f73746453746f726167652066696e642853746453746f72616765293a204e6f2060448201527f73746f726167652075736520646574656374656420666f72207461726765742e6064820152608401610654565b6001600160a01b038716600090815260018a01602090815260408083206001600160e01b03198a1684528252808320905190929161206b9188918a9101612722565b60408051601f198184030181529181528151602092830120835290820192909252016000205460ff166120f85760405162461bcd60e51b815260206004820152602f60248201527f73746453746f726167652066696e642853746453746f72616765293a20536c6f60448201526e3a143994903737ba103337bab7321760891b6064820152608401610654565b6005890180546001600160a01b031916905560038901805463ffffffff1916905561212760028a01600061221b565b600060048a018190556001600160a01b038816815260208a815260408083206001600160e01b03198a1684528252808320905190929161216b9188918a9101612722565b60405160208183030381529060405280519060200120815260200190815260200160002054975050505050505050919050565b600080600060208551116121b35784516121b6565b60205b905060005b81811015612211576121ce81600861275c565b866121d9838861269b565b815181106121e9576121e9612816565b01602001516001600160f81b031916901c9290921791806122098161282c565b9150506121bb565b5090949350505050565b508054600082559060005260206000209081019061101d91905b808211156122495760008155600101612235565b5090565b80356001600160a01b0381168114610d3657600080fd5b6000806040838503121561227757600080fd5b6122808361224d565b946020939093013593505050565b6000602082840312156122a057600080fd5b6122a98261224d565b9392505050565b600080604083850312156122c357600080fd5b6122cc8361224d565b91506122da6020840161224d565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612322576123226122e3565b604052919050565b600067ffffffffffffffff821115612344576123446122e3565b50601f01601f191660200190565b60006123656123608461232a565b6122f9565b905082815283838301111561237957600080fd5b828260208301376000602084830101529392505050565b600082601f8301126123a157600080fd5b6122a983833560208501612352565b600080604083850312156123c357600080fd5b823567ffffffffffffffff808211156123db57600080fd5b6123e786838701612390565b935060208501359150808211156123fd57600080fd5b508301601f8101851361240f57600080fd5b61241e85823560208401612352565b9150509250929050565b60006020828403121561243a57600080fd5b5035919050565b60008060006060848603121561245657600080fd5b61245f8461224d565b925061246d6020850161224d565b9150604084013590509250925092565b801515811461101d57600080fd5b600080600080608085870312156124a157600080fd5b6124aa8561224d565b93506124b86020860161224d565b92506040850135915060608501356124cf8161247d565b939692955090935050565b6000602082840312156124ec57600080fd5b813567ffffffffffffffff81111561250357600080fd5b61250f84828501612390565b949350505050565b6001600160a01b03929092168252602082015260400190565b60005b8381101561254b578181015183820152602001612533565b8381111561255a576000848401525b50505050565b602081526000825180602084015261257f816040850160208701612530565b601f01601f19169190910160400192915050565b6000602082840312156125a557600080fd5b815167ffffffffffffffff8111156125bc57600080fd5b8201601f810184136125cd57600080fd5b80516125db6123608261232a565b8181528560208385010111156125f057600080fd5b612601826020830160208601612530565b95945050505050565b6000835161261c818460208801612530565b835190830190612630818360208801612530565b01949350505050565b634e487b7160e01b600052601160045260246000fd5b60008282101561266157612661612639565b500390565b60008251612678818460208701612530565b9190910192915050565b60006020828403121561269457600080fd5b5051919050565b600082198211156126ae576126ae612639565b500190565b6001600160e01b03198316815281516000906126d6816004850160208701612530565b919091016004019392505050565b6000602082840312156126f657600080fd5b81516122a98161247d565b6001600160a01b039390931683526020830191909152604082015260600190565b825160009082906020808701845b8381101561274c57815185529382019390820190600101612730565b5050948252509092019392505050565b600081600019048311821515161561277657612776612639565b500290565b6020808252606f908201527f73746453746f726167652066696e642853746453746f72616765293a2050616360408201527f6b656420736c6f742e205468697320776f756c642063617573652064616e676560608201527f726f7573206f76657277726974696e6720616e642063757272656e746c79206960808201526e39b713ba1039bab83837b93a32b21760891b60a082015260c00190565b634e487b7160e01b600052603260045260246000fd5b60006001820161283e5761283e612639565b5060010190565b600082601f83011261285657600080fd5b8151602067ffffffffffffffff821115612872576128726122e3565b8160051b6128818282016122f9565b928352848101820192828101908785111561289b57600080fd5b83870192505b848310156128ba578251825291830191908301906128a1565b979650505050505050565b600080604083850312156128d857600080fd5b825167ffffffffffffffff808211156128f057600080fd5b6128fc86838701612845565b9350602085015191508082111561291257600080fd5b5061241e85828601612845565b6001600160a01b039490941684526001600160e01b0319929092166020840152604083015260608201526080019056fe0000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12da26469706673582212206bb8fd5228ed2b0468fdc100e4928e61bee05957d60ce53670a6abf5966172aa64736f6c634300080f0033", 746 | "sourceMap": "95:133:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;131:26;;2070:116:2;;;;;;:::i;:::-;;:::i;1417:96::-;;;;;;:::i;:::-;;:::i;1631:120::-;;;;;;:::i;:::-;;:::i;5142:455::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2921:32:10;;;2903:51;;2891:2;2876:18;5142:455:2;;;;;;;;1269:85;;;;;;:::i;:::-;;:::i;322:38:1:-;;-1:-1:-1;;;;;;;;;;;322:38:1;;2441:140:2;;;;;;:::i;:::-;;:::i;163:63:9:-;;;:::i;3370:107:2:-;;;;;;:::i;:::-;;:::i;1958:106::-;;;;;;:::i;:::-;;:::i;3483:915::-;;;;;;:::i;:::-;;:::i;5603:406::-;;;;;;:::i;:::-;;:::i;1757:130::-;;;;;;:::i;:::-;;:::i;1180:83::-;;;;;;:::i;:::-;;:::i;1819:584:0:-;;;:::i;:::-;;;4780:14:10;;4773:22;4755:41;;4743:2;4728:18;1819:584:0;4615:187:10;3165:81:2;;;;;;:::i;:::-;;:::i;2305:130::-;;;;;;:::i;:::-;;:::i;2733:341::-;;;;;;:::i;:::-;;:::i;1519:106::-;;;;;;:::i;:::-;;:::i;171:28:1:-;;;;;;;;;;;;1572:26:0;;;;;;;;;131::9;:::o;2070:116:2:-;2133:18;;-1:-1:-1;;;2133:18:2;;-1:-1:-1;;;;;;;;;;;251:64:1;2133:7:2;;:18;;2141:3;;2146:4;;2133:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2161:18:2;;-1:-1:-1;;;2161:18:2;;-1:-1:-1;;;;;2921:32:10;;2161:18:2;;;2903:51:10;-1:-1:-1;;;;;;;;;;;251:64:1;-1:-1:-1;2161:13:2;;-1:-1:-1;2876:18:10;;2161::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2070:116;;:::o;1417:96::-;1461:22;;-1:-1:-1;;;1461:22:2;;-1:-1:-1;;;;;;;;;;;251:64:1;1461:7:2;;:22;;1469:3;;-1:-1:-1;;;1474:8:2;1461:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1493:13:2;;-1:-1:-1;;;1493:13:2;;-1:-1:-1;;;;;2921:32:10;;1493:13:2;;;2903:51:10;-1:-1:-1;;;;;;;;;;;251:64:1;-1:-1:-1;1493:8:2;;-1:-1:-1;2876:18:10;;1493:13:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1417:96;:::o;1631:120::-;1691:22;;-1:-1:-1;;;1691:22:2;;-1:-1:-1;;;;;;;;;;;251:64:1;1691:7:2;;:22;;1699:3;;-1:-1:-1;;;1704:8:2;1691:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1723:21:2;;-1:-1:-1;;;1723:21:2;;-1:-1:-1;;;;;5641:15:10;;;1723:21:2;;;5623:34:10;5693:15;;5673:18;;;5666:43;-1:-1:-1;;;;;;;;;;;251:64:1;-1:-1:-1;1723:8:2;;-1:-1:-1;5558:18:10;;1723:21:2;5411:304:10;5142:455:2;5302:16;;-1:-1:-1;;;5302:16:2;;5233:12;;;;-1:-1:-1;;;;;;;;;;;251:64:1;5302:10:2;;:16;;5313:4;;5302:16;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5302:16:2;;;;;;;;;;;;:::i;:::-;5320:4;5285:40;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5261:64;;5446:8;5440:15;5433:4;5423:8;5419:19;5416:1;5409:47;5401:55;-1:-1:-1;;;;;;5497:18:2;;5476:114;;;;-1:-1:-1;;;5476:114:2;;7684:2:10;5476:114:2;;;7666:21:10;7723:2;7703:18;;;7696:30;7762:34;7742:18;;;7735:62;-1:-1:-1;;;7813:18:10;;;7806:47;7870:19;;5476:114:2;;;;;;;;;5251:346;5142:455;;;;:::o;1269:85::-;-1:-1:-1;;;;;;;;;;;1316:7:2;1324:22;1342:4;1324:15;:22;:::i;:::-;1316:31;;;;;;;;;;;;;8308:25:10;;8296:2;8281:18;;8162:177;2441:140:2;2520:18;;-1:-1:-1;;;2520:18:2;;-1:-1:-1;;;;;;;;;;;251:64:1;2520:7:2;;:18;;2528:3;;2533:4;;2520:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2548:26:2;;-1:-1:-1;;;2548:26:2;;-1:-1:-1;;;;;5641:15:10;;;2548:26:2;;;5623:34:10;5693:15;;5673:18;;;5666:43;-1:-1:-1;;;;;;;;;;;251:64:1;-1:-1:-1;2548:13:2;;-1:-1:-1;5558:18:10;;2548:26:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2441:140;;;:::o;163:63:9:-;203:16;214:4;203:10;:16::i;3370:107:2:-;3442:28;3447:5;3454:2;3458:4;3464:5;3442:4;:28::i;:::-;3370:107;;;:::o;1958:106::-;2007:22;;-1:-1:-1;;;2007:22:2;;-1:-1:-1;;;;;;;;;;;251:64:1;2007:7:2;;:22;;2015:3;;-1:-1:-1;;;2020:8:2;2007:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2039:18:2;;-1:-1:-1;;;2039:18:2;;-1:-1:-1;;;;;2921:32:10;;2039:18:2;;;2903:51:10;-1:-1:-1;;;;;;;;;;;251:64:1;-1:-1:-1;2039:13:2;;-1:-1:-1;2876:18:10;;2039::2;2757:203:10;3483:915:2;3637:38;;;-1:-1:-1;;;;;2921:32:10;;;3637:38:2;;;;2903:51:10;;;;3637:38:2;;;;;;;;;;2876:18:10;;;;3637:38:2;;;;;;;-1:-1:-1;;;;;3637:38:2;-1:-1:-1;;;3637:38:2;;;3626:50;;3602:20;;3626:10;;;:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3599:77;;;3686:15;3715:7;3704:30;;;;;;;;;;;;:::i;:::-;3686:48;-1:-1:-1;3771:123:2;3889:4;3771:90;3858:2;3771:64;-1:-1:-1;;;3771:35:2;:8;3800:5;3771:28;:35::i;:::-;:52;19603:9;;;:16;;-1:-1:-1;;19603:16:2;;;;;;;;;;;;:9;19504:143;3771:64;:86;19919:10;;;:47;;;;;;;-1:-1:-1;19919:47:2;;;;;;;-1:-1:-1;;;;;19943:21:2;;;;19919:47;;;:10;19815:179;3771:90;:117;;:123::i;:::-;3939:6;3936:456;;;4001:34;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4001:34:2;-1:-1:-1;;;4001:34:2;;;3990:46;;3963:23;;-1:-1:-1;;;;;3990:10:2;;;:46;;4001:34;3990:46;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3960:76;;;4050:14;4078:10;4067:33;;;;;;;;;;;;:::i;:::-;4050:50;;4124:7;4117:4;:14;4114:143;;;4162:14;4172:4;4162:7;:14;:::i;:::-;4151:26;;;;:::i;:::-;;;4114:143;;;4227:14;4234:7;4227:4;:14;:::i;:::-;4216:26;;;;:::i;:::-;;;4114:143;4270:111;4374:6;4270:72;-1:-1:-1;;;4270:39:2;:8;4303:5;4270:32;:39::i;:111::-;3946:446;;3558:840;;3483:915;;;;:::o;5603:406::-;5727:16;;-1:-1:-1;;;5727:16:2;;5675:12;;;;-1:-1:-1;;;;;;;;;;;251:64:1;5727:10:2;;:16;;5738:4;;5727:16;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5727:16:2;;;;;;;;;;;;:::i;:::-;5703:40;;5864:8;5858:15;5851:4;5841:8;5837:19;5834:1;5827:47;5819:55;-1:-1:-1;;;;;;5915:18:2;;5894:108;;;;-1:-1:-1;;;5894:108:2;;9147:2:10;5894:108:2;;;9129:21:10;9186:2;9166:18;;;9159:30;9225:34;9205:18;;;9198:62;-1:-1:-1;;;9276:18:10;;;9269:41;9327:19;;5894:108:2;8945:407:10;5894:108:2;5693:316;5603:406;;;:::o;1757:130::-;1831:18;;-1:-1:-1;;;1831:18:2;;-1:-1:-1;;;;;;;;;;;251:64:1;1831:7:2;;:18;;1839:3;;1844:4;;1831:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1859:21:2;;-1:-1:-1;;;1859:21:2;;-1:-1:-1;;;;;5641:15:10;;;1859:21:2;;;5623:34:10;5693:15;;5673:18;;;5666:43;-1:-1:-1;;;;;;;;;;;251:64:1;-1:-1:-1;1859:8:2;;-1:-1:-1;5558:18:10;;1859:21:2;5411:304:10;1180:83:2;-1:-1:-1;;;;;;;;;;;1225:7:2;1233:22;1251:4;1233:15;:22;:::i;1819:584:0:-;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:0;;;;;;;;1819:584::o;1869:528::-;1941:17;-1:-1:-1;;;;;;;;;;;2978:55:0;3059:16;1980:374;;2196:43;;2023:20;;-1:-1:-1;;;;;;;;;;;1671:64:0;2135:34;;2196:43;;1671:64;;-1:-1:-1;;;2221:17:0;2196:43;;;:::i;:::-;;;;-1:-1:-1;;2196:43:0;;;;;;;;;;2086:175;;;2196:43;2086:175;;:::i;:::-;;;;-1:-1:-1;;2086:175:0;;;;;;;;;;2047:232;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;:::i;:::-;2297:42;;2002:352;1980:374;2374:12;1819:584;-1:-1:-1;1819:584:0:o;3165:81:2:-;3222:17;;-1:-1:-1;;;3222:17:2;;-1:-1:-1;;;;;;;;;;;251:64:1;3222:7:2;;:17;;3230:2;;3234:4;;3222:17;;;:::i;2305:130::-;2370:22;;-1:-1:-1;;;2370:22:2;;-1:-1:-1;;;;;;;;;;;251:64:1;2370:7:2;;:22;;2378:3;;-1:-1:-1;;;2383:8:2;2370:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2402:26:2;;-1:-1:-1;;;2402:26:2;;-1:-1:-1;;;;;5641:15:10;;;2402:26:2;;;5623:34:10;5693:15;;5673:18;;;5666:43;-1:-1:-1;;;;;;;;;;;251:64:1;-1:-1:-1;2402:13:2;;-1:-1:-1;5558:18:10;;2402:26:2;5411:304:10;2733:341:2;2809:125;;;;;10565:2:10;10547:21;;;10604:1;10584:18;;;10577:29;-1:-1:-1;;;10637:2:10;10622:18;;10615:37;10690:3;10683:4;10668:20;;10661:33;;;10731:2;10710:19;;;10703:31;10771:34;10765:3;10750:19;;10743:63;10843:34;10837:3;10822:19;;10815:63;10915:32;10909:3;10894:19;;10887:61;10980:3;10965:19;;10262:728;2809:125:2;;;;;;;;2944:123;3062:4;2944:90;3031:2;2944:64;-1:-1:-1;;;2944:35:2;:8;2973:5;2944:28;:35::i;1519:106::-;1577:18;;-1:-1:-1;;;1577:18:2;;-1:-1:-1;;;;;;;;;;;251:64:1;1577:7:2;;:18;;1585:3;;1590:4;;1577:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1605:13:2;;-1:-1:-1;;;1605:13:2;;-1:-1:-1;;;;;2921:32:10;;1605:13:2;;;2903:51:10;-1:-1:-1;;;;;;;;;;;251:64:1;-1:-1:-1;1605:8:2;;-1:-1:-1;2876:18:10;;1605:13:2;2757:203:10;3255:157:0;3315:9;3310:96;;3345:30;;;;;11197:2:10;11179:21;;;11236:2;11216:18;;;11209:30;11275:25;11270:2;11255:18;;11248:53;11333:2;11318:18;;10995:347;3345:30:0;;;;;;;;3389:6;:4;:6::i;:::-;3255:157;:::o;19342:156:2:-;19448:12;;;:22;;-1:-1:-1;;;;;;19448:22:2;-1:-1:-1;;;;;19448:22:2;;;;;;;;;;:12;19342:156::o;20626:120::-;20706:33;20720:4;20734:3;20706:13;:33::i;:::-;20626:120;;:::o;2410:424:0:-;-1:-1:-1;;;;;;;;;;;2978:55:0;3059:16;2445:359;;2645:67;;2482:11;;-1:-1:-1;;;;;;;;;;;1671:64:0;2579:43;;2645:67;;1671:64;;-1:-1:-1;;;2670:17:0;2705:4;;2645:67;;;:::i;:::-;;;;-1:-1:-1;;2645:67:0;;;;;;;;;;2534:196;;;2645:67;2534:196;;:::i;:::-;;;;-1:-1:-1;;2534:196:0;;;;;;;;;;2499:245;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2445:359:0;2813:7;:14;;-1:-1:-1;;2813:14:0;;;;;2410:424::o;20980:1089:2:-;21096:12;;;;21132:9;;;;21173:11;;;;21217:10;;;21194:33;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21096:12:2;;;;21132:9;;;;;;21082:11;;21194:33;;21217:10;;21194:33;;21217:10;21194:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21238:17;21275:4;21281:12;21289:3;21281:7;:12::i;:::-;21258:36;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;21258:36:2;;;;;;;;;-1:-1:-1;;;;;21309:15:2;;;;;;:10;;;21258:36;21309:15;;;;;;-1:-1:-1;;;;;;21309:21:2;;;;;;;;;21258:36;;-1:-1:-1;21309:21:2;;:15;;21341:34;;21358:3;;21363:11;;21341:34;;:::i;:::-;;;;-1:-1:-1;;21341:34:2;;;;;;;;;21331:45;;21341:34;21331:45;;;;21309:68;;;;;;;;;;-1:-1:-1;21309:68:2;;;;21304:110;;21393:10;21398:4;21393;:10::i;:::-;;21304:110;-1:-1:-1;;;;;21446:15:2;;21423:12;21446:15;;;;;;;;;;;-1:-1:-1;;;;;;21446:21:2;;;;;;;;;21478:34;;21446:21;;21423:12;;21478:34;;21495:3;;21500:11;;21478:34;;:::i;:::-;;;;;;;;;;;;;21468:45;;;;;;21446:68;;;;;;;;;;;;21438:77;;21423:92;;21526:12;21565:17;21586:3;-1:-1:-1;;;;;21586:14:2;21601:4;21586:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21562:44:2;-1:-1:-1;21627:36:2;;-1:-1:-1;21562:44:2;21648:14;21651:11;21648:2;:14;:::i;:::-;21627;:36::i;:::-;21698:28;;-1:-1:-1;;;21698:28:2;;21620:43;;-1:-1:-1;21683:12:2;;-1:-1:-1;;;;;;;;;;;;21698:17:2;;;:28;;21716:3;;21721:4;;21698:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21683:43;;21749:4;21741;:12;21737:172;;21769:129;;-1:-1:-1;;;21769:129:2;;;;;;;:::i;:::-;21918:34;;-1:-1:-1;;;21918:34:2;;-1:-1:-1;;;;;;;;;;;21918:18:2;;;:34;;21937:3;;21942:4;;21948:3;;21918:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;21969:12:2;;;21962:19;;-1:-1:-1;;;;;;21962:19:2;;;-1:-1:-1;21998:9:2;;;21991:16;;-1:-1:-1;;21991:16:2;;;22017:17;-1:-1:-1;22024:10:2;;21969:12;22017:17;:::i;:::-;22051:4;:11;;22044:18;;;21072:997;;;;;;;;20980:1089;;:::o;23413:397::-;23472:12;23500:19;23532:1;:8;23543:2;23532:13;;;;:::i;:::-;23522:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23522:24:2;;23500:46;;23561:9;23556:224;23580:1;:8;23576:1;:12;23556:224;;;23609:9;23621:1;23623;23621:4;;;;;;;;:::i;:::-;;;;;;;23609:16;;23754:1;23748;23744:2;23740:10;23736:2;23732:19;23724:6;23720:32;23713:43;23695:75;23590:3;;;;;:::i;:::-;;;;23556:224;;16122:3214;16246:12;;;;16282:9;;;;16323:11;;;;16367:10;;;16344:33;;;;;;;;;;;;;;;;;;;16209:7;;-1:-1:-1;;;;;16246:12:2;;16282:9;;;16323:11;16209:7;;16344:33;;16367:10;;16344:33;;;16367:10;16344:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;16428:15:2;;;;;;:10;;;:15;;;;;;;;-1:-1:-1;;;;;;16428:21:2;;;;;;;;;16460:34;;16344:33;;-1:-1:-1;16428:21:2;:15;;-1:-1:-1;16460:34:2;;-1:-1:-1;16344:33:2;;16482:11;;16460:34;;:::i;:::-;;;;-1:-1:-1;;16460:34:2;;;;;;;;;16450:45;;16460:34;16450:45;;;;16428:68;;;;;;;;;;-1:-1:-1;16428:68:2;;;;16424:174;;;-1:-1:-1;;;;;16519:15:2;;:10;:15;;;;;;;;;;;-1:-1:-1;;;;;;16519:21:2;;;;;;;;;16551:34;;16519:21;;:10;16551:34;;16568:3;;16573:11;;16551:34;;:::i;:::-;;;;;;;;;;;;;16541:45;;;;;;16519:68;;;;;;;;;;;;16512:75;;;;;;16122:3214;;;:::o;16424:174::-;16607:17;16644:4;16650:12;16658:3;16650:7;:12::i;:::-;16627:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16607:56;;-1:-1:-1;;;;;;;;;;;15396:37:2;;-1:-1:-1;;;;;16673:19:2;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16704:12;16743:17;16764:3;-1:-1:-1;;;;;16764:14:2;16779:4;16764:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16740:44:2;-1:-1:-1;16805:36:2;;-1:-1:-1;16740:44:2;16826:14;16829:11;16826:2;:14;:::i;16805:36::-;16891:35;;-1:-1:-1;;;16891:35:2;;-1:-1:-1;;;;;2921:32:10;;16891:35:2;;;2903:51:10;16798:43:2;;-1:-1:-1;16863:22:2;;-1:-1:-1;;;;;;;;;;;;16891:21:2;;;2876:18:10;;16891:35:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16891:35:2;;;;;;;;;;;;:::i;:::-;16862:64;;;16940:5;:12;16956:1;16940:17;16936:2058;;16973:12;-1:-1:-1;;;;;;;;;;;15396:37:2;;-1:-1:-1;;;;;16988:17:2;;17006:3;17011:5;17017:1;17011:8;;;;;;;;:::i;:::-;;;;;;;16988:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16973:47;-1:-1:-1;16973:47:2;17034:106;;17081:44;17102:3;17115:5;17121:1;17115:8;;;;;;;;:::i;:::-;;;;;;;17107:17;;17081:44;;;;;;;:::i;:::-;;;;;;;;17034:106;17165:4;17157;:12;17153:180;;17189:129;;-1:-1:-1;;;17189:129:2;;;;;;;:::i;:::-;17351:86;17361:3;17366:4;17399:3;17404:11;17382:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17372:45;;;;;;17427:5;17433:1;17427:8;;;;;;;;:::i;:::-;;;;;;;17419:17;;17351:86;;;;;;;;;:::i;:::-;;;;;;;;17530:5;17536:1;17530:8;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;17451:15:2;;17522:17;17451:15;;;;;;;;;;-1:-1:-1;;;;;;17451:21:2;;;;;;;;;17483:34;;17530:8;;17451:21;;17483:34;;17500:3;;17505:11;;17483:34;;:::i;:::-;;;;-1:-1:-1;;17483:34:2;;;;;;;;;17473:45;;17483:34;17473:45;;;;17451:68;;;;;;;;;;;;-1:-1:-1;17451:68:2;;;:88;;;;-1:-1:-1;;;;;17553:15:2;;;;17624:4;17553:10;;;:15;;;;;-1:-1:-1;;;;;;17553:21:2;;;;;;;;;17585:34;;17624:4;;-1:-1:-1;17585:34:2;;17602:3;;17607:11;;17585:34;;:::i;:::-;;;;;;;-1:-1:-1;;17585:34:2;;;;;;17575:45;;17585:34;17575:45;;;;17553:68;;;;;;;;;;-1:-1:-1;17553:68:2;:75;;-1:-1:-1;;17553:75:2;;;;;;;;;;-1:-1:-1;16936:2058:2;;;17664:1;17649:5;:12;:16;17645:1349;;;17686:9;17681:1190;17705:5;:12;17701:1;:16;17681:1190;;;17742:12;-1:-1:-1;;;;;;;;;;;15396:37:2;;-1:-1:-1;;;;;17757:17:2;;17775:3;17780:5;17786:1;17780:8;;;;;;;;:::i;:::-;;;;;;;17757:32;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17742:47;-1:-1:-1;17742:47:2;17807:114;;17858:44;17879:3;17892:5;17898:1;17892:8;;;;;;;;:::i;:::-;;;;;;;17884:17;;17858:44;;;;;;;:::i;:::-;;;;;;;;17807:114;-1:-1:-1;;;;;;;;;;;15396:37:2;;-1:-1:-1;;;;;17963:18:2;;17982:3;17987:5;17993:1;17987:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;17963:53:2;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18034:12;18064:17;18139:3;-1:-1:-1;;;;;18139:14:2;18154:4;18139:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18121:38:2;;-1:-1:-1;18121:38:2;-1:-1:-1;18188:36:2;18121:38;18209:14;18212:11;18209:2;:14;:::i;18188:36::-;18181:43;;18265:7;:37;;;;;-1:-1:-1;;;18276:4:2;:26;18265:37;18261:539;;;18400:86;18410:3;18415:4;18448:3;18453:11;18431:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18421:45;;;;;;18476:5;18482:1;18476:8;;;;;;;;:::i;:::-;;;;;;;18468:17;;18400:86;;;;;;;;;:::i;:::-;;;;;;;;18587:5;18593:1;18587:8;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;18508:15:2;;18579:17;18508:15;;;;;;;;;;-1:-1:-1;;;;;;18508:21:2;;;;;;;;;18540:34;;18587:8;;18508:21;;18540:34;;18557:3;;18562:11;;18540:34;;:::i;:::-;;;;;;;;;;;;;18530:45;;;;;;18508:68;;;;;;;;;;;:88;;;;18689:4;18618;:10;;:15;18629:3;-1:-1:-1;;;;;18618:15:2;-1:-1:-1;;;;;18618:15:2;;;;;;;;;;;;:21;18634:4;-1:-1:-1;;;;;18618:21:2;;-1:-1:-1;;;;;18618:21:2;;;;;;;;;;;;;:68;18667:3;18672:11;18650:34;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18640:45;;;;;;18618:68;;;;;;;;;;;;:75;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15396:37:2;;-1:-1:-1;;;;;18715:18:2;;18734:3;18739:5;18745:1;18739:8;;;;;;;;:::i;:::-;;;;;;;18749:4;18715:39;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18776:5;;;;;18261:539;-1:-1:-1;;;;;;;;;;;15396:37:2;;-1:-1:-1;;;;;18817:18:2;;18836:3;18841:5;18847:1;18841:8;;;;;;;;:::i;:::-;;;;;;;18851:4;18817:39;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17724:1147;;;17719:3;;;;;:::i;:::-;;;;17681:1190;;;;17645:1349;;;18901:82;;;-1:-1:-1;;;18901:82:2;;15489:2:10;18901:82:2;;;15471:21:10;15508:18;;;15501:30;;;;15567:34;15547:18;;;15540:62;15638:34;15618:18;;;15611:62;15690:19;;18901:82:2;15287:428:10;18901:82:2;-1:-1:-1;;;;;19012:15:2;;;;;;:10;;;:15;;;;;;;;-1:-1:-1;;;;;;19012:21:2;;;;;;;;;19044:34;;19012:21;;:15;19044:34;;19061:3;;19066:11;;19044:34;;:::i;:::-;;;;-1:-1:-1;;19044:34:2;;;;;;;;;19034:45;;19044:34;19034:45;;;;19012:68;;;;;;;;;;-1:-1:-1;19012:68:2;;;;19004:128;;;;-1:-1:-1;;;19004:128:2;;15922:2:10;19004:128:2;;;15904:21:10;15961:2;15941:18;;;15934:30;16000:34;15980:18;;;15973:62;-1:-1:-1;;;16051:18:10;;;16044:45;16106:19;;19004:128:2;15720:411:10;19004:128:2;19150:12;;;19143:19;;-1:-1:-1;;;;;;19143:19:2;;;19179:9;;;19172:16;;-1:-1:-1;;19172:16:2;;;19198:17;-1:-1:-1;19205:10:2;;19150:12;19198:17;:::i;:::-;19225:18;19232:11;;;19225:18;;;-1:-1:-1;;;;;19261:15:2;;;;;;;;;;;;-1:-1:-1;;;;;;19261:21:2;;;;;;;;;19293:34;;19261:21;;19225:18;19293:34;;19310:3;;19315:11;;19293:34;;:::i;:::-;;;;;;;;;;;;;19283:45;;;;;;19261:68;;;;;;;;;;;;19254:75;;;;;;;;;16122:3214;;;:::o;23110:297::-;23184:7;23203:11;23225;23250:2;23239:1;:8;:13;:29;;23260:1;:8;23239:29;;;23255:2;23239:29;23225:43;;23283:6;23278:103;23299:3;23295:1;:7;23278:103;;;23364:5;:1;23368;23364:5;:::i;:::-;23338:1;23340:10;23349:1;23340:6;:10;:::i;:::-;23338:13;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;23338:13:2;23330:40;;23323:47;;;;;23304:3;;;;:::i;:::-;;;;23278:103;;;-1:-1:-1;23397:3:2;;23110:297;-1:-1:-1;;;;23110:297:2:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:173:10:-;82:20;;-1:-1:-1;;;;;131:31:10;;121:42;;111:70;;177:1;174;167:12;192:254;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;360:29;379:9;360:29;:::i;:::-;350:39;436:2;421:18;;;;408:32;;-1:-1:-1;;;192:254:10:o;451:186::-;510:6;563:2;551:9;542:7;538:23;534:32;531:52;;;579:1;576;569:12;531:52;602:29;621:9;602:29;:::i;:::-;592:39;451:186;-1:-1:-1;;;451:186:10:o;642:260::-;710:6;718;771:2;759:9;750:7;746:23;742:32;739:52;;;787:1;784;777:12;739:52;810:29;829:9;810:29;:::i;:::-;800:39;;858:38;892:2;881:9;877:18;858:38;:::i;:::-;848:48;;642:260;;;;;:::o;907:127::-;968:10;963:3;959:20;956:1;949:31;999:4;996:1;989:15;1023:4;1020:1;1013:15;1039:275;1110:2;1104:9;1175:2;1156:13;;-1:-1:-1;;1152:27:10;1140:40;;1210:18;1195:34;;1231:22;;;1192:62;1189:88;;;1257:18;;:::i;:::-;1293:2;1286:22;1039:275;;-1:-1:-1;1039:275:10:o;1319:187::-;1368:4;1401:18;1393:6;1390:30;1387:56;;;1423:18;;:::i;:::-;-1:-1:-1;1489:2:10;1468:15;-1:-1:-1;;1464:29:10;1495:4;1460:40;;1319:187::o;1511:338::-;1576:5;1605:53;1621:36;1650:6;1621:36;:::i;:::-;1605:53;:::i;:::-;1596:62;;1681:6;1674:5;1667:21;1721:3;1712:6;1707:3;1703:16;1700:25;1697:45;;;1738:1;1735;1728:12;1697:45;1787:6;1782:3;1775:4;1768:5;1764:16;1751:43;1841:1;1834:4;1825:6;1818:5;1814:18;1810:29;1803:40;1511:338;;;;;:::o;1854:222::-;1897:5;1950:3;1943:4;1935:6;1931:17;1927:27;1917:55;;1968:1;1965;1958:12;1917:55;1990:80;2066:3;2057:6;2044:20;2037:4;2029:6;2025:17;1990:80;:::i;2081:671::-;2168:6;2176;2229:2;2217:9;2208:7;2204:23;2200:32;2197:52;;;2245:1;2242;2235:12;2197:52;2285:9;2272:23;2314:18;2355:2;2347:6;2344:14;2341:34;;;2371:1;2368;2361:12;2341:34;2394:50;2436:7;2427:6;2416:9;2412:22;2394:50;:::i;:::-;2384:60;;2497:2;2486:9;2482:18;2469:32;2453:48;;2526:2;2516:8;2513:16;2510:36;;;2542:1;2539;2532:12;2510:36;-1:-1:-1;2565:24:10;;2620:4;2612:13;;2608:27;-1:-1:-1;2598:55:10;;2649:1;2646;2639:12;2598:55;2672:74;2738:7;2733:2;2720:16;2715:2;2711;2707:11;2672:74;:::i;:::-;2662:84;;;2081:671;;;;;:::o;2965:180::-;3024:6;3077:2;3065:9;3056:7;3052:23;3048:32;3045:52;;;3093:1;3090;3083:12;3045:52;-1:-1:-1;3116:23:10;;2965:180;-1:-1:-1;2965:180:10:o;3369:328::-;3446:6;3454;3462;3515:2;3503:9;3494:7;3490:23;3486:32;3483:52;;;3531:1;3528;3521:12;3483:52;3554:29;3573:9;3554:29;:::i;:::-;3544:39;;3602:38;3636:2;3625:9;3621:18;3602:38;:::i;:::-;3592:48;;3687:2;3676:9;3672:18;3659:32;3649:42;;3369:328;;;;;:::o;3702:118::-;3788:5;3781:13;3774:21;3767:5;3764:32;3754:60;;3810:1;3807;3800:12;3825:458;3908:6;3916;3924;3932;3985:3;3973:9;3964:7;3960:23;3956:33;3953:53;;;4002:1;3999;3992:12;3953:53;4025:29;4044:9;4025:29;:::i;:::-;4015:39;;4073:38;4107:2;4096:9;4092:18;4073:38;:::i;:::-;4063:48;;4158:2;4147:9;4143:18;4130:32;4120:42;;4212:2;4201:9;4197:18;4184:32;4225:28;4247:5;4225:28;:::i;:::-;3825:458;;;;-1:-1:-1;3825:458:10;;-1:-1:-1;;3825:458:10:o;4288:322::-;4357:6;4410:2;4398:9;4389:7;4385:23;4381:32;4378:52;;;4426:1;4423;4416:12;4378:52;4466:9;4453:23;4499:18;4491:6;4488:30;4485:50;;;4531:1;4528;4521:12;4485:50;4554;4596:7;4587:6;4576:9;4572:22;4554:50;:::i;:::-;4544:60;4288:322;-1:-1:-1;;;;4288:322:10:o;4807:274::-;-1:-1:-1;;;;;4999:32:10;;;;4981:51;;5063:2;5048:18;;5041:34;4969:2;4954:18;;4807:274::o;5720:258::-;5792:1;5802:113;5816:6;5813:1;5810:13;5802:113;;;5892:11;;;5886:18;5873:11;;;5866:39;5838:2;5831:10;5802:113;;;5933:6;5930:1;5927:13;5924:48;;;5968:1;5959:6;5954:3;5950:16;5943:27;5924:48;;5720:258;;;:::o;5983:383::-;6132:2;6121:9;6114:21;6095:4;6164:6;6158:13;6207:6;6202:2;6191:9;6187:18;6180:34;6223:66;6282:6;6277:2;6266:9;6262:18;6257:2;6249:6;6245:15;6223:66;:::i;:::-;6350:2;6329:15;-1:-1:-1;;6325:29:10;6310:45;;;;6357:2;6306:54;;5983:383;-1:-1:-1;;5983:383:10:o;6371:635::-;6450:6;6503:2;6491:9;6482:7;6478:23;6474:32;6471:52;;;6519:1;6516;6509:12;6471:52;6552:9;6546:16;6585:18;6577:6;6574:30;6571:50;;;6617:1;6614;6607:12;6571:50;6640:22;;6693:4;6685:13;;6681:27;-1:-1:-1;6671:55:10;;6722:1;6719;6712:12;6671:55;6751:2;6745:9;6776:49;6792:32;6821:2;6792:32;:::i;6776:49::-;6848:2;6841:5;6834:17;6888:7;6883:2;6878;6874;6870:11;6866:20;6863:33;6860:53;;;6909:1;6906;6899:12;6860:53;6922:54;6973:2;6968;6961:5;6957:14;6952:2;6948;6944:11;6922:54;:::i;:::-;6995:5;6371:635;-1:-1:-1;;;;;6371:635:10:o;7011:466::-;7186:3;7224:6;7218:13;7240:53;7286:6;7281:3;7274:4;7266:6;7262:17;7240:53;:::i;:::-;7356:13;;7315:16;;;;7378:57;7356:13;7315:16;7412:4;7400:17;;7378:57;:::i;:::-;7451:20;;7011:466;-1:-1:-1;;;;7011:466:10:o;7900:127::-;7961:10;7956:3;7952:20;7949:1;7942:31;7992:4;7989:1;7982:15;8016:4;8013:1;8006:15;8032:125;8072:4;8100:1;8097;8094:8;8091:34;;;8105:18;;:::i;:::-;-1:-1:-1;8142:9:10;;8032:125::o;8344:274::-;8473:3;8511:6;8505:13;8527:53;8573:6;8568:3;8561:4;8553:6;8549:17;8527:53;:::i;:::-;8596:16;;;;;8344:274;-1:-1:-1;;8344:274:10:o;8623:184::-;8693:6;8746:2;8734:9;8725:7;8721:23;8717:32;8714:52;;;8762:1;8759;8752:12;8714:52;-1:-1:-1;8785:16:10;;8623:184;-1:-1:-1;8623:184:10:o;8812:128::-;8852:3;8883:1;8879:6;8876:1;8873:13;8870:39;;;8889:18;;:::i;:::-;-1:-1:-1;8925:9:10;;8812:128::o;9636:371::-;-1:-1:-1;;;;;;9821:33:10;;9809:46;;9878:13;;9791:3;;9900:61;9878:13;9950:1;9941:11;;9934:4;9922:17;;9900:61;:::i;:::-;9981:16;;;;9999:1;9977:24;;9636:371;-1:-1:-1;;;9636:371:10:o;10012:245::-;10079:6;10132:2;10120:9;10111:7;10107:23;10103:32;10100:52;;;10148:1;10145;10138:12;10100:52;10180:9;10174:16;10199:28;10221:5;10199:28;:::i;11347:345::-;-1:-1:-1;;;;;11567:32:10;;;;11549:51;;11631:2;11616:18;;11609:34;;;;11674:2;11659:18;;11652:34;11537:2;11522:18;;11347:345::o;11697:610::-;11943:13;;11886:3;;11917;;11996:4;12023:15;;;11886:3;12066:175;12080:6;12077:1;12074:13;12066:175;;;12143:13;;12129:28;;12179:14;;;;12216:15;;;;12102:1;12095:9;12066:175;;;-1:-1:-1;;12250:21:10;;;-1:-1:-1;12287:14:10;;;;;-1:-1:-1;;;11697:610:10:o;12312:168::-;12352:7;12418:1;12414;12410:6;12406:14;12403:1;12400:21;12395:1;12388:9;12381:17;12377:45;12374:71;;;12425:18;;:::i;:::-;-1:-1:-1;12465:9:10;;12312:168::o;12674:556::-;12876:2;12858:21;;;12915:3;12895:18;;;12888:31;12955:34;12950:2;12935:18;;12928:62;13026:34;13021:2;13006:18;;12999:62;13098:34;13092:3;13077:19;;13070:63;-1:-1:-1;;;13164:3:10;13149:19;;13142:46;13220:3;13205:19;;12674:556::o;13235:127::-;13296:10;13291:3;13287:20;13284:1;13277:31;13327:4;13324:1;13317:15;13351:4;13348:1;13341:15;13367:135;13406:3;13427:17;;;13424:43;;13447:18;;:::i;:::-;-1:-1:-1;13494:1:10;13483:13;;13367:135::o;13507:709::-;13572:5;13625:3;13618:4;13610:6;13606:17;13602:27;13592:55;;13643:1;13640;13633:12;13592:55;13672:6;13666:13;13698:4;13721:18;13717:2;13714:26;13711:52;;;13743:18;;:::i;:::-;13789:2;13786:1;13782:10;13812:28;13836:2;13832;13828:11;13812:28;:::i;:::-;13874:15;;;13944;;;13940:24;;;13905:12;;;;13976:15;;;13973:35;;;14004:1;14001;13994:12;13973:35;14040:2;14032:6;14028:15;14017:26;;14052:135;14068:6;14063:3;14060:15;14052:135;;;14134:10;;14122:23;;14085:12;;;;14165;;;;14052:135;;;14205:5;13507:709;-1:-1:-1;;;;;;;13507:709:10:o;14221:614::-;14350:6;14358;14411:2;14399:9;14390:7;14386:23;14382:32;14379:52;;;14427:1;14424;14417:12;14379:52;14460:9;14454:16;14489:18;14530:2;14522:6;14519:14;14516:34;;;14546:1;14543;14536:12;14516:34;14569:72;14633:7;14624:6;14613:9;14609:22;14569:72;:::i;:::-;14559:82;;14687:2;14676:9;14672:18;14666:25;14650:41;;14716:2;14706:8;14703:16;14700:36;;;14732:1;14729;14722:12;14700:36;;14755:74;14821:7;14810:8;14799:9;14795:24;14755:74;:::i;14840:442::-;-1:-1:-1;;;;;15087:32:10;;;;15069:51;;-1:-1:-1;;;;;;15156:33:10;;;;15151:2;15136:18;;15129:61;15221:2;15206:18;;15199:34;15264:2;15249:18;;15242:34;15056:3;15041:19;;14840:442::o", 747 | "linkReferences": {} 748 | }, 749 | "methodIdentifiers": { 750 | "IS_SCRIPT()": "f8ccbf47", 751 | "IS_TEST()": "fa7626d4", 752 | "deal(address,address,uint256)": "6bce989b", 753 | "deal(address,address,uint256,bool)": "97754ae9", 754 | "deal(address,uint256)": "c88a5e6d", 755 | "deployCode(string)": "9a8325a0", 756 | "deployCode(string,bytes)": "29ce9dde", 757 | "failed()": "ba414fa6", 758 | "hoax(address)": "233240ee", 759 | "hoax(address,address)": "29a9e300", 760 | "hoax(address,address,uint256)": "af9bbe5f", 761 | "hoax(address,uint256)": "e9a79a7b", 762 | "rewind(uint256)": "2d6c17a3", 763 | "setUp()": "0a9254e4", 764 | "skip(uint256)": "b9c071b4", 765 | "startHoax(address)": "6f597075", 766 | "startHoax(address,address)": "d06d8229", 767 | "startHoax(address,address,uint256)": "3bf82db1", 768 | "startHoax(address,uint256)": "108554f2", 769 | "testExample()": "3f5a4a2a", 770 | "tip(address,address,uint256)": "d82555f1", 771 | "vm()": "3a768463" 772 | }, 773 | "ast": { 774 | "absolutePath": "test/Contract.t.sol", 775 | "id": 21712, 776 | "exportedSymbols": { 777 | "ContractTest": [ 778 | 21711 779 | ], 780 | "DSTest": [ 781 | 1786 782 | ], 783 | "Script": [ 784 | 1818 785 | ], 786 | "StdStorage": [ 787 | 3235 788 | ], 789 | "Test": [ 790 | 3137 791 | ], 792 | "Vm": [ 793 | 4964 794 | ], 795 | "console": [ 796 | 13028 797 | ], 798 | "console2": [ 799 | 21092 800 | ], 801 | "stdError": [ 802 | 3207 803 | ], 804 | "stdMath": [ 805 | 4484 806 | ], 807 | "stdStorage": [ 808 | 4337 809 | ] 810 | }, 811 | "nodeType": "SourceUnit", 812 | "src": "39:190:9", 813 | "nodes": [ 814 | { 815 | "id": 21695, 816 | "nodeType": "PragmaDirective", 817 | "src": "39:24:9", 818 | "literals": [ 819 | "solidity", 820 | "^", 821 | "0.8", 822 | ".13" 823 | ] 824 | }, 825 | { 826 | "id": 21696, 827 | "nodeType": "ImportDirective", 828 | "src": "65:28:9", 829 | "absolutePath": "lib/forge-std/src/Test.sol", 830 | "file": "forge-std/Test.sol", 831 | "nameLocation": "-1:-1:-1", 832 | "scope": 21712, 833 | "sourceUnit": 4485, 834 | "symbolAliases": [], 835 | "unitAlias": "" 836 | }, 837 | { 838 | "id": 21711, 839 | "nodeType": "ContractDefinition", 840 | "src": "95:133:9", 841 | "nodes": [ 842 | { 843 | "id": 21702, 844 | "nodeType": "FunctionDefinition", 845 | "src": "131:26:9", 846 | "body": { 847 | "id": 21701, 848 | "nodeType": "Block", 849 | "src": "155:2:9", 850 | "statements": [] 851 | }, 852 | "functionSelector": "0a9254e4", 853 | "implemented": true, 854 | "kind": "function", 855 | "modifiers": [], 856 | "name": "setUp", 857 | "nameLocation": "140:5:9", 858 | "parameters": { 859 | "id": 21699, 860 | "nodeType": "ParameterList", 861 | "parameters": [], 862 | "src": "145:2:9" 863 | }, 864 | "returnParameters": { 865 | "id": 21700, 866 | "nodeType": "ParameterList", 867 | "parameters": [], 868 | "src": "155:0:9" 869 | }, 870 | "scope": 21711, 871 | "stateMutability": "nonpayable", 872 | "virtual": false, 873 | "visibility": "public" 874 | }, 875 | { 876 | "id": 21710, 877 | "nodeType": "FunctionDefinition", 878 | "src": "163:63:9", 879 | "body": { 880 | "id": 21709, 881 | "nodeType": "Block", 882 | "src": "193:33:9", 883 | "statements": [ 884 | { 885 | "expression": { 886 | "arguments": [ 887 | { 888 | "hexValue": "74727565", 889 | "id": 21706, 890 | "isConstant": false, 891 | "isLValue": false, 892 | "isPure": true, 893 | "kind": "bool", 894 | "lValueRequested": false, 895 | "nodeType": "Literal", 896 | "src": "214:4:9", 897 | "typeDescriptions": { 898 | "typeIdentifier": "t_bool", 899 | "typeString": "bool" 900 | }, 901 | "value": "true" 902 | } 903 | ], 904 | "expression": { 905 | "argumentTypes": [ 906 | { 907 | "typeIdentifier": "t_bool", 908 | "typeString": "bool" 909 | } 910 | ], 911 | "id": 21705, 912 | "name": "assertTrue", 913 | "nodeType": "Identifier", 914 | "overloadedDeclarations": [ 915 | 269, 916 | 290 917 | ], 918 | "referencedDeclaration": 269, 919 | "src": "203:10:9", 920 | "typeDescriptions": { 921 | "typeIdentifier": "t_function_internal_nonpayable$_t_bool_$returns$__$", 922 | "typeString": "function (bool)" 923 | } 924 | }, 925 | "id": 21707, 926 | "isConstant": false, 927 | "isLValue": false, 928 | "isPure": false, 929 | "kind": "functionCall", 930 | "lValueRequested": false, 931 | "names": [], 932 | "nodeType": "FunctionCall", 933 | "src": "203:16:9", 934 | "tryCall": false, 935 | "typeDescriptions": { 936 | "typeIdentifier": "t_tuple$__$", 937 | "typeString": "tuple()" 938 | } 939 | }, 940 | "id": 21708, 941 | "nodeType": "ExpressionStatement", 942 | "src": "203:16:9" 943 | } 944 | ] 945 | }, 946 | "functionSelector": "3f5a4a2a", 947 | "implemented": true, 948 | "kind": "function", 949 | "modifiers": [], 950 | "name": "testExample", 951 | "nameLocation": "172:11:9", 952 | "parameters": { 953 | "id": 21703, 954 | "nodeType": "ParameterList", 955 | "parameters": [], 956 | "src": "183:2:9" 957 | }, 958 | "returnParameters": { 959 | "id": 21704, 960 | "nodeType": "ParameterList", 961 | "parameters": [], 962 | "src": "193:0:9" 963 | }, 964 | "scope": 21711, 965 | "stateMutability": "nonpayable", 966 | "virtual": false, 967 | "visibility": "public" 968 | } 969 | ], 970 | "abstract": false, 971 | "baseContracts": [ 972 | { 973 | "baseName": { 974 | "id": 21697, 975 | "name": "Test", 976 | "nodeType": "IdentifierPath", 977 | "referencedDeclaration": 3137, 978 | "src": "120:4:9" 979 | }, 980 | "id": 21698, 981 | "nodeType": "InheritanceSpecifier", 982 | "src": "120:4:9" 983 | } 984 | ], 985 | "canonicalName": "ContractTest", 986 | "contractDependencies": [], 987 | "contractKind": "contract", 988 | "fullyImplemented": true, 989 | "linearizedBaseContracts": [ 990 | 21711, 991 | 3137, 992 | 1818, 993 | 1786 994 | ], 995 | "name": "ContractTest", 996 | "nameLocation": "104:12:9", 997 | "scope": 21712, 998 | "usedErrors": [] 999 | } 1000 | ], 1001 | "license": "UNLICENSED" 1002 | }, 1003 | "id": 9 1004 | } -------------------------------------------------------------------------------- /out/Protected.s.sol/ProtectedScript.json: -------------------------------------------------------------------------------- 1 | { 2 | "abi": [ 3 | { 4 | "inputs": [], 5 | "name": "IS_SCRIPT", 6 | "outputs": [ 7 | { 8 | "internalType": "bool", 9 | "name": "", 10 | "type": "bool" 11 | } 12 | ], 13 | "stateMutability": "view", 14 | "type": "function" 15 | }, 16 | { 17 | "inputs": [], 18 | "name": "run", 19 | "outputs": [], 20 | "stateMutability": "nonpayable", 21 | "type": "function" 22 | }, 23 | { 24 | "inputs": [], 25 | "name": "setUp", 26 | "outputs": [], 27 | "stateMutability": "nonpayable", 28 | "type": "function" 29 | }, 30 | { 31 | "inputs": [], 32 | "name": "vm", 33 | "outputs": [ 34 | { 35 | "internalType": "contract Vm", 36 | "name": "", 37 | "type": "address" 38 | } 39 | ], 40 | "stateMutability": "view", 41 | "type": "function" 42 | } 43 | ], 44 | "bytecode": { 45 | "object": "0x60806040526000805460ff1916600117905534801561001d57600080fd5b506114d08061002d6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a9254e4146100515780633a76846314610053578063c04062261461008b578063f8ccbf4714610093575b600080fd5b005b61006e737109709ecfa91a80626ff3989d68f67f5b1dd12d81565b6040516001600160a01b0390911681526020015b60405180910390f35b6100516100b0565b6000546100a09060ff1681565b6040519015158152602001610082565b6100bf6100bc81610196565b50565b6100f26040518060400160405280601281526020017123b2ba3a34b733903932b8bab2b9ba17171760711b815250610536565b6000806101336040518060400160405280601781526020017f68747470733a2f2f6874747062696e2e6f72672f676574000000000000000000815250610579565b9150915061017e8260405160200161014d91815260200190565b60408051601f198184030181529082905261016a91602001610e15565b604051602081830303815290604052610536565b6101928160405160200161016a9190610e45565b5050565b604051637ed1ec7d60e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d906000908290637ed1ec7d906101d090600401610e7b565b6020604051808303816000875af192505050801561020b575060408051601f3d908101601f1916820190925261020891810190610ea6565b60015b61043b573d808015610239576040519150601f19603f3d011682016040523d82523d6000602084013e61023e565b606091505b5061027d6040518060400160405280601781526020017f72656164696e6720666f756e6472792e746f6d6c2e2e2e000000000000000000815250610536565b6040516360f9bb1160e01b815260206004820152600c60248201526b199bdd5b991c9e4b9d1bdb5b60a21b60448201526000906001600160a01b038516906360f9bb11906064016000604051808303816000875af11580156102e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261030b9190810190610f59565b90506000610318826105c0565b90506103486103416040518060400160405280600381526020016266666960e81b8152506105c0565b82906105ed565b156104335761038b6040518060400160405280601d81526020017f466f756e642066666920696e7369646520666f756e6472792e746f6d6c000000815250610536565b6103bc6103b5604051806040016040528060068152602001650333334901e960d51b8152506105c0565b8290610616565b506103ce6103c98261063c565b610536565b6104286103f6604051806040016040528060048152602001637472756560e01b8152506105c0565b61042261041b604051806040016040528060018152602001600560f91b8152506105c0565b8490610616565b906106a5565b9350610433846106b9565b50505061043d565b505b604051631eac91f760e11b81526001600160a01b03831690633d5923ee9061046790600401610fa2565b600060405180830381600087803b15801561048157600080fd5b505af1158015610495573d6000803e3d6000fd5b505050506104a58363ffffffff16565b801561050c57604051631eac91f760e11b81526001600160a01b03831690633d5923ee906104d590600401610ff1565b600060405180830381600087803b1580156104ef57600080fd5b505af1158015610503573d6000803e3d6000fd5b50505050505050565b604051631eac91f760e11b81526001600160a01b03831690633d5923ee906104d590600401610fa2565b6100bc8160405160240161054a919061106b565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b1790526106f6565b604080516000808252602082019092526060908290816105a9565b60608152602001906001900390816105945790505b5090506105b68482610717565b9250925050915091565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b602080830151835183519284015160009361060b929184919061075c565b141590505b92915050565b6040805180820190915260008082526020820152610635838383610870565b5092915050565b60606000826000015167ffffffffffffffff81111561065d5761065d610ecf565b6040519080825280601f01601f191660200182016040528015610687576020820181803683370190505b5090506000602082019050610635818560200151866000015161091b565b60006106b18383610995565b159392505050565b60405181151560248201526100bc9060440160408051601f198184030181529190526020810180516001600160e01b03166332458eed60e01b1790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b600060606107518484604051806020016040528060008152506040518060400160405280600381526020016211d15560ea1b815250610a7a565b915091509250929050565b600080858411610863576020841161080f57600084156107a7576001610783866020611094565b61078e9060086110ab565b6107999060026111ae565b6107a39190611094565b1990505b83518116856107b689896111ba565b6107c09190611094565b805190935082165b8181146107fa578784116107e25787945050505050610868565b836107ec816111d2565b9450508284511690506107c8565b61080487856111ba565b945050505050610868565b83832061081c8588611094565b61082690876111ba565b91505b8582106108615784822080820361084e5761084486846111ba565b9350505050610868565b610859600184611094565b925050610829565b505b849150505b949350505050565b604080518082019091526000808252602082015260006108a28560000151866020015186600001518760200151610cc5565b6020808701805191860191909152519091506108be9082611094565b8352845160208601516108d191906111ba565b81036108e05760008552610912565b835183516108ee91906111ba565b855186906108fd908390611094565b905250835161090c90826111ba565b60208601525b50909392505050565b6020811061095357815183526109326020846111ba565b925061093f6020836111ba565b915061094c602082611094565b905061091b565b6000198115610982576001610969836020611094565b610975906101006111ae565b61097f9190611094565b90505b9151835183169219169190911790915250565b81518151600091908111156109a8575081515b6020808501519084015160005b83811015610a615782518251808214610a31576000196020871015610a10576001846109e2896020611094565b6109ec91906111ba565b6109f79060086110ab565b610a029060026111ae565b610a0c9190611094565b1990505b8181168382168181039114610a2e5797506106109650505050505050565b50505b610a3c6020866111ba565b9450610a496020856111ba565b93505050602081610a5a91906111ba565b90506109b5565b5084518651610a7091906111e9565b9695505050505050565b6040805160208101909152600080825290606090825b8651811015610ae95781878281518110610aac57610aac611228565b6020026020010151604051602001610ac592919061123e565b60405160208183030381529060405291508080610ae19061128c565b915050610a90565b508084604051602001610afd9291906112a5565b6040516020818303038152906040529050600085511115610b3d578085604051602001610b2b9291906112f2565b60405160208183030381529060405290505b60408051600380825260808201909252600091816020015b6060815260200190600190039081610b55579050509050604051806040016040528060028152602001610e6d60f31b81525081600081518110610b9a57610b9a611228565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110610bd357610bd3611228565b60200260200101819052508188604051602001610bf1929190611341565b60405160208183030381529060405281600281518110610c1357610c13611228565b6020908102919091010152604051638916046760e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790610c5890859060040161139c565b6000604051808303816000875af1158015610c77573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c9f919081019061141e565b905080806020019051810190610cb59190611453565b909a909950975050505050505050565b60008381868511610dd05760208511610d7f5760008515610d11576001610ced876020611094565b610cf89060086110ab565b610d039060026111ae565b610d0d9190611094565b1990505b84518116600087610d228b8b6111ba565b610d2c9190611094565b855190915083165b828114610d7157818610610d5957610d4c8b8b6111ba565b9650505050505050610868565b85610d638161128c565b965050838651169050610d34565b859650505050505050610868565b508383206000905b610d918689611094565b8211610dce57858320808203610dad5783945050505050610868565b610db86001856111ba565b9350508180610dc69061128c565b925050610d87565b505b610dda87876111ba565b979650505050505050565b60005b83811015610e00578181015183820152602001610de8565b83811115610e0f576000848401525b50505050565b67029ba30ba3ab99d160c51b815260008251610e38816008850160208701610de5565b9190910160080192915050565b6d0213cba32b9902932b9bab63a1d160951b815260008251610e6e81600e850160208701610de5565b91909101600e0192915050565b60208152600061061060208301600b81526a464f554e4452595f46464960a81b602082015260400190565b600060208284031215610eb857600080fd5b81518015158114610ec857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610f0057610f00610ecf565b604051601f8501601f19908116603f01168101908282118183101715610f2857610f28610ecf565b81604052809350858152868686011115610f4157600080fd5b610f4f866020830187610de5565b5050509392505050565b600060208284031215610f6b57600080fd5b815167ffffffffffffffff811115610f8257600080fd5b8201601f81018413610f9357600080fd5b61086884825160208401610ee5565b604081526000610fcd60408301600b81526a464f554e4452595f46464960a81b602082015260400190565b828103602093840152600581526466616c736560d81b928101929092525060400190565b60408152600061101c60408301600b81526a464f554e4452595f46464960a81b602082015260400190565b82810360209384015260048152637472756560e01b928101929092525060400190565b60008151808452611057816020860160208601610de5565b601f01601f19169290920160200192915050565b602081526000610ec8602083018461103f565b634e487b7160e01b600052601160045260246000fd5b6000828210156110a6576110a661107e565b500390565b60008160001904831182151516156110c5576110c561107e565b500290565b600181815b808511156111055781600019048211156110eb576110eb61107e565b808516156110f857918102915b93841c93908002906110cf565b509250929050565b60008261111c57506001610610565b8161112957506000610610565b816001811461113f576002811461114957611165565b6001915050610610565b60ff84111561115a5761115a61107e565b50506001821b610610565b5060208310610133831016604e8410600b8410161715611188575081810a610610565b61119283836110ca565b80600019048211156111a6576111a661107e565b029392505050565b6000610ec8838361110d565b600082198211156111cd576111cd61107e565b500190565b6000816111e1576111e161107e565b506000190190565b60008083128015600160ff1b8501841216156112075761120761107e565b6001600160ff1b03840183138116156112225761122261107e565b50500390565b634e487b7160e01b600052603260045260246000fd5b60008351611250818460208801610de5565b6316a4101160e11b9083019081528351611271816004840160208801610de5565b61011160f51b60049290910191820152600601949350505050565b60006001820161129e5761129e61107e565b5060010190565b600083516112b7818460208801610de5565b6301016ac160e51b90830190815283516112d8816004840160208801610de5565b600160fd1b60049290910191820152600501949350505050565b60008351611304818460208801610de5565b641016b2101160d91b9083019081528351611326816005840160208801610de5565b61011160f51b60059290910191820152600701949350505050565b7f2e2f6c69622f7375726c2f7372632f6375726c2e736820000000000000000000815260008351611379816017850160208801610de5565b835190830190611390816017840160208801610de5565b01601701949350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156113f157603f198886030184526113df85835161103f565b945092850192908501906001016113c3565b5092979650505050505050565b600082601f83011261140f57600080fd5b610ec883835160208501610ee5565b60006020828403121561143057600080fd5b815167ffffffffffffffff81111561144757600080fd5b610868848285016113fe565b6000806040838503121561146657600080fd5b82519150602083015167ffffffffffffffff81111561148457600080fd5b611490858286016113fe565b915050925092905056fea2646970667358221220b0bcbbe32315e3eea13a04ce962a850ac321d496afa5e1b9d92c7821e8f7b39664736f6c634300080f0033", 46 | "sourceMap": "206:539:6:-:0;;;171:28:0;;;-1:-1:-1;;171:28:0;195:4;171:28;;;206:539:6;;;;;;;;;;;;;;;;", 47 | "linkReferences": {} 48 | }, 49 | "deployedBytecode": { 50 | "object": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80630a9254e4146100515780633a76846314610053578063c04062261461008b578063f8ccbf4714610093575b600080fd5b005b61006e737109709ecfa91a80626ff3989d68f67f5b1dd12d81565b6040516001600160a01b0390911681526020015b60405180910390f35b6100516100b0565b6000546100a09060ff1681565b6040519015158152602001610082565b6100bf6100bc81610196565b50565b6100f26040518060400160405280601281526020017123b2ba3a34b733903932b8bab2b9ba17171760711b815250610536565b6000806101336040518060400160405280601781526020017f68747470733a2f2f6874747062696e2e6f72672f676574000000000000000000815250610579565b9150915061017e8260405160200161014d91815260200190565b60408051601f198184030181529082905261016a91602001610e15565b604051602081830303815290604052610536565b6101928160405160200161016a9190610e45565b5050565b604051637ed1ec7d60e01b8152737109709ecfa91a80626ff3989d68f67f5b1dd12d906000908290637ed1ec7d906101d090600401610e7b565b6020604051808303816000875af192505050801561020b575060408051601f3d908101601f1916820190925261020891810190610ea6565b60015b61043b573d808015610239576040519150601f19603f3d011682016040523d82523d6000602084013e61023e565b606091505b5061027d6040518060400160405280601781526020017f72656164696e6720666f756e6472792e746f6d6c2e2e2e000000000000000000815250610536565b6040516360f9bb1160e01b815260206004820152600c60248201526b199bdd5b991c9e4b9d1bdb5b60a21b60448201526000906001600160a01b038516906360f9bb11906064016000604051808303816000875af11580156102e3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261030b9190810190610f59565b90506000610318826105c0565b90506103486103416040518060400160405280600381526020016266666960e81b8152506105c0565b82906105ed565b156104335761038b6040518060400160405280601d81526020017f466f756e642066666920696e7369646520666f756e6472792e746f6d6c000000815250610536565b6103bc6103b5604051806040016040528060068152602001650333334901e960d51b8152506105c0565b8290610616565b506103ce6103c98261063c565b610536565b6104286103f6604051806040016040528060048152602001637472756560e01b8152506105c0565b61042261041b604051806040016040528060018152602001600560f91b8152506105c0565b8490610616565b906106a5565b9350610433846106b9565b50505061043d565b505b604051631eac91f760e11b81526001600160a01b03831690633d5923ee9061046790600401610fa2565b600060405180830381600087803b15801561048157600080fd5b505af1158015610495573d6000803e3d6000fd5b505050506104a58363ffffffff16565b801561050c57604051631eac91f760e11b81526001600160a01b03831690633d5923ee906104d590600401610ff1565b600060405180830381600087803b1580156104ef57600080fd5b505af1158015610503573d6000803e3d6000fd5b50505050505050565b604051631eac91f760e11b81526001600160a01b03831690633d5923ee906104d590600401610fa2565b6100bc8160405160240161054a919061106b565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b1790526106f6565b604080516000808252602082019092526060908290816105a9565b60608152602001906001900390816105945790505b5090506105b68482610717565b9250925050915091565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b602080830151835183519284015160009361060b929184919061075c565b141590505b92915050565b6040805180820190915260008082526020820152610635838383610870565b5092915050565b60606000826000015167ffffffffffffffff81111561065d5761065d610ecf565b6040519080825280601f01601f191660200182016040528015610687576020820181803683370190505b5090506000602082019050610635818560200151866000015161091b565b60006106b18383610995565b159392505050565b60405181151560248201526100bc9060440160408051601f198184030181529190526020810180516001600160e01b03166332458eed60e01b1790525b80516a636f6e736f6c652e6c6f67602083016000808483855afa5050505050565b600060606107518484604051806020016040528060008152506040518060400160405280600381526020016211d15560ea1b815250610a7a565b915091509250929050565b600080858411610863576020841161080f57600084156107a7576001610783866020611094565b61078e9060086110ab565b6107999060026111ae565b6107a39190611094565b1990505b83518116856107b689896111ba565b6107c09190611094565b805190935082165b8181146107fa578784116107e25787945050505050610868565b836107ec816111d2565b9450508284511690506107c8565b61080487856111ba565b945050505050610868565b83832061081c8588611094565b61082690876111ba565b91505b8582106108615784822080820361084e5761084486846111ba565b9350505050610868565b610859600184611094565b925050610829565b505b849150505b949350505050565b604080518082019091526000808252602082015260006108a28560000151866020015186600001518760200151610cc5565b6020808701805191860191909152519091506108be9082611094565b8352845160208601516108d191906111ba565b81036108e05760008552610912565b835183516108ee91906111ba565b855186906108fd908390611094565b905250835161090c90826111ba565b60208601525b50909392505050565b6020811061095357815183526109326020846111ba565b925061093f6020836111ba565b915061094c602082611094565b905061091b565b6000198115610982576001610969836020611094565b610975906101006111ae565b61097f9190611094565b90505b9151835183169219169190911790915250565b81518151600091908111156109a8575081515b6020808501519084015160005b83811015610a615782518251808214610a31576000196020871015610a10576001846109e2896020611094565b6109ec91906111ba565b6109f79060086110ab565b610a029060026111ae565b610a0c9190611094565b1990505b8181168382168181039114610a2e5797506106109650505050505050565b50505b610a3c6020866111ba565b9450610a496020856111ba565b93505050602081610a5a91906111ba565b90506109b5565b5084518651610a7091906111e9565b9695505050505050565b6040805160208101909152600080825290606090825b8651811015610ae95781878281518110610aac57610aac611228565b6020026020010151604051602001610ac592919061123e565b60405160208183030381529060405291508080610ae19061128c565b915050610a90565b508084604051602001610afd9291906112a5565b6040516020818303038152906040529050600085511115610b3d578085604051602001610b2b9291906112f2565b60405160208183030381529060405290505b60408051600380825260808201909252600091816020015b6060815260200190600190039081610b55579050509050604051806040016040528060028152602001610e6d60f31b81525081600081518110610b9a57610b9a611228565b6020026020010181905250604051806040016040528060028152602001612d6360f01b81525081600181518110610bd357610bd3611228565b60200260200101819052508188604051602001610bf1929190611341565b60405160208183030381529060405281600281518110610c1357610c13611228565b6020908102919091010152604051638916046760e01b8152600090737109709ecfa91a80626ff3989d68f67f5b1dd12d90638916046790610c5890859060040161139c565b6000604051808303816000875af1158015610c77573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c9f919081019061141e565b905080806020019051810190610cb59190611453565b909a909950975050505050505050565b60008381868511610dd05760208511610d7f5760008515610d11576001610ced876020611094565b610cf89060086110ab565b610d039060026111ae565b610d0d9190611094565b1990505b84518116600087610d228b8b6111ba565b610d2c9190611094565b855190915083165b828114610d7157818610610d5957610d4c8b8b6111ba565b9650505050505050610868565b85610d638161128c565b965050838651169050610d34565b859650505050505050610868565b508383206000905b610d918689611094565b8211610dce57858320808203610dad5783945050505050610868565b610db86001856111ba565b9350508180610dc69061128c565b925050610d87565b505b610dda87876111ba565b979650505050505050565b60005b83811015610e00578181015183820152602001610de8565b83811115610e0f576000848401525b50505050565b67029ba30ba3ab99d160c51b815260008251610e38816008850160208701610de5565b9190910160080192915050565b6d0213cba32b9902932b9bab63a1d160951b815260008251610e6e81600e850160208701610de5565b91909101600e0192915050565b60208152600061061060208301600b81526a464f554e4452595f46464960a81b602082015260400190565b600060208284031215610eb857600080fd5b81518015158114610ec857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115610f0057610f00610ecf565b604051601f8501601f19908116603f01168101908282118183101715610f2857610f28610ecf565b81604052809350858152868686011115610f4157600080fd5b610f4f866020830187610de5565b5050509392505050565b600060208284031215610f6b57600080fd5b815167ffffffffffffffff811115610f8257600080fd5b8201601f81018413610f9357600080fd5b61086884825160208401610ee5565b604081526000610fcd60408301600b81526a464f554e4452595f46464960a81b602082015260400190565b828103602093840152600581526466616c736560d81b928101929092525060400190565b60408152600061101c60408301600b81526a464f554e4452595f46464960a81b602082015260400190565b82810360209384015260048152637472756560e01b928101929092525060400190565b60008151808452611057816020860160208601610de5565b601f01601f19169290920160200192915050565b602081526000610ec8602083018461103f565b634e487b7160e01b600052601160045260246000fd5b6000828210156110a6576110a661107e565b500390565b60008160001904831182151516156110c5576110c561107e565b500290565b600181815b808511156111055781600019048211156110eb576110eb61107e565b808516156110f857918102915b93841c93908002906110cf565b509250929050565b60008261111c57506001610610565b8161112957506000610610565b816001811461113f576002811461114957611165565b6001915050610610565b60ff84111561115a5761115a61107e565b50506001821b610610565b5060208310610133831016604e8410600b8410161715611188575081810a610610565b61119283836110ca565b80600019048211156111a6576111a661107e565b029392505050565b6000610ec8838361110d565b600082198211156111cd576111cd61107e565b500190565b6000816111e1576111e161107e565b506000190190565b60008083128015600160ff1b8501841216156112075761120761107e565b6001600160ff1b03840183138116156112225761122261107e565b50500390565b634e487b7160e01b600052603260045260246000fd5b60008351611250818460208801610de5565b6316a4101160e11b9083019081528351611271816004840160208801610de5565b61011160f51b60049290910191820152600601949350505050565b60006001820161129e5761129e61107e565b5060010190565b600083516112b7818460208801610de5565b6301016ac160e51b90830190815283516112d8816004840160208801610de5565b600160fd1b60049290910191820152600501949350505050565b60008351611304818460208801610de5565b641016b2101160d91b9083019081528351611326816005840160208801610de5565b61011160f51b60059290910191820152600701949350505050565b7f2e2f6c69622f7375726c2f7372632f6375726c2e736820000000000000000000815260008351611379816017850160208801610de5565b835190830190611390816017840160208801610de5565b01601701949350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156113f157603f198886030184526113df85835161103f565b945092850192908501906001016113c3565b5092979650505050505050565b600082601f83011261140f57600080fd5b610ec883835160208501610ee5565b60006020828403121561143057600080fd5b815167ffffffffffffffff81111561144757600080fd5b610868848285016113fe565b6000806040838503121561146657600080fd5b82519150602083015167ffffffffffffffff81111561148457600080fd5b611490858286016113fe565b915050925092905056fea2646970667358221220b0bcbbe32315e3eea13a04ce962a850ac321d496afa5e1b9d92c7821e8f7b39664736f6c634300080f0033", 51 | "sourceMap": "206:539:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;278:26;;322:38:0;;251:64;322:38;;;;;-1:-1:-1;;;;;188:32:8;;;170:51;;158:2;143:18;322:38:0;;;;;;;;657:85:6;;;:::i;171:28:0:-;;;;;;;;;;;;397:14:8;;390:22;372:41;;360:2;345:18;171:28:0;232:187:8;657:85:6;714:4;728:7;714:4;728;:7::i;:::-;679:63;657:85::o;310:341::-;385:34;;;;;;;;;;;;;;-1:-1:-1;;;385:34:6;;;:12;:34::i;:::-;430:14;446:17;467:31;:29;;;;;;;;;;;;;;;;;;:31::i;:::-;429:69;;;;508:67;565:6;554:18;;;;;;570:25:8;;558:2;543:18;;424:177;554:18:6;;;;-1:-1:-1;;554:18:6;;;;;;;;;;521:53;;554:18;521:53;;:::i;:::-;;;;;;;;;;;;;508:12;:67::i;:::-;585:59;637:4;598:45;;;;;;;;:::i;585:59::-;335:316;;310:341::o;1159:73:7:-;364:26;;-1:-1:-1;;;364:26:7;;261:64;;249:6;;261:64;;364:11;;:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;364:26:7;;;;;;;;-1:-1:-1;;364:26:7;;;;;;;;;;;;:::i;:::-;;;360:593;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;525:39;;;;;;;;;;;;;;;;;;:12;:39::i;:::-;593:28;;-1:-1:-1;;;593:28:7;;2647:2:8;593:28:7;;;2629:21:8;2686:2;2666:18;;;2659:30;-1:-1:-1;;;2705:18:8;;;2698:42;572:18:7;;-1:-1:-1;;;;;593:12:7;;;;;2757:18:8;;593:28:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;593:28:7;;;;;;;;;;;;:::i;:::-;572:49;;629:22;654:14;:4;:12;:14::i;:::-;629:39;;680:27;691:15;:13;;;;;;;;;;;;;-1:-1:-1;;;691:13:7;;;;:15::i;:::-;680:1;;:10;:27::i;:::-;676:271;;;719:45;;;;;;;;;;;;;;;;;;:12;:45::i;:::-;774:27;782:18;:16;;;;;;;;;;;;;-1:-1:-1;;;782:16:7;;;;:18::i;:::-;774:1;;:7;:27::i;:::-;;811:26;824:12;:1;:10;:12::i;:::-;811;:26::i;:::-;858:48;889:16;:14;;;;;;;;;;;;;-1:-1:-1;;;889:14:7;;;;:16::i;:::-;858:23;866:14;:12;;;;;;;;;;;;;-1:-1:-1;;;866:12:7;;;;:14::i;:::-;858:1;;:7;:23::i;:::-;:30;;:48::i;:::-;847:59;;916:22;929:8;916:12;:22::i;:::-;468:485;;440:513;360:593;;;-1:-1:-1;360:593:7;986:34;;-1:-1:-1;;;986:34:7;;-1:-1:-1;;;;;986:10:7;;;;;:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1221:6:::1;:4;:6;;:::i;:::-;1037:8:::0;1033:117;;;1055:33;;-1:-1:-1;;;1055:33:7;;-1:-1:-1;;;;;1055:10:7;;;;;:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;243:912;;1159:73;:::o;1033:117::-;1109:34;;-1:-1:-1;;;1109:34:7;;-1:-1:-1;;;;;1109:10:7;;;;;:34;;;;;:::i;6055:121:3:-;6110:59;6165:2;6126:42;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6126:42:3;;;;;;;;;;;;;;-1:-1:-1;;;;;6126:42:3;-1:-1:-1;;;6126:42:3;;;6110:15;:59::i;207:175:5:-;327:15;;;258:14;327:15;;;;;;;;;274:17;;258:14;;;327:15;;;;;;;;;;;;;;;;;;;;303:39;;359:16;363:4;369:5;359:3;:16::i;:::-;352:23;;;;;207:175;;;:::o;2904:210:4:-;-1:-1:-1;;;;;;;;;;;;;;;;;3077:30:4;;;;;;;;3083:18;;3077:30;;3036:15;;;3077:30;;;;;;;;2904:210::o;23797:180::-;23961:9;;;;;23910;;23932:11;;23945;;;;23878:4;;23901:56;;23910:9;23961;;23932:11;23901:8;:56::i;:::-;:69;;23894:76;;23797:180;;;;;:::o;21208:141::-;-1:-1:-1;;;;;;;;;;;;;;;;;21316:26:4;21322:4;21328:6;21336:5;21316;:26::i;:::-;;21208:141;;;;:::o;5286:265::-;5346:13;5371:17;5402:4;:9;;;5391:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5391:21:4;;5371:41;;5422:11;5473:2;5468:3;5464:12;5454:22;;5488:36;5495:6;5503:4;:9;;;5514:4;:9;;;5488:6;:36::i;8646:133::-;8724:4;8747:20;8755:4;8761:5;8747:7;:20::i;:::-;:25;;8646:133;-1:-1:-1;;;8646:133:4:o;6182:110:3:-;6244:40;;397:14:8;;390:22;6244:40:3;;;372:41:8;6228:57:3;;345:18:8;;6244:40:3;;;-1:-1:-1;;6244:40:3;;;;;;;;;;;;;;-1:-1:-1;;;;;6244:40:3;-1:-1:-1;;;6244:40:3;;;631:333;725:14;;581:42;855:2;842:16;;701:21;;725:14;842:16;581:42;891:5;880:68;871:77;;808:150;;631:333;:::o;388:165:5:-;464:14;480:17;516:30;521:4;527:7;516:30;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;516:30:5;;;:4;:30::i;:::-;509:37;;;;388:165;;;;;:::o;17083:1457:4:-;17183:4;17199:8;17235:7;17222:9;:20;17218:1292;;17275:2;17262:9;:15;17258:1242;;17297:12;17331:13;;17327:110;;17415:1;17396:14;17401:9;17396:2;:14;:::i;:::-;17391:20;;:1;:20;:::i;:::-;17385:27;;:1;:27;:::i;:::-;:31;;;;:::i;:::-;17383:34;;-1:-1:-1;17327:110:4;17520:16;;17516:27;;17589:9;17569:17;17579:7;17569;:17;:::i;:::-;:29;;;;:::i;:::-;17675:10;;17563:35;;-1:-1:-1;17671:21:4;;17712:222;17730:10;17719:7;:21;17712:222;;17775:7;17768:3;:14;17764:58;;17815:7;17808:14;;;;;;;;17764:58;17844:5;;;;:::i;:::-;;;;17909:4;17903:3;17897:10;17893:21;17882:32;;17712:222;;;17958:15;17964:9;17958:3;:15;:::i;:::-;17951:22;;;;;;;;17258:1242;18110:31;;;18177:19;18131:9;18177:7;:19;:::i;:::-;18166:31;;:7;:31;:::i;:::-;18160:37;;18215:271;18229:7;18222:3;:14;18215:271;;18321:25;;;18373:16;;;18369:68;;18422:15;18428:9;18422:3;:15;:::i;:::-;18415:22;;;;;;;18369:68;18459:8;18466:1;18459:8;;:::i;:::-;;;18238:248;18215:271;;;17994:506;17258:1242;18526:7;18519:14;;;17083:1457;;;;;;;:::o;20233:504::-;-1:-1:-1;;;;;;;;;;;;;;;;;20355:8:4;20366:55;20374:4;:9;;;20385:4;:9;;;20396:6;:11;;;20409:6;:11;;;20366:7;:55::i;:::-;20444:9;;;;;;20431:10;;;:22;;;;20482:9;20355:66;;-1:-1:-1;20476:15:4;;20355:66;20476:15;:::i;:::-;20463:28;;20524:9;;20512;;;;:21;;20524:9;20512:21;:::i;:::-;20505:3;:28;20501:208;;20586:1;20574:13;;20501:208;;;20644:11;;20631:10;;:24;;20644:11;20631:24;:::i;:::-;20618:37;;:4;;:37;;;;;:::i;:::-;;;-1:-1:-1;20687:11:4;;20681:17;;:3;:17;:::i;:::-;20669:9;;;:29;20501:208;-1:-1:-1;20725:5:4;;20233:504;-1:-1:-1;;;20233:504:4:o;2088:616::-;2221:2;2214:3;:9;2208:164;;2290:10;;2277:24;;2328:10;2336:2;2284:4;2328:10;:::i;:::-;;-1:-1:-1;2352:9:4;2359:2;2352:9;;:::i;:::-;;-1:-1:-1;2225:9:4;2232:2;2225:9;;:::i;:::-;;;2208:164;;;-1:-1:-1;;2454:7:4;;2450:66;;2504:1;2492:8;2497:3;2492:2;:8;:::i;:::-;2484:17;;:3;:17;:::i;:::-;:21;;;;:::i;:::-;2477:28;;2450:66;2567:10;;2622:11;;2618:22;;2579:9;;2563:26;2666:21;;;;2653:35;;;-1:-1:-1;2088:616:4:o;7356:1046::-;7466:9;;7489:10;;7435:3;;7466:9;7489:22;-1:-1:-1;7485:61:4;;;-1:-1:-1;7536:10:4;;7485:61;7572:9;;;;;7607:10;;;;7557:12;7627:720;7652:8;7646:3;:14;7627:720;;;7759:14;;7795:15;;7841:6;;;7837:445;;-1:-1:-1;;7999:2:4;7988:13;;7985:103;;;8067:1;8059:3;8043:13;8048:8;8043:2;:13;:::i;:::-;:19;;;;:::i;:::-;8038:25;;:1;:25;:::i;:::-;8032:32;;:1;:32;:::i;:::-;:36;;;;:::i;:::-;8030:39;8023:46;;7985:103;8163:8;;;8150;;;8149:23;;;;8198:9;8194:55;;8244:4;-1:-1:-1;8233:16:4;;-1:-1:-1;;;;;;;8233:16:4;8194:55;8105:163;7849:433;7837:445;8295:13;8306:2;8295:13;;:::i;:::-;;-1:-1:-1;8322:14:4;8334:2;8322:14;;:::i;:::-;;;7673:674;;7669:2;7662:9;;;;;:::i;:::-;;;7627:720;;;-1:-1:-1;8384:10:4;;8367:9;;8363:32;;8384:10;8363:32;:::i;:::-;8356:39;7356:1046;-1:-1:-1;;;;;;7356:1046:4:o;3254:886:5:-;3456:29;;;;;;;;;3411:14;3456:29;;;3411:14;3427:17;;3411:14;3496:134;3520:7;:14;3516:1;:18;3496:134;;;3582:10;3602:7;3610:1;3602:10;;;;;;;;:::i;:::-;;;;;;;3568:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3555:64;;3536:3;;;;;:::i;:::-;;;;3496:134;;;;3667:10;3687:6;3653:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3640:59;;3735:1;3720:4;3714:18;:22;3710:112;;;3779:10;3800:4;3765:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3752:59;;3710:112;3857:15;;;3870:1;3857:15;;;;;;;;;3832:22;;3857:15;;;;;;;;;;;;;;;;;;;;3832:40;;3882:16;;;;;;;;;;;;;-1:-1:-1;;;3882:16:5;;;:6;3889:1;3882:9;;;;;;;;:::i;:::-;;;;;;:16;;;;3908;;;;;;;;;;;;;-1:-1:-1;;;3908:16:5;;;:6;3915:1;3908:9;;;;;;;;:::i;:::-;;;;;;:16;;;;3999:10;4018:4;3953:75;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3934:6;3941:1;3934:9;;;;;;;;:::i;:::-;;;;;;;;;;:95;4058:14;;-1:-1:-1;;;4058:14:5;;4039:16;;135:64;;4058:6;;:14;;4065:6;;4058:14;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4058:14:5;;;;;;;;;;;;:::i;:::-;4039:33;;4111:3;4100:33;;;;;;;;;;;;:::i;:::-;4083:50;;;;-1:-1:-1;3254:886:5;-1:-1:-1;;;;;;;;3254:886:5:o;15477:1453:4:-;15576:4;15603:7;15576:4;15643:20;;;15639:1251;;15696:2;15683:9;:15;15679:1201;;15718:12;15752:13;;15748:110;;15836:1;15817:14;15822:9;15817:2;:14;:::i;:::-;15812:20;;:1;:20;:::i;:::-;15806:27;;:1;:27;:::i;:::-;:31;;;;:::i;:::-;15804:34;;-1:-1:-1;15748:110:4;15941:16;;15937:27;;15876:18;16015:9;15995:17;16005:7;15995;:17;:::i;:::-;:29;;;;:::i;:::-;16101:10;;15984:40;;-1:-1:-1;16097:21:4;;16138:228;16156:10;16145:7;:21;16138:228;;16201:3;16194;:10;16190:64;;16237:17;16247:7;16237;:17;:::i;:::-;16230:24;;;;;;;;;;16190:64;16276:5;;;;:::i;:::-;;;;16341:4;16335:3;16329:10;16325:21;16314:32;;16138:228;;;16390:3;16383:10;;;;;;;;;;15679:1201;-1:-1:-1;16530:31:4;;;16481:12;;16581:285;16602:19;16612:9;16602:7;:19;:::i;:::-;16595:3;:26;16581:285;;16713:25;;;16765:16;;;16761:56;;16814:3;16807:10;;;;;;;;16761:56;16839:8;16846:1;16839:8;;:::i;:::-;;;16630:236;16623:5;;;;;:::i;:::-;;;;16581:285;;;16414:466;15679:1201;16906:17;16916:7;16906;:17;:::i;:::-;16899:24;15477:1453;-1:-1:-1;;;;;;;15477:1453:4:o;606:258:8:-;678:1;688:113;702:6;699:1;696:13;688:113;;;778:11;;;772:18;759:11;;;752:39;724:2;717:10;688:113;;;819:6;816:1;813:13;810:48;;;854:1;845:6;840:3;836:16;829:27;810:48;;606:258;;;:::o;869:414::-;-1:-1:-1;;;1115:3:8;1108:23;1090:3;1160:6;1154:13;1176:61;1230:6;1226:1;1221:3;1217:11;1210:4;1202:6;1198:17;1176:61;:::i;:::-;1257:16;;;;1275:1;1253:24;;869:414;-1:-1:-1;;869:414:8:o;1288:423::-;-1:-1:-1;;;1535:3:8;1528:29;1510:3;1586:6;1580:13;1602:62;1657:6;1652:2;1647:3;1643:12;1636:4;1628:6;1624:17;1602:62;:::i;:::-;1684:16;;;;1702:2;1680:25;;1288:423;-1:-1:-1;;1288:423:8:o;1881:277::-;2083:2;2072:9;2065:21;2046:4;2103:49;2148:2;2137:9;2133:18;1793:2;1781:15;;-1:-1:-1;;;1821:4:8;1812:14;;1805:37;1867:2;1858:12;;1716:160;2163:277;2230:6;2283:2;2271:9;2262:7;2258:23;2254:32;2251:52;;;2299:1;2296;2289:12;2251:52;2331:9;2325:16;2384:5;2377:13;2370:21;2363:5;2360:32;2350:60;;2406:1;2403;2396:12;2350:60;2429:5;2163:277;-1:-1:-1;;;2163:277:8:o;2786:127::-;2847:10;2842:3;2838:20;2835:1;2828:31;2878:4;2875:1;2868:15;2902:4;2899:1;2892:15;2918:602;2994:5;3024:18;3065:2;3057:6;3054:14;3051:40;;;3071:18;;:::i;:::-;3146:2;3140:9;3114:2;3200:15;;-1:-1:-1;;3196:24:8;;;3222:2;3192:33;3188:42;3176:55;;;3246:18;;;3266:22;;;3243:46;3240:72;;;3292:18;;:::i;:::-;3332:10;3328:2;3321:22;3361:6;3352:15;;3391:6;3383;3376:22;3431:3;3422:6;3417:3;3413:16;3410:25;3407:45;;;3448:1;3445;3438:12;3407:45;3461:53;3507:6;3500:4;3492:6;3488:17;3483:3;3461:53;:::i;:::-;;;;2918:602;;;;;:::o;3525:459::-;3605:6;3658:2;3646:9;3637:7;3633:23;3629:32;3626:52;;;3674:1;3671;3664:12;3626:52;3707:9;3701:16;3740:18;3732:6;3729:30;3726:50;;;3772:1;3769;3762:12;3726:50;3795:22;;3848:4;3840:13;;3836:27;-1:-1:-1;3826:55:8;;3877:1;3874;3867:12;3826:55;3900:78;3970:7;3965:2;3959:9;3954:2;3950;3946:11;3900:78;:::i;3989:542::-;4292:2;4281:9;4274:21;4255:4;4318:49;4363:2;4352:9;4348:18;1793:2;1781:15;;-1:-1:-1;;;1821:4:8;1812:14;;1805:37;1867:2;1858:12;;1716:160;4318:49;4403:22;;;4398:2;4383:18;;;4376:50;4450:1;4435:17;;-1:-1:-1;;;4468:15:8;;;4461:32;;;;-1:-1:-1;4522:2:8;4510:15;;3989:542::o;4536:541::-;4839:2;4828:9;4821:21;4802:4;4865:49;4910:2;4899:9;4895:18;1793:2;1781:15;;-1:-1:-1;;;1821:4:8;1812:14;;1805:37;1867:2;1858:12;;1716:160;4865:49;4950:22;;;4945:2;4930:18;;;4923:50;4997:1;4982:17;;-1:-1:-1;;;5015:15:8;;;5008:31;;;;-1:-1:-1;5068:2:8;5056:15;;4536:541::o;5082:258::-;5124:3;5162:5;5156:12;5189:6;5184:3;5177:19;5205:63;5261:6;5254:4;5249:3;5245:14;5238:4;5231:5;5227:16;5205:63;:::i;:::-;5322:2;5301:15;-1:-1:-1;;5297:29:8;5288:39;;;;5329:4;5284:50;;5082:258;-1:-1:-1;;5082:258:8:o;5345:220::-;5494:2;5483:9;5476:21;5457:4;5514:45;5555:2;5544:9;5540:18;5532:6;5514:45;:::i;5570:127::-;5631:10;5626:3;5622:20;5619:1;5612:31;5662:4;5659:1;5652:15;5686:4;5683:1;5676:15;5702:125;5742:4;5770:1;5767;5764:8;5761:34;;;5775:18;;:::i;:::-;-1:-1:-1;5812:9:8;;5702:125::o;5832:168::-;5872:7;5938:1;5934;5930:6;5926:14;5923:1;5920:21;5915:1;5908:9;5901:17;5897:45;5894:71;;;5945:18;;:::i;:::-;-1:-1:-1;5985:9:8;;5832:168::o;6005:422::-;6094:1;6137:5;6094:1;6151:270;6172:7;6162:8;6159:21;6151:270;;;6231:4;6227:1;6223:6;6219:17;6213:4;6210:27;6207:53;;;6240:18;;:::i;:::-;6290:7;6280:8;6276:22;6273:55;;;6310:16;;;;6273:55;6389:22;;;;6349:15;;;;6151:270;;;6155:3;6005:422;;;;;:::o;6432:806::-;6481:5;6511:8;6501:80;;-1:-1:-1;6552:1:8;6566:5;;6501:80;6600:4;6590:76;;-1:-1:-1;6637:1:8;6651:5;;6590:76;6682:4;6700:1;6695:59;;;;6768:1;6763:130;;;;6675:218;;6695:59;6725:1;6716:10;;6739:5;;;6763:130;6800:3;6790:8;6787:17;6784:43;;;6807:18;;:::i;:::-;-1:-1:-1;;6863:1:8;6849:16;;6878:5;;6675:218;;6977:2;6967:8;6964:16;6958:3;6952:4;6949:13;6945:36;6939:2;6929:8;6926:16;6921:2;6915:4;6912:12;6908:35;6905:77;6902:159;;;-1:-1:-1;7014:19:8;;;7046:5;;6902:159;7093:34;7118:8;7112:4;7093:34;:::i;:::-;7163:6;7159:1;7155:6;7151:19;7142:7;7139:32;7136:58;;;7174:18;;:::i;:::-;7212:20;;6432:806;-1:-1:-1;;;6432:806:8:o;7243:131::-;7303:5;7332:36;7359:8;7353:4;7332:36;:::i;7379:128::-;7419:3;7450:1;7446:6;7443:1;7440:13;7437:39;;;7456:18;;:::i;:::-;-1:-1:-1;7492:9:8;;7379:128::o;7512:136::-;7551:3;7579:5;7569:39;;7588:18;;:::i;:::-;-1:-1:-1;;;7624:18:8;;7512:136::o;7653:267::-;7692:4;7721:9;;;7746:10;;-1:-1:-1;;;7765:19:8;;7758:27;;7742:44;7739:70;;;7789:18;;:::i;:::-;-1:-1:-1;;;;;7836:27:8;;7829:35;;7821:44;;7818:70;;;7868:18;;:::i;:::-;-1:-1:-1;;7905:9:8;;7653:267::o;7925:127::-;7986:10;7981:3;7977:20;7974:1;7967:31;8017:4;8014:1;8007:15;8041:4;8038:1;8031:15;8057:773;8416:3;8454:6;8448:13;8470:53;8516:6;8511:3;8504:4;8496:6;8492:17;8470:53;:::i;:::-;-1:-1:-1;;;8545:16:8;;;8570:35;;;8630:13;;8652:65;8630:13;8704:1;8693:13;;8686:4;8674:17;;8652:65;:::i;:::-;-1:-1:-1;;;8780:1:8;8736:20;;;;8772:10;;;8765:33;8822:1;8814:10;;8057:773;-1:-1:-1;;;;8057:773:8:o;8835:135::-;8874:3;8895:17;;;8892:43;;8915:18;;:::i;:::-;-1:-1:-1;8962:1:8;8951:13;;8835:135::o;8975:749::-;9334:3;9372:6;9366:13;9388:53;9434:6;9429:3;9422:4;9414:6;9410:17;9388:53;:::i;:::-;-1:-1:-1;;;9463:16:8;;;9488:21;;;9534:13;;9556:65;9534:13;9608:1;9597:13;;9590:4;9578:17;;9556:65;:::i;:::-;-1:-1:-1;;;9684:1:8;9640:20;;;;9676:10;;;9669:23;9716:1;9708:10;;8975:749;-1:-1:-1;;;;8975:749:8:o;9729:775::-;10088:3;10126:6;10120:13;10142:53;10188:6;10183:3;10176:4;10168:6;10164:17;10142:53;:::i;:::-;-1:-1:-1;;;10217:16:8;;;10242:37;;;10304:13;;10326:65;10304:13;10378:1;10367:13;;10360:4;10348:17;;10326:65;:::i;:::-;-1:-1:-1;;;10454:1:8;10410:20;;;;10446:10;;;10439:33;10496:1;10488:10;;9729:775;-1:-1:-1;;;;9729:775:8:o;10509:722::-;10905:25;10900:3;10893:38;10875:3;10960:6;10954:13;10976:62;11031:6;11026:2;11021:3;11017:12;11010:4;11002:6;10998:17;10976:62;:::i;:::-;11098:13;;11057:16;;;;11120:63;11098:13;11169:2;11161:11;;11154:4;11142:17;;11120:63;:::i;:::-;11203:17;11222:2;11199:26;;10509:722;-1:-1:-1;;;;10509:722:8:o;11236:803::-;11398:4;11427:2;11467;11456:9;11452:18;11497:2;11486:9;11479:21;11520:6;11555;11549:13;11586:6;11578;11571:22;11624:2;11613:9;11609:18;11602:25;;11686:2;11676:6;11673:1;11669:14;11658:9;11654:30;11650:39;11636:53;;11724:2;11716:6;11712:15;11745:1;11755:255;11769:6;11766:1;11763:13;11755:255;;;11862:2;11858:7;11846:9;11838:6;11834:22;11830:36;11825:3;11818:49;11890:40;11923:6;11914;11908:13;11890:40;:::i;:::-;11880:50;-1:-1:-1;11988:12:8;;;;11953:15;;;;11791:1;11784:9;11755:255;;;-1:-1:-1;12027:6:8;;11236:803;-1:-1:-1;;;;;;;11236:803:8:o;12044:236::-;12097:5;12150:3;12143:4;12135:6;12131:17;12127:27;12117:55;;12168:1;12165;12158:12;12117:55;12190:84;12270:3;12261:6;12255:13;12248:4;12240:6;12236:17;12190:84;:::i;12285:335::-;12364:6;12417:2;12405:9;12396:7;12392:23;12388:32;12385:52;;;12433:1;12430;12423:12;12385:52;12466:9;12460:16;12499:18;12491:6;12488:30;12485:50;;;12531:1;12528;12521:12;12485:50;12554:60;12606:7;12597:6;12586:9;12582:22;12554:60;:::i;12625:396::-;12713:6;12721;12774:2;12762:9;12753:7;12749:23;12745:32;12742:52;;;12790:1;12787;12780:12;12742:52;12819:9;12813:16;12803:26;;12873:2;12862:9;12858:18;12852:25;12900:18;12892:6;12889:30;12886:50;;;12932:1;12929;12922:12;12886:50;12955:60;13007:7;12998:6;12987:9;12983:22;12955:60;:::i;:::-;12945:70;;;12625:396;;;;;:::o", 52 | "linkReferences": {} 53 | }, 54 | "methodIdentifiers": { 55 | "IS_SCRIPT()": "f8ccbf47", 56 | "run()": "c0406226", 57 | "setUp()": "0a9254e4", 58 | "vm()": "3a768463" 59 | }, 60 | "ast": { 61 | "absolutePath": "script/Protected.s.sol", 62 | "id": 19088, 63 | "exportedSymbols": { 64 | "Protec": [ 65 | 19255 66 | ], 67 | "ProtectedScript": [ 68 | 19087 69 | ], 70 | "Script": [ 71 | 31 72 | ], 73 | "Surl": [ 74 | 19005 75 | ], 76 | "Vm": [ 77 | 511 78 | ], 79 | "console": [ 80 | 8575 81 | ], 82 | "console2": [ 83 | 16639 84 | ] 85 | }, 86 | "nodeType": "SourceUnit", 87 | "src": "39:707:6", 88 | "nodes": [ 89 | { 90 | "id": 19007, 91 | "nodeType": "PragmaDirective", 92 | "src": "39:24:6", 93 | "literals": [ 94 | "solidity", 95 | "^", 96 | "0.8", 97 | ".13" 98 | ] 99 | }, 100 | { 101 | "id": 19008, 102 | "nodeType": "ImportDirective", 103 | "src": "65:30:6", 104 | "absolutePath": "lib/forge-std/src/Script.sol", 105 | "file": "forge-std/Script.sol", 106 | "nameLocation": "-1:-1:-1", 107 | "scope": 19088, 108 | "sourceUnit": 32, 109 | "symbolAliases": [], 110 | "unitAlias": "" 111 | }, 112 | { 113 | "id": 19009, 114 | "nodeType": "ImportDirective", 115 | "src": "96:32:6", 116 | "absolutePath": "lib/forge-std/src/console2.sol", 117 | "file": "forge-std/console2.sol", 118 | "nameLocation": "-1:-1:-1", 119 | "scope": 19088, 120 | "sourceUnit": 16640, 121 | "symbolAliases": [], 122 | "unitAlias": "" 123 | }, 124 | { 125 | "id": 19011, 126 | "nodeType": "ImportDirective", 127 | "src": "130:35:6", 128 | "absolutePath": "lib/surl/src/Surl.sol", 129 | "file": "surl/Surl.sol", 130 | "nameLocation": "-1:-1:-1", 131 | "scope": 19088, 132 | "sourceUnit": 19006, 133 | "symbolAliases": [ 134 | { 135 | "foreign": { 136 | "id": 19010, 137 | "name": "Surl", 138 | "nodeType": "Identifier", 139 | "overloadedDeclarations": [], 140 | "referencedDeclaration": 19005, 141 | "src": "138:4:6", 142 | "typeDescriptions": {} 143 | }, 144 | "nameLocation": "-1:-1:-1" 145 | } 146 | ], 147 | "unitAlias": "" 148 | }, 149 | { 150 | "id": 19013, 151 | "nodeType": "ImportDirective", 152 | "src": "166:38:6", 153 | "absolutePath": "src/Protec.sol", 154 | "file": "src/Protec.sol", 155 | "nameLocation": "-1:-1:-1", 156 | "scope": 19088, 157 | "sourceUnit": 19256, 158 | "symbolAliases": [ 159 | { 160 | "foreign": { 161 | "id": 19012, 162 | "name": "Protec", 163 | "nodeType": "Identifier", 164 | "overloadedDeclarations": [], 165 | "referencedDeclaration": 19255, 166 | "src": "174:6:6", 167 | "typeDescriptions": {} 168 | }, 169 | "nameLocation": "-1:-1:-1" 170 | } 171 | ], 172 | "unitAlias": "" 173 | }, 174 | { 175 | "id": 19087, 176 | "nodeType": "ContractDefinition", 177 | "src": "206:539:6", 178 | "nodes": [ 179 | { 180 | "id": 19019, 181 | "nodeType": "UsingForDirective", 182 | "src": "255:17:6", 183 | "global": false, 184 | "libraryName": { 185 | "id": 19018, 186 | "name": "Surl", 187 | "nodeType": "IdentifierPath", 188 | "referencedDeclaration": 19005, 189 | "src": "261:4:6" 190 | } 191 | }, 192 | { 193 | "id": 19023, 194 | "nodeType": "FunctionDefinition", 195 | "src": "278:26:6", 196 | "body": { 197 | "id": 19022, 198 | "nodeType": "Block", 199 | "src": "302:2:6", 200 | "statements": [] 201 | }, 202 | "functionSelector": "0a9254e4", 203 | "implemented": true, 204 | "kind": "function", 205 | "modifiers": [], 206 | "name": "setUp", 207 | "nameLocation": "287:5:6", 208 | "parameters": { 209 | "id": 19020, 210 | "nodeType": "ParameterList", 211 | "parameters": [], 212 | "src": "292:2:6" 213 | }, 214 | "returnParameters": { 215 | "id": 19021, 216 | "nodeType": "ParameterList", 217 | "parameters": [], 218 | "src": "302:0:6" 219 | }, 220 | "scope": 19087, 221 | "stateMutability": "nonpayable", 222 | "virtual": false, 223 | "visibility": "public" 224 | }, 225 | { 226 | "id": 19072, 227 | "nodeType": "FunctionDefinition", 228 | "src": "310:341:6", 229 | "body": { 230 | "id": 19071, 231 | "nodeType": "Block", 232 | "src": "335:316:6", 233 | "statements": [ 234 | { 235 | "expression": { 236 | "arguments": [ 237 | { 238 | "hexValue": "47657474696e6720726571756573742e2e2e", 239 | "id": 19029, 240 | "isConstant": false, 241 | "isLValue": false, 242 | "isPure": true, 243 | "kind": "string", 244 | "lValueRequested": false, 245 | "nodeType": "Literal", 246 | "src": "398:20:6", 247 | "typeDescriptions": { 248 | "typeIdentifier": "t_stringliteral_29189c1d0955d67599c53a8edaff9708f26118f2804268543efc2fe815b38451", 249 | "typeString": "literal_string \"Getting request...\"" 250 | }, 251 | "value": "Getting request..." 252 | } 253 | ], 254 | "expression": { 255 | "argumentTypes": [ 256 | { 257 | "typeIdentifier": "t_stringliteral_29189c1d0955d67599c53a8edaff9708f26118f2804268543efc2fe815b38451", 258 | "typeString": "literal_string \"Getting request...\"" 259 | } 260 | ], 261 | "expression": { 262 | "id": 19026, 263 | "name": "console2", 264 | "nodeType": "Identifier", 265 | "overloadedDeclarations": [], 266 | "referencedDeclaration": 16639, 267 | "src": "385:8:6", 268 | "typeDescriptions": { 269 | "typeIdentifier": "t_type$_t_contract$_console2_$16639_$", 270 | "typeString": "type(library console2)" 271 | } 272 | }, 273 | "id": 19028, 274 | "isConstant": false, 275 | "isLValue": false, 276 | "isPure": false, 277 | "lValueRequested": false, 278 | "memberName": "log", 279 | "nodeType": "MemberAccess", 280 | "referencedDeclaration": 9170, 281 | "src": "385:12:6", 282 | "typeDescriptions": { 283 | "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$", 284 | "typeString": "function (string memory) view" 285 | } 286 | }, 287 | "id": 19030, 288 | "isConstant": false, 289 | "isLValue": false, 290 | "isPure": false, 291 | "kind": "functionCall", 292 | "lValueRequested": false, 293 | "names": [], 294 | "nodeType": "FunctionCall", 295 | "src": "385:34:6", 296 | "tryCall": false, 297 | "typeDescriptions": { 298 | "typeIdentifier": "t_tuple$__$", 299 | "typeString": "tuple()" 300 | } 301 | }, 302 | "id": 19031, 303 | "nodeType": "ExpressionStatement", 304 | "src": "385:34:6" 305 | }, 306 | { 307 | "assignments": [ 308 | 19033, 309 | 19035 310 | ], 311 | "declarations": [ 312 | { 313 | "constant": false, 314 | "id": 19033, 315 | "mutability": "mutable", 316 | "name": "status", 317 | "nameLocation": "438:6:6", 318 | "nodeType": "VariableDeclaration", 319 | "scope": 19071, 320 | "src": "430:14:6", 321 | "stateVariable": false, 322 | "storageLocation": "default", 323 | "typeDescriptions": { 324 | "typeIdentifier": "t_uint256", 325 | "typeString": "uint256" 326 | }, 327 | "typeName": { 328 | "id": 19032, 329 | "name": "uint256", 330 | "nodeType": "ElementaryTypeName", 331 | "src": "430:7:6", 332 | "typeDescriptions": { 333 | "typeIdentifier": "t_uint256", 334 | "typeString": "uint256" 335 | } 336 | }, 337 | "visibility": "internal" 338 | }, 339 | { 340 | "constant": false, 341 | "id": 19035, 342 | "mutability": "mutable", 343 | "name": "data", 344 | "nameLocation": "459:4:6", 345 | "nodeType": "VariableDeclaration", 346 | "scope": 19071, 347 | "src": "446:17:6", 348 | "stateVariable": false, 349 | "storageLocation": "memory", 350 | "typeDescriptions": { 351 | "typeIdentifier": "t_bytes_memory_ptr", 352 | "typeString": "bytes" 353 | }, 354 | "typeName": { 355 | "id": 19034, 356 | "name": "bytes", 357 | "nodeType": "ElementaryTypeName", 358 | "src": "446:5:6", 359 | "typeDescriptions": { 360 | "typeIdentifier": "t_bytes_storage_ptr", 361 | "typeString": "bytes" 362 | } 363 | }, 364 | "visibility": "internal" 365 | } 366 | ], 367 | "id": 19039, 368 | "initialValue": { 369 | "arguments": [], 370 | "expression": { 371 | "argumentTypes": [], 372 | "expression": { 373 | "hexValue": "68747470733a2f2f6874747062696e2e6f72672f676574", 374 | "id": 19036, 375 | "isConstant": false, 376 | "isLValue": false, 377 | "isPure": true, 378 | "kind": "string", 379 | "lValueRequested": false, 380 | "nodeType": "Literal", 381 | "src": "467:25:6", 382 | "typeDescriptions": { 383 | "typeIdentifier": "t_stringliteral_2fee64473faf6cbc3b7f40d675b818e8fc01cc75d325885451c145bc9da47aeb", 384 | "typeString": "literal_string \"https://httpbin.org/get\"" 385 | }, 386 | "value": "https://httpbin.org/get" 387 | }, 388 | "id": 19037, 389 | "isConstant": false, 390 | "isLValue": false, 391 | "isPure": false, 392 | "lValueRequested": false, 393 | "memberName": "get", 394 | "nodeType": "MemberAccess", 395 | "referencedDeclaration": 18520, 396 | "src": "467:29:6", 397 | "typeDescriptions": { 398 | "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$_t_uint256_$_t_bytes_memory_ptr_$bound_to$_t_string_memory_ptr_$", 399 | "typeString": "function (string memory) returns (uint256,bytes memory)" 400 | } 401 | }, 402 | "id": 19038, 403 | "isConstant": false, 404 | "isLValue": false, 405 | "isPure": false, 406 | "kind": "functionCall", 407 | "lValueRequested": false, 408 | "names": [], 409 | "nodeType": "FunctionCall", 410 | "src": "467:31:6", 411 | "tryCall": false, 412 | "typeDescriptions": { 413 | "typeIdentifier": "t_tuple$_t_uint256_$_t_bytes_memory_ptr_$", 414 | "typeString": "tuple(uint256,bytes memory)" 415 | } 416 | }, 417 | "nodeType": "VariableDeclarationStatement", 418 | "src": "429:69:6" 419 | }, 420 | { 421 | "expression": { 422 | "arguments": [ 423 | { 424 | "arguments": [ 425 | { 426 | "hexValue": "5374617475733a20", 427 | "id": 19046, 428 | "isConstant": false, 429 | "isLValue": false, 430 | "isPure": true, 431 | "kind": "string", 432 | "lValueRequested": false, 433 | "nodeType": "Literal", 434 | "src": "535:10:6", 435 | "typeDescriptions": { 436 | "typeIdentifier": "t_stringliteral_5ba784952bff4ba65bfec9ed051ebe5d5dc6b764c482f92a8daa0363fcca1111", 437 | "typeString": "literal_string \"Status: \"" 438 | }, 439 | "value": "Status: " 440 | }, 441 | { 442 | "arguments": [ 443 | { 444 | "arguments": [ 445 | { 446 | "id": 19051, 447 | "name": "status", 448 | "nodeType": "Identifier", 449 | "overloadedDeclarations": [], 450 | "referencedDeclaration": 19033, 451 | "src": "565:6:6", 452 | "typeDescriptions": { 453 | "typeIdentifier": "t_uint256", 454 | "typeString": "uint256" 455 | } 456 | } 457 | ], 458 | "expression": { 459 | "argumentTypes": [ 460 | { 461 | "typeIdentifier": "t_uint256", 462 | "typeString": "uint256" 463 | } 464 | ], 465 | "expression": { 466 | "id": 19049, 467 | "name": "abi", 468 | "nodeType": "Identifier", 469 | "overloadedDeclarations": [], 470 | "referencedDeclaration": -1, 471 | "src": "554:3:6", 472 | "typeDescriptions": { 473 | "typeIdentifier": "t_magic_abi", 474 | "typeString": "abi" 475 | } 476 | }, 477 | "id": 19050, 478 | "isConstant": false, 479 | "isLValue": false, 480 | "isPure": true, 481 | "lValueRequested": false, 482 | "memberName": "encode", 483 | "nodeType": "MemberAccess", 484 | "src": "554:10:6", 485 | "typeDescriptions": { 486 | "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", 487 | "typeString": "function () pure returns (bytes memory)" 488 | } 489 | }, 490 | "id": 19052, 491 | "isConstant": false, 492 | "isLValue": false, 493 | "isPure": false, 494 | "kind": "functionCall", 495 | "lValueRequested": false, 496 | "names": [], 497 | "nodeType": "FunctionCall", 498 | "src": "554:18:6", 499 | "tryCall": false, 500 | "typeDescriptions": { 501 | "typeIdentifier": "t_bytes_memory_ptr", 502 | "typeString": "bytes memory" 503 | } 504 | } 505 | ], 506 | "expression": { 507 | "argumentTypes": [ 508 | { 509 | "typeIdentifier": "t_bytes_memory_ptr", 510 | "typeString": "bytes memory" 511 | } 512 | ], 513 | "id": 19048, 514 | "isConstant": false, 515 | "isLValue": false, 516 | "isPure": true, 517 | "lValueRequested": false, 518 | "nodeType": "ElementaryTypeNameExpression", 519 | "src": "547:6:6", 520 | "typeDescriptions": { 521 | "typeIdentifier": "t_type$_t_string_storage_ptr_$", 522 | "typeString": "type(string storage pointer)" 523 | }, 524 | "typeName": { 525 | "id": 19047, 526 | "name": "string", 527 | "nodeType": "ElementaryTypeName", 528 | "src": "547:6:6", 529 | "typeDescriptions": {} 530 | } 531 | }, 532 | "id": 19053, 533 | "isConstant": false, 534 | "isLValue": false, 535 | "isPure": false, 536 | "kind": "typeConversion", 537 | "lValueRequested": false, 538 | "names": [], 539 | "nodeType": "FunctionCall", 540 | "src": "547:26:6", 541 | "tryCall": false, 542 | "typeDescriptions": { 543 | "typeIdentifier": "t_string_memory_ptr", 544 | "typeString": "string memory" 545 | } 546 | } 547 | ], 548 | "expression": { 549 | "argumentTypes": [ 550 | { 551 | "typeIdentifier": "t_stringliteral_5ba784952bff4ba65bfec9ed051ebe5d5dc6b764c482f92a8daa0363fcca1111", 552 | "typeString": "literal_string \"Status: \"" 553 | }, 554 | { 555 | "typeIdentifier": "t_string_memory_ptr", 556 | "typeString": "string memory" 557 | } 558 | ], 559 | "expression": { 560 | "id": 19044, 561 | "isConstant": false, 562 | "isLValue": false, 563 | "isPure": true, 564 | "lValueRequested": false, 565 | "nodeType": "ElementaryTypeNameExpression", 566 | "src": "521:6:6", 567 | "typeDescriptions": { 568 | "typeIdentifier": "t_type$_t_string_storage_ptr_$", 569 | "typeString": "type(string storage pointer)" 570 | }, 571 | "typeName": { 572 | "id": 19043, 573 | "name": "string", 574 | "nodeType": "ElementaryTypeName", 575 | "src": "521:6:6", 576 | "typeDescriptions": {} 577 | } 578 | }, 579 | "id": 19045, 580 | "isConstant": false, 581 | "isLValue": false, 582 | "isPure": false, 583 | "lValueRequested": false, 584 | "memberName": "concat", 585 | "nodeType": "MemberAccess", 586 | "src": "521:13:6", 587 | "typeDescriptions": { 588 | "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$", 589 | "typeString": "function () pure returns (string memory)" 590 | } 591 | }, 592 | "id": 19054, 593 | "isConstant": false, 594 | "isLValue": false, 595 | "isPure": false, 596 | "kind": "functionCall", 597 | "lValueRequested": false, 598 | "names": [], 599 | "nodeType": "FunctionCall", 600 | "src": "521:53:6", 601 | "tryCall": false, 602 | "typeDescriptions": { 603 | "typeIdentifier": "t_string_memory_ptr", 604 | "typeString": "string memory" 605 | } 606 | } 607 | ], 608 | "expression": { 609 | "argumentTypes": [ 610 | { 611 | "typeIdentifier": "t_string_memory_ptr", 612 | "typeString": "string memory" 613 | } 614 | ], 615 | "expression": { 616 | "id": 19040, 617 | "name": "console2", 618 | "nodeType": "Identifier", 619 | "overloadedDeclarations": [], 620 | "referencedDeclaration": 16639, 621 | "src": "508:8:6", 622 | "typeDescriptions": { 623 | "typeIdentifier": "t_type$_t_contract$_console2_$16639_$", 624 | "typeString": "type(library console2)" 625 | } 626 | }, 627 | "id": 19042, 628 | "isConstant": false, 629 | "isLValue": false, 630 | "isPure": false, 631 | "lValueRequested": false, 632 | "memberName": "log", 633 | "nodeType": "MemberAccess", 634 | "referencedDeclaration": 9170, 635 | "src": "508:12:6", 636 | "typeDescriptions": { 637 | "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$", 638 | "typeString": "function (string memory) view" 639 | } 640 | }, 641 | "id": 19055, 642 | "isConstant": false, 643 | "isLValue": false, 644 | "isPure": false, 645 | "kind": "functionCall", 646 | "lValueRequested": false, 647 | "names": [], 648 | "nodeType": "FunctionCall", 649 | "src": "508:67:6", 650 | "tryCall": false, 651 | "typeDescriptions": { 652 | "typeIdentifier": "t_tuple$__$", 653 | "typeString": "tuple()" 654 | } 655 | }, 656 | "id": 19056, 657 | "nodeType": "ExpressionStatement", 658 | "src": "508:67:6" 659 | }, 660 | { 661 | "expression": { 662 | "arguments": [ 663 | { 664 | "arguments": [ 665 | { 666 | "hexValue": "427974657320526573756c743a20", 667 | "id": 19063, 668 | "isConstant": false, 669 | "isLValue": false, 670 | "isPure": true, 671 | "kind": "string", 672 | "lValueRequested": false, 673 | "nodeType": "Literal", 674 | "src": "612:16:6", 675 | "typeDescriptions": { 676 | "typeIdentifier": "t_stringliteral_2b17ffba1d619a3cf8e4f2028db586011711085eaeeb54c510e30b63c17e8608", 677 | "typeString": "literal_string \"Bytes Result: \"" 678 | }, 679 | "value": "Bytes Result: " 680 | }, 681 | { 682 | "arguments": [ 683 | { 684 | "id": 19066, 685 | "name": "data", 686 | "nodeType": "Identifier", 687 | "overloadedDeclarations": [], 688 | "referencedDeclaration": 19035, 689 | "src": "637:4:6", 690 | "typeDescriptions": { 691 | "typeIdentifier": "t_bytes_memory_ptr", 692 | "typeString": "bytes memory" 693 | } 694 | } 695 | ], 696 | "expression": { 697 | "argumentTypes": [ 698 | { 699 | "typeIdentifier": "t_bytes_memory_ptr", 700 | "typeString": "bytes memory" 701 | } 702 | ], 703 | "id": 19065, 704 | "isConstant": false, 705 | "isLValue": false, 706 | "isPure": true, 707 | "lValueRequested": false, 708 | "nodeType": "ElementaryTypeNameExpression", 709 | "src": "630:6:6", 710 | "typeDescriptions": { 711 | "typeIdentifier": "t_type$_t_string_storage_ptr_$", 712 | "typeString": "type(string storage pointer)" 713 | }, 714 | "typeName": { 715 | "id": 19064, 716 | "name": "string", 717 | "nodeType": "ElementaryTypeName", 718 | "src": "630:6:6", 719 | "typeDescriptions": {} 720 | } 721 | }, 722 | "id": 19067, 723 | "isConstant": false, 724 | "isLValue": false, 725 | "isPure": false, 726 | "kind": "typeConversion", 727 | "lValueRequested": false, 728 | "names": [], 729 | "nodeType": "FunctionCall", 730 | "src": "630:12:6", 731 | "tryCall": false, 732 | "typeDescriptions": { 733 | "typeIdentifier": "t_string_memory_ptr", 734 | "typeString": "string memory" 735 | } 736 | } 737 | ], 738 | "expression": { 739 | "argumentTypes": [ 740 | { 741 | "typeIdentifier": "t_stringliteral_2b17ffba1d619a3cf8e4f2028db586011711085eaeeb54c510e30b63c17e8608", 742 | "typeString": "literal_string \"Bytes Result: \"" 743 | }, 744 | { 745 | "typeIdentifier": "t_string_memory_ptr", 746 | "typeString": "string memory" 747 | } 748 | ], 749 | "expression": { 750 | "id": 19061, 751 | "isConstant": false, 752 | "isLValue": false, 753 | "isPure": true, 754 | "lValueRequested": false, 755 | "nodeType": "ElementaryTypeNameExpression", 756 | "src": "598:6:6", 757 | "typeDescriptions": { 758 | "typeIdentifier": "t_type$_t_string_storage_ptr_$", 759 | "typeString": "type(string storage pointer)" 760 | }, 761 | "typeName": { 762 | "id": 19060, 763 | "name": "string", 764 | "nodeType": "ElementaryTypeName", 765 | "src": "598:6:6", 766 | "typeDescriptions": {} 767 | } 768 | }, 769 | "id": 19062, 770 | "isConstant": false, 771 | "isLValue": false, 772 | "isPure": false, 773 | "lValueRequested": false, 774 | "memberName": "concat", 775 | "nodeType": "MemberAccess", 776 | "src": "598:13:6", 777 | "typeDescriptions": { 778 | "typeIdentifier": "t_function_stringconcat_pure$__$returns$_t_string_memory_ptr_$", 779 | "typeString": "function () pure returns (string memory)" 780 | } 781 | }, 782 | "id": 19068, 783 | "isConstant": false, 784 | "isLValue": false, 785 | "isPure": false, 786 | "kind": "functionCall", 787 | "lValueRequested": false, 788 | "names": [], 789 | "nodeType": "FunctionCall", 790 | "src": "598:45:6", 791 | "tryCall": false, 792 | "typeDescriptions": { 793 | "typeIdentifier": "t_string_memory_ptr", 794 | "typeString": "string memory" 795 | } 796 | } 797 | ], 798 | "expression": { 799 | "argumentTypes": [ 800 | { 801 | "typeIdentifier": "t_string_memory_ptr", 802 | "typeString": "string memory" 803 | } 804 | ], 805 | "expression": { 806 | "id": 19057, 807 | "name": "console2", 808 | "nodeType": "Identifier", 809 | "overloadedDeclarations": [], 810 | "referencedDeclaration": 16639, 811 | "src": "585:8:6", 812 | "typeDescriptions": { 813 | "typeIdentifier": "t_type$_t_contract$_console2_$16639_$", 814 | "typeString": "type(library console2)" 815 | } 816 | }, 817 | "id": 19059, 818 | "isConstant": false, 819 | "isLValue": false, 820 | "isPure": false, 821 | "lValueRequested": false, 822 | "memberName": "log", 823 | "nodeType": "MemberAccess", 824 | "referencedDeclaration": 9170, 825 | "src": "585:12:6", 826 | "typeDescriptions": { 827 | "typeIdentifier": "t_function_internal_view$_t_string_memory_ptr_$returns$__$", 828 | "typeString": "function (string memory) view" 829 | } 830 | }, 831 | "id": 19069, 832 | "isConstant": false, 833 | "isLValue": false, 834 | "isPure": false, 835 | "kind": "functionCall", 836 | "lValueRequested": false, 837 | "names": [], 838 | "nodeType": "FunctionCall", 839 | "src": "585:59:6", 840 | "tryCall": false, 841 | "typeDescriptions": { 842 | "typeIdentifier": "t_tuple$__$", 843 | "typeString": "tuple()" 844 | } 845 | }, 846 | "id": 19070, 847 | "nodeType": "ExpressionStatement", 848 | "src": "585:59:6" 849 | } 850 | ] 851 | }, 852 | "implemented": true, 853 | "kind": "function", 854 | "modifiers": [], 855 | "name": "func", 856 | "nameLocation": "319:4:6", 857 | "parameters": { 858 | "id": 19024, 859 | "nodeType": "ParameterList", 860 | "parameters": [], 861 | "src": "323:2:6" 862 | }, 863 | "returnParameters": { 864 | "id": 19025, 865 | "nodeType": "ParameterList", 866 | "parameters": [], 867 | "src": "335:0:6" 868 | }, 869 | "scope": 19087, 870 | "stateMutability": "nonpayable", 871 | "virtual": false, 872 | "visibility": "internal" 873 | }, 874 | { 875 | "id": 19086, 876 | "nodeType": "FunctionDefinition", 877 | "src": "657:85:6", 878 | "body": { 879 | "id": 19085, 880 | "nodeType": "Block", 881 | "src": "679:63:6", 882 | "statements": [ 883 | { 884 | "assignments": [ 885 | 19078 886 | ], 887 | "declarations": [ 888 | { 889 | "constant": false, 890 | "id": 19078, 891 | "mutability": "mutable", 892 | "name": "g", 893 | "nameLocation": "710:1:6", 894 | "nodeType": "VariableDeclaration", 895 | "scope": 19085, 896 | "src": "689:22:6", 897 | "stateVariable": false, 898 | "storageLocation": "default", 899 | "typeDescriptions": { 900 | "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", 901 | "typeString": "function ()" 902 | }, 903 | "typeName": { 904 | "id": 19077, 905 | "nodeType": "FunctionTypeName", 906 | "parameterTypes": { 907 | "id": 19075, 908 | "nodeType": "ParameterList", 909 | "parameters": [], 910 | "src": "698:2:6" 911 | }, 912 | "returnParameterTypes": { 913 | "id": 19076, 914 | "nodeType": "ParameterList", 915 | "parameters": [], 916 | "src": "710:0:6" 917 | }, 918 | "src": "689:22:6", 919 | "stateMutability": "nonpayable", 920 | "typeDescriptions": { 921 | "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", 922 | "typeString": "function ()" 923 | }, 924 | "visibility": "internal" 925 | }, 926 | "visibility": "internal" 927 | } 928 | ], 929 | "id": 19080, 930 | "initialValue": { 931 | "id": 19079, 932 | "name": "func", 933 | "nodeType": "Identifier", 934 | "overloadedDeclarations": [], 935 | "referencedDeclaration": 19072, 936 | "src": "714:4:6", 937 | "typeDescriptions": { 938 | "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", 939 | "typeString": "function ()" 940 | } 941 | }, 942 | "nodeType": "VariableDeclarationStatement", 943 | "src": "689:29:6" 944 | }, 945 | { 946 | "expression": { 947 | "arguments": [ 948 | { 949 | "id": 19082, 950 | "name": "g", 951 | "nodeType": "Identifier", 952 | "overloadedDeclarations": [], 953 | "referencedDeclaration": 19078, 954 | "src": "733:1:6", 955 | "typeDescriptions": { 956 | "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", 957 | "typeString": "function ()" 958 | } 959 | } 960 | ], 961 | "expression": { 962 | "argumentTypes": [ 963 | { 964 | "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", 965 | "typeString": "function ()" 966 | } 967 | ], 968 | "id": 19081, 969 | "name": "safe", 970 | "nodeType": "Identifier", 971 | "overloadedDeclarations": [], 972 | "referencedDeclaration": 19254, 973 | "src": "728:4:6", 974 | "typeDescriptions": { 975 | "typeIdentifier": "t_function_internal_nonpayable$_t_function_internal_nonpayable$__$returns$__$_$returns$__$", 976 | "typeString": "function (function ())" 977 | } 978 | }, 979 | "id": 19083, 980 | "isConstant": false, 981 | "isLValue": false, 982 | "isPure": false, 983 | "kind": "functionCall", 984 | "lValueRequested": false, 985 | "names": [], 986 | "nodeType": "FunctionCall", 987 | "src": "728:7:6", 988 | "tryCall": false, 989 | "typeDescriptions": { 990 | "typeIdentifier": "t_tuple$__$", 991 | "typeString": "tuple()" 992 | } 993 | }, 994 | "id": 19084, 995 | "nodeType": "ExpressionStatement", 996 | "src": "728:7:6" 997 | } 998 | ] 999 | }, 1000 | "functionSelector": "c0406226", 1001 | "implemented": true, 1002 | "kind": "function", 1003 | "modifiers": [], 1004 | "name": "run", 1005 | "nameLocation": "666:3:6", 1006 | "parameters": { 1007 | "id": 19073, 1008 | "nodeType": "ParameterList", 1009 | "parameters": [], 1010 | "src": "669:2:6" 1011 | }, 1012 | "returnParameters": { 1013 | "id": 19074, 1014 | "nodeType": "ParameterList", 1015 | "parameters": [], 1016 | "src": "679:0:6" 1017 | }, 1018 | "scope": 19087, 1019 | "stateMutability": "nonpayable", 1020 | "virtual": false, 1021 | "visibility": "public" 1022 | } 1023 | ], 1024 | "abstract": false, 1025 | "baseContracts": [ 1026 | { 1027 | "baseName": { 1028 | "id": 19014, 1029 | "name": "Script", 1030 | "nodeType": "IdentifierPath", 1031 | "referencedDeclaration": 31, 1032 | "src": "234:6:6" 1033 | }, 1034 | "id": 19015, 1035 | "nodeType": "InheritanceSpecifier", 1036 | "src": "234:6:6" 1037 | }, 1038 | { 1039 | "baseName": { 1040 | "id": 19016, 1041 | "name": "Protec", 1042 | "nodeType": "IdentifierPath", 1043 | "referencedDeclaration": 19255, 1044 | "src": "242:6:6" 1045 | }, 1046 | "id": 19017, 1047 | "nodeType": "InheritanceSpecifier", 1048 | "src": "242:6:6" 1049 | } 1050 | ], 1051 | "canonicalName": "ProtectedScript", 1052 | "contractDependencies": [], 1053 | "contractKind": "contract", 1054 | "fullyImplemented": true, 1055 | "linearizedBaseContracts": [ 1056 | 19087, 1057 | 19255, 1058 | 31 1059 | ], 1060 | "name": "ProtectedScript", 1061 | "nameLocation": "215:15:6", 1062 | "scope": 19088, 1063 | "usedErrors": [] 1064 | } 1065 | ], 1066 | "license": "UNLICENSED" 1067 | }, 1068 | "id": 6 1069 | } -------------------------------------------------------------------------------- /out/Script.sol/Script.json: -------------------------------------------------------------------------------- 1 | { 2 | "abi": [ 3 | { 4 | "inputs": [], 5 | "name": "IS_SCRIPT", 6 | "outputs": [ 7 | { 8 | "internalType": "bool", 9 | "name": "", 10 | "type": "bool" 11 | } 12 | ], 13 | "stateMutability": "view", 14 | "type": "function" 15 | }, 16 | { 17 | "inputs": [], 18 | "name": "vm", 19 | "outputs": [ 20 | { 21 | "internalType": "contract Vm", 22 | "name": "", 23 | "type": "address" 24 | } 25 | ], 26 | "stateMutability": "view", 27 | "type": "function" 28 | } 29 | ], 30 | "bytecode": { 31 | "object": "0x", 32 | "sourceMap": "", 33 | "linkReferences": {} 34 | }, 35 | "deployedBytecode": { 36 | "object": "0x", 37 | "sourceMap": "", 38 | "linkReferences": {} 39 | }, 40 | "methodIdentifiers": { 41 | "IS_SCRIPT()": "f8ccbf47", 42 | "vm()": "3a768463" 43 | }, 44 | "ast": { 45 | "absolutePath": "lib/forge-std/src/Script.sol", 46 | "id": 1819, 47 | "exportedSymbols": { 48 | "Script": [ 49 | 1818 50 | ], 51 | "Vm": [ 52 | 4964 53 | ], 54 | "console": [ 55 | 13028 56 | ], 57 | "console2": [ 58 | 21092 59 | ] 60 | }, 61 | "nodeType": "SourceUnit", 62 | "src": "38:326:1", 63 | "nodes": [ 64 | { 65 | "id": 1788, 66 | "nodeType": "PragmaDirective", 67 | "src": "38:31:1", 68 | "literals": [ 69 | "solidity", 70 | ">=", 71 | "0.6", 72 | ".0", 73 | "<", 74 | "0.9", 75 | ".0" 76 | ] 77 | }, 78 | { 79 | "id": 1789, 80 | "nodeType": "ImportDirective", 81 | "src": "71:18:1", 82 | "absolutePath": "lib/forge-std/src/Vm.sol", 83 | "file": "./Vm.sol", 84 | "nameLocation": "-1:-1:-1", 85 | "scope": 1819, 86 | "sourceUnit": 4965, 87 | "symbolAliases": [], 88 | "unitAlias": "" 89 | }, 90 | { 91 | "id": 1790, 92 | "nodeType": "ImportDirective", 93 | "src": "90:23:1", 94 | "absolutePath": "lib/forge-std/src/console.sol", 95 | "file": "./console.sol", 96 | "nameLocation": "-1:-1:-1", 97 | "scope": 1819, 98 | "sourceUnit": 13029, 99 | "symbolAliases": [], 100 | "unitAlias": "" 101 | }, 102 | { 103 | "id": 1791, 104 | "nodeType": "ImportDirective", 105 | "src": "114:24:1", 106 | "absolutePath": "lib/forge-std/src/console2.sol", 107 | "file": "./console2.sol", 108 | "nameLocation": "-1:-1:-1", 109 | "scope": 1819, 110 | "sourceUnit": 21093, 111 | "symbolAliases": [], 112 | "unitAlias": "" 113 | }, 114 | { 115 | "id": 1818, 116 | "nodeType": "ContractDefinition", 117 | "src": "140:223:1", 118 | "nodes": [ 119 | { 120 | "id": 1794, 121 | "nodeType": "VariableDeclaration", 122 | "src": "171:28:1", 123 | "constant": false, 124 | "functionSelector": "f8ccbf47", 125 | "mutability": "mutable", 126 | "name": "IS_SCRIPT", 127 | "nameLocation": "183:9:1", 128 | "scope": 1818, 129 | "stateVariable": true, 130 | "storageLocation": "default", 131 | "typeDescriptions": { 132 | "typeIdentifier": "t_bool", 133 | "typeString": "bool" 134 | }, 135 | "typeName": { 136 | "id": 1792, 137 | "name": "bool", 138 | "nodeType": "ElementaryTypeName", 139 | "src": "171:4:1", 140 | "typeDescriptions": { 141 | "typeIdentifier": "t_bool", 142 | "typeString": "bool" 143 | } 144 | }, 145 | "value": { 146 | "hexValue": "74727565", 147 | "id": 1793, 148 | "isConstant": false, 149 | "isLValue": false, 150 | "isPure": true, 151 | "kind": "bool", 152 | "lValueRequested": false, 153 | "nodeType": "Literal", 154 | "src": "195:4:1", 155 | "typeDescriptions": { 156 | "typeIdentifier": "t_bool", 157 | "typeString": "bool" 158 | }, 159 | "value": "true" 160 | }, 161 | "visibility": "public" 162 | }, 163 | { 164 | "id": 1811, 165 | "nodeType": "VariableDeclaration", 166 | "src": "205:110:1", 167 | "constant": true, 168 | "mutability": "constant", 169 | "name": "VM_ADDRESS", 170 | "nameLocation": "230:10:1", 171 | "scope": 1818, 172 | "stateVariable": true, 173 | "storageLocation": "default", 174 | "typeDescriptions": { 175 | "typeIdentifier": "t_address", 176 | "typeString": "address" 177 | }, 178 | "typeName": { 179 | "id": 1795, 180 | "name": "address", 181 | "nodeType": "ElementaryTypeName", 182 | "src": "205:7:1", 183 | "stateMutability": "nonpayable", 184 | "typeDescriptions": { 185 | "typeIdentifier": "t_address", 186 | "typeString": "address" 187 | } 188 | }, 189 | "value": { 190 | "arguments": [ 191 | { 192 | "arguments": [ 193 | { 194 | "arguments": [ 195 | { 196 | "arguments": [ 197 | { 198 | "arguments": [ 199 | { 200 | "hexValue": "6865766d20636865617420636f6465", 201 | "id": 1805, 202 | "isConstant": false, 203 | "isLValue": false, 204 | "isPure": true, 205 | "kind": "string", 206 | "lValueRequested": false, 207 | "nodeType": "Literal", 208 | "src": "293:17:1", 209 | "typeDescriptions": { 210 | "typeIdentifier": "t_stringliteral_885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d", 211 | "typeString": "literal_string \"hevm cheat code\"" 212 | }, 213 | "value": "hevm cheat code" 214 | } 215 | ], 216 | "expression": { 217 | "argumentTypes": [ 218 | { 219 | "typeIdentifier": "t_stringliteral_885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d", 220 | "typeString": "literal_string \"hevm cheat code\"" 221 | } 222 | ], 223 | "id": 1804, 224 | "name": "keccak256", 225 | "nodeType": "Identifier", 226 | "overloadedDeclarations": [], 227 | "referencedDeclaration": -8, 228 | "src": "283:9:1", 229 | "typeDescriptions": { 230 | "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", 231 | "typeString": "function (bytes memory) pure returns (bytes32)" 232 | } 233 | }, 234 | "id": 1806, 235 | "isConstant": false, 236 | "isLValue": false, 237 | "isPure": true, 238 | "kind": "functionCall", 239 | "lValueRequested": false, 240 | "names": [], 241 | "nodeType": "FunctionCall", 242 | "src": "283:28:1", 243 | "tryCall": false, 244 | "typeDescriptions": { 245 | "typeIdentifier": "t_bytes32", 246 | "typeString": "bytes32" 247 | } 248 | } 249 | ], 250 | "expression": { 251 | "argumentTypes": [ 252 | { 253 | "typeIdentifier": "t_bytes32", 254 | "typeString": "bytes32" 255 | } 256 | ], 257 | "id": 1803, 258 | "isConstant": false, 259 | "isLValue": false, 260 | "isPure": true, 261 | "lValueRequested": false, 262 | "nodeType": "ElementaryTypeNameExpression", 263 | "src": "275:7:1", 264 | "typeDescriptions": { 265 | "typeIdentifier": "t_type$_t_uint256_$", 266 | "typeString": "type(uint256)" 267 | }, 268 | "typeName": { 269 | "id": 1802, 270 | "name": "uint256", 271 | "nodeType": "ElementaryTypeName", 272 | "src": "275:7:1", 273 | "typeDescriptions": {} 274 | } 275 | }, 276 | "id": 1807, 277 | "isConstant": false, 278 | "isLValue": false, 279 | "isPure": true, 280 | "kind": "typeConversion", 281 | "lValueRequested": false, 282 | "names": [], 283 | "nodeType": "FunctionCall", 284 | "src": "275:37:1", 285 | "tryCall": false, 286 | "typeDescriptions": { 287 | "typeIdentifier": "t_uint256", 288 | "typeString": "uint256" 289 | } 290 | } 291 | ], 292 | "expression": { 293 | "argumentTypes": [ 294 | { 295 | "typeIdentifier": "t_uint256", 296 | "typeString": "uint256" 297 | } 298 | ], 299 | "id": 1801, 300 | "isConstant": false, 301 | "isLValue": false, 302 | "isPure": true, 303 | "lValueRequested": false, 304 | "nodeType": "ElementaryTypeNameExpression", 305 | "src": "267:7:1", 306 | "typeDescriptions": { 307 | "typeIdentifier": "t_type$_t_uint160_$", 308 | "typeString": "type(uint160)" 309 | }, 310 | "typeName": { 311 | "id": 1800, 312 | "name": "uint160", 313 | "nodeType": "ElementaryTypeName", 314 | "src": "267:7:1", 315 | "typeDescriptions": {} 316 | } 317 | }, 318 | "id": 1808, 319 | "isConstant": false, 320 | "isLValue": false, 321 | "isPure": true, 322 | "kind": "typeConversion", 323 | "lValueRequested": false, 324 | "names": [], 325 | "nodeType": "FunctionCall", 326 | "src": "267:46:1", 327 | "tryCall": false, 328 | "typeDescriptions": { 329 | "typeIdentifier": "t_uint160", 330 | "typeString": "uint160" 331 | } 332 | } 333 | ], 334 | "expression": { 335 | "argumentTypes": [ 336 | { 337 | "typeIdentifier": "t_uint160", 338 | "typeString": "uint160" 339 | } 340 | ], 341 | "id": 1799, 342 | "isConstant": false, 343 | "isLValue": false, 344 | "isPure": true, 345 | "lValueRequested": false, 346 | "nodeType": "ElementaryTypeNameExpression", 347 | "src": "259:7:1", 348 | "typeDescriptions": { 349 | "typeIdentifier": "t_type$_t_bytes20_$", 350 | "typeString": "type(bytes20)" 351 | }, 352 | "typeName": { 353 | "id": 1798, 354 | "name": "bytes20", 355 | "nodeType": "ElementaryTypeName", 356 | "src": "259:7:1", 357 | "typeDescriptions": {} 358 | } 359 | }, 360 | "id": 1809, 361 | "isConstant": false, 362 | "isLValue": false, 363 | "isPure": true, 364 | "kind": "typeConversion", 365 | "lValueRequested": false, 366 | "names": [], 367 | "nodeType": "FunctionCall", 368 | "src": "259:55:1", 369 | "tryCall": false, 370 | "typeDescriptions": { 371 | "typeIdentifier": "t_bytes20", 372 | "typeString": "bytes20" 373 | } 374 | } 375 | ], 376 | "expression": { 377 | "argumentTypes": [ 378 | { 379 | "typeIdentifier": "t_bytes20", 380 | "typeString": "bytes20" 381 | } 382 | ], 383 | "id": 1797, 384 | "isConstant": false, 385 | "isLValue": false, 386 | "isPure": true, 387 | "lValueRequested": false, 388 | "nodeType": "ElementaryTypeNameExpression", 389 | "src": "251:7:1", 390 | "typeDescriptions": { 391 | "typeIdentifier": "t_type$_t_address_$", 392 | "typeString": "type(address)" 393 | }, 394 | "typeName": { 395 | "id": 1796, 396 | "name": "address", 397 | "nodeType": "ElementaryTypeName", 398 | "src": "251:7:1", 399 | "typeDescriptions": {} 400 | } 401 | }, 402 | "id": 1810, 403 | "isConstant": false, 404 | "isLValue": false, 405 | "isPure": true, 406 | "kind": "typeConversion", 407 | "lValueRequested": false, 408 | "names": [], 409 | "nodeType": "FunctionCall", 410 | "src": "251:64:1", 411 | "tryCall": false, 412 | "typeDescriptions": { 413 | "typeIdentifier": "t_address", 414 | "typeString": "address" 415 | } 416 | }, 417 | "visibility": "private" 418 | }, 419 | { 420 | "id": 1817, 421 | "nodeType": "VariableDeclaration", 422 | "src": "322:38:1", 423 | "constant": true, 424 | "functionSelector": "3a768463", 425 | "mutability": "constant", 426 | "name": "vm", 427 | "nameLocation": "341:2:1", 428 | "scope": 1818, 429 | "stateVariable": true, 430 | "storageLocation": "default", 431 | "typeDescriptions": { 432 | "typeIdentifier": "t_contract$_Vm_$4964", 433 | "typeString": "contract Vm" 434 | }, 435 | "typeName": { 436 | "id": 1813, 437 | "nodeType": "UserDefinedTypeName", 438 | "pathNode": { 439 | "id": 1812, 440 | "name": "Vm", 441 | "nodeType": "IdentifierPath", 442 | "referencedDeclaration": 4964, 443 | "src": "322:2:1" 444 | }, 445 | "referencedDeclaration": 4964, 446 | "src": "322:2:1", 447 | "typeDescriptions": { 448 | "typeIdentifier": "t_contract$_Vm_$4964", 449 | "typeString": "contract Vm" 450 | } 451 | }, 452 | "value": { 453 | "arguments": [ 454 | { 455 | "id": 1815, 456 | "name": "VM_ADDRESS", 457 | "nodeType": "Identifier", 458 | "overloadedDeclarations": [], 459 | "referencedDeclaration": 1811, 460 | "src": "349:10:1", 461 | "typeDescriptions": { 462 | "typeIdentifier": "t_address", 463 | "typeString": "address" 464 | } 465 | } 466 | ], 467 | "expression": { 468 | "argumentTypes": [ 469 | { 470 | "typeIdentifier": "t_address", 471 | "typeString": "address" 472 | } 473 | ], 474 | "id": 1814, 475 | "name": "Vm", 476 | "nodeType": "Identifier", 477 | "overloadedDeclarations": [], 478 | "referencedDeclaration": 4964, 479 | "src": "346:2:1", 480 | "typeDescriptions": { 481 | "typeIdentifier": "t_type$_t_contract$_Vm_$4964_$", 482 | "typeString": "type(contract Vm)" 483 | } 484 | }, 485 | "id": 1816, 486 | "isConstant": false, 487 | "isLValue": false, 488 | "isPure": true, 489 | "kind": "typeConversion", 490 | "lValueRequested": false, 491 | "names": [], 492 | "nodeType": "FunctionCall", 493 | "src": "346:14:1", 494 | "tryCall": false, 495 | "typeDescriptions": { 496 | "typeIdentifier": "t_contract$_Vm_$4964", 497 | "typeString": "contract Vm" 498 | } 499 | }, 500 | "visibility": "public" 501 | } 502 | ], 503 | "abstract": true, 504 | "baseContracts": [], 505 | "canonicalName": "Script", 506 | "contractDependencies": [], 507 | "contractKind": "contract", 508 | "fullyImplemented": true, 509 | "linearizedBaseContracts": [ 510 | 1818 511 | ], 512 | "name": "Script", 513 | "nameLocation": "158:6:1", 514 | "scope": 1819, 515 | "usedErrors": [] 516 | } 517 | ], 518 | "license": "Unlicense" 519 | }, 520 | "id": 1 521 | } -------------------------------------------------------------------------------- /remappings.txt: -------------------------------------------------------------------------------- 1 | forge-std/=lib/forge-std/src/ 2 | strings/=lib/solidity-stringutils/src/ 3 | surl/=lib/surl/src/ -------------------------------------------------------------------------------- /script/Protected.s.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.13; 3 | 4 | import "forge-std/Script.sol"; 5 | import "forge-std/console2.sol"; 6 | 7 | import {Surl} from "surl/Surl.sol"; 8 | import {Protec} from "src/Protec.sol"; 9 | 10 | contract ProtectedScript is Script, Protec { 11 | using Surl for *; 12 | 13 | function setUp() public {} 14 | 15 | function func() internal { 16 | // Perform a simple get request 17 | console2.log("Getting request..."); 18 | (uint256 status, bytes memory data) = "https://httpbin.org/get".get(); 19 | console2.log(string.concat("Status: ", string(abi.encode(status)))); 20 | console2.log(string.concat("Bytes Result: ", string(data))); 21 | } 22 | 23 | function run() public { 24 | function () internal g = func; 25 | safe(g); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/Protec.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.13; 3 | 4 | import "forge-std/console2.sol"; 5 | import {Vm} from "forge-std/Vm.sol"; 6 | import {strings} from "strings/strings.sol"; 7 | 8 | contract Protec { 9 | using strings for *; 10 | 11 | modifier unsafe() { 12 | Vm tvm = Vm(address(bytes20(uint160(uint256(keccak256("hevm cheat code")))))); 13 | 14 | bool init_ffi = false; 15 | try tvm.envBool("FOUNDRY_FFI") returns (bool ffi) { 16 | ffi = init_ffi; 17 | } catch (bytes memory reason) { 18 | // Try to read "ffi" from the foundry toml 19 | string memory toml = tvm.readFile("foundry.toml"); 20 | strings.slice memory s = toml.toSlice(); 21 | if (s.contains("ffi=".toSlice())) { 22 | s.split("ffi=".toSlice()); 23 | init_ffi = s.split("\n".toSlice()).equals("true".toSlice()); 24 | } else if (s.contains("ffi =".toSlice())) { 25 | s.split("ffi =".toSlice()); 26 | init_ffi = s.split("\n".toSlice()).equals("true".toSlice()); 27 | } 28 | } 29 | 30 | // Set the ffi env var 31 | tvm.setEnv("FOUNDRY_FFI", "false"); 32 | _; 33 | if (init_ffi) { 34 | tvm.setEnv("FOUNDRY_FFI", "true"); 35 | } else { 36 | tvm.setEnv("FOUNDRY_FFI", "false"); 37 | } 38 | 39 | } 40 | 41 | function safe(function() internal func) internal unsafe { 42 | func(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /test/Contract.t.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.13; 3 | 4 | import "forge-std/Test.sol"; 5 | 6 | contract ContractTest is Test { 7 | function setUp() public {} 8 | 9 | function testExample() public { 10 | assertTrue(true); 11 | } 12 | } 13 | --------------------------------------------------------------------------------