├── LICENSE ├── README.md ├── _img ├── Screenshot_2021-04-10_at_13.36.56.png ├── Screenshot_2021-04-10_at_13.56.12.png ├── Screenshot_2021-04-10_at_14.03.16.png ├── Screenshot_2021-04-10_at_14.06.18.png ├── Screenshot_2021-04-10_at_14.08.01.png ├── Screenshot_2021-04-10_at_14.43.51.png └── Screenshot_2021-04-10_at_14.45.51.png ├── go.mod ├── go.sum ├── helper └── helper.go ├── main.go ├── servicemaster └── servicemaster.go ├── servicestructs └── servicestructs.go └── utils └── utils.go /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AWS Service Enumeration 2 | 3 | # Disclaimer 4 | 5 | The tool is in beta stage (testing in progress), no destructive API Calls used ( read only actions ). 6 | I hope, there will be no issues with the tool. If any issues encountered, please submit the ticket. 7 | 8 | # Description 9 | 10 | The AWS Enumerator was created for service enumeration and info dumping for investigations of penetration testers during Black-Box testing. The tool is intended to speed up the process of Cloud review in case the security researcher compromised AWS Account Credentials. 11 | 12 | AWS Enumerator supports more than 600 API Calls ( reading actions `Get`, `List`, `Describe` etc... ), and will be extended. 13 | 14 | The tool provides interface for result analysis. All results are saved in json files (one time "Database"). 15 | 16 | # Install 17 | 18 | If you have Go installed and configured (i.e. with `$GOPATH/bin` in your `$PATH`): 19 | 20 | ``` 21 | go get -u github.com/shabarkin/aws-enumerator 22 | ``` 23 | ``` 24 | go install -v github.com/shabarkin/aws-enumerator@latest 25 | ``` 26 | 27 | # Basic Usage 28 | 29 | ## Credentials setup 30 | 31 | To setup credentials, you should use cred subcommand and supply credentials: 32 | 33 | ```bash 34 | ./aws-enumerator cred -aws_access_key_id AKIA***********XKU -aws_region us-west-2 -aws_secret_access_key kIm6m********************5JPF 35 | ``` 36 | 37 | ![_img/Screenshot_2021-04-10_at_14.43.51.png](_img/Screenshot_2021-04-10_at_14.43.51.png) 38 | 39 | ![_img/Screenshot_2021-04-10_at_14.45.51.png](_img/Screenshot_2021-04-10_at_14.45.51.png) 40 | 41 | It creates `.env` file, which is loaded to global variables each time you call `enum` subcommand. 42 | 43 | **WARNING:** If you set these values `AWS_REGION`, `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY`, `AWS_SESSION_TOKEN` in global variables manually before running the tool, it will not be able to load AWS Credentials specified in `.env` file ( It can't overwrite global variables ). 44 | 45 | ## Enumeration 46 | 47 | To enumerate all services, you should use enum subcommand and supply all value or iam,s3,sts,rds ( no spaces between commas ), etc. ... 48 | 49 | ```bash 50 | ./aws-enumerator enum -services all 51 | ``` 52 | 53 | If you want to check specific services (up to 10 ): 54 | 55 | ```bash 56 | ./aws-enumerator enum -services iam,sts,rds 57 | ``` 58 | 59 | ![_img/Screenshot_2021-04-10_at_13.36.56.png](_img/Screenshot_2021-04-10_at_13.36.56.png) 60 | 61 | (`-speed` flag is optional, the default value is `normal` ) There are 3 options `slow`, `normal`, `fast` 62 | 63 | ```bash 64 | ./aws-enumerator enum -services all -speed slow 65 | ``` 66 | 67 | ## Analysis 68 | 69 | To analyse the collected information, you should use `dump` subcommand: ( Use `all` for quick overview of available API calls ) 70 | 71 | ```bash 72 | ./aws-enumerator dump -services all 73 | ``` 74 | 75 | ![_img/Screenshot_2021-04-10_at_13.56.12.png](_img/Screenshot_2021-04-10_at_13.56.12.png) 76 | 77 | Analyze specific services (up to 10) `iam,s3,sts`, etc ... 78 | 79 | ```bash 80 | ./aws-enumerator dump -services iam,s3,sts 81 | ``` 82 | 83 | ![_img/Screenshot_2021-04-10_at_14.03.16.png](_img/Screenshot_2021-04-10_at_14.03.16.png) 84 | 85 | To filter API calls, you should use `-filter` option, start typing the name of API call (`GetA` ...): 86 | 87 | ```bash 88 | ./aws-enumerator dump -services iam -filter GetA 89 | ``` 90 | 91 | ![_img/Screenshot_2021-04-10_at_14.06.18.png](_img/Screenshot_2021-04-10_at_14.06.18.png) 92 | 93 | To retrieve the result of API call, you should use `-print` option 94 | 95 | ```bash 96 | ./aws-enumerator dump -services iam -filter ListS -print 97 | ``` 98 | 99 | ![_img/Screenshot_2021-04-10_at_14.08.01.png](_img/Screenshot_2021-04-10_at_14.08.01.png) 100 | 101 | ## Demo Video 102 | 103 | [Pavel Shabarkin LinkedIn](https://www.linkedin.com/posts/pavelshabarkin_cybersecurity-hacking-awssecurity-activity-6785479892881416192-O29U/) 104 | -------------------------------------------------------------------------------- /_img/Screenshot_2021-04-10_at_13.36.56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shabarkin/aws-enumerator/4f2a98387b02fb03f3bf84ac0d82faf0d299f29b/_img/Screenshot_2021-04-10_at_13.36.56.png -------------------------------------------------------------------------------- /_img/Screenshot_2021-04-10_at_13.56.12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shabarkin/aws-enumerator/4f2a98387b02fb03f3bf84ac0d82faf0d299f29b/_img/Screenshot_2021-04-10_at_13.56.12.png -------------------------------------------------------------------------------- /_img/Screenshot_2021-04-10_at_14.03.16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shabarkin/aws-enumerator/4f2a98387b02fb03f3bf84ac0d82faf0d299f29b/_img/Screenshot_2021-04-10_at_14.03.16.png -------------------------------------------------------------------------------- /_img/Screenshot_2021-04-10_at_14.06.18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shabarkin/aws-enumerator/4f2a98387b02fb03f3bf84ac0d82faf0d299f29b/_img/Screenshot_2021-04-10_at_14.06.18.png -------------------------------------------------------------------------------- /_img/Screenshot_2021-04-10_at_14.08.01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shabarkin/aws-enumerator/4f2a98387b02fb03f3bf84ac0d82faf0d299f29b/_img/Screenshot_2021-04-10_at_14.08.01.png -------------------------------------------------------------------------------- /_img/Screenshot_2021-04-10_at_14.43.51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shabarkin/aws-enumerator/4f2a98387b02fb03f3bf84ac0d82faf0d299f29b/_img/Screenshot_2021-04-10_at_14.43.51.png -------------------------------------------------------------------------------- /_img/Screenshot_2021-04-10_at_14.45.51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shabarkin/aws-enumerator/4f2a98387b02fb03f3bf84ac0d82faf0d299f29b/_img/Screenshot_2021-04-10_at_14.45.51.png -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/shabarkin/aws-enumerator 2 | 3 | go 1.15 4 | 5 | require ( 6 | github.com/aws/aws-sdk-go-v2/config v1.1.5 7 | github.com/aws/aws-sdk-go-v2/service/acm v1.2.2 8 | github.com/aws/aws-sdk-go-v2/service/amplify v1.1.5 9 | github.com/aws/aws-sdk-go-v2/service/apigateway v1.2.2 10 | github.com/aws/aws-sdk-go-v2/service/appmesh v1.2.2 11 | github.com/aws/aws-sdk-go-v2/service/appsync v1.2.2 12 | github.com/aws/aws-sdk-go-v2/service/athena v1.2.2 13 | github.com/aws/aws-sdk-go-v2/service/autoscaling v1.3.0 14 | github.com/aws/aws-sdk-go-v2/service/backup v1.2.2 15 | github.com/aws/aws-sdk-go-v2/service/batch v1.3.1 16 | github.com/aws/aws-sdk-go-v2/service/chime v1.2.2 17 | github.com/aws/aws-sdk-go-v2/service/cloud9 v1.3.0 18 | github.com/aws/aws-sdk-go-v2/service/clouddirectory v1.1.5 19 | github.com/aws/aws-sdk-go-v2/service/cloudformation v1.3.1 20 | github.com/aws/aws-sdk-go-v2/service/cloudfront v1.3.0 21 | github.com/aws/aws-sdk-go-v2/service/cloudhsm v1.1.5 22 | github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.1.5 23 | github.com/aws/aws-sdk-go-v2/service/cloudsearch v1.2.2 24 | github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.2.2 25 | github.com/aws/aws-sdk-go-v2/service/codebuild v1.2.2 26 | github.com/aws/aws-sdk-go-v2/service/codecommit v1.1.5 27 | github.com/aws/aws-sdk-go-v2/service/codedeploy v1.3.0 28 | github.com/aws/aws-sdk-go-v2/service/codepipeline v1.2.2 29 | github.com/aws/aws-sdk-go-v2/service/codestar v1.1.5 30 | github.com/aws/aws-sdk-go-v2/service/comprehend v1.3.1 31 | github.com/aws/aws-sdk-go-v2/service/datapipeline v1.2.1 32 | github.com/aws/aws-sdk-go-v2/service/datasync v1.2.2 33 | github.com/aws/aws-sdk-go-v2/service/dax v1.1.5 34 | github.com/aws/aws-sdk-go-v2/service/devicefarm v1.1.5 35 | github.com/aws/aws-sdk-go-v2/service/directconnect v1.3.1 36 | github.com/aws/aws-sdk-go-v2/service/dlm v1.2.2 37 | github.com/aws/aws-sdk-go-v2/service/dynamodb v1.2.2 38 | github.com/aws/aws-sdk-go-v2/service/ec2 v1.4.0 39 | github.com/aws/aws-sdk-go-v2/service/ecr v1.2.2 40 | github.com/aws/aws-sdk-go-v2/service/ecs v1.2.2 41 | github.com/aws/aws-sdk-go-v2/service/eks v1.2.2 42 | github.com/aws/aws-sdk-go-v2/service/elasticache v1.3.0 43 | github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.2.2 44 | github.com/aws/aws-sdk-go-v2/service/elastictranscoder v1.2.2 45 | github.com/aws/aws-sdk-go-v2/service/firehose v1.2.2 46 | github.com/aws/aws-sdk-go-v2/service/fms v1.3.0 47 | github.com/aws/aws-sdk-go-v2/service/fsx v1.2.2 48 | github.com/aws/aws-sdk-go-v2/service/gamelift v1.3.1 49 | github.com/aws/aws-sdk-go-v2/service/globalaccelerator v1.2.2 50 | github.com/aws/aws-sdk-go-v2/service/glue v1.3.1 51 | github.com/aws/aws-sdk-go-v2/service/greengrass v1.3.1 52 | github.com/aws/aws-sdk-go-v2/service/guardduty v1.2.2 53 | github.com/aws/aws-sdk-go-v2/service/health v1.2.2 54 | github.com/aws/aws-sdk-go-v2/service/iam v1.3.1 55 | github.com/aws/aws-sdk-go-v2/service/inspector v1.1.5 56 | github.com/aws/aws-sdk-go-v2/service/iot v1.3.1 57 | github.com/aws/aws-sdk-go-v2/service/iotanalytics v1.1.5 58 | github.com/aws/aws-sdk-go-v2/service/kafka v1.2.2 59 | github.com/aws/aws-sdk-go-v2/service/kinesis v1.2.2 60 | github.com/aws/aws-sdk-go-v2/service/kinesisanalytics v1.1.5 61 | github.com/aws/aws-sdk-go-v2/service/kinesisvideo v1.1.5 62 | github.com/aws/aws-sdk-go-v2/service/kms v1.2.2 63 | github.com/aws/aws-sdk-go-v2/service/lambda v1.2.2 64 | github.com/aws/aws-sdk-go-v2/service/lightsail v1.3.0 65 | github.com/aws/aws-sdk-go-v2/service/machinelearning v1.3.1 66 | github.com/aws/aws-sdk-go-v2/service/macie v1.2.2 67 | github.com/aws/aws-sdk-go-v2/service/mediaconnect v1.2.2 68 | github.com/aws/aws-sdk-go-v2/service/mediaconvert v1.3.0 69 | github.com/aws/aws-sdk-go-v2/service/medialive v1.4.0 70 | github.com/aws/aws-sdk-go-v2/service/mediapackage v1.3.0 71 | github.com/aws/aws-sdk-go-v2/service/mediastore v1.1.5 72 | github.com/aws/aws-sdk-go-v2/service/mediatailor v1.2.2 73 | github.com/aws/aws-sdk-go-v2/service/mobile v1.1.5 74 | github.com/aws/aws-sdk-go-v2/service/mq v1.1.5 75 | github.com/aws/aws-sdk-go-v2/service/opsworks v1.2.2 76 | github.com/aws/aws-sdk-go-v2/service/organizations v1.2.2 77 | github.com/aws/aws-sdk-go-v2/service/pinpoint v1.3.1 78 | github.com/aws/aws-sdk-go-v2/service/polly v1.1.5 79 | github.com/aws/aws-sdk-go-v2/service/pricing v1.3.1 80 | github.com/aws/aws-sdk-go-v2/service/ram v1.3.0 81 | github.com/aws/aws-sdk-go-v2/service/rds v1.2.2 82 | github.com/aws/aws-sdk-go-v2/service/redshift v1.3.1 83 | github.com/aws/aws-sdk-go-v2/service/rekognition v1.3.1 84 | github.com/aws/aws-sdk-go-v2/service/robomaker v1.3.0 85 | github.com/aws/aws-sdk-go-v2/service/route53 v1.4.0 86 | github.com/aws/aws-sdk-go-v2/service/route53domains v1.1.5 87 | github.com/aws/aws-sdk-go-v2/service/route53resolver v1.3.0 88 | github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0 89 | github.com/aws/aws-sdk-go-v2/service/sagemaker v1.3.1 90 | github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.2.2 91 | github.com/aws/aws-sdk-go-v2/service/securityhub v1.2.2 92 | github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.2.2 93 | github.com/aws/aws-sdk-go-v2/service/shield v1.2.2 94 | github.com/aws/aws-sdk-go-v2/service/signer v1.2.2 95 | github.com/aws/aws-sdk-go-v2/service/sms v1.1.5 96 | github.com/aws/aws-sdk-go-v2/service/snowball v1.2.2 97 | github.com/aws/aws-sdk-go-v2/service/sns v1.2.2 98 | github.com/aws/aws-sdk-go-v2/service/sqs v1.3.1 99 | github.com/aws/aws-sdk-go-v2/service/ssm v1.4.0 100 | github.com/aws/aws-sdk-go-v2/service/storagegateway v1.2.0 101 | github.com/aws/aws-sdk-go-v2/service/sts v1.2.2 102 | github.com/aws/aws-sdk-go-v2/service/support v1.1.5 103 | github.com/aws/aws-sdk-go-v2/service/transcribe v1.2.1 104 | github.com/aws/aws-sdk-go-v2/service/transfer v1.2.2 105 | github.com/aws/aws-sdk-go-v2/service/translate v1.1.5 106 | github.com/aws/aws-sdk-go-v2/service/waf v1.1.5 107 | github.com/aws/aws-sdk-go-v2/service/workdocs v1.1.5 108 | github.com/aws/aws-sdk-go-v2/service/worklink v1.1.5 109 | github.com/aws/aws-sdk-go-v2/service/workmail v1.2.1 110 | github.com/aws/aws-sdk-go-v2/service/workspaces v1.2.2 111 | github.com/aws/aws-sdk-go-v2/service/xray v1.2.2 112 | github.com/fatih/color v1.10.0 113 | github.com/joho/godotenv v1.3.0 114 | github.com/wayneashleyberry/terminal-dimensions v1.0.0 115 | ) 116 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | github.com/aws/aws-sdk-go v1.38.12 h1:khtODkUna3iF53Cg3dCF4e6oWgrAEbZDU4x1aq+G0WY= 2 | github.com/aws/aws-sdk-go v1.38.12/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= 3 | github.com/aws/aws-sdk-go-v2 v1.3.0 h1:2B/SbB1oOJe8RSl/TIgE11BDE4sX7Z+JupLxTdA2Rjs= 4 | github.com/aws/aws-sdk-go-v2 v1.3.0/go.mod h1:hTQc/9pYq5bfFACIUY9tc/2SYWd9Vnmw+testmuQeRY= 5 | github.com/aws/aws-sdk-go-v2 v1.3.1 h1:KKstwh6zsuUhQH3GvSor7M3am/+imPqydFOZHzlkTKc= 6 | github.com/aws/aws-sdk-go-v2 v1.3.1/go.mod h1:5SmWRTjN6uTRFNCc7rR69xHsdcUJnthmaRHGDsYhpTE= 7 | github.com/aws/aws-sdk-go-v2 v1.3.2 h1:RQj8l98yKUm0UV2Wd3w/Ms+TXV9Rs1E6Kr5tRRMfyU4= 8 | github.com/aws/aws-sdk-go-v2 v1.3.2/go.mod h1:7OaACgj2SX3XGWnrIjGlJM22h6yD6MEWKvm7levnnM8= 9 | github.com/aws/aws-sdk-go-v2/config v1.1.3 h1:pYDr4DTr0w4GfweXhX2ns1ZGyH46nLP/ZeQQodl1s68= 10 | github.com/aws/aws-sdk-go-v2/config v1.1.3/go.mod h1:yf3tNRNqZKlylefSdp5R3v+sm1el90fhUTcSa/t69Ro= 11 | github.com/aws/aws-sdk-go-v2/config v1.1.4 h1:2hjdDldmJJjb+rFieQySfOFt4WwxKZJVTEB6RBI74T4= 12 | github.com/aws/aws-sdk-go-v2/config v1.1.4/go.mod h1:op05ummoVoAqctpA80jVt/+hvEtLfuKmDyx0bIuvfbE= 13 | github.com/aws/aws-sdk-go-v2/config v1.1.5 h1:imDWOGwlIrRpHLallJ9mli2SIQ4egtGKtFUFsuGRIaQ= 14 | github.com/aws/aws-sdk-go-v2/config v1.1.5/go.mod h1:P3F1hku7qzC81txjwXnwOM6Ex6ezkU6+/557Teyb64E= 15 | github.com/aws/aws-sdk-go-v2/credentials v1.1.3 h1:Q0S5OPP4l9kWrmPNK500pdQhg81x4E3UpvugYG5Wilc= 16 | github.com/aws/aws-sdk-go-v2/credentials v1.1.3/go.mod h1:afuzRuLhPEe08fePFh4gI9jnHuXd8AJDCYZNo3rKRKE= 17 | github.com/aws/aws-sdk-go-v2/credentials v1.1.4 h1:whYYw2srG+zUQzUw4LhML83f+xd22Vm7gv0I7aJglc8= 18 | github.com/aws/aws-sdk-go-v2/credentials v1.1.4/go.mod h1:UQwsT2w2XelrWoVV2v/zL2uce1RxmVCiHaZsoKLamZg= 19 | github.com/aws/aws-sdk-go-v2/credentials v1.1.5 h1:R9v/eN5cXv5yMLC619xRYl5PgCSuy5SarizmM7+qqSA= 20 | github.com/aws/aws-sdk-go-v2/credentials v1.1.5/go.mod h1:Ir1R6tPiR1/2y1hes8yOijFMz54hzSmgcmCDo6F45Qc= 21 | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.4 h1:V7DByJMo5kq31ZiyQMmjihjexftM1oJ6luRs09M5/Uc= 22 | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.4/go.mod h1:BDw1ukadBHn//M/n7LqpEgimGS0QtiJePnygMsbuYMs= 23 | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.5 h1:5gCrezE41xYQHWDsDkJD9nT22tUH3s+Zrvs4c3v2FGc= 24 | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.5/go.mod h1:z/NKNlYxMzphl7TzjV+ctUebHF4CFNGGlSvmV/NKcJU= 25 | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.6 h1:zoOz5V56jO/rGixsCDnrQtAzYRYM2hGA/43U6jVMFbo= 26 | github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.6/go.mod h1:0+fWMitrmIpENiY8/1DyhdYPUCAPvd9UNz9mtCsEoLQ= 27 | github.com/aws/aws-sdk-go-v2/service/acm v1.2.1 h1:s3Yka4ZE67lTTbSG7ZXlgwIjC122RkG6okTcrEbCBBY= 28 | github.com/aws/aws-sdk-go-v2/service/acm v1.2.1/go.mod h1:X6p3MQnaIMOJ6+A1D7OfW3WKt7rJzgZzSeVkua6lZrg= 29 | github.com/aws/aws-sdk-go-v2/service/acm v1.2.2 h1:V/hFBaY4MQyTyCBMnQ9iacetd7+XLzNSLekKJFbUyO4= 30 | github.com/aws/aws-sdk-go-v2/service/acm v1.2.2/go.mod h1:dqFW/dd0pYR+UJzDpaa0DJ3h57EkUon77+TgKIZe9zg= 31 | github.com/aws/aws-sdk-go-v2/service/amplify v1.1.4 h1:d21f/W8RxL/Yz1e2OS88rnZYSRkul1wLrVPNFaFEM4k= 32 | github.com/aws/aws-sdk-go-v2/service/amplify v1.1.4/go.mod h1:uP/CKdW9vN23rotFkqOWVMqBMIbsiP4y+Cv4qrP0JIk= 33 | github.com/aws/aws-sdk-go-v2/service/amplify v1.1.5 h1:U/pP6r7YdLQBB4KT8NSi9AyqRzvJR9Id7zE3gRxOEoQ= 34 | github.com/aws/aws-sdk-go-v2/service/amplify v1.1.5/go.mod h1:ZlNzNP6GscyUQTsfYHC1gzrTVHY5hIj5lo64ekHPzgA= 35 | github.com/aws/aws-sdk-go-v2/service/apigateway v1.2.1 h1:2kxNxcT9QVSckqagWevdNOAOCOAmGHsCbkowF6Rmur8= 36 | github.com/aws/aws-sdk-go-v2/service/apigateway v1.2.1/go.mod h1:4fO3jaFTaz/8ygZBVNSk4NSdAwcc/NZ++HUrG9kpJ0I= 37 | github.com/aws/aws-sdk-go-v2/service/apigateway v1.2.2 h1:U/33opBj4zJf667z1rei2x0VyA1szpxd/SFTHCTMXCk= 38 | github.com/aws/aws-sdk-go-v2/service/apigateway v1.2.2/go.mod h1:PG5C99oGw1oXybDMmuF8iAHtLT3Y9PfvRHT8uyCk5Vw= 39 | github.com/aws/aws-sdk-go-v2/service/appmesh v1.2.1 h1:RpnzchLbHfAG3F8G+j2OVrERwNTT8TOH9sb5uLzXDW4= 40 | github.com/aws/aws-sdk-go-v2/service/appmesh v1.2.1/go.mod h1:cQOQSZW8CH7cOUTCeo8pAYfYPom+1UCK4rphIloopSo= 41 | github.com/aws/aws-sdk-go-v2/service/appmesh v1.2.2 h1:nfi4svG8zVZovKLH16uCIUteFLd+3M3H4XyOgpUfVpY= 42 | github.com/aws/aws-sdk-go-v2/service/appmesh v1.2.2/go.mod h1:vAXae2vpQX/RkMLBwXUDWyjwATyC7fyNrMxTQOebn7Q= 43 | github.com/aws/aws-sdk-go-v2/service/appsync v1.2.1 h1:qHxx2jl6nI6Sn5fuXtBQVWbhaG+fErDAB47BHm+Kw1A= 44 | github.com/aws/aws-sdk-go-v2/service/appsync v1.2.1/go.mod h1:JkdNL71yKS0qmF+dFJJzxf1WJZWFGIhTepXHaxtKipE= 45 | github.com/aws/aws-sdk-go-v2/service/appsync v1.2.2 h1:dgF/c3yky6NIJdqbZZz5/3WWZFi49tL6bCC4D/H5wtk= 46 | github.com/aws/aws-sdk-go-v2/service/appsync v1.2.2/go.mod h1:z3GPLYmwPl/6JDvjpAG9Wh2tRonHnEvqbqdSHTzElkU= 47 | github.com/aws/aws-sdk-go-v2/service/athena v1.2.1 h1:XD0aqHoCSgpuSDu84nwZu9KCh9sHR/Cg69M0gwuqzGw= 48 | github.com/aws/aws-sdk-go-v2/service/athena v1.2.1/go.mod h1:jjOo+l6LE5oN7q8azjtP2rTrulron6NbfAyILN8oMjc= 49 | github.com/aws/aws-sdk-go-v2/service/athena v1.2.2 h1:QVelXZL3kPFcCW6Pu1l4L452plxhw1k9ZFA7kFG9BU0= 50 | github.com/aws/aws-sdk-go-v2/service/athena v1.2.2/go.mod h1:KcYPapeybJ2jsWZa9WfCWSEQGsioAXUZWonR9ncRVb8= 51 | github.com/aws/aws-sdk-go-v2/service/autoscaling v1.2.1 h1:imL02JGNApN3z+9u/meTDeZF37QfpqRmrDnGghGNFvY= 52 | github.com/aws/aws-sdk-go-v2/service/autoscaling v1.2.1/go.mod h1:bOqVTdQoE8zqisF2vwsiZxZLxLDCOjOvfFohzXsJ/vE= 53 | github.com/aws/aws-sdk-go-v2/service/autoscaling v1.3.0 h1:2d4dJ122x2DKQ4JCy2DlB5U6YW+TJWwLOjjrQOIAP0E= 54 | github.com/aws/aws-sdk-go-v2/service/autoscaling v1.3.0/go.mod h1:hMFVW0TCp/vzPZmqiaJCofY9B20RyVepiQRrXl0nCIo= 55 | github.com/aws/aws-sdk-go-v2/service/backup v1.2.1 h1:cCN4he7bn68I/T7oz1F9K11ftK3kiJmPu/BbUcRwIoc= 56 | github.com/aws/aws-sdk-go-v2/service/backup v1.2.1/go.mod h1:hVEBC/NoLAspOWSrArd8LjMlftDO/al+OVaTMkFQowU= 57 | github.com/aws/aws-sdk-go-v2/service/backup v1.2.2 h1:hy9S4XuQWrSMLTh8NaNfWf8t0M2PHriPlXM2iwxRKMc= 58 | github.com/aws/aws-sdk-go-v2/service/backup v1.2.2/go.mod h1:W7vTWxH4McTQoqxrTsziaIKh/1VHxPM+5XIgwU5sQKo= 59 | github.com/aws/aws-sdk-go-v2/service/batch v1.3.0 h1:/9zSt4IetfWO73+FUfQ2rLZiDdX8ccIACTa5X/bT2Bk= 60 | github.com/aws/aws-sdk-go-v2/service/batch v1.3.0/go.mod h1:5Gw4d9mNqTMaRjDTL4AjO94q0pBTel9ki3ZPEHNdE7w= 61 | github.com/aws/aws-sdk-go-v2/service/batch v1.3.1 h1:dZSRS8i4wL+lB87FCCHBynaD7BgrYyESuEzmx23/pOg= 62 | github.com/aws/aws-sdk-go-v2/service/batch v1.3.1/go.mod h1:sx7fSwDOWJhJ9Z/+SCHfisxlIXmPXqovaksLqQy/+w0= 63 | github.com/aws/aws-sdk-go-v2/service/chime v1.2.1 h1:ln4Z3mlipA/uNlNjVKITL22Uj50DtQpTRwDjn6qi7+s= 64 | github.com/aws/aws-sdk-go-v2/service/chime v1.2.1/go.mod h1:/vaJEMhB3THhvMWqFL0rxci3em7OHwvMLXaP+Hf9W9I= 65 | github.com/aws/aws-sdk-go-v2/service/chime v1.2.2 h1:2nolP7uO856HSgDcG2FP5GokF8oWUd12+7v2as0KXTY= 66 | github.com/aws/aws-sdk-go-v2/service/chime v1.2.2/go.mod h1:ILto3C9liCGfKA7V4bkUsNFG97jm9BGyC70lIE7JvD4= 67 | github.com/aws/aws-sdk-go-v2/service/cloud9 v1.2.0 h1:FURCj1vAxCnGKxncV5PzdD3YiCqLHH6vRCRnJxC4zT0= 68 | github.com/aws/aws-sdk-go-v2/service/cloud9 v1.2.0/go.mod h1:d6SajoAO+exx0kSwdppv62Mcb6uJrn+jXrYAc4LKEdc= 69 | github.com/aws/aws-sdk-go-v2/service/cloud9 v1.3.0 h1:Gn3cNJmfAPxdxxj0Hwirn6r9UwxD7ePoZNvEOjqOe2o= 70 | github.com/aws/aws-sdk-go-v2/service/cloud9 v1.3.0/go.mod h1:SKC1PrYIBEqkB2gXagP+cQvEealIr+pzKz1KD24+JBM= 71 | github.com/aws/aws-sdk-go-v2/service/clouddirectory v1.1.4 h1:Z1qFfM6iXdVLEVBBpPzp+gw83OL/FEilIFsZJeBcZKc= 72 | github.com/aws/aws-sdk-go-v2/service/clouddirectory v1.1.4/go.mod h1:hJ1yjEToIuIll/wTCFcP57gfm8hi7hn8K5WWwAExqNQ= 73 | github.com/aws/aws-sdk-go-v2/service/clouddirectory v1.1.5 h1:c1WSxD4zMe0zgZ646HPRl68AWDMuEtunhAKdoe29Jjo= 74 | github.com/aws/aws-sdk-go-v2/service/clouddirectory v1.1.5/go.mod h1:XuSnzbtLNz0317noCJF7zqrd9Upt3PSXz3CaKalOrD8= 75 | github.com/aws/aws-sdk-go-v2/service/cloudformation v1.3.0 h1:+eHZIcEQ7jMuAAWL9uS9RfQz8ElLcRksWqXSIQ7essE= 76 | github.com/aws/aws-sdk-go-v2/service/cloudformation v1.3.0/go.mod h1:9PLAEZCkzDVh+/fq7OwOloe/RqSpqwes2x+ozcRyloM= 77 | github.com/aws/aws-sdk-go-v2/service/cloudformation v1.3.1 h1:Hw2Ten8sgwpwYnagyiuL35VAd5pLIrGofJQWOZRrZd8= 78 | github.com/aws/aws-sdk-go-v2/service/cloudformation v1.3.1/go.mod h1:MH1u3+6v48cHFGorEvYNBu+QJ6bE8gZVmvQo0NSWZls= 79 | github.com/aws/aws-sdk-go-v2/service/cloudfront v1.2.1 h1:7Zh+ShMr7awq0s76kwca8efPiWOZaWV5267fa6avwOQ= 80 | github.com/aws/aws-sdk-go-v2/service/cloudfront v1.2.1/go.mod h1:AlMkBlBn/pyqVYIDcHRkf2FQRm9q0czFdMOMn1SV8oQ= 81 | github.com/aws/aws-sdk-go-v2/service/cloudfront v1.3.0 h1:8fOeCj6bb2JtkWvxP6McS4RR/CV20IG4JzZWYz4Z12E= 82 | github.com/aws/aws-sdk-go-v2/service/cloudfront v1.3.0/go.mod h1:J04vwlb6n/oVJNtNyT+sLx2KDgzyo7nDRyHPnnZQYnk= 83 | github.com/aws/aws-sdk-go-v2/service/cloudhsm v1.1.4 h1:Bh3H42m11h4hmP6cU5FwWqwtSBiDfVNR1G1fKcdW2/Y= 84 | github.com/aws/aws-sdk-go-v2/service/cloudhsm v1.1.4/go.mod h1:BYRMrC1HLkmxZL/EpzLgxN1khdTq5vi5hwhd4gtNJ7M= 85 | github.com/aws/aws-sdk-go-v2/service/cloudhsm v1.1.5 h1:OZiwVB6iJqVYYTzOunQRrsbvONmClxQRRi+hu/SONJw= 86 | github.com/aws/aws-sdk-go-v2/service/cloudhsm v1.1.5/go.mod h1:6I5Ab4/5eR2X+JFlRxMpYyDRs69U5sizNB1+sgJm/TM= 87 | github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.1.4 h1:j+WXsiwkQ+Cd9Zg3W+1q0zqqtSeRZXKtAb66ZmDBMBg= 88 | github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.1.4/go.mod h1:D43F9iOEVNFNdj6LB2yTupIBVlM0rRLoqBX23ej2f1s= 89 | github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.1.5 h1:k8SL5dZhyn4AIichsZllnd3DNC37qfAaXaHbwe1g82g= 90 | github.com/aws/aws-sdk-go-v2/service/cloudhsmv2 v1.1.5/go.mod h1:WiBGda7ECnY0hufrcV+TemPpVWaobiwOD9U+GaaCUcQ= 91 | github.com/aws/aws-sdk-go-v2/service/cloudsearch v1.2.1 h1:eR/LzGaBQBOSyfxayScGb626gl3nuhbkuFI/l4EBvLc= 92 | github.com/aws/aws-sdk-go-v2/service/cloudsearch v1.2.1/go.mod h1:WVKx1eczQAhH4ZR+qOvUMb7OC6AWGr68sSjZV12SBQE= 93 | github.com/aws/aws-sdk-go-v2/service/cloudsearch v1.2.2 h1:sZejbUwiP0V3gPPuC3NVP3FZFcI0Ny6sDCV/jnbJQVg= 94 | github.com/aws/aws-sdk-go-v2/service/cloudsearch v1.2.2/go.mod h1:yAXkm7ayftXNZlSVcq3ZhjdiLlPCCNkwPyKSKoELC4o= 95 | github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.2.1 h1:egAyiJ8xpfed+I+8t+71OxyNr4Vbw1xRA+9EjSu15tU= 96 | github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.2.1/go.mod h1:GtzMwrY6i7/RXMKBZAMXyXFmZ1UHxtxDeIiUO3lBXRI= 97 | github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.2.2 h1:gpKrPgcK7K766EmXyX2Lie5A3PRhJ0uYe3+OvRsQB6E= 98 | github.com/aws/aws-sdk-go-v2/service/cloudtrail v1.2.2/go.mod h1:gJ6gvtfYCsjlkFxNxopzA6sW2CJ1Ph8Vzu7IQwXendY= 99 | github.com/aws/aws-sdk-go-v2/service/codebuild v1.2.1 h1:Kn8KgAStqC7/FMP927qsWUUQJH9gw/ubKTuMqyKUpds= 100 | github.com/aws/aws-sdk-go-v2/service/codebuild v1.2.1/go.mod h1:n5wJZmnZAZxSQDf7CnNpyTCOP9cjTGsmH1xkCs8Giy4= 101 | github.com/aws/aws-sdk-go-v2/service/codebuild v1.2.2 h1:79hSOBAYUnd2whLKr10dZlb9hvSiPYNdYX2PR1GwjgE= 102 | github.com/aws/aws-sdk-go-v2/service/codebuild v1.2.2/go.mod h1:ItYplXbqecVEIyiareYt1qHWHuzZm2yC4AVJX49b6Gg= 103 | github.com/aws/aws-sdk-go-v2/service/codecommit v1.1.4 h1:ltl1WkdER+wf0ZsWTI1OUEvnULxL0aV7J8jb/4luguk= 104 | github.com/aws/aws-sdk-go-v2/service/codecommit v1.1.4/go.mod h1:yodSutg2dlBEXshEJtcJZVANNw6Tvv9bN1yuwV9Zh4U= 105 | github.com/aws/aws-sdk-go-v2/service/codecommit v1.1.5 h1:ZV7xK1yNcLEuJSZf/zc8ZjY8HnbdzF3BZ9m5zLx2+d0= 106 | github.com/aws/aws-sdk-go-v2/service/codecommit v1.1.5/go.mod h1:2FgwS83dRjbkAoFliDanx6tPaFsDsxLjF1xz0UH4vJ0= 107 | github.com/aws/aws-sdk-go-v2/service/codedeploy v1.2.1 h1:WEqfKQLKriwX7BQyUXfJzK/gO6wMelZxtwOHD2cyjeg= 108 | github.com/aws/aws-sdk-go-v2/service/codedeploy v1.2.1/go.mod h1:yLCnpa5QV9tRDM7Hl+2sMgOsL1+Od9L/i9EmRUxBK5s= 109 | github.com/aws/aws-sdk-go-v2/service/codedeploy v1.3.0 h1:QEZpnIX4Gf7tEGkMSBf/erDybo2HF9ASc6gzsSm7q+M= 110 | github.com/aws/aws-sdk-go-v2/service/codedeploy v1.3.0/go.mod h1:sQGjjmkpYuua2Z9zP63WTtjL3EBFcf72z1fs3VHHoSU= 111 | github.com/aws/aws-sdk-go-v2/service/codepipeline v1.2.1 h1:rFLNwNLEB+1wvueAOwTmuGS2WM4tc4Ly9vidfA6642Q= 112 | github.com/aws/aws-sdk-go-v2/service/codepipeline v1.2.1/go.mod h1:FQdcXAJhwsXv9IqpIQYw4FjpTtdUv/CMjQ/C54HuyIs= 113 | github.com/aws/aws-sdk-go-v2/service/codepipeline v1.2.2 h1:N3Ny8kFHmPjcgRTw//OYBj8jVFG+N1hROBv8f4v5juw= 114 | github.com/aws/aws-sdk-go-v2/service/codepipeline v1.2.2/go.mod h1:ezx1UmWA4G9U3LzWAuXnoaUxDfm+tAC9C2n0ig4C29w= 115 | github.com/aws/aws-sdk-go-v2/service/codestar v1.1.4 h1:gjt45Qn4SCZhgFKXEaTvAuEvULUcqVHUpI4yuXPriVw= 116 | github.com/aws/aws-sdk-go-v2/service/codestar v1.1.4/go.mod h1:yyBLLFKa5xOhuYlme5nF3rM2blBkzAij1I1LpGeLWlU= 117 | github.com/aws/aws-sdk-go-v2/service/codestar v1.1.5 h1:EO282yFlPL84NrUzltyEglFKx35aCgw1Xtm15Ntp/N4= 118 | github.com/aws/aws-sdk-go-v2/service/codestar v1.1.5/go.mod h1:LOUK0tstkT73gTwAEkTIIRdF1Q3EbLMlkkF3SBR9bS8= 119 | github.com/aws/aws-sdk-go-v2/service/comprehend v1.3.0 h1:96FoGwdIZFHPHM2M6ANelkkJ4rKOI2B8XLOzC0w/9qk= 120 | github.com/aws/aws-sdk-go-v2/service/comprehend v1.3.0/go.mod h1:Tz85be6bzbfacIAf3ta3XMsZYCr3QgUcIdVsiVTbqwM= 121 | github.com/aws/aws-sdk-go-v2/service/comprehend v1.3.1 h1:7APNB6ECEZ6YqTCQbg1pdrmFoVk3Q0qi91ZnimSTlmc= 122 | github.com/aws/aws-sdk-go-v2/service/comprehend v1.3.1/go.mod h1:jEDdMzy8e5Ug9fuZJcCg1YWqxEpyBgWt7FyafjjB/CE= 123 | github.com/aws/aws-sdk-go-v2/service/datapipeline v1.2.0 h1:bA6MWMDhG3aJnI4IYiZWf9FJ4mQVzC2gaLK4w4lhVMw= 124 | github.com/aws/aws-sdk-go-v2/service/datapipeline v1.2.0/go.mod h1:jQbGvJZEGS5zgzwiEeNqCaDaQeF0/ulJXeX8SCd8kaI= 125 | github.com/aws/aws-sdk-go-v2/service/datapipeline v1.2.1 h1:BkQQbyqp0a6keDQyTp9Uo/V7RLxNyiAxRkqg6XkSLSI= 126 | github.com/aws/aws-sdk-go-v2/service/datapipeline v1.2.1/go.mod h1:nIMyavmm9kyslDhayb5zax1FZGGmB624riEXjZxiuXQ= 127 | github.com/aws/aws-sdk-go-v2/service/datasync v1.2.1 h1:cYaRrIfDZODhx048sw8x9EHuFcwTFu/Vv3nuTfXEJd0= 128 | github.com/aws/aws-sdk-go-v2/service/datasync v1.2.1/go.mod h1:AH/WS//GIxzogIX4V87u+XVLqKwZs2xh5G4Qj5tkhlA= 129 | github.com/aws/aws-sdk-go-v2/service/datasync v1.2.2 h1:Ybnq/fRjWYmFj2OwPRJa0U0xBVi/5Em26uuM6d6OmZc= 130 | github.com/aws/aws-sdk-go-v2/service/datasync v1.2.2/go.mod h1:8E/jzMQV3ZRgaIe9y5TRyuAa4WfHfSmtPOyzogPrihE= 131 | github.com/aws/aws-sdk-go-v2/service/dax v1.1.4 h1:1oGLDaB86Fm/hEKoBua7X0uqgBF3SN23fTQ86T2hxMw= 132 | github.com/aws/aws-sdk-go-v2/service/dax v1.1.4/go.mod h1:1aw2PkqYt6DjSwxYn0VesXvURmespl/LQnjl9NjMSD4= 133 | github.com/aws/aws-sdk-go-v2/service/dax v1.1.5 h1:wGFdCdvfpaV2Wzm/LDQUiAPAsw3HYuIOJRBFVpYrudM= 134 | github.com/aws/aws-sdk-go-v2/service/dax v1.1.5/go.mod h1:hVODD7togT3MgQc9FuEyjuLUfnC00snzFVa3S+x1FKk= 135 | github.com/aws/aws-sdk-go-v2/service/devicefarm v1.1.4 h1:1AZhsSXUE+Cbc7UsaeHQtMSN4XOKWaub/RWdDrF3Q8A= 136 | github.com/aws/aws-sdk-go-v2/service/devicefarm v1.1.4/go.mod h1:c4WI4cPN3dWLm3rW0hU8uzNZs95u/FAlHt2myHR2TXQ= 137 | github.com/aws/aws-sdk-go-v2/service/devicefarm v1.1.5 h1:s88kjsQgqTna66qcLOss6c4LZ1EyVHnozjs5ubwJCXE= 138 | github.com/aws/aws-sdk-go-v2/service/devicefarm v1.1.5/go.mod h1:TKt3Z4KC3bdnp2Hd9hJxzMMazYYBOjsfR+iWsICoZQo= 139 | github.com/aws/aws-sdk-go-v2/service/directconnect v1.3.0 h1:8bTPEWxo2cEGbzjEFSnjtTXGmQxpTDrVmRE/+HLyW6Y= 140 | github.com/aws/aws-sdk-go-v2/service/directconnect v1.3.0/go.mod h1:adMqvI6e3E37yy6ZN8gsKGEZvA7XcryYnjSvo/4pL0s= 141 | github.com/aws/aws-sdk-go-v2/service/directconnect v1.3.1 h1:D5bbZyze26oBhAIgjx90xHA2aCM581T1A2ex9uiuTuk= 142 | github.com/aws/aws-sdk-go-v2/service/directconnect v1.3.1/go.mod h1:MqMofKML1ilBFKkdcA8b2B7hl4IMo+zScDDStnBCOt0= 143 | github.com/aws/aws-sdk-go-v2/service/dlm v1.2.1 h1:I1l8c6sdXcnIVpEaBPHvmfn3PHlAmKzc/Xu6jiKeljc= 144 | github.com/aws/aws-sdk-go-v2/service/dlm v1.2.1/go.mod h1:Qua62VBXOJr8d6nLu5yAqmJFD/XWkCL3vpAWRv5nzUs= 145 | github.com/aws/aws-sdk-go-v2/service/dlm v1.2.2 h1:NIYzK70pGzwd2fNd2blOfD57PqZ0kKC3TF2qBcwNAlY= 146 | github.com/aws/aws-sdk-go-v2/service/dlm v1.2.2/go.mod h1:IdgJfhq8MpCc/KB5otC0x7gBT0lEQ62ZDzs5zq9LUxc= 147 | github.com/aws/aws-sdk-go-v2/service/dynamodb v1.2.1 h1:NnYXRukLvkiTnNyZHCCQcZaoWJSeE5Y7tCVPgvTyWfw= 148 | github.com/aws/aws-sdk-go-v2/service/dynamodb v1.2.1/go.mod h1:WqAbIrpO0PSa3AIDxMG12aPPN4D1u99rOFdEfSM/KgY= 149 | github.com/aws/aws-sdk-go-v2/service/dynamodb v1.2.2 h1:8tA7Go+R0crArjhD+Cu7QKmhSy+F24Ll1WHzQN/VOGY= 150 | github.com/aws/aws-sdk-go-v2/service/dynamodb v1.2.2/go.mod h1:1/onFSTaj5Pz/pI/3YjomZQcx1BYdttnOJUJVKSOh7A= 151 | github.com/aws/aws-sdk-go-v2/service/ec2 v1.3.0 h1:y82WbYudKuiWx0KuKQheqTQ4RIF8ZHoHvS/rD8HCYCc= 152 | github.com/aws/aws-sdk-go-v2/service/ec2 v1.3.0/go.mod h1:KW2/Fgs+L1m1X53O9hTFpJqPtLyYGbf9j1Ay5xPSy74= 153 | github.com/aws/aws-sdk-go-v2/service/ec2 v1.4.0 h1:tEU8RVLh5tNT5/Yz3yhEUycOnTYVJcCadp59tzSNHLs= 154 | github.com/aws/aws-sdk-go-v2/service/ec2 v1.4.0/go.mod h1:3iBezuZtNxZnKX7Zv2JB/lGyGCSYOES8TMq4WSXPBl0= 155 | github.com/aws/aws-sdk-go-v2/service/ecr v1.2.1 h1:rdvoJaE51N1tuNc2B75vNsZu2P0xV6y7ibOAwNeb1mI= 156 | github.com/aws/aws-sdk-go-v2/service/ecr v1.2.1/go.mod h1:iuqVazSEO7GWaX6WYrVWCVECL3ixXwhL6Q6RF4V2Db0= 157 | github.com/aws/aws-sdk-go-v2/service/ecr v1.2.2 h1:2EY0F1skAOArBsRM6nD9kPo0sdK32IPzT8O7PKocVR8= 158 | github.com/aws/aws-sdk-go-v2/service/ecr v1.2.2/go.mod h1:XnQfi4PwRBjy+CQD7zqVRRHKWe529+1nTsrWXvsSSJk= 159 | github.com/aws/aws-sdk-go-v2/service/ecs v1.2.1 h1:T8CKZFKySyOivXUc/80qlvNqvX9MQvvRCxFQCL6xxQU= 160 | github.com/aws/aws-sdk-go-v2/service/ecs v1.2.1/go.mod h1:7gzy9DNs3NWZnxJcV61X0EjhLzDuZm8uUA+moRIoiKs= 161 | github.com/aws/aws-sdk-go-v2/service/ecs v1.2.2 h1:Hel1rLI6Wjn/N1xAf7hVfqEPJxwwdOFFBG881M41fPI= 162 | github.com/aws/aws-sdk-go-v2/service/ecs v1.2.2/go.mod h1:wfsCxzXu9fYoNl8NWbjc8OpC3ljwmL+5M/Zfa2xwm+M= 163 | github.com/aws/aws-sdk-go-v2/service/eks v1.2.1 h1:eNSGiZZKcrjT1/UlxOSL/v1gjR5bePJk4xMdGBZXd1o= 164 | github.com/aws/aws-sdk-go-v2/service/eks v1.2.1/go.mod h1:XGNXr+eBGsXebPMHCHHJEaOWaenvyybnUU+dsdKpDXg= 165 | github.com/aws/aws-sdk-go-v2/service/eks v1.2.2 h1:WdaRevsJe42tAhEJJ8ShxzR04zNs1Glu9KRDRwhKGrk= 166 | github.com/aws/aws-sdk-go-v2/service/eks v1.2.2/go.mod h1:GlSwCB/FZ8JE0mwhPOS8aYDULY9bUf2GsR0tugQ6D4o= 167 | github.com/aws/aws-sdk-go-v2/service/elasticache v1.2.1 h1:r2GU9mRLlZtKNQiB8A6LeKMlxG0BK/LXU+86uv3zUos= 168 | github.com/aws/aws-sdk-go-v2/service/elasticache v1.2.1/go.mod h1:H/CnUlHdpSJ6bi4PTZn7H046nY+OF0O1ItZGpOHbZ1s= 169 | github.com/aws/aws-sdk-go-v2/service/elasticache v1.3.0 h1:ftZ/5F/CPqW7A18xVD02hGX1b1r8QsdLRk/w/BEg3E8= 170 | github.com/aws/aws-sdk-go-v2/service/elasticache v1.3.0/go.mod h1:e1FkqFNH1T9yPSPyONXxVld5n/si/508e64Is5OX7tk= 171 | github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.2.1 h1:ngD2ETQ+bmpE9dXIwpovAKfEqhK0SODf0EQDMY7qkMA= 172 | github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.2.1/go.mod h1:h2ETsoGWjnQFCsd5aYeg6+sf/HqLo7Qr7OKjSe4Axs4= 173 | github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.2.2 h1:uagPjNH5H0FndneCyYL/tF2CwfZ+jNeDh8LDO6m68Lg= 174 | github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk v1.2.2/go.mod h1:KPfN2IOuLy61sVeKgOfhvww4n5p1vGY9y6qcxQ0ATME= 175 | github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.2.1 h1:jN/we+fXuZeye2ZIPAGCI8xV6MT/JiT1JnpRUgkmG2M= 176 | github.com/aws/aws-sdk-go-v2/service/elasticloadbalancing v1.2.1/go.mod h1:2J/pAuvfB8TQHdrbVX3t4Udjv6Cd2JohqGnoMZHKhe0= 177 | github.com/aws/aws-sdk-go-v2/service/elastictranscoder v1.2.1 h1:ksGPqwdxRzwSK1H3O4z4jrDbhFnsap0HvmJNK0dzdEc= 178 | github.com/aws/aws-sdk-go-v2/service/elastictranscoder v1.2.1/go.mod h1:yamuBOz26zfLo7FiZekizZDkmGE7MGFtLGMlbHFL0Zg= 179 | github.com/aws/aws-sdk-go-v2/service/elastictranscoder v1.2.2 h1:C8e6DTx7YD3lLMAYJnFlmsK2RmbT/h1POAKjY6sH/t8= 180 | github.com/aws/aws-sdk-go-v2/service/elastictranscoder v1.2.2/go.mod h1:m6k3o5Bp4GbSk24lUoFXoI/SQqmg/r8SzDJaSF5X6Qs= 181 | github.com/aws/aws-sdk-go-v2/service/firehose v1.2.1 h1:XG4P2vpReYdY920Pf0pze6O7h7SFUkyIRVNYHNWtA2Y= 182 | github.com/aws/aws-sdk-go-v2/service/firehose v1.2.1/go.mod h1:Zt1lhxCqEWgjYOtpQp1zNg+KGz5GBrJ3Kh2CY3tuAM0= 183 | github.com/aws/aws-sdk-go-v2/service/firehose v1.2.2 h1:pRqP+i6H2vad3pthnZQLVEVTtbygfmfvm6vLMl8urU0= 184 | github.com/aws/aws-sdk-go-v2/service/firehose v1.2.2/go.mod h1:EirX3/zx3KlqrusJyikVSSeRdB5QuyaR3xmtbvzlrnE= 185 | github.com/aws/aws-sdk-go-v2/service/fms v1.2.1 h1:GQOo8orIydwBSZSH93Z2gHlVTjkjen5KT6OW0gJKnnQ= 186 | github.com/aws/aws-sdk-go-v2/service/fms v1.2.1/go.mod h1:uclej6lMNDMjuaxyTQ1EvhVtpuFwuRxhpwMgnC8zQXQ= 187 | github.com/aws/aws-sdk-go-v2/service/fms v1.3.0 h1:FaG9I0iPubYRX5Upjz1qGMxrAxZPoF/ckA3eY/04nTQ= 188 | github.com/aws/aws-sdk-go-v2/service/fms v1.3.0/go.mod h1:liZRK1WWgCM45I2gNQ+Dk/Vs+a9EjVRBRUZ1jfZRdQg= 189 | github.com/aws/aws-sdk-go-v2/service/fsx v1.2.1 h1:LGYEQ4uhlvWadzJybVEpQ1mpMZqL3z1X/tGMA2xQzAw= 190 | github.com/aws/aws-sdk-go-v2/service/fsx v1.2.1/go.mod h1:FYDI4zfy5zJuBdZZGj0YoqNW/OcrC6GcyagOTL77+Cs= 191 | github.com/aws/aws-sdk-go-v2/service/fsx v1.2.2 h1:aEnIgDlSfXY+8cbvAMvpiVLdu4OMbEcw3CdY3YrQuBo= 192 | github.com/aws/aws-sdk-go-v2/service/fsx v1.2.2/go.mod h1:5zJfITEcP4sAuq7dJg5gQTVuNknpEObtjNHqYJlcBjA= 193 | github.com/aws/aws-sdk-go-v2/service/gamelift v1.3.0 h1:TvqEAgeFUnjagxouUM9dgIsLMIhDPw59lfUsLFidiqo= 194 | github.com/aws/aws-sdk-go-v2/service/gamelift v1.3.0/go.mod h1:W3FA4iUkDo0BUfuKxTd1AVBvBR1Yh8GaO8t+8HsCrDw= 195 | github.com/aws/aws-sdk-go-v2/service/gamelift v1.3.1 h1:iEfopwA3n9km/YihaYPZc/zfZciWP82W1v70R20VXHg= 196 | github.com/aws/aws-sdk-go-v2/service/gamelift v1.3.1/go.mod h1:Fo2ybFxF/Y1MsMXcwGjUuW3l8vc2Q3VATTClVZ0bVNo= 197 | github.com/aws/aws-sdk-go-v2/service/globalaccelerator v1.2.1 h1:V7i9hzGjSpt5trBJ/0nYkW5PFEZ4LlFNL4+z7IZEF2I= 198 | github.com/aws/aws-sdk-go-v2/service/globalaccelerator v1.2.1/go.mod h1:37faQqNVhuM0Ief52pRe0bDgZPZok7pArmVHr4t2DBg= 199 | github.com/aws/aws-sdk-go-v2/service/globalaccelerator v1.2.2 h1:3g+vU+QOAP4oD5ls4PY5oXVmSjPMiXrpTU3un3nRu1A= 200 | github.com/aws/aws-sdk-go-v2/service/globalaccelerator v1.2.2/go.mod h1:qQTy1yP4cqfHHKugHxTMbGYiaDvwEKUjQNSfBkA9OcY= 201 | github.com/aws/aws-sdk-go-v2/service/glue v1.3.0 h1:xnSuV0C7FGfe9+/GJ/2KOTFD3WMXtLdk8gZzxuuuIRM= 202 | github.com/aws/aws-sdk-go-v2/service/glue v1.3.0/go.mod h1:ITzMOyWhffmh06X4DxvN85ww8Ppt0uZGh8Qcty22/yQ= 203 | github.com/aws/aws-sdk-go-v2/service/glue v1.3.1 h1:P/5LYR31nIqNJEsDm/qBsiwuLuxHd6lL3QmZh9FIhJk= 204 | github.com/aws/aws-sdk-go-v2/service/glue v1.3.1/go.mod h1:5+2zmLu4763LfhvpBTM3o7ZT2pZwazJhLnVFe0z0Uqs= 205 | github.com/aws/aws-sdk-go-v2/service/greengrass v1.3.0 h1:bLjlXQYXsQP/3r74XcKBvBHlyMTUiCQZaqU+BfQMm7Q= 206 | github.com/aws/aws-sdk-go-v2/service/greengrass v1.3.0/go.mod h1:JEhZgFXHgR0b8CH3ud85Pe96aezh8WkDOFObK8Ng+so= 207 | github.com/aws/aws-sdk-go-v2/service/greengrass v1.3.1 h1:trnMGtZaiWSsOg3PZxBI4d2VDyO5NdqLh5Yn3rNI5ic= 208 | github.com/aws/aws-sdk-go-v2/service/greengrass v1.3.1/go.mod h1:r0bxuK0pxLlzCWKnFdpUrncCskij6cUfFl+/6bEbNcw= 209 | github.com/aws/aws-sdk-go-v2/service/guardduty v1.2.1 h1:ah+72txVcIrXbTymv9PQox4oHMh56330R3+CSWoGWwE= 210 | github.com/aws/aws-sdk-go-v2/service/guardduty v1.2.1/go.mod h1:yqXMDJMiKl8LRdN84XBWVpTz7wYK37fdFMAtwC4kRsU= 211 | github.com/aws/aws-sdk-go-v2/service/guardduty v1.2.2 h1:cZLG8BU13XVOx1bt/oS2Mt0rf5w2l11878tpH8E1Ikc= 212 | github.com/aws/aws-sdk-go-v2/service/guardduty v1.2.2/go.mod h1:8SdXxhqOcjQDTbSpw/hZ8wMcuNF2WtA714SiQc0tH4U= 213 | github.com/aws/aws-sdk-go-v2/service/health v1.2.1 h1:AHBUqUzswSyusXQNEBQAoje95hrTcy93cE9rMPNwoBU= 214 | github.com/aws/aws-sdk-go-v2/service/health v1.2.1/go.mod h1:Q+8sGLEYrvBTvsTOeT9QUq7eDp8SHddv47+jwP1HbRc= 215 | github.com/aws/aws-sdk-go-v2/service/health v1.2.2 h1:YSVnMHqOejXToDBpUFjIqv205mYEu2gAzNo+KcW/HJw= 216 | github.com/aws/aws-sdk-go-v2/service/health v1.2.2/go.mod h1:153FfY7DdwZDyv8ISsyE3LBoyyvYwOMckP9aA1D9Thg= 217 | github.com/aws/aws-sdk-go-v2/service/iam v1.2.0 h1:uY8XHIk4Yl1xZWhNhrM2hXsTkq5YOC8SHwk6TaRIlB0= 218 | github.com/aws/aws-sdk-go-v2/service/iam v1.2.0/go.mod h1:4uIqdAKzvQSCQTzjIiI6m7hnv5Wc4blFKB29BkGK1VQ= 219 | github.com/aws/aws-sdk-go-v2/service/iam v1.3.0 h1:V95YLxbxLGlTcFR0KMMSZEaudIxYCAhycSGcO7/Favs= 220 | github.com/aws/aws-sdk-go-v2/service/iam v1.3.0/go.mod h1:gPUYT7MBEb30j9eAsJ17LN9KbXtD1uqKOOKesCC4tjc= 221 | github.com/aws/aws-sdk-go-v2/service/iam v1.3.1 h1:aTJTynJuqZjZ0ptNubJcEEN511FDiajRYI/PTnRO1U8= 222 | github.com/aws/aws-sdk-go-v2/service/iam v1.3.1/go.mod h1:b1K3TViQAwFbfJn8htcD5vtM8AqkMtDc53OreIpCRtk= 223 | github.com/aws/aws-sdk-go-v2/service/inspector v1.1.4 h1:hWTtvY2tNftaWrExiGdFIoaMNyEVsu08NBQylEd348o= 224 | github.com/aws/aws-sdk-go-v2/service/inspector v1.1.4/go.mod h1:Nc3vBGnDYupw2BEjSFqsLA9+HMKDrCHFTFRjjEtfzCU= 225 | github.com/aws/aws-sdk-go-v2/service/inspector v1.1.5 h1:QqpoPzjgfpdzSqkKvArv0TllnUVFdn48DiMl4BMQPMk= 226 | github.com/aws/aws-sdk-go-v2/service/inspector v1.1.5/go.mod h1:sKx7ETpan/wJCh/wCS3W4y96xLFvd50jb6DFR6UJzow= 227 | github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.0.3 h1:iLFz4nrWkXMTFeVn0n99wRyc4Xib4SlDbtAM3h2z8P8= 228 | github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.0.3/go.mod h1:g3Xw4tO/W+ae4EMzkxB6nGnJ48cLM4i1Z61WmD+IKtY= 229 | github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.0.4 h1:8yeByqOL6UWBsOOXsHnW93/ukwL66O008tRfxXxnTwA= 230 | github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.0.4/go.mod h1:BCfU3Uo2fhKcMZFp9zU5QQGQxqWCOYmZ/27Dju3S/do= 231 | github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.4 h1:DRIpujxvhdv3+xLXCoaKk1VB4vk/Sh8sIOBewLJJpes= 232 | github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.4/go.mod h1:DGOKKGeqXdIWX3xD5DKr4otrgNw5cstwUCJYwSKxbp0= 233 | github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.5 h1:GbW4bbc1iED64aIL203xcGSfLzWOWuIdnKV0guMcJvg= 234 | github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.5/go.mod h1:MW0O/RpmVpS6MWKn6W03XEJmqXlG7+d3iaYLzkd2fAc= 235 | github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.6 h1:ldYIsOP4WyjdzW8t6RC/aSieajrlx+3UN3UCZy1KM5Y= 236 | github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.6/go.mod h1:L0KWr0ASo83PRZu9NaZaDsw3koS6PspKv137DMDZjHo= 237 | github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.2.1 h1:wCzfVBrF1QRQFacZn1ywE/o2p92FzfpDNI2aCpIv+sY= 238 | github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.2.1/go.mod h1:6A0VfJAnYwhcXzt7KsixOdFlITEH5NFl4QeYxlZ5TtQ= 239 | github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.2.2 h1:aU8H58DoYxNo8R1TaSPTofkuxfQNnoqZmWL+G3+k/vA= 240 | github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.2.2/go.mod h1:nnutjMLuna0s3GVY/MAkpLX03thyNER06gXvnMAPj5g= 241 | github.com/aws/aws-sdk-go-v2/service/iot v1.3.0 h1:2XPCAh07+oDQKF9n+VPAThvhaqUuIOCIxFa9+xHnc0s= 242 | github.com/aws/aws-sdk-go-v2/service/iot v1.3.0/go.mod h1:jKAI1pEblx/JVQ5KxgEBnTiB0/CzQBVfIk6IQz1bJPY= 243 | github.com/aws/aws-sdk-go-v2/service/iot v1.3.1 h1:Y9mGyFBRHt+ASTitIAQrSicYOVauDr4bSNmSijo++CY= 244 | github.com/aws/aws-sdk-go-v2/service/iot v1.3.1/go.mod h1:lTOHtMnNgFBpueaGyB7FkVIcm3MGX9w051x3pAsa0IE= 245 | github.com/aws/aws-sdk-go-v2/service/iotanalytics v1.1.4 h1:lh9EwwgBCkiC/DGhZbA/115Q3W6YJGN19Db5a1Q7qrg= 246 | github.com/aws/aws-sdk-go-v2/service/iotanalytics v1.1.4/go.mod h1:Lecye6agzTOBvSIg3E7Vah7JetW5LB8ttpEyeCSuX2M= 247 | github.com/aws/aws-sdk-go-v2/service/iotanalytics v1.1.5 h1:VXQMy3yM7kCyMtT+ctdMDVfNPmePZJ0ZDL057yl3+f8= 248 | github.com/aws/aws-sdk-go-v2/service/iotanalytics v1.1.5/go.mod h1:SqoHzFkPwiBrYEjjV+YaUzEWpC+nPhUJdJ749D37hDE= 249 | github.com/aws/aws-sdk-go-v2/service/kafka v1.2.1 h1:70IRtg4hU1mQ5aAtjEHPQR+KCeVIDwLOpvbofiSEODE= 250 | github.com/aws/aws-sdk-go-v2/service/kafka v1.2.1/go.mod h1:2gy+VDVpxUvxQRdjpFlZNhXSjybrxnYrb9Byuzz855I= 251 | github.com/aws/aws-sdk-go-v2/service/kafka v1.2.2 h1:PEuhKj+k8wOd+Xu0Wv/ONKn+J2sJoiEevi50NTdfPwc= 252 | github.com/aws/aws-sdk-go-v2/service/kafka v1.2.2/go.mod h1:C+OMMf4KutWEMu+EEqcg7Q/Ry9BXA04f+vynMJVe9wA= 253 | github.com/aws/aws-sdk-go-v2/service/kinesis v1.2.1 h1:MXy6AyLlbBYypXEsmK94l9yGjKKtxNaD/jFzVVOsnYQ= 254 | github.com/aws/aws-sdk-go-v2/service/kinesis v1.2.1/go.mod h1:ZdVDeEkxSDTPYDtb8kVxXzyOSBkAQVXCA9fanM45a/c= 255 | github.com/aws/aws-sdk-go-v2/service/kinesis v1.2.2 h1:yUbA7VZcykLVML673r2XiG+bnKLZAceyZbBe/X/kSIk= 256 | github.com/aws/aws-sdk-go-v2/service/kinesis v1.2.2/go.mod h1:J9JZs+dk4zhz9NnfGCMPxmhQMAPX4ThHKidWNTxduxg= 257 | github.com/aws/aws-sdk-go-v2/service/kinesisanalytics v1.1.4 h1:3+ZEih+xtz8Fcqb8ZYwBCVaM8ZtK0WocL40B26yhrfQ= 258 | github.com/aws/aws-sdk-go-v2/service/kinesisanalytics v1.1.4/go.mod h1:hTyovby5q34j374msk5N3EecGrrMQSZ3O/EQzrRmrOM= 259 | github.com/aws/aws-sdk-go-v2/service/kinesisanalytics v1.1.5 h1:3LsbYgN+I3139ewliPDtTJoQanYDko14SOnO2KQ+BNU= 260 | github.com/aws/aws-sdk-go-v2/service/kinesisanalytics v1.1.5/go.mod h1:WB5S3Q5zF7CnXmP0HdDR4EHSNv5yLNiLHTYQSqsZHPk= 261 | github.com/aws/aws-sdk-go-v2/service/kinesisvideo v1.1.4 h1:tWOm70WscxPN/cpQ3FfX12lLl3O/k47033DJuOkPRPM= 262 | github.com/aws/aws-sdk-go-v2/service/kinesisvideo v1.1.4/go.mod h1:gdHJcmtEqppKm5+nI3gyJkIU5CnHAsetc2lZO5vUqEE= 263 | github.com/aws/aws-sdk-go-v2/service/kinesisvideo v1.1.5 h1:viwyFdr25QhLZiGvHPqe+WumNlxxdcpg2XBmR/pSnyA= 264 | github.com/aws/aws-sdk-go-v2/service/kinesisvideo v1.1.5/go.mod h1:0Gbr763PMwc5S5zrf14HliE0PnxWHR5Qj79q3jk6biU= 265 | github.com/aws/aws-sdk-go-v2/service/kms v1.2.1 h1:X77wgZdglt2hU9zZS3DufyJiR4ZGW4F5x72OauDMSsM= 266 | github.com/aws/aws-sdk-go-v2/service/kms v1.2.1/go.mod h1:VJL8/fcYPX11A7hdOPAXtzU6+yDifhKW5MgwaA6HIwY= 267 | github.com/aws/aws-sdk-go-v2/service/kms v1.2.2 h1:9CJBrElBVX699f4ugbwsD2EPyHYWEdf9rGZZJwDzPSU= 268 | github.com/aws/aws-sdk-go-v2/service/kms v1.2.2/go.mod h1:aDkYNnoS4NikbSA7AiTomko1eJIZgrIG0ZE0yPJRn+w= 269 | github.com/aws/aws-sdk-go-v2/service/lambda v1.2.1 h1:U1AhnZgIHWCh6kIXuq6RkTptzU6szpDHjRbrA7g+99s= 270 | github.com/aws/aws-sdk-go-v2/service/lambda v1.2.1/go.mod h1:lczLef9EKYeQQ23eksYHU/Qf8j+66FSlX+g+15ZEP+k= 271 | github.com/aws/aws-sdk-go-v2/service/lambda v1.2.2 h1:F1vBHHT+x008mllAfLncqC0L2sgshS/ka1HFuL4jewc= 272 | github.com/aws/aws-sdk-go-v2/service/lambda v1.2.2/go.mod h1:VjOrBW4srZJGZJmcyW00FDRVJFrBXoDlzd00vW4vCyw= 273 | github.com/aws/aws-sdk-go-v2/service/lightsail v1.2.1 h1:KtqKLszWLiVi9BkFtXNKzhJJiaQKYWwS34/fNRFjCJ4= 274 | github.com/aws/aws-sdk-go-v2/service/lightsail v1.2.1/go.mod h1:7rcU+rFxjIN9zHyc1WhcVviu1bA6GGTyWQjLzZKsG7M= 275 | github.com/aws/aws-sdk-go-v2/service/lightsail v1.3.0 h1:E05vqV1st86MUvDVv0qCj3NjydzobuNvCQOXb/5QMmo= 276 | github.com/aws/aws-sdk-go-v2/service/lightsail v1.3.0/go.mod h1:CdVKvFLxKn+9yEipoCHW4iWR41yQUD8VTeZh8NnhxSU= 277 | github.com/aws/aws-sdk-go-v2/service/machinelearning v1.3.0 h1:BJNr8yViaL0KdQgbmy7JRv+igxKAnQfPdaxg6OPmykM= 278 | github.com/aws/aws-sdk-go-v2/service/machinelearning v1.3.0/go.mod h1:5HweB0hmhPWBi6z9rMTyNv9zhzkIMM1c01y44ugHhWU= 279 | github.com/aws/aws-sdk-go-v2/service/machinelearning v1.3.1 h1:JclCmiT9w2Zt+6MfpsrWkUbkhjUEyNzhMoNqb+rkp+Y= 280 | github.com/aws/aws-sdk-go-v2/service/machinelearning v1.3.1/go.mod h1:xlYpjEzK+3mYF69SnS28WJ78x77V9V2X0BREasg1C18= 281 | github.com/aws/aws-sdk-go-v2/service/macie v1.2.1 h1:mztaducFFYst6lgq5jTzKcsvIxAxjZ0ClcIMIKYadE0= 282 | github.com/aws/aws-sdk-go-v2/service/macie v1.2.1/go.mod h1:GfQ3yKXXIIKPtJAHIbhoIhG7wzkzc/Ay5AUs3qKypJM= 283 | github.com/aws/aws-sdk-go-v2/service/macie v1.2.2 h1:3kuEA0efTg1U3GZ4447v8ve3MqG37fA8gT0c8kk6dmE= 284 | github.com/aws/aws-sdk-go-v2/service/macie v1.2.2/go.mod h1:5v9CkkmmVsREfXMr1shIBgVVg3vSKjLgYhdoKa2EbPg= 285 | github.com/aws/aws-sdk-go-v2/service/mediaconnect v1.2.1 h1:4oztZA8BxgDdy2PqjlVv5dJIcAhPKe2epVr0I1tKrQg= 286 | github.com/aws/aws-sdk-go-v2/service/mediaconnect v1.2.1/go.mod h1:s5oYpOImXaX0s372mu9S75ntpUArAxbUHtjWnLxqR2U= 287 | github.com/aws/aws-sdk-go-v2/service/mediaconnect v1.2.2 h1:seYftRutT0Ez26RK50UVraWhBVsccd3UqOFmwal3OQM= 288 | github.com/aws/aws-sdk-go-v2/service/mediaconnect v1.2.2/go.mod h1:rNOq/hrx7N2hXYrv5KqjHgiiSCp07qXENCwdiZ7YlHE= 289 | github.com/aws/aws-sdk-go-v2/service/mediaconvert v1.2.1 h1:BJt4hXiZxFl06KKiM0NrModBhNAxeVPgCYQAuPau3uw= 290 | github.com/aws/aws-sdk-go-v2/service/mediaconvert v1.2.1/go.mod h1:2DQ6LFGDMmtgZLfUn4jz//9GN+JkWknaj/KxWbPELDA= 291 | github.com/aws/aws-sdk-go-v2/service/mediaconvert v1.3.0 h1:uxHmRB6A4Dv7BaC9wO8Fn8WpR0Fjooq9SqPVXkgRaLg= 292 | github.com/aws/aws-sdk-go-v2/service/mediaconvert v1.3.0/go.mod h1:c5OLB7zfZwpU0gbQMQwq1VP7N/YkNcJ6UXvbbuzMigQ= 293 | github.com/aws/aws-sdk-go-v2/service/medialive v1.3.0 h1:NFYyYF/VWJd4qc5+tLACVBxx/4mLE0dqHw0J+ccKNrM= 294 | github.com/aws/aws-sdk-go-v2/service/medialive v1.3.0/go.mod h1:fX5nUlifozxBmD4/5SfSg6SL4LWog8s4p+TzrKZixIE= 295 | github.com/aws/aws-sdk-go-v2/service/medialive v1.4.0 h1:ih4iMdVqIdcI7HeeHNNBWg1Szw6AD9gDIHxNPSiIRIk= 296 | github.com/aws/aws-sdk-go-v2/service/medialive v1.4.0/go.mod h1:4F8aH2SpAuSz3T4I+Q+EJDrHngFRCXY57PM3qhmBIfg= 297 | github.com/aws/aws-sdk-go-v2/service/mediapackage v1.2.1 h1:/NgTgipY3ADAqLp18q1dDomqHYULUrcD3v3XGdqIhT8= 298 | github.com/aws/aws-sdk-go-v2/service/mediapackage v1.2.1/go.mod h1:S3JR8Z73bcaBwD1ddXzMcEkR1FFptmmY9pbsmCVWfn0= 299 | github.com/aws/aws-sdk-go-v2/service/mediapackage v1.3.0 h1:aUMwMSsy193HvHWIPS3W2FqWIaZ6korXIZEgVfssr7E= 300 | github.com/aws/aws-sdk-go-v2/service/mediapackage v1.3.0/go.mod h1:Os26hDJ4kx/LSGN2ML4cjQwJD8swk1OmEsQLFX/Txtc= 301 | github.com/aws/aws-sdk-go-v2/service/mediastore v1.1.4 h1:7ho72LnawdmIm8J8KdkLoLWgcsqLcS8oKBDuT3005wg= 302 | github.com/aws/aws-sdk-go-v2/service/mediastore v1.1.4/go.mod h1:kXoBJPOMmUdpMEqWUhEPolBoycGzLGUHS5a/mL1+y1k= 303 | github.com/aws/aws-sdk-go-v2/service/mediastore v1.1.5 h1:qouxiG9OanxnMvXVby6kPhOtuAJL9XjnXuQqOt9jUps= 304 | github.com/aws/aws-sdk-go-v2/service/mediastore v1.1.5/go.mod h1:QPhXJl1/gnI93OZVHl4yfnVB/JLeMRNxAiUfcU+5Q2U= 305 | github.com/aws/aws-sdk-go-v2/service/mediatailor v1.2.1 h1:CKlduZwqNaG/b4AhjdTCe94DyVs7xOf6o5/ypbnOL5M= 306 | github.com/aws/aws-sdk-go-v2/service/mediatailor v1.2.1/go.mod h1:UHDbnNtfrCQd44LGCp+pvTsGFQ+upmI02o+8xVQ/fNs= 307 | github.com/aws/aws-sdk-go-v2/service/mediatailor v1.2.2 h1:NKT/QpHeW+PwFm4pXnd/xAaGJf0dZqVhFOti3u7XMkA= 308 | github.com/aws/aws-sdk-go-v2/service/mediatailor v1.2.2/go.mod h1:j6kAbnJJM9TJM1DuXaFScvAM2s/+4V2qF4pRg9b7FtI= 309 | github.com/aws/aws-sdk-go-v2/service/mobile v1.1.4 h1:vFln2csvHf4WLzNOWz4ipbPzVX0h1eWwZ8AsxjVmOEk= 310 | github.com/aws/aws-sdk-go-v2/service/mobile v1.1.4/go.mod h1:H1Gg3hBwqnHYyOLWL7wwkdZmPYaOT7exx6+riLzGXmE= 311 | github.com/aws/aws-sdk-go-v2/service/mobile v1.1.5 h1:5UZ62JLxd8ha8LwUzE+VVQvZgAcKi8JZ1BpsTDhnBnU= 312 | github.com/aws/aws-sdk-go-v2/service/mobile v1.1.5/go.mod h1:91t3fZCx5xLQAA39qcuMnogtW20xao69FXy6gJCt/jU= 313 | github.com/aws/aws-sdk-go-v2/service/mq v1.1.4 h1:j4D4AfYPQxA6lSwozj59RR96DAd2+H7jX9l8qML/RQM= 314 | github.com/aws/aws-sdk-go-v2/service/mq v1.1.4/go.mod h1:ZQZbB/43oplbGYJw0R1wf6V7ukrOwbWmYFUx5kFmFQs= 315 | github.com/aws/aws-sdk-go-v2/service/mq v1.1.5 h1:CJolbqAUmMc6MV0f4qwEAI8jR5KJHDJbVc3DAQSuRlg= 316 | github.com/aws/aws-sdk-go-v2/service/mq v1.1.5/go.mod h1:oMCZCQYJ8VOJkLxgo0LqynnfPlHuwxOeqT1KTr2pcAc= 317 | github.com/aws/aws-sdk-go-v2/service/opsworks v1.2.1 h1:IO7VrzPWU0y8Zv7eS28H5lbhl40SND58IAKR+jrMdy8= 318 | github.com/aws/aws-sdk-go-v2/service/opsworks v1.2.1/go.mod h1:Q/5tmZPs9IBo+wivcBWnPaWlOuCf0Q49ERxEvh2RzMg= 319 | github.com/aws/aws-sdk-go-v2/service/opsworks v1.2.2 h1:CMif3Cy79NfLPcYuyYidNdynqeEZCK0i2LTPKB4sMQQ= 320 | github.com/aws/aws-sdk-go-v2/service/opsworks v1.2.2/go.mod h1:elwiAmL4KdGNzNE5HjyxgKBoj7pjOhyOof0KGciJRAg= 321 | github.com/aws/aws-sdk-go-v2/service/organizations v1.2.1 h1:TvDVD1mBXP60NIHrqbP8uuzTf4vu48HlOm5jtoQQcW0= 322 | github.com/aws/aws-sdk-go-v2/service/organizations v1.2.1/go.mod h1:iy7PhC7Wxk3aRePrvaUU7ngXjcAedbTBeKYAYVhnvfI= 323 | github.com/aws/aws-sdk-go-v2/service/organizations v1.2.2 h1:YunGbcDrceUUsCN9ZG9SnrHKMx4JXB8RtqnvZGs9xWg= 324 | github.com/aws/aws-sdk-go-v2/service/organizations v1.2.2/go.mod h1:QW0vcI3+B+SVn4OVKCmG7BhinCLCGNgFQklGKFzfTCM= 325 | github.com/aws/aws-sdk-go-v2/service/pinpoint v1.3.0 h1:KYqwfNZ1mNR2Fk+j9I3+k+HVGEqVpplIJjoaOnQrrH8= 326 | github.com/aws/aws-sdk-go-v2/service/pinpoint v1.3.0/go.mod h1:3AKvj9mJfq9iUNPjK9j/2QmX1UWSG33ZwDDrtlZ2WKM= 327 | github.com/aws/aws-sdk-go-v2/service/pinpoint v1.3.1 h1:6J5ElC/9TZ82VrzelbUu8uRXeEPdMfxAUfF/VDLKkvg= 328 | github.com/aws/aws-sdk-go-v2/service/pinpoint v1.3.1/go.mod h1:6x/Y6yieRSyeADniIsoWAICNI/1/Y74FOMyrHHQXlns= 329 | github.com/aws/aws-sdk-go-v2/service/polly v1.1.4 h1:XIGUxdZS9FbPX2obj+MzQBKrGKFuhNt6Xwh042yN7+o= 330 | github.com/aws/aws-sdk-go-v2/service/polly v1.1.4/go.mod h1:gpK0hSfdCtIi/FqrxHmfl6sDmNi4lVfSoF1PDaro474= 331 | github.com/aws/aws-sdk-go-v2/service/polly v1.1.5 h1:MCwgF6K9gHNW5+li0IuubFys6T/WRog7yYWk/Pfq4YA= 332 | github.com/aws/aws-sdk-go-v2/service/polly v1.1.5/go.mod h1:z9+jdCxKWfBzZxbArgSt0VcI91izge5I2kLbV7ELses= 333 | github.com/aws/aws-sdk-go-v2/service/pricing v1.3.0 h1:joT6DC/wWGJoTGu6os36FrZg093WJXOvPPX7kvXGmZA= 334 | github.com/aws/aws-sdk-go-v2/service/pricing v1.3.0/go.mod h1:sEHV+uECzaOIj5GIJpSjsvin0nxXGasz7FgJm4gMoPk= 335 | github.com/aws/aws-sdk-go-v2/service/pricing v1.3.1 h1:+ImtL0PJx+VSLvN14F3lO4x0y3edAgqULjtp1iLWU1U= 336 | github.com/aws/aws-sdk-go-v2/service/pricing v1.3.1/go.mod h1:XASKSA1dP07gIpzBb0MHCqrQQVnKdyjoRy0EY9aH5/8= 337 | github.com/aws/aws-sdk-go-v2/service/ram v1.2.1 h1:aU5wjc6/Xj/KmJX0tH6VHRvlFFNKpxGVsRkwkcyK9CU= 338 | github.com/aws/aws-sdk-go-v2/service/ram v1.2.1/go.mod h1:H/JwDTgOajeQz30mi0GjPvhmPQ1p9wpeEGObDFobNGI= 339 | github.com/aws/aws-sdk-go-v2/service/ram v1.3.0 h1:brC5siAYJnA+9Ijtk7U1qqi+3dm9Z8n6xOAMUYo6Ufo= 340 | github.com/aws/aws-sdk-go-v2/service/ram v1.3.0/go.mod h1:/PRZ6HcYOt05pAginXKMj9PKAJX4aVdYQhIBP/iwFHM= 341 | github.com/aws/aws-sdk-go-v2/service/rds v1.2.1 h1:nh6V70gwG0bE6Ocz34rg5VZvmthKuDSa785CBpvY2g8= 342 | github.com/aws/aws-sdk-go-v2/service/rds v1.2.1/go.mod h1:QQ6pD2d3AUbZblcKzZ5aJ58mMMfcofx2j8KAXcHe8rg= 343 | github.com/aws/aws-sdk-go-v2/service/rds v1.2.2 h1:Wy1uuze7S0lugMvy3CSGYmAclqeADe0k8e/NYp9xog8= 344 | github.com/aws/aws-sdk-go-v2/service/rds v1.2.2/go.mod h1:mW+SUZrd1ky9iSCwVmcWNAAiUMDUbIkU51lzNi4XBnU= 345 | github.com/aws/aws-sdk-go-v2/service/redshift v1.3.0 h1:Eiv449szSm77R2AFB8Up0oW3DGJTuaICBkOwptibmfQ= 346 | github.com/aws/aws-sdk-go-v2/service/redshift v1.3.0/go.mod h1:FSg9SNvu62Ac+jjWjTS7R/mmtXj9zl6nXwacwDGxK0s= 347 | github.com/aws/aws-sdk-go-v2/service/redshift v1.3.1 h1:9hREk2Sn/7o8OKtA+7o1YdNKujgNx8TzXKqHc9BFY6I= 348 | github.com/aws/aws-sdk-go-v2/service/redshift v1.3.1/go.mod h1:MRsZonKZ+BOVGxGFrCxCwHYbrs5PdWmGZ1udfeL8hIg= 349 | github.com/aws/aws-sdk-go-v2/service/rekognition v1.3.0 h1:1+mSXr9v1G462XDMbGYMeZkrBODCEYAsQ6ylbkx0uuk= 350 | github.com/aws/aws-sdk-go-v2/service/rekognition v1.3.0/go.mod h1:3JG7w8GPo2c43KOz2+NH7MTacZ2NspE+hCeS12DcK3U= 351 | github.com/aws/aws-sdk-go-v2/service/rekognition v1.3.1 h1:yjfSszGW0bMpoe0HKwgmuSq0pP4wcMBofJqP7Q4LeAY= 352 | github.com/aws/aws-sdk-go-v2/service/rekognition v1.3.1/go.mod h1:nWnSBXE6l/EQsqEuNtomZarBdcUwHzsMtqApm1/Jt0s= 353 | github.com/aws/aws-sdk-go-v2/service/robomaker v1.2.1 h1:wRlJAb1iGLhOjZUTiPzuTnuQ2B1LyE/BLtIEhH4jjM0= 354 | github.com/aws/aws-sdk-go-v2/service/robomaker v1.2.1/go.mod h1:0bt4h3SYU6vaHbPI85+BdZHwrNULH3O4SNW3wYnhU8A= 355 | github.com/aws/aws-sdk-go-v2/service/robomaker v1.3.0 h1:IZqLWRhNNhbe++jq6KMCGLN/IPN9KzroF62kcGVabvw= 356 | github.com/aws/aws-sdk-go-v2/service/robomaker v1.3.0/go.mod h1:VwRnohGf4MCVvYJ7omCFc74aNock2bdsSVXQ2xeeHzM= 357 | github.com/aws/aws-sdk-go-v2/service/route53 v1.3.0 h1:uwKwx0iSdZyIwQmsMPtAoBjlRC1lFUAhx2c6HGWjfPM= 358 | github.com/aws/aws-sdk-go-v2/service/route53 v1.3.0/go.mod h1:vwPNxNmptQ70lgw8W4EzuHKCygDpVvhjJ/Xri8cnF80= 359 | github.com/aws/aws-sdk-go-v2/service/route53 v1.4.0 h1:O0uJ4SI2f3q84vPcwsVyLTuASS1hAKb8RKnMVGgMqaU= 360 | github.com/aws/aws-sdk-go-v2/service/route53 v1.4.0/go.mod h1:BNPIchdQA/UcqNmWkPBmUruDm7asbm/Q6nxBmURvAHU= 361 | github.com/aws/aws-sdk-go-v2/service/route53domains v1.1.4 h1:58BznccDxmfO4s499bHf80aaQZNwiWVAXDTxhkMUaBg= 362 | github.com/aws/aws-sdk-go-v2/service/route53domains v1.1.4/go.mod h1:3BYq6Mn84r6Aw7CBy6wAF+MNE4jyr9q4uwVMLihkOFA= 363 | github.com/aws/aws-sdk-go-v2/service/route53domains v1.1.5 h1:YzN/hwQTpXTqNXQjJ7aoAhS9mt6TLkxwoN8DX2L/yiE= 364 | github.com/aws/aws-sdk-go-v2/service/route53domains v1.1.5/go.mod h1:qshQuUcDSCTHlWwysgQpa21qHS2fKHB0arp5kXTgGRw= 365 | github.com/aws/aws-sdk-go-v2/service/route53resolver v1.2.1 h1:BzXCrdOnD1N7CAxm9zTTKKwYvyWJIh83YZqQktJWFws= 366 | github.com/aws/aws-sdk-go-v2/service/route53resolver v1.2.1/go.mod h1:4viSA3gDsj3ESCHUWiR0SkRW6LK/4261rmJLaPfEt1c= 367 | github.com/aws/aws-sdk-go-v2/service/route53resolver v1.3.0 h1:nzhb58Nhso11x3nFPBcy7Ieyw2xj0OD9iyNrA3jLgGA= 368 | github.com/aws/aws-sdk-go-v2/service/route53resolver v1.3.0/go.mod h1:cATrgaiOqhGmcfjS6D2LkTa3Zhut4m4l+MLqFjqhzHg= 369 | github.com/aws/aws-sdk-go-v2/service/s3 v1.4.0 h1:045tK3IL+TxOSWWQyG199A0BYJ/Yhgk8XV9xo+nQkLQ= 370 | github.com/aws/aws-sdk-go-v2/service/s3 v1.4.0/go.mod h1:zFD4go1gW0I/WxeGfCNSsz/BnZSJyu5arLPMPnw0gvQ= 371 | github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0 h1:VbwXUI3L0hyhVmrFxbDxrs6cBX8TNFX0YxCpooMNjvY= 372 | github.com/aws/aws-sdk-go-v2/service/s3 v1.5.0/go.mod h1:uwA7gs93Qcss43astPUb1eq4RyceNmYWAQjZFDOAMLo= 373 | github.com/aws/aws-sdk-go-v2/service/sagemaker v1.3.0 h1:qPkVtYSSqSk74C/nqgySjXxDQppfb8E4fi51Cp0bekY= 374 | github.com/aws/aws-sdk-go-v2/service/sagemaker v1.3.0/go.mod h1:WkC5JCt449oFeQmtbWv8uGG6AmaP4pWrQJzSGXu3gho= 375 | github.com/aws/aws-sdk-go-v2/service/sagemaker v1.3.1 h1:OjEzRWmCSRlT/uRSbVN6IabSIbCZ48j9hwTlc5QQS9s= 376 | github.com/aws/aws-sdk-go-v2/service/sagemaker v1.3.1/go.mod h1:TemNRYl2uKv5PkRnxJ6LOme4AL4GyvTXDTGmwXT/q+E= 377 | github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.2.1 h1:g5UomfutRdIkbsqdGr4XyuVyTZM+sp7ySmnoU8zai9s= 378 | github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.2.1/go.mod h1:5UqHs6oUHhBRimgTAWZJ1uXa+A8QFLbOCi5yRZxLQAs= 379 | github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.2.2 h1:gt5ueN7RuySBmdRnczL0B6oT+LzxxQQ524oTpRv3mU8= 380 | github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.2.2/go.mod h1:RaGPWwyy/DaKCyqzdELQgLS8TVO5uNDZEiFoc6yusKk= 381 | github.com/aws/aws-sdk-go-v2/service/securityhub v1.2.1 h1:qZplAHGJFl16wbZAWEnP73dzATdJDBly6ccPfeSeffc= 382 | github.com/aws/aws-sdk-go-v2/service/securityhub v1.2.1/go.mod h1:SI3V2iXBWczkoetsurbZjbTNv2rCJihbo5APtlDLbCQ= 383 | github.com/aws/aws-sdk-go-v2/service/securityhub v1.2.2 h1:98HxONwbO0i40LLgQStDxB7eQ8GFuw0Iwps9tb8tKgU= 384 | github.com/aws/aws-sdk-go-v2/service/securityhub v1.2.2/go.mod h1:5K5frfLOpGPTQGY6ijF+0Z0ghXa9B15E8WT7at3SYSg= 385 | github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.2.1 h1:/FTF3YGI/WxRnRKhruU1nyhR/gzgfYP0kQF7yIaqEjU= 386 | github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.2.1/go.mod h1:bivtoAQvh328aJFiY3+h4lQpyv9kPjJAP/y/PCQbnVY= 387 | github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.2.2 h1:WRTKESeTUs9mf36IYLy0NZzsyb7HM2ZL+aH0jCZxg9U= 388 | github.com/aws/aws-sdk-go-v2/service/servicecatalog v1.2.2/go.mod h1:Ub9kxF9jgkl0NWSAQvioSYDSFnujdxvwplEAXMK9gAk= 389 | github.com/aws/aws-sdk-go-v2/service/shield v1.2.1 h1:2K2rtKrNrvrVp2bUtY6sTiB8qwRB0/ibzsSTgi4dptI= 390 | github.com/aws/aws-sdk-go-v2/service/shield v1.2.1/go.mod h1:IDdbDkyMfkRaZ8v7vjOMktOP5qfXWHdNVjQEB+IDE/8= 391 | github.com/aws/aws-sdk-go-v2/service/shield v1.2.2 h1:Uo90tKSV1VPE/pWlIqUP9GJUKgs8YsJYL7vDvtZAL9U= 392 | github.com/aws/aws-sdk-go-v2/service/shield v1.2.2/go.mod h1:2QfCefBuS2ivcPNA6weVTJZUpVP8Eof2S9p6wi9nF0g= 393 | github.com/aws/aws-sdk-go-v2/service/signer v1.2.1 h1:uuWmJyQSVT7gWYNf1aLlfWsnGCUW47R4HryCkPlMTlw= 394 | github.com/aws/aws-sdk-go-v2/service/signer v1.2.1/go.mod h1:+gVW6mpCRIrOf5i59zwn3blK6mWB0LMoLBLGz9npCl4= 395 | github.com/aws/aws-sdk-go-v2/service/signer v1.2.2 h1:2SDtQ3dFjFOwsIIHxSYnAEMsfUqcHwFPc0UeA5A5/lk= 396 | github.com/aws/aws-sdk-go-v2/service/signer v1.2.2/go.mod h1:igKOejiga4JY1SgvjxwDjHUmsoL0XXLuuxUjS27gBgs= 397 | github.com/aws/aws-sdk-go-v2/service/sms v1.1.4 h1:D/YzXwT30LavDXfgGAiIPqosEM6TBbtccctqmRm7/K8= 398 | github.com/aws/aws-sdk-go-v2/service/sms v1.1.4/go.mod h1:lI/4btGH3c2CC6bfmPyZids6lQQTLYEBoP7MRgzYszM= 399 | github.com/aws/aws-sdk-go-v2/service/sms v1.1.5 h1:sjTAmc4IrcUgFl0ZMZUjLicI5UNmtPv5rXuduv4FlmY= 400 | github.com/aws/aws-sdk-go-v2/service/sms v1.1.5/go.mod h1:4QTDMnITdW0nF/9ateJ6x3omZadEU/fpcgFWDIGpdvQ= 401 | github.com/aws/aws-sdk-go-v2/service/snowball v1.2.1 h1:QhXuQ1t+053KKanw3I+mA3wQYXAGngpx/LuPvzBU//o= 402 | github.com/aws/aws-sdk-go-v2/service/snowball v1.2.1/go.mod h1:ovFWP8NHIdZOAhItjiYaI1tjP3++y2sj+mxdTD2mjFo= 403 | github.com/aws/aws-sdk-go-v2/service/snowball v1.2.2 h1:wFG5fohslmo7p8CdLXdxk1mVbyCq3QaKDaseqI9M5uY= 404 | github.com/aws/aws-sdk-go-v2/service/snowball v1.2.2/go.mod h1:ddP26kOINA/79ZzTtLP0LT7pbPI99VJM1ppgvWtaT3U= 405 | github.com/aws/aws-sdk-go-v2/service/sns v1.2.1 h1:IVHrunoAsIp1OV445PE84mM+WArZChXrxNbFIx4uAWQ= 406 | github.com/aws/aws-sdk-go-v2/service/sns v1.2.1/go.mod h1:23FVJ4I/AHqbkh4vMa1Cz6/vXMCuMLPkU9Pi4RCFgxk= 407 | github.com/aws/aws-sdk-go-v2/service/sns v1.2.2 h1:phLGFAc2O7yX2ZmDENxd8CJ/jwGtsKp+ZycI9vJtCgI= 408 | github.com/aws/aws-sdk-go-v2/service/sns v1.2.2/go.mod h1:bmy5i6vmXNNTOK8ZXGxD1qEuZtzfKaJXy6PEMBMt5sQ= 409 | github.com/aws/aws-sdk-go-v2/service/sqs v1.3.0 h1:iePzn4Gr4p5QKat3G7snhUvopc/lOj25ZiPJ4/PPzq8= 410 | github.com/aws/aws-sdk-go-v2/service/sqs v1.3.0/go.mod h1:9bo6m/Pes+TR6ORT97E1BkczbSgbpKB1qTyFt08s9yw= 411 | github.com/aws/aws-sdk-go-v2/service/sqs v1.3.1 h1:JHv/dumXk3jooM7CrYoYp9+74YRZ4dGsXzMob2Kds5s= 412 | github.com/aws/aws-sdk-go-v2/service/sqs v1.3.1/go.mod h1:E6ASpQhmNCYI1xKp//5LwIsdvtAqcFMFA7chocaSWY8= 413 | github.com/aws/aws-sdk-go-v2/service/ssm v1.3.0 h1:0swJm4MqIjN1v1tM9GQ8hGv+KXv4smEiftpAXg84aZg= 414 | github.com/aws/aws-sdk-go-v2/service/ssm v1.3.0/go.mod h1:WX5OhauvURAo0+ljp29uEIitBkt3+Y3RGnVa9ix2xc8= 415 | github.com/aws/aws-sdk-go-v2/service/ssm v1.4.0 h1:gTHcyXVnSTKNECgqTNLuQYmYhaEVUAlxsiog0XXvq60= 416 | github.com/aws/aws-sdk-go-v2/service/ssm v1.4.0/go.mod h1:QcyvOwA2xPxSnC34A+yMZnK8vJEkP0/TwxTcwQdu3Yg= 417 | github.com/aws/aws-sdk-go-v2/service/sso v1.1.3 h1:NVLHdz3KtZhCrX0GWZKpdINKuDh7PsaZ8Vsr4OxP88s= 418 | github.com/aws/aws-sdk-go-v2/service/sso v1.1.3/go.mod h1:F1l5lKzDzoY3/0cFbB3AA/ey9MsNiH5rhf6HOssy1/Q= 419 | github.com/aws/aws-sdk-go-v2/service/sso v1.1.4 h1:Tr/SsFDXWN8rntdzTNrDs/MvuBXRCjY6xvJrPFUPKRM= 420 | github.com/aws/aws-sdk-go-v2/service/sso v1.1.4/go.mod h1:yQayEbOWH75NaKFylsFocBc3yanYEGndlOaH4i/Lvno= 421 | github.com/aws/aws-sdk-go-v2/service/sso v1.1.5 h1:B7ec5wE4+3Ldkurmq0C4gfQFtElGTG+/iTpi/YPMzi4= 422 | github.com/aws/aws-sdk-go-v2/service/sso v1.1.5/go.mod h1:bpGz0tidC4y39sZkQSkpO/J0tzWCMXHbw6FZ0j1GkWM= 423 | github.com/aws/aws-sdk-go-v2/service/storagegateway v1.1.4 h1:NAs1Q7ONLoXb4ns06M11Cu8kitN1cBVFeWWl/ltvSmQ= 424 | github.com/aws/aws-sdk-go-v2/service/storagegateway v1.1.4/go.mod h1:pSHXnfSdRGGBhFpXrPKTSCViSvrlhzbyf5saOtbMXLA= 425 | github.com/aws/aws-sdk-go-v2/service/storagegateway v1.2.0 h1:n6zV9ocF9xNvrFlW3qVUmCV9C6KUX7qDtGCCiB4VQ18= 426 | github.com/aws/aws-sdk-go-v2/service/storagegateway v1.2.0/go.mod h1:C0r5Zm/+1bSmsYqvh7KduGzUru5qpCFJ8Z0ucgAVHdg= 427 | github.com/aws/aws-sdk-go-v2/service/sts v1.2.0 h1:fGo3atNqTj3SOu1VKb52BUzRcYOhrpJ1wHrzTuMs+QA= 428 | github.com/aws/aws-sdk-go-v2/service/sts v1.2.0/go.mod h1:iGyHChDhzbddWEbC/+g/mT3z+A2JTJthcw+8QubXSgk= 429 | github.com/aws/aws-sdk-go-v2/service/sts v1.2.1 h1:1koRvKlZMN+FhTGV5f4q6vRHXNJzeZlPKzbs1/Y32Kg= 430 | github.com/aws/aws-sdk-go-v2/service/sts v1.2.1/go.mod h1:L1LH5nHMXxdkKj057ZUx7Wi50CCrkZ+9jkTnBnY2j/w= 431 | github.com/aws/aws-sdk-go-v2/service/sts v1.2.2 h1:fKw6QSGcFlvZCBPYx3fo4sL0HfTmaT06ZtMHJfQQNQQ= 432 | github.com/aws/aws-sdk-go-v2/service/sts v1.2.2/go.mod h1:ssRzzJ2RZOVuKj2Vx1YE7ypfil/BIlgmQnCSW4DistU= 433 | github.com/aws/aws-sdk-go-v2/service/support v1.1.4 h1:vLq5jr/FPU8Lfrxh2CB6pyWJv4fqWZS0+9tfCfLGqXw= 434 | github.com/aws/aws-sdk-go-v2/service/support v1.1.4/go.mod h1:ygUZwdHF14zl0vR7HcqYWKpwtl7asuFBFUyqht9EWL0= 435 | github.com/aws/aws-sdk-go-v2/service/support v1.1.5 h1:XGUkpmrZWzMOIx0xZliO8SwSsn6j8ouZgd9nSp8RwrM= 436 | github.com/aws/aws-sdk-go-v2/service/support v1.1.5/go.mod h1:HHVCJgf8uE2Ni6Odisf9Uo33cu95Ib8HiVgaY4+J2HI= 437 | github.com/aws/aws-sdk-go-v2/service/transcribe v1.2.0 h1:6LIPo57QHjv09Yz8Jgipkmz+7d2NkdvNPUxwaho14S4= 438 | github.com/aws/aws-sdk-go-v2/service/transcribe v1.2.0/go.mod h1:8fVRiNeaB8pKvNAtfM36KrlMlOicD2FGzqQXS0v0Aa8= 439 | github.com/aws/aws-sdk-go-v2/service/transcribe v1.2.1 h1:ovDTbAsLm6alImwDAhsGrjGiHNefZBjAZN5tu6zzMr0= 440 | github.com/aws/aws-sdk-go-v2/service/transcribe v1.2.1/go.mod h1:71/4+47+zrrskFtl+Rx5W5+OnDiMBSEjs7Db231LCWs= 441 | github.com/aws/aws-sdk-go-v2/service/transfer v1.2.1 h1:v/6bx+zqeKaMRJv+tcJ/1vMjrwXTMLWIMjsnGUFTdzU= 442 | github.com/aws/aws-sdk-go-v2/service/transfer v1.2.1/go.mod h1:oYvanEiB6oIDUuniw8dTFCwYCQUvMzafr2pJtBWoaIk= 443 | github.com/aws/aws-sdk-go-v2/service/transfer v1.2.2 h1:pFMTcAD4gsTxs8BD7ii7PveSsgse5/2+tc1SViD1aXw= 444 | github.com/aws/aws-sdk-go-v2/service/transfer v1.2.2/go.mod h1:Age/hzcmLNV9TFHZ0iEINuCP71DHyWBDeRMNttfZcRw= 445 | github.com/aws/aws-sdk-go-v2/service/translate v1.1.4 h1:H3UpWG0SYq+pl/7LuX0UuLvTnGH9TR5FtWHzUHgAw9Q= 446 | github.com/aws/aws-sdk-go-v2/service/translate v1.1.4/go.mod h1:MJFm+XFq2c2DQ1Oy7PrNmknWNYAlLlO+NYgV79oKJ/M= 447 | github.com/aws/aws-sdk-go-v2/service/translate v1.1.5 h1:vFMSbY7ZghW0YEdCx6W81hOvFMaqS1Ohph03HvfpDKk= 448 | github.com/aws/aws-sdk-go-v2/service/translate v1.1.5/go.mod h1:BSiGHq2yDx5bl9rV/Pl2NRhVmcdfMvXH13K8iYOM9O0= 449 | github.com/aws/aws-sdk-go-v2/service/waf v1.1.4 h1:Wh0YMwF394A9eBC8Pv8Uxk6CBx9KTWmoqyflQIBx6DU= 450 | github.com/aws/aws-sdk-go-v2/service/waf v1.1.4/go.mod h1:Ujifac0yyu5RLw3cPCGua50uHnsjiJo9LAhXEJZ+tVk= 451 | github.com/aws/aws-sdk-go-v2/service/waf v1.1.5 h1:EBisjXgewS0cSXVeDputnu7wkXfS4+SosXx+lxXQx1k= 452 | github.com/aws/aws-sdk-go-v2/service/waf v1.1.5/go.mod h1:Adfl4Y9hmOJR0CJX7mFRjI7JC1guxF2390AQ2k+ayLw= 453 | github.com/aws/aws-sdk-go-v2/service/workdocs v1.1.4 h1:vbJ6fJhTdIMMcpOEclGpZsvqIjU4KF5DDAYEx0UgFf0= 454 | github.com/aws/aws-sdk-go-v2/service/workdocs v1.1.4/go.mod h1:gLGVTqPzRx9wRFEu5S+OGWJWAkMbi4w1Ojt5eVmJjf0= 455 | github.com/aws/aws-sdk-go-v2/service/workdocs v1.1.5 h1:SqH3xbSc0eOtDQ0/8RuZ9iAl7HxVBGdYmHMC/kuM8rY= 456 | github.com/aws/aws-sdk-go-v2/service/workdocs v1.1.5/go.mod h1:FgU4Mx/N5+l69zu1UZcn+5RmHqoqzdsAqSb+YaP+ceo= 457 | github.com/aws/aws-sdk-go-v2/service/worklink v1.1.4 h1:WvkzxOG0TjqioXXtmEz/ZR7gic16hFZYSVw0f8MckAs= 458 | github.com/aws/aws-sdk-go-v2/service/worklink v1.1.4/go.mod h1:MN2syLXOwAwhBFBKToIlNAPvqgaxfsybVEo5fMHUFAw= 459 | github.com/aws/aws-sdk-go-v2/service/worklink v1.1.5 h1:7fzHvio55flimltXbD7rOyeOtBDo+dg7m0nPCPrHrsI= 460 | github.com/aws/aws-sdk-go-v2/service/worklink v1.1.5/go.mod h1:7bHDT27ZK5jEiCaGIsAakAlqwmJTL1q+gt099yHM95c= 461 | github.com/aws/aws-sdk-go-v2/service/workmail v1.2.0 h1:LLnWufOy+Ne+ZfRwL3gJ9f44lSFwA6UrmXxH3R2caF8= 462 | github.com/aws/aws-sdk-go-v2/service/workmail v1.2.0/go.mod h1:2MxZF3RaykedHX8GDaDOI0fnvHtc9xFFM2hYO9gOhJg= 463 | github.com/aws/aws-sdk-go-v2/service/workmail v1.2.1 h1:UA0qUG5tzUXxBCgvK56fBLRqQ/QzQdVP3r3g7sHYO0Y= 464 | github.com/aws/aws-sdk-go-v2/service/workmail v1.2.1/go.mod h1:nu9P6XYRZTYyOsbXFPEx8pwY1UnsU2dpR0LCrCS7Igw= 465 | github.com/aws/aws-sdk-go-v2/service/workspaces v1.2.1 h1:hSzpp50D6D37eIELSSpYwJ75e8XL9bvTzjspZgt4+5A= 466 | github.com/aws/aws-sdk-go-v2/service/workspaces v1.2.1/go.mod h1:8k9EEz8LMNPUDENPlW0laaQkAZC2TbEYF+XNUu1lFLk= 467 | github.com/aws/aws-sdk-go-v2/service/workspaces v1.2.2 h1:JHB4L69luscPXGk0LEdQR1GDwGHCAaCry79qeV6spbc= 468 | github.com/aws/aws-sdk-go-v2/service/workspaces v1.2.2/go.mod h1:q3Ej+yyFh3MazI7lHHgXS7DM3Vu0lKsBCdWOoktzjxU= 469 | github.com/aws/aws-sdk-go-v2/service/xray v1.2.1 h1:RiTWbH90tIuJNnZZys9HeqBfpT3oSPulh7fM7anPQiY= 470 | github.com/aws/aws-sdk-go-v2/service/xray v1.2.1/go.mod h1:MZS769M8/1Xm4XYQydDJbvugo7dG8fXzsVU3J84QXzY= 471 | github.com/aws/aws-sdk-go-v2/service/xray v1.2.2 h1:g1w5YvFBAASuyY/Ol+w+P3Cjs/2+LONYy73hmz4EYBA= 472 | github.com/aws/aws-sdk-go-v2/service/xray v1.2.2/go.mod h1:ONuVPw/R+eCW5JPstY3BA4ZbgKhHPAyhDdiikPdJUZg= 473 | github.com/aws/smithy-go v1.2.0 h1:0PoGBWXkXDIyVdPaZW9gMhaGzj3UOAgTdiVoHuuZAFA= 474 | github.com/aws/smithy-go v1.2.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= 475 | github.com/aws/smithy-go v1.3.0 h1:awbB2OJBZ/Txj+c4q+qhDQs3Ob0sRhBuIIkOD4Aq8yc= 476 | github.com/aws/smithy-go v1.3.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= 477 | github.com/aws/smithy-go v1.3.1 h1:xJFO4pK0y9J8fCl34uGsSJX5KNnGbdARDlA5BPhXnwE= 478 | github.com/aws/smithy-go v1.3.1/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= 479 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 480 | github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= 481 | github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= 482 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 483 | github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= 484 | github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= 485 | github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= 486 | github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= 487 | github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= 488 | github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= 489 | github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= 490 | github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= 491 | github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= 492 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 493 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 494 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 495 | github.com/wayneashleyberry/terminal-dimensions v1.0.0 h1:LawtS1nqKjAfqrmKOzkcrDLAjSzh38lEhC401JPjQVA= 496 | github.com/wayneashleyberry/terminal-dimensions v1.0.0/go.mod h1:PW2XrtV6KmKOPhuf7wbtcmw1/IFnC39mryRET2XbxeE= 497 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 498 | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 499 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 500 | golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 501 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 502 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 503 | golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 504 | golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= 505 | golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 506 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= 507 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 508 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 509 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 510 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 511 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 512 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 513 | gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 514 | -------------------------------------------------------------------------------- /helper/helper.go: -------------------------------------------------------------------------------- 1 | package helper 2 | 3 | import ( 4 | "flag" 5 | "fmt" 6 | 7 | "github.com/shabarkin/aws-enumerator/servicemaster" 8 | "github.com/shabarkin/aws-enumerator/servicestructs" 9 | "github.com/shabarkin/aws-enumerator/utils" 10 | ) 11 | 12 | func changeSpeedForTime(speed string) (time int) { 13 | if speed == "fast" { 14 | time = 2000 15 | } else if speed == "slow" { 16 | time = 4000 17 | } else { 18 | time = 3000 19 | } 20 | return time 21 | } 22 | 23 | func SetEnumerationPipeline(services, speed *string) { 24 | // Load Global Variables from file 25 | utils.LoadEnv() 26 | 27 | if servicemaster.CheckAWSCredentials() { 28 | 29 | servicemaster.ServiceCall( 30 | servicestructs.GetServices(), 31 | utils.ProcessServiceArgument(*services), 32 | changeSpeedForTime(*speed), 33 | ) 34 | 35 | } 36 | } 37 | 38 | func DumpInfo(services_dump *string, print_apicalls *bool, filter *string, errors_dump *bool) { 39 | if *services_dump == "all" { 40 | for _, service := range utils.ServiceNames() { 41 | utils.AnalyseService(service, *print_apicalls, *filter, *errors_dump) 42 | } 43 | fmt.Println() 44 | } else { 45 | for _, service := range utils.ProcessServiceArgument(*services_dump) { 46 | utils.AnalyseService(service, *print_apicalls, *filter, *errors_dump) 47 | } 48 | fmt.Println() 49 | } 50 | } 51 | 52 | var Cloudrider_help string = `Usage: 53 | aws-enumerator [command] 54 | 55 | Available Commands: 56 | cred Saves AWS credentials to .env file in a propriate format for later authentication 57 | enum Enumerates AWS Services with given AWS credentials, it can enumerate all services or target specific services 58 | dump Displays gathered information about AWS Services available for a AWS account 59 | 60 | Flags: 61 | -h Help for cloudride 62 | ` 63 | 64 | var Cloudrider_cred_help string = `Usage: 65 | aws-enumerator cred [command] 66 | 67 | Flags: 68 | -aws_region Specify AWS region to which the account may have access to. 69 | -aws_access_key_id Specify AWS Access Key for wanted account. 70 | -aws_secret_access_key Specify AWS Secret Access Key for wanted account. 71 | -aws_session_token Specify AWS Session Token for wanted account. 72 | 73 | Example: 74 | ./aws-enumerator cred -aws_region us-west-2 -aws_access_key_id AKIA85CEHPO3GLIABKZD -aws_secret_access_key LW3bDF8xJvzGgArqMo0h4kuCYsnubU23kGICGp/p -aws_session_token LW3bDF8xJvzGgArqM....... 75 | ` 76 | 77 | var Cloudrider_enum_help string = `Usage: 78 | aws-enumerator enum [command] 79 | 80 | Flags: 81 | -services Enumerate permissions specifying services divided by comma or 'all' for total enumeration 82 | -speed Speed parameter has three defitions : fast or normal or slow (default is normal) 83 | 84 | Example: 85 | ./aws-enumerator enum -services iam,sts,s3,ec2 -speed normal 86 | ./aws-enumerator enum -services all 87 | ` 88 | 89 | var Cloudrider_dump_help string = `Usage: 90 | aws-enumerator dump [command] 91 | 92 | Flags: 93 | -services Enumerate permissions specifying services divided by comma or 'all' for total enumeration 94 | -filter Retrieve only wanted API Call Names by filtering the name. Additional flag. (Filters by first specified chars) 95 | -print Print data for a specified service API Calls Get the list of accessible apicalls. Additional flag. 96 | -errors Analyse errors returned by AWS API for a specific service. Additional flag. 97 | 98 | Example: 99 | #1 100 | ./aws-enumerator dump -services iam 101 | ./aws-enumerator dump -services iam -filter List 102 | ./aws-enumerator dump -services iam -filter List -print 103 | ./aws-enumerator dump -services iam -filter List -print -errors 104 | 105 | #2 106 | ./aws-enumerator dump -services all 107 | ./aws-enumerator dump -services all -filter Get 108 | ./aws-enumerator dump -services all -filter Get -print 109 | ./aws-enumerator dump -services all -filter Get -print -errors 110 | ` 111 | 112 | // Command line flags: 113 | 114 | var Cred *flag.FlagSet = flag.NewFlagSet("cred", flag.ExitOnError) 115 | var AWS_region *string = Cred.String("aws_region", "", "") 116 | var AWS_access_key_id *string = Cred.String("aws_access_key_id", "", "") 117 | var AWS_secret_access_key *string = Cred.String("aws_secret_access_key", "", "") 118 | var AWS_session_token *string = Cred.String("aws_session_token", "", "") 119 | 120 | var Enum *flag.FlagSet = flag.NewFlagSet("enum", flag.ExitOnError) 121 | var Services_enum *string = Enum.String("services", "all", "") 122 | var Speed *string = Enum.String("speed", "normal", "") 123 | 124 | var Dump *flag.FlagSet = flag.NewFlagSet("dump", flag.ExitOnError) 125 | var Services_dump *string = Dump.String("services", "all", "") 126 | var Errors_dump *bool = Dump.Bool("errors", false, "") 127 | var Print *bool = Dump.Bool("print", false, "") 128 | var Filter *string = Dump.String("filter", "", "") 129 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | 7 | "github.com/shabarkin/aws-enumerator/helper" 8 | "github.com/shabarkin/aws-enumerator/utils" 9 | ) 10 | 11 | func main() { 12 | //var flagNoColor *bool 13 | 14 | helper.Cred.Usage = func() { 15 | fmt.Fprintf(os.Stderr, helper.Cloudrider_cred_help) 16 | } 17 | helper.Enum.Usage = func() { 18 | fmt.Fprintf(os.Stderr, helper.Cloudrider_enum_help) 19 | } 20 | helper.Dump.Usage = func() { 21 | fmt.Fprintf(os.Stderr, helper.Cloudrider_dump_help) 22 | } 23 | 24 | if len(os.Args) < 2 { 25 | fmt.Println(helper.Cloudrider_help) 26 | os.Exit(1) 27 | } 28 | switch os.Args[1] { 29 | 30 | case "cred": 31 | helper.Cred.Parse(os.Args[2:]) 32 | utils.CreateAWScredentialsFile(helper.AWS_region, helper.AWS_access_key_id, helper.AWS_secret_access_key, helper.AWS_session_token) 33 | fmt.Println(utils.Green("Message: "), utils.Yellow("File"), utils.Red(".env"), utils.Yellow("with AWS credentials were created in current folder")) 34 | case "enum": 35 | helper.Enum.Parse(os.Args[2:]) 36 | helper.SetEnumerationPipeline(helper.Services_enum, helper.Speed) 37 | fmt.Println(utils.Green("Message: "), utils.Yellow("Enumeration finished")) 38 | 39 | case "dump": 40 | helper.Dump.Parse(os.Args[2:]) 41 | helper.DumpInfo(helper.Services_dump, helper.Print, helper.Filter, helper.Errors_dump) 42 | 43 | default: 44 | fmt.Println(helper.Cloudrider_help) 45 | os.Exit(1) 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /servicemaster/servicemaster.go: -------------------------------------------------------------------------------- 1 | package servicemaster 2 | 3 | import ( 4 | "context" 5 | "fmt" 6 | "io/ioutil" 7 | "log" 8 | "os" 9 | "reflect" 10 | "strings" 11 | "sync" 12 | "time" 13 | 14 | "github.com/aws/aws-sdk-go-v2/config" 15 | "github.com/aws/aws-sdk-go-v2/service/sts" 16 | "github.com/shabarkin/aws-enumerator/utils" 17 | ) 18 | 19 | type ServiceMaster struct { 20 | Svc interface{} 21 | SvcName string 22 | 23 | ApiCalls []map[string]interface{} 24 | json_result_struct map[string][]string 25 | json_error_struct map[string][]string 26 | 27 | api_call_result_channel chan string 28 | api_call_error_channel chan string 29 | 30 | result_counter int 31 | error_counter int 32 | } 33 | 34 | func (svc *ServiceMaster) ServiceEnumerator() { 35 | // initialize counters, channels, result struct 36 | svc.initialize() 37 | 38 | // Starting go routines (handles 200 goroutines, then rate limit error of AWS, (recommended number of goroutines is less than 100) 39 | for i := 0; i < len(svc.ApiCalls); i++ { 40 | go svc.apicall_wrapper(i) 41 | } 42 | 43 | // Launch control manager for goroutines 44 | svc.control_node() 45 | 46 | // Save all gathered results to a json file 47 | svc.save_result_to_file() 48 | defer wg.Done() 49 | } 50 | 51 | func (svc *ServiceMaster) initialize() { 52 | // reset & init counters 53 | svc.error_counter = 0 54 | svc.result_counter = 0 55 | 56 | // reset & init result map 57 | delete(svc.json_error_struct, "errors") 58 | svc.json_error_struct = make(map[string][]string) 59 | 60 | // reset & init error map 61 | delete(svc.json_result_struct, svc.SvcName) 62 | svc.json_result_struct = make(map[string][]string) 63 | 64 | // reset & init channels 65 | svc.api_call_result_channel = make(chan string, len(svc.ApiCalls)) 66 | svc.api_call_error_channel = make(chan string, len(svc.ApiCalls)) 67 | } 68 | 69 | func (svc *ServiceMaster) control_node() { 70 | // Handling Goroutine results 71 | for { 72 | // If all of the api calls were done, close channels and break the loop 73 | if svc.result_counter >= len(svc.ApiCalls) { 74 | defer close(svc.api_call_result_channel) 75 | defer close(svc.api_call_error_channel) 76 | fmt.Println(utils.Green("Message: "), utils.Yellow("Successful"), utils.Yellow(strings.ToUpper(svc.SvcName))+utils.Yellow(":"), utils.Green(svc.result_counter-svc.error_counter), utils.Yellow("/"), utils.Red(svc.result_counter)) 77 | break 78 | } 79 | 80 | select { 81 | // Handling results 82 | case msg := <-svc.api_call_result_channel: 83 | // Dumping to the map 84 | svc.json_result_struct[svc.SvcName] = append(svc.json_result_struct[svc.SvcName], msg) 85 | svc.result_counter++ 86 | 87 | // Handling any kind of errors 88 | case err := <-svc.api_call_error_channel: 89 | svc.json_error_struct[svc.SvcName] = append(svc.json_error_struct[svc.SvcName], err) 90 | svc.result_counter++ 91 | svc.error_counter++ 92 | } 93 | } 94 | } 95 | 96 | func (svc *ServiceMaster) apicall_wrapper(it int) { 97 | 98 | apicall_name := reflect.ValueOf(svc.ApiCalls[it]["apicall"]).Interface().(string) 99 | 100 | s := reflect.ValueOf(svc.Svc).MethodByName(apicall_name).Call( 101 | []reflect.Value{ 102 | reflect.ValueOf(context.TODO()), 103 | reflect.ValueOf(svc.ApiCalls[it]["input_obj"]), 104 | }, 105 | ) 106 | response := s[0].Interface() 107 | err := s[1].Interface() 108 | 109 | if err != nil { 110 | svc.api_call_error_channel <- utils.PackResponse(map[string]string{apicall_name: err.(error).Error()}) 111 | } else { 112 | svc.api_call_result_channel <- utils.PackResponse(map[string]interface{}{apicall_name: response}) 113 | } 114 | } 115 | 116 | // 1. ADD THE FOLDER CREATION IF NOT EXISTED 117 | func (svc *ServiceMaster) save_result_to_file() { 118 | 119 | if _, err := os.Stat(utils.FILEPATH); os.IsNotExist(err) { 120 | errDir := os.MkdirAll(utils.FILEPATH, 0755) 121 | if errDir != nil { 122 | log.Fatalln(utils.Red(err)) 123 | } 124 | } 125 | // results 126 | file_results := utils.PackResponse(svc.json_result_struct) 127 | ioutil.WriteFile(utils.FILEPATH+svc.SvcName+".json", []byte(file_results), 0644) 128 | 129 | if _, err := os.Stat(utils.ERROR_FILEPATH); os.IsNotExist(err) { 130 | errDir := os.MkdirAll(utils.ERROR_FILEPATH, 0755) 131 | if errDir != nil { 132 | log.Fatalln(utils.Red(err)) 133 | } 134 | } 135 | 136 | // save errors 137 | file_errors := utils.PackResponse(svc.json_error_struct) 138 | ioutil.WriteFile(utils.ERROR_FILEPATH+svc.SvcName+"_errors.json", []byte(file_errors), 0644) 139 | } 140 | 141 | func CheckAWSCredentials() bool { 142 | if utils.CheckEnvFileExistance() { 143 | cfg, err := config.LoadDefaultConfig(context.TODO()) 144 | if err != nil { 145 | fmt.Println(utils.Red("Error:"), utils.Yellow("Unable to load SDK config,")) 146 | fmt.Println(utils.Green("Fix:"), utils.Yellow("The problem should be on our side, contact support please")) 147 | fmt.Println(utils.Red("Trace:"), utils.Yellow(err)) 148 | os.Exit(1) 149 | } 150 | 151 | sts_svc := sts.NewFromConfig(cfg) 152 | _, aws_err := sts_svc.GetCallerIdentity(context.TODO(), &sts.GetCallerIdentityInput{}) 153 | if aws_err != nil { 154 | fmt.Println(utils.Red("Error:"), utils.Yellow("AWS Credentials are not valid")) 155 | fmt.Println(utils.Green("Fix:"), utils.Yellow("Provide AWS Credentials, use `./aws-enumerator cred -h` command")) 156 | fmt.Println(utils.Red("Trace:"), utils.Yellow(aws_err)) 157 | os.Exit(1) 158 | } 159 | return true 160 | } else { 161 | return false 162 | } 163 | } 164 | 165 | func sleep_delay(i, speed int) { 166 | if (i+1)%5 == 0 { 167 | time.Sleep(time.Duration(speed) * time.Millisecond) 168 | } 169 | } 170 | 171 | var wg sync.WaitGroup 172 | 173 | func ServiceCall(AllAWSServices []ServiceMaster, wanted_services []string, speed int) { 174 | 175 | start := time.Now() 176 | if utils.Find(wanted_services, "all") { 177 | for i := range AllAWSServices { 178 | wg.Add(1) 179 | go AllAWSServices[i].ServiceEnumerator() 180 | sleep_delay(i, speed) 181 | } 182 | wg.Wait() 183 | 184 | } else { 185 | for aws_i := range AllAWSServices { 186 | for str_i := range wanted_services { 187 | 188 | if AllAWSServices[aws_i].SvcName == wanted_services[str_i] { 189 | wg.Add(1) 190 | go AllAWSServices[aws_i].ServiceEnumerator() 191 | break 192 | } 193 | } 194 | 195 | } 196 | wg.Wait() 197 | } 198 | t := time.Now() 199 | elapsed := t.Sub(start) 200 | fmt.Println(utils.Green("Time:"), elapsed) 201 | } 202 | -------------------------------------------------------------------------------- /servicestructs/servicestructs.go: -------------------------------------------------------------------------------- 1 | package servicestructs 2 | 3 | import ( 4 | "context" 5 | "log" 6 | 7 | "github.com/aws/aws-sdk-go-v2/config" 8 | "github.com/aws/aws-sdk-go-v2/service/acm" 9 | "github.com/aws/aws-sdk-go-v2/service/amplify" 10 | "github.com/aws/aws-sdk-go-v2/service/apigateway" 11 | "github.com/aws/aws-sdk-go-v2/service/appmesh" 12 | "github.com/aws/aws-sdk-go-v2/service/appsync" 13 | "github.com/aws/aws-sdk-go-v2/service/athena" 14 | "github.com/aws/aws-sdk-go-v2/service/autoscaling" 15 | "github.com/aws/aws-sdk-go-v2/service/backup" 16 | "github.com/aws/aws-sdk-go-v2/service/batch" 17 | "github.com/aws/aws-sdk-go-v2/service/chime" 18 | "github.com/aws/aws-sdk-go-v2/service/cloud9" 19 | "github.com/aws/aws-sdk-go-v2/service/clouddirectory" 20 | "github.com/aws/aws-sdk-go-v2/service/cloudformation" 21 | "github.com/aws/aws-sdk-go-v2/service/cloudfront" 22 | "github.com/aws/aws-sdk-go-v2/service/cloudhsm" 23 | "github.com/aws/aws-sdk-go-v2/service/cloudhsmv2" 24 | "github.com/aws/aws-sdk-go-v2/service/cloudsearch" 25 | "github.com/aws/aws-sdk-go-v2/service/cloudtrail" 26 | "github.com/aws/aws-sdk-go-v2/service/codebuild" 27 | "github.com/aws/aws-sdk-go-v2/service/codecommit" 28 | "github.com/aws/aws-sdk-go-v2/service/codedeploy" 29 | "github.com/aws/aws-sdk-go-v2/service/codepipeline" 30 | "github.com/aws/aws-sdk-go-v2/service/codestar" 31 | "github.com/aws/aws-sdk-go-v2/service/comprehend" 32 | "github.com/aws/aws-sdk-go-v2/service/datapipeline" 33 | "github.com/aws/aws-sdk-go-v2/service/datasync" 34 | "github.com/aws/aws-sdk-go-v2/service/dax" 35 | "github.com/aws/aws-sdk-go-v2/service/devicefarm" 36 | "github.com/aws/aws-sdk-go-v2/service/directconnect" 37 | "github.com/aws/aws-sdk-go-v2/service/dlm" 38 | "github.com/aws/aws-sdk-go-v2/service/dynamodb" 39 | "github.com/aws/aws-sdk-go-v2/service/ec2" 40 | "github.com/aws/aws-sdk-go-v2/service/ecr" 41 | "github.com/aws/aws-sdk-go-v2/service/ecs" 42 | "github.com/aws/aws-sdk-go-v2/service/eks" 43 | "github.com/aws/aws-sdk-go-v2/service/elasticache" 44 | "github.com/aws/aws-sdk-go-v2/service/elasticbeanstalk" 45 | "github.com/aws/aws-sdk-go-v2/service/elastictranscoder" 46 | "github.com/aws/aws-sdk-go-v2/service/firehose" 47 | "github.com/aws/aws-sdk-go-v2/service/fms" 48 | "github.com/aws/aws-sdk-go-v2/service/fsx" 49 | "github.com/aws/aws-sdk-go-v2/service/gamelift" 50 | "github.com/aws/aws-sdk-go-v2/service/globalaccelerator" 51 | "github.com/aws/aws-sdk-go-v2/service/glue" 52 | "github.com/aws/aws-sdk-go-v2/service/greengrass" 53 | "github.com/aws/aws-sdk-go-v2/service/guardduty" 54 | "github.com/aws/aws-sdk-go-v2/service/health" 55 | "github.com/aws/aws-sdk-go-v2/service/iam" 56 | "github.com/aws/aws-sdk-go-v2/service/inspector" 57 | "github.com/aws/aws-sdk-go-v2/service/iot" 58 | "github.com/aws/aws-sdk-go-v2/service/iotanalytics" 59 | "github.com/aws/aws-sdk-go-v2/service/kafka" 60 | "github.com/aws/aws-sdk-go-v2/service/kinesis" 61 | "github.com/aws/aws-sdk-go-v2/service/kinesisanalytics" 62 | "github.com/aws/aws-sdk-go-v2/service/kinesisvideo" 63 | "github.com/aws/aws-sdk-go-v2/service/kms" 64 | "github.com/aws/aws-sdk-go-v2/service/lambda" 65 | "github.com/aws/aws-sdk-go-v2/service/lightsail" 66 | "github.com/aws/aws-sdk-go-v2/service/machinelearning" 67 | "github.com/aws/aws-sdk-go-v2/service/macie" 68 | "github.com/aws/aws-sdk-go-v2/service/mediaconnect" 69 | "github.com/aws/aws-sdk-go-v2/service/mediaconvert" 70 | "github.com/aws/aws-sdk-go-v2/service/medialive" 71 | "github.com/aws/aws-sdk-go-v2/service/mediapackage" 72 | "github.com/aws/aws-sdk-go-v2/service/mediastore" 73 | "github.com/aws/aws-sdk-go-v2/service/mediatailor" 74 | "github.com/aws/aws-sdk-go-v2/service/mobile" 75 | "github.com/aws/aws-sdk-go-v2/service/mq" 76 | "github.com/aws/aws-sdk-go-v2/service/opsworks" 77 | "github.com/aws/aws-sdk-go-v2/service/organizations" 78 | "github.com/aws/aws-sdk-go-v2/service/pinpoint" 79 | "github.com/aws/aws-sdk-go-v2/service/polly" 80 | "github.com/aws/aws-sdk-go-v2/service/pricing" 81 | "github.com/aws/aws-sdk-go-v2/service/ram" 82 | "github.com/aws/aws-sdk-go-v2/service/rds" 83 | "github.com/aws/aws-sdk-go-v2/service/redshift" 84 | "github.com/aws/aws-sdk-go-v2/service/rekognition" 85 | "github.com/aws/aws-sdk-go-v2/service/robomaker" 86 | "github.com/aws/aws-sdk-go-v2/service/route53" 87 | "github.com/aws/aws-sdk-go-v2/service/route53domains" 88 | "github.com/aws/aws-sdk-go-v2/service/route53resolver" 89 | "github.com/aws/aws-sdk-go-v2/service/s3" 90 | "github.com/aws/aws-sdk-go-v2/service/sagemaker" 91 | "github.com/aws/aws-sdk-go-v2/service/secretsmanager" 92 | "github.com/aws/aws-sdk-go-v2/service/securityhub" 93 | "github.com/aws/aws-sdk-go-v2/service/servicecatalog" 94 | "github.com/aws/aws-sdk-go-v2/service/shield" 95 | "github.com/aws/aws-sdk-go-v2/service/signer" 96 | "github.com/aws/aws-sdk-go-v2/service/sms" 97 | "github.com/aws/aws-sdk-go-v2/service/snowball" 98 | "github.com/aws/aws-sdk-go-v2/service/sns" 99 | "github.com/aws/aws-sdk-go-v2/service/sqs" 100 | "github.com/aws/aws-sdk-go-v2/service/ssm" 101 | "github.com/aws/aws-sdk-go-v2/service/storagegateway" 102 | "github.com/aws/aws-sdk-go-v2/service/sts" 103 | "github.com/aws/aws-sdk-go-v2/service/support" 104 | "github.com/aws/aws-sdk-go-v2/service/transcribe" 105 | "github.com/aws/aws-sdk-go-v2/service/transfer" 106 | "github.com/aws/aws-sdk-go-v2/service/translate" 107 | "github.com/aws/aws-sdk-go-v2/service/waf" 108 | "github.com/aws/aws-sdk-go-v2/service/workdocs" 109 | "github.com/aws/aws-sdk-go-v2/service/worklink" 110 | "github.com/aws/aws-sdk-go-v2/service/workmail" 111 | "github.com/aws/aws-sdk-go-v2/service/workspaces" 112 | "github.com/aws/aws-sdk-go-v2/service/xray" 113 | "github.com/shabarkin/aws-enumerator/servicemaster" 114 | "github.com/shabarkin/aws-enumerator/utils" 115 | ) 116 | 117 | func GetServices() []servicemaster.ServiceMaster { 118 | 119 | cfg, err := config.LoadDefaultConfig(context.TODO()) 120 | 121 | if err != nil { 122 | log.Fatalln(utils.Red("Error:"), utils.Yellow("Unable to load SDK config,")) 123 | } 124 | 125 | acm_svc := &servicemaster.ServiceMaster{ 126 | Svc: acm.NewFromConfig(cfg), 127 | SvcName: "acm", 128 | ApiCalls: []map[string]interface{}{ 129 | {"apicall": "ListCertificates", "input_obj": &acm.ListCertificatesInput{}}, 130 | }} 131 | 132 | amplify_svc := &servicemaster.ServiceMaster{ 133 | Svc: amplify.NewFromConfig(cfg), 134 | SvcName: "amplify", 135 | ApiCalls: []map[string]interface{}{ 136 | {"apicall": "ListApps", "input_obj": &lify.ListAppsInput{}}, 137 | }} 138 | 139 | apigateway_svc := &servicemaster.ServiceMaster{ 140 | Svc: apigateway.NewFromConfig(cfg), 141 | SvcName: "apigateway", 142 | ApiCalls: []map[string]interface{}{ 143 | {"apicall": "GetAccount", "input_obj": &apigateway.GetAccountInput{}}, 144 | {"apicall": "GetDomainNames", "input_obj": &apigateway.GetDomainNamesInput{}}, 145 | {"apicall": "GetUsagePlans", "input_obj": &apigateway.GetUsagePlansInput{}}, 146 | {"apicall": "GetClientCertificates", "input_obj": &apigateway.GetClientCertificatesInput{}}, 147 | {"apicall": "GetApiKeys", "input_obj": &apigateway.GetApiKeysInput{}}, 148 | {"apicall": "GetSdkTypes", "input_obj": &apigateway.GetSdkTypesInput{}}, 149 | {"apicall": "GetVpcLinks", "input_obj": &apigateway.GetVpcLinksInput{}}, 150 | {"apicall": "GetRestApis", "input_obj": &apigateway.GetRestApisInput{}}, 151 | }} 152 | 153 | appmesh_svc := &servicemaster.ServiceMaster{ 154 | Svc: appmesh.NewFromConfig(cfg), 155 | SvcName: "appmesh", 156 | ApiCalls: []map[string]interface{}{ 157 | {"apicall": "ListMeshes", "input_obj": &appmesh.ListMeshesInput{}}, 158 | }} 159 | 160 | appsync_svc := &servicemaster.ServiceMaster{ 161 | Svc: appsync.NewFromConfig(cfg), 162 | SvcName: "appsync", 163 | ApiCalls: []map[string]interface{}{ 164 | {"apicall": "ListGraphqlApis", "input_obj": &appsync.ListGraphqlApisInput{}}, 165 | }} 166 | 167 | athena_svc := &servicemaster.ServiceMaster{ 168 | Svc: athena.NewFromConfig(cfg), 169 | SvcName: "athena", 170 | ApiCalls: []map[string]interface{}{ 171 | {"apicall": "ListQueryExecutions", "input_obj": &athena.ListQueryExecutionsInput{}}, 172 | {"apicall": "ListNamedQueries", "input_obj": &athena.ListNamedQueriesInput{}}, 173 | {"apicall": "ListWorkGroups", "input_obj": &athena.ListWorkGroupsInput{}}, 174 | }} 175 | 176 | autoscaling_svc := &servicemaster.ServiceMaster{ 177 | Svc: autoscaling.NewFromConfig(cfg), 178 | SvcName: "autoscaling", 179 | ApiCalls: []map[string]interface{}{ 180 | {"apicall": "DescribeAdjustmentTypes", "input_obj": &autoscaling.DescribeAdjustmentTypesInput{}}, 181 | {"apicall": "DescribeScheduledActions", "input_obj": &autoscaling.DescribeScheduledActionsInput{}}, 182 | {"apicall": "DescribeAutoScalingGroups", "input_obj": &autoscaling.DescribeAutoScalingGroupsInput{}}, 183 | {"apicall": "DescribeNotificationConfigurations", "input_obj": &autoscaling.DescribeNotificationConfigurationsInput{}}, 184 | {"apicall": "DescribeAccountLimits", "input_obj": &autoscaling.DescribeAccountLimitsInput{}}, 185 | {"apicall": "DescribePolicies", "input_obj": &autoscaling.DescribePoliciesInput{}}, 186 | {"apicall": "DescribeScalingProcessTypes", "input_obj": &autoscaling.DescribeScalingProcessTypesInput{}}, 187 | {"apicall": "DescribeTerminationPolicyTypes", "input_obj": &autoscaling.DescribeTerminationPolicyTypesInput{}}, 188 | {"apicall": "DescribeScalingActivities", "input_obj": &autoscaling.DescribeScalingActivitiesInput{}}, 189 | {"apicall": "DescribeAutoScalingNotificationTypes", "input_obj": &autoscaling.DescribeAutoScalingNotificationTypesInput{}}, 190 | {"apicall": "DescribeLaunchConfigurations", "input_obj": &autoscaling.DescribeLaunchConfigurationsInput{}}, 191 | {"apicall": "DescribeLifecycleHookTypes", "input_obj": &autoscaling.DescribeLifecycleHookTypesInput{}}, 192 | {"apicall": "DescribeMetricCollectionTypes", "input_obj": &autoscaling.DescribeMetricCollectionTypesInput{}}, 193 | {"apicall": "DescribeTags", "input_obj": &autoscaling.DescribeTagsInput{}}, 194 | {"apicall": "DescribeAutoScalingInstances", "input_obj": &autoscaling.DescribeAutoScalingInstancesInput{}}, 195 | }} 196 | 197 | backup_svc := &servicemaster.ServiceMaster{ 198 | Svc: backup.NewFromConfig(cfg), 199 | SvcName: "backup", 200 | ApiCalls: []map[string]interface{}{ 201 | {"apicall": "ListBackupVaults", "input_obj": &backup.ListBackupVaultsInput{}}, 202 | {"apicall": "ListProtectedResources", "input_obj": &backup.ListProtectedResourcesInput{}}, 203 | {"apicall": "ListBackupPlanTemplates", "input_obj": &backup.ListBackupPlanTemplatesInput{}}, 204 | {"apicall": "ListBackupJobs", "input_obj": &backup.ListBackupJobsInput{}}, 205 | {"apicall": "GetSupportedResourceTypes", "input_obj": &backup.GetSupportedResourceTypesInput{}}, 206 | {"apicall": "ListRestoreJobs", "input_obj": &backup.ListRestoreJobsInput{}}, 207 | {"apicall": "ListBackupPlans", "input_obj": &backup.ListBackupPlansInput{}}, 208 | }} 209 | 210 | batch_svc := &servicemaster.ServiceMaster{ 211 | Svc: batch.NewFromConfig(cfg), 212 | SvcName: "batch", 213 | ApiCalls: []map[string]interface{}{ 214 | {"apicall": "ListJobs", "input_obj": &batch.ListJobsInput{}}, 215 | {"apicall": "DescribeComputeEnvironments", "input_obj": &batch.DescribeComputeEnvironmentsInput{}}, 216 | {"apicall": "DescribeJobDefinitions", "input_obj": &batch.DescribeJobDefinitionsInput{}}, 217 | {"apicall": "DescribeJobQueues", "input_obj": &batch.DescribeJobQueuesInput{}}, 218 | }} 219 | 220 | chime_svc := &servicemaster.ServiceMaster{ 221 | Svc: chime.NewFromConfig(cfg), 222 | SvcName: "chime", 223 | ApiCalls: []map[string]interface{}{ 224 | {"apicall": "ListAccounts", "input_obj": &chime.ListAccountsInput{}}, 225 | }} 226 | 227 | cloud9_svc := &servicemaster.ServiceMaster{ 228 | Svc: cloud9.NewFromConfig(cfg), 229 | SvcName: "cloud9", 230 | ApiCalls: []map[string]interface{}{ 231 | {"apicall": "ListEnvironments", "input_obj": &cloud9.ListEnvironmentsInput{}}, 232 | {"apicall": "DescribeEnvironmentMemberships", "input_obj": &cloud9.DescribeEnvironmentMembershipsInput{}}, 233 | }} 234 | 235 | clouddirectory_svc := &servicemaster.ServiceMaster{ 236 | Svc: clouddirectory.NewFromConfig(cfg), 237 | SvcName: "clouddirectory", 238 | ApiCalls: []map[string]interface{}{ 239 | {"apicall": "ListDevelopmentSchemaArns", "input_obj": &clouddirectory.ListDevelopmentSchemaArnsInput{}}, 240 | {"apicall": "ListManagedSchemaArns", "input_obj": &clouddirectory.ListManagedSchemaArnsInput{}}, 241 | {"apicall": "ListDirectories", "input_obj": &clouddirectory.ListDirectoriesInput{}}, 242 | {"apicall": "ListPublishedSchemaArns", "input_obj": &clouddirectory.ListPublishedSchemaArnsInput{}}, 243 | }} 244 | 245 | cloudformation_svc := &servicemaster.ServiceMaster{ 246 | Svc: cloudformation.NewFromConfig(cfg), 247 | SvcName: "cloudformation", 248 | ApiCalls: []map[string]interface{}{ 249 | {"apicall": "DescribeStackEvents", "input_obj": &cloudformation.DescribeStackEventsInput{}}, 250 | {"apicall": "ListExports", "input_obj": &cloudformation.ListExportsInput{}}, 251 | {"apicall": "DescribeStackResources", "input_obj": &cloudformation.DescribeStackResourcesInput{}}, 252 | {"apicall": "DescribeAccountLimits", "input_obj": &cloudformation.DescribeAccountLimitsInput{}}, 253 | {"apicall": "ListStackSets", "input_obj": &cloudformation.ListStackSetsInput{}}, 254 | {"apicall": "ListStacks", "input_obj": &cloudformation.ListStacksInput{}}, 255 | {"apicall": "GetTemplateSummary", "input_obj": &cloudformation.GetTemplateSummaryInput{}}, 256 | {"apicall": "GetTemplate", "input_obj": &cloudformation.GetTemplateInput{}}, 257 | }} 258 | 259 | cloudfront_svc := &servicemaster.ServiceMaster{ 260 | Svc: cloudfront.NewFromConfig(cfg), 261 | SvcName: "cloudfront", 262 | ApiCalls: []map[string]interface{}{ 263 | {"apicall": "ListFieldLevelEncryptionProfiles", "input_obj": &cloudfront.ListFieldLevelEncryptionProfilesInput{}}, 264 | {"apicall": "ListCloudFrontOriginAccessIdentities", "input_obj": &cloudfront.ListCloudFrontOriginAccessIdentitiesInput{}}, 265 | {"apicall": "ListFieldLevelEncryptionConfigs", "input_obj": &cloudfront.ListFieldLevelEncryptionConfigsInput{}}, 266 | {"apicall": "ListDistributions", "input_obj": &cloudfront.ListDistributionsInput{}}, 267 | {"apicall": "ListStreamingDistributions", "input_obj": &cloudfront.ListStreamingDistributionsInput{}}, 268 | }} 269 | 270 | cloudhsm_svc := &servicemaster.ServiceMaster{ 271 | Svc: cloudhsm.NewFromConfig(cfg), 272 | SvcName: "cloudhsm", 273 | ApiCalls: []map[string]interface{}{ 274 | {"apicall": "ListHapgs", "input_obj": &cloudhsm.ListHapgsInput{}}, 275 | {"apicall": "ListHsms", "input_obj": &cloudhsm.ListHsmsInput{}}, 276 | {"apicall": "DescribeLunaClient", "input_obj": &cloudhsm.DescribeLunaClientInput{}}, 277 | {"apicall": "ListAvailableZones", "input_obj": &cloudhsm.ListAvailableZonesInput{}}, 278 | {"apicall": "DescribeHsm", "input_obj": &cloudhsm.DescribeHsmInput{}}, 279 | {"apicall": "ListLunaClients", "input_obj": &cloudhsm.ListLunaClientsInput{}}, 280 | }} 281 | 282 | cloudhsmv2_svc := &servicemaster.ServiceMaster{ 283 | Svc: cloudhsmv2.NewFromConfig(cfg), 284 | SvcName: "cloudhsmv2", 285 | ApiCalls: []map[string]interface{}{ 286 | {"apicall": "DescribeBackups", "input_obj": &cloudhsmv2.DescribeBackupsInput{}}, 287 | {"apicall": "DescribeClusters", "input_obj": &cloudhsmv2.DescribeClustersInput{}}, 288 | }} 289 | 290 | cloudsearch_svc := &servicemaster.ServiceMaster{ 291 | Svc: cloudsearch.NewFromConfig(cfg), 292 | SvcName: "cloudsearch", 293 | ApiCalls: []map[string]interface{}{ 294 | {"apicall": "DescribeDomains", "input_obj": &cloudsearch.DescribeDomainsInput{}}, 295 | {"apicall": "ListDomainNames", "input_obj": &cloudsearch.ListDomainNamesInput{}}, 296 | }} 297 | 298 | cloudtrail_svc := &servicemaster.ServiceMaster{ 299 | Svc: cloudtrail.NewFromConfig(cfg), 300 | SvcName: "cloudtrail", 301 | ApiCalls: []map[string]interface{}{ 302 | {"apicall": "DescribeTrails", "input_obj": &cloudtrail.DescribeTrailsInput{}}, 303 | }} 304 | 305 | codebuild_svc := &servicemaster.ServiceMaster{ 306 | Svc: codebuild.NewFromConfig(cfg), 307 | SvcName: "codebuild", 308 | ApiCalls: []map[string]interface{}{ 309 | {"apicall": "ListBuilds", "input_obj": &codebuild.ListBuildsInput{}}, 310 | {"apicall": "ListProjects", "input_obj": &codebuild.ListProjectsInput{}}, 311 | {"apicall": "ListCuratedEnvironmentImages", "input_obj": &codebuild.ListCuratedEnvironmentImagesInput{}}, 312 | {"apicall": "ListSourceCredentials", "input_obj": &codebuild.ListSourceCredentialsInput{}}, 313 | }} 314 | 315 | codecommit_svc := &servicemaster.ServiceMaster{ 316 | Svc: codecommit.NewFromConfig(cfg), 317 | SvcName: "codecommit", 318 | ApiCalls: []map[string]interface{}{ 319 | {"apicall": "ListRepositories", "input_obj": &codecommit.ListRepositoriesInput{}}, 320 | {"apicall": "GetBranch", "input_obj": &codecommit.GetBranchInput{}}, 321 | }} 322 | 323 | codedeploy_svc := &servicemaster.ServiceMaster{ 324 | Svc: codedeploy.NewFromConfig(cfg), 325 | SvcName: "codedeploy", 326 | ApiCalls: []map[string]interface{}{ 327 | {"apicall": "GetDeploymentTarget", "input_obj": &codedeploy.GetDeploymentTargetInput{}}, 328 | {"apicall": "ListGitHubAccountTokenNames", "input_obj": &codedeploy.ListGitHubAccountTokenNamesInput{}}, 329 | {"apicall": "ListDeploymentConfigs", "input_obj": &codedeploy.ListDeploymentConfigsInput{}}, 330 | {"apicall": "BatchGetDeploymentTargets", "input_obj": &codedeploy.BatchGetDeploymentTargetsInput{}}, 331 | {"apicall": "ListDeploymentTargets", "input_obj": &codedeploy.ListDeploymentTargetsInput{}}, 332 | {"apicall": "ListApplications", "input_obj": &codedeploy.ListApplicationsInput{}}, 333 | {"apicall": "ListOnPremisesInstances", "input_obj": &codedeploy.ListOnPremisesInstancesInput{}}, 334 | {"apicall": "ListDeployments", "input_obj": &codedeploy.ListDeploymentsInput{}}, 335 | }} 336 | 337 | codepipeline_svc := &servicemaster.ServiceMaster{ 338 | Svc: codepipeline.NewFromConfig(cfg), 339 | SvcName: "codepipeline", 340 | ApiCalls: []map[string]interface{}{ 341 | {"apicall": "ListActionTypes", "input_obj": &codepipeline.ListActionTypesInput{}}, 342 | {"apicall": "ListPipelines", "input_obj": &codepipeline.ListPipelinesInput{}}, 343 | {"apicall": "ListWebhooks", "input_obj": &codepipeline.ListWebhooksInput{}}, 344 | }} 345 | 346 | codestar_svc := &servicemaster.ServiceMaster{ 347 | Svc: codestar.NewFromConfig(cfg), 348 | SvcName: "codestar", 349 | ApiCalls: []map[string]interface{}{ 350 | {"apicall": "ListProjects", "input_obj": &codestar.ListProjectsInput{}}, 351 | {"apicall": "ListUserProfiles", "input_obj": &codestar.ListUserProfilesInput{}}, 352 | }} 353 | 354 | comprehend_svc := &servicemaster.ServiceMaster{ 355 | Svc: comprehend.NewFromConfig(cfg), 356 | SvcName: "comprehend", 357 | ApiCalls: []map[string]interface{}{ 358 | {"apicall": "ListDominantLanguageDetectionJobs", "input_obj": &comprehend.ListDominantLanguageDetectionJobsInput{}}, 359 | {"apicall": "ListTopicsDetectionJobs", "input_obj": &comprehend.ListTopicsDetectionJobsInput{}}, 360 | {"apicall": "ListEntitiesDetectionJobs", "input_obj": &comprehend.ListEntitiesDetectionJobsInput{}}, 361 | {"apicall": "ListEntityRecognizers", "input_obj": &comprehend.ListEntityRecognizersInput{}}, 362 | {"apicall": "ListDocumentClassifiers", "input_obj": &comprehend.ListDocumentClassifiersInput{}}, 363 | {"apicall": "ListSentimentDetectionJobs", "input_obj": &comprehend.ListSentimentDetectionJobsInput{}}, 364 | {"apicall": "ListKeyPhrasesDetectionJobs", "input_obj": &comprehend.ListKeyPhrasesDetectionJobsInput{}}, 365 | {"apicall": "ListDocumentClassificationJobs", "input_obj": &comprehend.ListDocumentClassificationJobsInput{}}, 366 | }} 367 | 368 | datapipeline_svc := &servicemaster.ServiceMaster{ 369 | Svc: datapipeline.NewFromConfig(cfg), 370 | SvcName: "datapipeline", 371 | ApiCalls: []map[string]interface{}{ 372 | {"apicall": "ListPipelines", "input_obj": &datapipeline.ListPipelinesInput{}}, 373 | }} 374 | 375 | datasync_svc := &servicemaster.ServiceMaster{ 376 | Svc: datasync.NewFromConfig(cfg), 377 | SvcName: "datasync", 378 | ApiCalls: []map[string]interface{}{ 379 | {"apicall": "ListLocations", "input_obj": &datasync.ListLocationsInput{}}, 380 | {"apicall": "ListTaskExecutions", "input_obj": &datasync.ListTaskExecutionsInput{}}, 381 | {"apicall": "ListTasks", "input_obj": &datasync.ListTasksInput{}}, 382 | {"apicall": "ListAgents", "input_obj": &datasync.ListAgentsInput{}}, 383 | }} 384 | 385 | dax_svc := &servicemaster.ServiceMaster{ 386 | Svc: dax.NewFromConfig(cfg), 387 | SvcName: "dax", 388 | ApiCalls: []map[string]interface{}{ 389 | {"apicall": "DescribeDefaultParameters", "input_obj": &dax.DescribeDefaultParametersInput{}}, 390 | {"apicall": "DescribeSubnetGroups", "input_obj": &dax.DescribeSubnetGroupsInput{}}, 391 | {"apicall": "DescribeClusters", "input_obj": &dax.DescribeClustersInput{}}, 392 | {"apicall": "DescribeParameterGroups", "input_obj": &dax.DescribeParameterGroupsInput{}}, 393 | }} 394 | 395 | devicefarm_svc := &servicemaster.ServiceMaster{ 396 | Svc: devicefarm.NewFromConfig(cfg), 397 | SvcName: "devicefarm", 398 | ApiCalls: []map[string]interface{}{ 399 | {"apicall": "ListProjects", "input_obj": &devicefarm.ListProjectsInput{}}, 400 | {"apicall": "ListOfferingPromotions", "input_obj": &devicefarm.ListOfferingPromotionsInput{}}, 401 | {"apicall": "ListOfferings", "input_obj": &devicefarm.ListOfferingsInput{}}, 402 | {"apicall": "GetOfferingStatus", "input_obj": &devicefarm.GetOfferingStatusInput{}}, 403 | {"apicall": "ListOfferingTransactions", "input_obj": &devicefarm.ListOfferingTransactionsInput{}}, 404 | {"apicall": "ListVPCEConfigurations", "input_obj": &devicefarm.ListVPCEConfigurationsInput{}}, 405 | {"apicall": "ListDeviceInstances", "input_obj": &devicefarm.ListDeviceInstancesInput{}}, 406 | {"apicall": "ListInstanceProfiles", "input_obj": &devicefarm.ListInstanceProfilesInput{}}, 407 | {"apicall": "ListDevices", "input_obj": &devicefarm.ListDevicesInput{}}, 408 | {"apicall": "GetAccountSettings", "input_obj": &devicefarm.GetAccountSettingsInput{}}, 409 | }} 410 | 411 | directconnect_svc := &servicemaster.ServiceMaster{ 412 | Svc: directconnect.NewFromConfig(cfg), 413 | SvcName: "directconnect", 414 | ApiCalls: []map[string]interface{}{ 415 | {"apicall": "DescribeDirectConnectGatewayAssociations", "input_obj": &directconnect.DescribeDirectConnectGatewayAssociationsInput{}}, 416 | {"apicall": "DescribeConnections", "input_obj": &directconnect.DescribeConnectionsInput{}}, 417 | {"apicall": "DescribeDirectConnectGatewayAttachments", "input_obj": &directconnect.DescribeDirectConnectGatewayAttachmentsInput{}}, 418 | {"apicall": "DescribeLags", "input_obj": &directconnect.DescribeLagsInput{}}, 419 | {"apicall": "DescribeDirectConnectGateways", "input_obj": &directconnect.DescribeDirectConnectGatewaysInput{}}, 420 | {"apicall": "DescribeLocations", "input_obj": &directconnect.DescribeLocationsInput{}}, 421 | {"apicall": "DescribeVirtualGateways", "input_obj": &directconnect.DescribeVirtualGatewaysInput{}}, 422 | {"apicall": "DescribeInterconnects", "input_obj": &directconnect.DescribeInterconnectsInput{}}, 423 | {"apicall": "DescribeVirtualInterfaces", "input_obj": &directconnect.DescribeVirtualInterfacesInput{}}, 424 | }} 425 | 426 | dlm_svc := &servicemaster.ServiceMaster{ 427 | Svc: dlm.NewFromConfig(cfg), 428 | SvcName: "dlm", 429 | ApiCalls: []map[string]interface{}{ 430 | {"apicall": "GetLifecyclePolicies", "input_obj": &dlm.GetLifecyclePoliciesInput{}}, 431 | }} 432 | 433 | dynamodb_svc := &servicemaster.ServiceMaster{ 434 | Svc: dynamodb.NewFromConfig(cfg), 435 | SvcName: "dynamodb", 436 | ApiCalls: []map[string]interface{}{ 437 | {"apicall": "ListBackups", "input_obj": &dynamodb.ListBackupsInput{}}, 438 | {"apicall": "ListTables", "input_obj": &dynamodb.ListTablesInput{}}, 439 | {"apicall": "DescribeLimits", "input_obj": &dynamodb.DescribeLimitsInput{}}, 440 | {"apicall": "ListGlobalTables", "input_obj": &dynamodb.ListGlobalTablesInput{}}, 441 | {"apicall": "DescribeEndpoints", "input_obj": &dynamodb.DescribeEndpointsInput{}}, 442 | }} 443 | 444 | ec2_svc := &servicemaster.ServiceMaster{ 445 | Svc: ec2.NewFromConfig(cfg), 446 | SvcName: "ec2", 447 | ApiCalls: []map[string]interface{}{ 448 | {"apicall": "DescribeImages", "input_obj": &ec2.DescribeImagesInput{}}, 449 | {"apicall": "DescribeSubnets", "input_obj": &ec2.DescribeSubnetsInput{}}, 450 | {"apicall": "DescribeIamInstanceProfileAssociations", "input_obj": &ec2.DescribeIamInstanceProfileAssociationsInput{}}, 451 | {"apicall": "DescribeNatGateways", "input_obj": &ec2.DescribeNatGatewaysInput{}}, 452 | {"apicall": "DescribeSpotFleetRequests", "input_obj": &ec2.DescribeSpotFleetRequestsInput{}}, 453 | {"apicall": "DescribeVpcEndpointConnections", "input_obj": &ec2.DescribeVpcEndpointConnectionsInput{}}, 454 | {"apicall": "DescribeVpcEndpointServiceConfigurations", "input_obj": &ec2.DescribeVpcEndpointServiceConfigurationsInput{}}, 455 | {"apicall": "DescribeVpcClassicLink", "input_obj": &ec2.DescribeVpcClassicLinkInput{}}, 456 | {"apicall": "DescribeReservedInstances", "input_obj": &ec2.DescribeReservedInstancesInput{}}, 457 | {"apicall": "DescribeReservedInstancesModifications", "input_obj": &ec2.DescribeReservedInstancesModificationsInput{}}, 458 | {"apicall": "DescribeSpotPriceHistory", "input_obj": &ec2.DescribeSpotPriceHistoryInput{}}, 459 | {"apicall": "DescribeTransitGatewayAttachments", "input_obj": &ec2.DescribeTransitGatewayAttachmentsInput{}}, 460 | {"apicall": "DescribeReservedInstancesOfferings", "input_obj": &ec2.DescribeReservedInstancesOfferingsInput{}}, 461 | {"apicall": "DescribeVpcEndpoints", "input_obj": &ec2.DescribeVpcEndpointsInput{}}, 462 | {"apicall": "DescribeSnapshots", "input_obj": &ec2.DescribeSnapshotsInput{}}, 463 | {"apicall": "DescribeNetworkAcls", "input_obj": &ec2.DescribeNetworkAclsInput{}}, 464 | {"apicall": "DescribeRouteTables", "input_obj": &ec2.DescribeRouteTablesInput{}}, 465 | {"apicall": "DescribeRegions", "input_obj": &ec2.DescribeRegionsInput{}}, 466 | {"apicall": "DescribeInstances", "input_obj": &ec2.DescribeInstancesInput{}}, 467 | {"apicall": "DescribeFleets", "input_obj": &ec2.DescribeFleetsInput{}}, 468 | {"apicall": "DescribeInstanceCreditSpecifications", "input_obj": &ec2.DescribeInstanceCreditSpecificationsInput{}}, 469 | {"apicall": "DescribeImportSnapshotTasks", "input_obj": &ec2.DescribeImportSnapshotTasksInput{}}, 470 | {"apicall": "DescribeClientVpnEndpoints", "input_obj": &ec2.DescribeClientVpnEndpointsInput{}}, 471 | {"apicall": "DescribeKeyPairs", "input_obj": &ec2.DescribeKeyPairsInput{}}, 472 | {"apicall": "DescribeIdFormat", "input_obj": &ec2.DescribeIdFormatInput{}}, 473 | {"apicall": "DescribePublicIpv4Pools", "input_obj": &ec2.DescribePublicIpv4PoolsInput{}}, 474 | {"apicall": "DescribeScheduledInstances", "input_obj": &ec2.DescribeScheduledInstancesInput{}}, 475 | {"apicall": "DescribeConversionTasks", "input_obj": &ec2.DescribeConversionTasksInput{}}, 476 | {"apicall": "DescribeEgressOnlyInternetGateways", "input_obj": &ec2.DescribeEgressOnlyInternetGatewaysInput{}}, 477 | {"apicall": "DescribePrincipalIdFormat", "input_obj": &ec2.DescribePrincipalIdFormatInput{}}, 478 | {"apicall": "DescribeNetworkInterfacePermissions", "input_obj": &ec2.DescribeNetworkInterfacePermissionsInput{}}, 479 | {"apicall": "DescribeVpnConnections", "input_obj": &ec2.DescribeVpnConnectionsInput{}}, 480 | {"apicall": "DescribeVpcs", "input_obj": &ec2.DescribeVpcsInput{}}, 481 | {"apicall": "DescribeNetworkInterfaces", "input_obj": &ec2.DescribeNetworkInterfacesInput{}}, 482 | {"apicall": "DescribeSecurityGroups", "input_obj": &ec2.DescribeSecurityGroupsInput{}}, 483 | {"apicall": "DescribeHostReservations", "input_obj": &ec2.DescribeHostReservationsInput{}}, 484 | {"apicall": "DescribePrefixLists", "input_obj": &ec2.DescribePrefixListsInput{}}, 485 | {"apicall": "DescribeVpnGateways", "input_obj": &ec2.DescribeVpnGatewaysInput{}}, 486 | {"apicall": "DescribeImportImageTasks", "input_obj": &ec2.DescribeImportImageTasksInput{}}, 487 | {"apicall": "DescribeClassicLinkInstances", "input_obj": &ec2.DescribeClassicLinkInstancesInput{}}, 488 | {"apicall": "DescribeVpcPeeringConnections", "input_obj": &ec2.DescribeVpcPeeringConnectionsInput{}}, 489 | {"apicall": "DescribeSpotDatafeedSubscription", "input_obj": &ec2.DescribeSpotDatafeedSubscriptionInput{}}, 490 | {"apicall": "DescribeMovingAddresses", "input_obj": &ec2.DescribeMovingAddressesInput{}}, 491 | {"apicall": "DescribeAvailabilityZones", "input_obj": &ec2.DescribeAvailabilityZonesInput{}}, 492 | {"apicall": "DescribeAddresses", "input_obj": &ec2.DescribeAddressesInput{}}, 493 | {"apicall": "DescribeElasticGpus", "input_obj": &ec2.DescribeElasticGpusInput{}}, 494 | {"apicall": "DescribeHosts", "input_obj": &ec2.DescribeHostsInput{}}, 495 | {"apicall": "DescribeTransitGateways", "input_obj": &ec2.DescribeTransitGatewaysInput{}}, 496 | {"apicall": "DescribeLaunchTemplateVersions", "input_obj": &ec2.DescribeLaunchTemplateVersionsInput{}}, 497 | {"apicall": "DescribeTags", "input_obj": &ec2.DescribeTagsInput{}}, 498 | {"apicall": "DescribeDhcpOptions", "input_obj": &ec2.DescribeDhcpOptionsInput{}}, 499 | {"apicall": "DescribeLaunchTemplates", "input_obj": &ec2.DescribeLaunchTemplatesInput{}}, 500 | {"apicall": "DescribeVolumeStatus", "input_obj": &ec2.DescribeVolumeStatusInput{}}, 501 | {"apicall": "DescribePlacementGroups", "input_obj": &ec2.DescribePlacementGroupsInput{}}, 502 | {"apicall": "DescribeAggregateIdFormat", "input_obj": &ec2.DescribeAggregateIdFormatInput{}}, 503 | {"apicall": "DescribeTransitGatewayRouteTables", "input_obj": &ec2.DescribeTransitGatewayRouteTablesInput{}}, 504 | {"apicall": "DescribeInstanceStatus", "input_obj": &ec2.DescribeInstanceStatusInput{}}, 505 | {"apicall": "DescribeCustomerGateways", "input_obj": &ec2.DescribeCustomerGatewaysInput{}}, 506 | {"apicall": "DescribeInternetGateways", "input_obj": &ec2.DescribeInternetGatewaysInput{}}, 507 | {"apicall": "DescribeHostReservationOfferings", "input_obj": &ec2.DescribeHostReservationOfferingsInput{}}, 508 | {"apicall": "DescribeBundleTasks", "input_obj": &ec2.DescribeBundleTasksInput{}}, 509 | {"apicall": "DescribeVolumesModifications", "input_obj": &ec2.DescribeVolumesModificationsInput{}}, 510 | {"apicall": "DescribeExportTasks", "input_obj": &ec2.DescribeExportTasksInput{}}, 511 | {"apicall": "DescribeVolumes", "input_obj": &ec2.DescribeVolumesInput{}}, 512 | {"apicall": "DescribeFlowLogs", "input_obj": &ec2.DescribeFlowLogsInput{}}, 513 | {"apicall": "DescribeSpotInstanceRequests", "input_obj": &ec2.DescribeSpotInstanceRequestsInput{}}, 514 | {"apicall": "DescribeVpcEndpointServices", "input_obj": &ec2.DescribeVpcEndpointServicesInput{}}, 515 | {"apicall": "DescribeTransitGatewayVpcAttachments", "input_obj": &ec2.DescribeTransitGatewayVpcAttachmentsInput{}}, 516 | {"apicall": "DescribeFpgaImages", "input_obj": &ec2.DescribeFpgaImagesInput{}}, 517 | {"apicall": "DescribeCapacityReservations", "input_obj": &ec2.DescribeCapacityReservationsInput{}}, 518 | {"apicall": "DescribeVpcClassicLinkDnsSupport", "input_obj": &ec2.DescribeVpcClassicLinkDnsSupportInput{}}, 519 | {"apicall": "DescribeReservedInstancesListings", "input_obj": &ec2.DescribeReservedInstancesListingsInput{}}, 520 | {"apicall": "DescribeVpcEndpointConnectionNotifications", "input_obj": &ec2.DescribeVpcEndpointConnectionNotificationsInput{}}, 521 | {"apicall": "DescribeAccountAttributes", "input_obj": &ec2.DescribeAccountAttributesInput{}}, 522 | }} 523 | 524 | ecr_svc := &servicemaster.ServiceMaster{ 525 | Svc: ecr.NewFromConfig(cfg), 526 | SvcName: "ecr", 527 | ApiCalls: []map[string]interface{}{ 528 | {"apicall": "DescribeRepositories", "input_obj": &ecr.DescribeRepositoriesInput{}}, 529 | {"apicall": "GetAuthorizationToken", "input_obj": &ecr.GetAuthorizationTokenInput{}}, 530 | }} 531 | 532 | ecs_svc := &servicemaster.ServiceMaster{ 533 | Svc: ecs.NewFromConfig(cfg), 534 | SvcName: "ecs", 535 | ApiCalls: []map[string]interface{}{ 536 | {"apicall": "ListServices", "input_obj": &ecs.ListServicesInput{}}, 537 | {"apicall": "DescribeClusters", "input_obj": &ecs.DescribeClustersInput{}}, 538 | {"apicall": "ListClusters", "input_obj": &ecs.ListClustersInput{}}, 539 | {"apicall": "ListTasks", "input_obj": &ecs.ListTasksInput{}}, 540 | {"apicall": "ListTaskDefinitions", "input_obj": &ecs.ListTaskDefinitionsInput{}}, 541 | {"apicall": "ListContainerInstances", "input_obj": &ecs.ListContainerInstancesInput{}}, 542 | {"apicall": "ListAccountSettings", "input_obj": &ecs.ListAccountSettingsInput{}}, 543 | {"apicall": "ListTaskDefinitionFamilies", "input_obj": &ecs.ListTaskDefinitionFamiliesInput{}}, 544 | }} 545 | 546 | eks_svc := &servicemaster.ServiceMaster{ 547 | Svc: eks.NewFromConfig(cfg), 548 | SvcName: "eks", 549 | ApiCalls: []map[string]interface{}{ 550 | {"apicall": "ListClusters", "input_obj": &eks.ListClustersInput{}}, 551 | }} 552 | 553 | elasticache_svc := &servicemaster.ServiceMaster{ 554 | Svc: elasticache.NewFromConfig(cfg), 555 | SvcName: "elasticache", 556 | ApiCalls: []map[string]interface{}{ 557 | {"apicall": "DescribeReservedCacheNodes", "input_obj": &elasticache.DescribeReservedCacheNodesInput{}}, 558 | {"apicall": "DescribeReservedCacheNodesOfferings", "input_obj": &elasticache.DescribeReservedCacheNodesOfferingsInput{}}, 559 | {"apicall": "DescribeCacheSubnetGroups", "input_obj": &elasticache.DescribeCacheSubnetGroupsInput{}}, 560 | {"apicall": "DescribeCacheEngineVersions", "input_obj": &elasticache.DescribeCacheEngineVersionsInput{}}, 561 | {"apicall": "ListAllowedNodeTypeModifications", "input_obj": &elasticache.ListAllowedNodeTypeModificationsInput{}}, 562 | {"apicall": "DescribeCacheSecurityGroups", "input_obj": &elasticache.DescribeCacheSecurityGroupsInput{}}, 563 | {"apicall": "DescribeCacheParameterGroups", "input_obj": &elasticache.DescribeCacheParameterGroupsInput{}}, 564 | {"apicall": "DescribeReplicationGroups", "input_obj": &elasticache.DescribeReplicationGroupsInput{}}, 565 | {"apicall": "DescribeSnapshots", "input_obj": &elasticache.DescribeSnapshotsInput{}}, 566 | {"apicall": "DescribeCacheClusters", "input_obj": &elasticache.DescribeCacheClustersInput{}}, 567 | }} 568 | 569 | elasticbeanstalk_svc := &servicemaster.ServiceMaster{ 570 | Svc: elasticbeanstalk.NewFromConfig(cfg), 571 | SvcName: "elasticbeanstalk", 572 | ApiCalls: []map[string]interface{}{ 573 | {"apicall": "DescribeEnvironmentManagedActionHistory", "input_obj": &elasticbeanstalk.DescribeEnvironmentManagedActionHistoryInput{}}, 574 | {"apicall": "DescribePlatformVersion", "input_obj": &elasticbeanstalk.DescribePlatformVersionInput{}}, 575 | {"apicall": "DescribeInstancesHealth", "input_obj": &elasticbeanstalk.DescribeInstancesHealthInput{}}, 576 | {"apicall": "DescribeEnvironmentHealth", "input_obj": &elasticbeanstalk.DescribeEnvironmentHealthInput{}}, 577 | {"apicall": "DescribeConfigurationOptions", "input_obj": &elasticbeanstalk.DescribeConfigurationOptionsInput{}}, 578 | {"apicall": "DescribeEnvironmentManagedActions", "input_obj": &elasticbeanstalk.DescribeEnvironmentManagedActionsInput{}}, 579 | {"apicall": "DescribeEnvironmentResources", "input_obj": &elasticbeanstalk.DescribeEnvironmentResourcesInput{}}, 580 | {"apicall": "DescribeAccountAttributes", "input_obj": &elasticbeanstalk.DescribeAccountAttributesInput{}}, 581 | }} 582 | 583 | elastictranscoder_svc := &servicemaster.ServiceMaster{ 584 | Svc: elastictranscoder.NewFromConfig(cfg), 585 | SvcName: "elastictranscoder", 586 | ApiCalls: []map[string]interface{}{ 587 | {"apicall": "ListPipelines", "input_obj": &elastictranscoder.ListPipelinesInput{}}, 588 | {"apicall": "ListPresets", "input_obj": &elastictranscoder.ListPresetsInput{}}, 589 | }} 590 | 591 | firehose_svc := &servicemaster.ServiceMaster{ 592 | Svc: firehose.NewFromConfig(cfg), 593 | SvcName: "firehose", 594 | ApiCalls: []map[string]interface{}{ 595 | {"apicall": "ListDeliveryStreams", "input_obj": &firehose.ListDeliveryStreamsInput{}}, 596 | }} 597 | 598 | fms_svc := &servicemaster.ServiceMaster{ 599 | Svc: fms.NewFromConfig(cfg), 600 | SvcName: "fms", 601 | ApiCalls: []map[string]interface{}{ 602 | {"apicall": "GetNotificationChannel", "input_obj": &fms.GetNotificationChannelInput{}}, 603 | {"apicall": "ListMemberAccounts", "input_obj": &fms.ListMemberAccountsInput{}}, 604 | {"apicall": "ListPolicies", "input_obj": &fms.ListPoliciesInput{}}, 605 | {"apicall": "GetAdminAccount", "input_obj": &fms.GetAdminAccountInput{}}, 606 | }} 607 | 608 | fsx_svc := &servicemaster.ServiceMaster{ 609 | Svc: fsx.NewFromConfig(cfg), 610 | SvcName: "fsx", 611 | ApiCalls: []map[string]interface{}{ 612 | {"apicall": "DescribeFileSystems", "input_obj": &fsx.DescribeFileSystemsInput{}}, 613 | {"apicall": "DescribeBackups", "input_obj": &fsx.DescribeBackupsInput{}}, 614 | }} 615 | 616 | gamelift_svc := &servicemaster.ServiceMaster{ 617 | Svc: gamelift.NewFromConfig(cfg), 618 | SvcName: "gamelift", 619 | ApiCalls: []map[string]interface{}{ 620 | {"apicall": "DescribePlayerSessions", "input_obj": &gamelift.DescribePlayerSessionsInput{}}, 621 | {"apicall": "DescribeGameSessionDetails", "input_obj": &gamelift.DescribeGameSessionDetailsInput{}}, 622 | {"apicall": "DescribeMatchmakingRuleSets", "input_obj": &gamelift.DescribeMatchmakingRuleSetsInput{}}, 623 | {"apicall": "DescribeFleetUtilization", "input_obj": &gamelift.DescribeFleetUtilizationInput{}}, 624 | {"apicall": "DescribeGameSessions", "input_obj": &gamelift.DescribeGameSessionsInput{}}, 625 | {"apicall": "DescribeVpcPeeringAuthorizations", "input_obj": &gamelift.DescribeVpcPeeringAuthorizationsInput{}}, 626 | {"apicall": "ListAliases", "input_obj": &gamelift.ListAliasesInput{}}, 627 | {"apicall": "DescribeVpcPeeringConnections", "input_obj": &gamelift.DescribeVpcPeeringConnectionsInput{}}, 628 | {"apicall": "DescribeMatchmakingConfigurations", "input_obj": &gamelift.DescribeMatchmakingConfigurationsInput{}}, 629 | {"apicall": "DescribeFleetAttributes", "input_obj": &gamelift.DescribeFleetAttributesInput{}}, 630 | {"apicall": "ListFleets", "input_obj": &gamelift.ListFleetsInput{}}, 631 | {"apicall": "ListBuilds", "input_obj": &gamelift.ListBuildsInput{}}, 632 | {"apicall": "DescribeGameSessionQueues", "input_obj": &gamelift.DescribeGameSessionQueuesInput{}}, 633 | {"apicall": "DescribeEC2InstanceLimits", "input_obj": &gamelift.DescribeEC2InstanceLimitsInput{}}, 634 | {"apicall": "DescribeFleetCapacity", "input_obj": &gamelift.DescribeFleetCapacityInput{}}, 635 | }} 636 | 637 | globalaccelerator_svc := &servicemaster.ServiceMaster{ 638 | Svc: globalaccelerator.NewFromConfig(cfg), 639 | SvcName: "globalaccelerator", 640 | ApiCalls: []map[string]interface{}{ 641 | {"apicall": "ListAccelerators", "input_obj": &globalaccelerator.ListAcceleratorsInput{}}, 642 | {"apicall": "DescribeAcceleratorAttributes", "input_obj": &globalaccelerator.DescribeAcceleratorAttributesInput{}}, 643 | }} 644 | 645 | glue_svc := &servicemaster.ServiceMaster{ 646 | Svc: glue.NewFromConfig(cfg), 647 | SvcName: "glue", 648 | ApiCalls: []map[string]interface{}{ 649 | {"apicall": "GetClassifiers", "input_obj": &glue.GetClassifiersInput{}}, 650 | {"apicall": "GetDatabases", "input_obj": &glue.GetDatabasesInput{}}, 651 | {"apicall": "GetCrawlers", "input_obj": &glue.GetCrawlersInput{}}, 652 | {"apicall": "ListDevEndpoints", "input_obj": &glue.ListDevEndpointsInput{}}, 653 | {"apicall": "ListTriggers", "input_obj": &glue.ListTriggersInput{}}, 654 | {"apicall": "GetTriggers", "input_obj": &glue.GetTriggersInput{}}, 655 | {"apicall": "ListCrawlers", "input_obj": &glue.ListCrawlersInput{}}, 656 | {"apicall": "ListJobs", "input_obj": &glue.ListJobsInput{}}, 657 | {"apicall": "GetDataCatalogEncryptionSettings", "input_obj": &glue.GetDataCatalogEncryptionSettingsInput{}}, 658 | {"apicall": "GetConnections", "input_obj": &glue.GetConnectionsInput{}}, 659 | {"apicall": "GetJobs", "input_obj": &glue.GetJobsInput{}}, 660 | {"apicall": "GetCrawlerMetrics", "input_obj": &glue.GetCrawlerMetricsInput{}}, 661 | {"apicall": "GetDataflowGraph", "input_obj": &glue.GetDataflowGraphInput{}}, 662 | {"apicall": "GetResourcePolicy", "input_obj": &glue.GetResourcePolicyInput{}}, 663 | {"apicall": "GetSecurityConfigurations", "input_obj": &glue.GetSecurityConfigurationsInput{}}, 664 | {"apicall": "GetCatalogImportStatus", "input_obj": &glue.GetCatalogImportStatusInput{}}, 665 | {"apicall": "GetDevEndpoints", "input_obj": &glue.GetDevEndpointsInput{}}, 666 | }} 667 | 668 | greengrass_svc := &servicemaster.ServiceMaster{ 669 | Svc: greengrass.NewFromConfig(cfg), 670 | SvcName: "greengrass", 671 | ApiCalls: []map[string]interface{}{ 672 | {"apicall": "ListDeviceDefinitions", "input_obj": &greengrass.ListDeviceDefinitionsInput{}}, 673 | {"apicall": "GetServiceRoleForAccount", "input_obj": &greengrass.GetServiceRoleForAccountInput{}}, 674 | {"apicall": "ListCoreDefinitions", "input_obj": &greengrass.ListCoreDefinitionsInput{}}, 675 | {"apicall": "ListLoggerDefinitions", "input_obj": &greengrass.ListLoggerDefinitionsInput{}}, 676 | {"apicall": "ListBulkDeployments", "input_obj": &greengrass.ListBulkDeploymentsInput{}}, 677 | {"apicall": "ListConnectorDefinitions", "input_obj": &greengrass.ListConnectorDefinitionsInput{}}, 678 | {"apicall": "ListGroups", "input_obj": &greengrass.ListGroupsInput{}}, 679 | {"apicall": "ListSubscriptionDefinitions", "input_obj": &greengrass.ListSubscriptionDefinitionsInput{}}, 680 | {"apicall": "ListFunctionDefinitions", "input_obj": &greengrass.ListFunctionDefinitionsInput{}}, 681 | {"apicall": "ListResourceDefinitions", "input_obj": &greengrass.ListResourceDefinitionsInput{}}, 682 | }} 683 | 684 | guardduty_svc := &servicemaster.ServiceMaster{ 685 | Svc: guardduty.NewFromConfig(cfg), 686 | SvcName: "guardduty", 687 | ApiCalls: []map[string]interface{}{ 688 | {"apicall": "ListInvitations", "input_obj": &guardduty.ListInvitationsInput{}}, 689 | {"apicall": "GetInvitationsCount", "input_obj": &guardduty.GetInvitationsCountInput{}}, 690 | {"apicall": "ListDetectors", "input_obj": &guardduty.ListDetectorsInput{}}, 691 | }} 692 | 693 | health_svc := &servicemaster.ServiceMaster{ 694 | Svc: health.NewFromConfig(cfg), 695 | SvcName: "health", 696 | ApiCalls: []map[string]interface{}{ 697 | {"apicall": "DescribeEntityAggregates", "input_obj": &health.DescribeEntityAggregatesInput{}}, 698 | {"apicall": "DescribeEventTypes", "input_obj": &health.DescribeEventTypesInput{}}, 699 | }} 700 | 701 | iam_svc := &servicemaster.ServiceMaster{ 702 | Svc: iam.NewFromConfig(cfg), 703 | SvcName: "iam", 704 | ApiCalls: []map[string]interface{}{ 705 | {"apicall": "ListRoles", "input_obj": &iam.ListRolesInput{}}, 706 | {"apicall": "ListAccessKeys", "input_obj": &iam.ListAccessKeysInput{}}, 707 | {"apicall": "ListGroups", "input_obj": &iam.ListGroupsInput{}}, 708 | {"apicall": "ListOpenIDConnectProviders", "input_obj": &iam.ListOpenIDConnectProvidersInput{}}, 709 | {"apicall": "GetUser", "input_obj": &iam.GetUserInput{}}, 710 | {"apicall": "ListSAMLProviders", "input_obj": &iam.ListSAMLProvidersInput{}}, 711 | {"apicall": "ListAccountAliases", "input_obj": &iam.ListAccountAliasesInput{}}, 712 | {"apicall": "GetAccountSummary", "input_obj": &iam.GetAccountSummaryInput{}}, 713 | {"apicall": "ListMFADevices", "input_obj": &iam.ListMFADevicesInput{}}, 714 | {"apicall": "ListServerCertificates", "input_obj": &iam.ListServerCertificatesInput{}}, 715 | {"apicall": "ListServiceSpecificCredentials", "input_obj": &iam.ListServiceSpecificCredentialsInput{}}, 716 | {"apicall": "GetAccountAuthorizationDetails", "input_obj": &iam.GetAccountAuthorizationDetailsInput{}}, 717 | {"apicall": "ListSSHPublicKeys", "input_obj": &iam.ListSSHPublicKeysInput{}}, 718 | {"apicall": "ListSigningCertificates", "input_obj": &iam.ListSigningCertificatesInput{}}, 719 | {"apicall": "ListPolicies", "input_obj": &iam.ListPoliciesInput{}}, 720 | {"apicall": "ListVirtualMFADevices", "input_obj": &iam.ListVirtualMFADevicesInput{}}, 721 | {"apicall": "ListInstanceProfiles", "input_obj": &iam.ListInstanceProfilesInput{}}, 722 | {"apicall": "ListUsers", "input_obj": &iam.ListUsersInput{}}, 723 | {"apicall": "GetCredentialReport", "input_obj": &iam.GetCredentialReportInput{}}, 724 | {"apicall": "GetAccountPasswordPolicy", "input_obj": &iam.GetAccountPasswordPolicyInput{}}, 725 | }} 726 | 727 | inspector_svc := &servicemaster.ServiceMaster{ 728 | Svc: inspector.NewFromConfig(cfg), 729 | SvcName: "inspector", 730 | ApiCalls: []map[string]interface{}{ 731 | {"apicall": "ListEventSubscriptions", "input_obj": &inspector.ListEventSubscriptionsInput{}}, 732 | {"apicall": "DescribeCrossAccountAccessRole", "input_obj": &inspector.DescribeCrossAccountAccessRoleInput{}}, 733 | {"apicall": "ListAssessmentTemplates", "input_obj": &inspector.ListAssessmentTemplatesInput{}}, 734 | {"apicall": "ListRulesPackages", "input_obj": &inspector.ListRulesPackagesInput{}}, 735 | {"apicall": "ListAssessmentRuns", "input_obj": &inspector.ListAssessmentRunsInput{}}, 736 | {"apicall": "ListFindings", "input_obj": &inspector.ListFindingsInput{}}, 737 | {"apicall": "ListAssessmentTargets", "input_obj": &inspector.ListAssessmentTargetsInput{}}, 738 | }} 739 | 740 | iot_svc := &servicemaster.ServiceMaster{ 741 | Svc: iot.NewFromConfig(cfg), 742 | SvcName: "iot", 743 | ApiCalls: []map[string]interface{}{ 744 | {"apicall": "ListCertificates", "input_obj": &iot.ListCertificatesInput{}}, 745 | {"apicall": "ListStreams", "input_obj": &iot.ListStreamsInput{}}, 746 | {"apicall": "DescribeEventConfigurations", "input_obj": &iot.DescribeEventConfigurationsInput{}}, 747 | {"apicall": "ListRoleAliases", "input_obj": &iot.ListRoleAliasesInput{}}, 748 | {"apicall": "ListOutgoingCertificates", "input_obj": &iot.ListOutgoingCertificatesInput{}}, 749 | {"apicall": "ListV2LoggingLevels", "input_obj": &iot.ListV2LoggingLevelsInput{}}, 750 | {"apicall": "DescribeDefaultAuthorizer", "input_obj": &iot.DescribeDefaultAuthorizerInput{}}, 751 | {"apicall": "ListThings", "input_obj": &iot.ListThingsInput{}}, 752 | {"apicall": "GetLoggingOptions", "input_obj": &iot.GetLoggingOptionsInput{}}, 753 | {"apicall": "DescribeEndpoint", "input_obj": &iot.DescribeEndpointInput{}}, 754 | {"apicall": "ListCACertificates", "input_obj": &iot.ListCACertificatesInput{}}, 755 | {"apicall": "GetIndexingConfiguration", "input_obj": &iot.GetIndexingConfigurationInput{}}, 756 | {"apicall": "ListJobs", "input_obj": &iot.ListJobsInput{}}, 757 | {"apicall": "ListActiveViolations", "input_obj": &iot.ListActiveViolationsInput{}}, 758 | {"apicall": "ListAuditFindings", "input_obj": &iot.ListAuditFindingsInput{}}, 759 | {"apicall": "ListIndices", "input_obj": &iot.ListIndicesInput{}}, 760 | {"apicall": "ListThingTypes", "input_obj": &iot.ListThingTypesInput{}}, 761 | {"apicall": "GetEffectivePolicies", "input_obj": &iot.GetEffectivePoliciesInput{}}, 762 | {"apicall": "DescribeAccountAuditConfiguration", "input_obj": &iot.DescribeAccountAuditConfigurationInput{}}, 763 | {"apicall": "ListOTAUpdates", "input_obj": &iot.ListOTAUpdatesInput{}}, 764 | {"apicall": "ListBillingGroups", "input_obj": &iot.ListBillingGroupsInput{}}, 765 | {"apicall": "ListAuthorizers", "input_obj": &iot.ListAuthorizersInput{}}, 766 | {"apicall": "ListThingGroups", "input_obj": &iot.ListThingGroupsInput{}}, 767 | {"apicall": "GetRegistrationCode", "input_obj": &iot.GetRegistrationCodeInput{}}, 768 | {"apicall": "ListThingRegistrationTasks", "input_obj": &iot.ListThingRegistrationTasksInput{}}, 769 | {"apicall": "ListScheduledAudits", "input_obj": &iot.ListScheduledAuditsInput{}}, 770 | {"apicall": "GetV2LoggingOptions", "input_obj": &iot.GetV2LoggingOptionsInput{}}, 771 | {"apicall": "ListPolicies", "input_obj": &iot.ListPoliciesInput{}}, 772 | {"apicall": "ListTopicRules", "input_obj": &iot.ListTopicRulesInput{}}, 773 | {"apicall": "ListSecurityProfiles", "input_obj": &iot.ListSecurityProfilesInput{}}, 774 | }} 775 | 776 | iotanalytics_svc := &servicemaster.ServiceMaster{ 777 | Svc: iotanalytics.NewFromConfig(cfg), 778 | SvcName: "iotanalytics", 779 | ApiCalls: []map[string]interface{}{ 780 | {"apicall": "DescribeLoggingOptions", "input_obj": &iotanalytics.DescribeLoggingOptionsInput{}}, 781 | {"apicall": "ListDatasets", "input_obj": &iotanalytics.ListDatasetsInput{}}, 782 | {"apicall": "ListChannels", "input_obj": &iotanalytics.ListChannelsInput{}}, 783 | {"apicall": "ListPipelines", "input_obj": &iotanalytics.ListPipelinesInput{}}, 784 | {"apicall": "ListDatastores", "input_obj": &iotanalytics.ListDatastoresInput{}}, 785 | }} 786 | 787 | kafka_svc := &servicemaster.ServiceMaster{ 788 | Svc: kafka.NewFromConfig(cfg), 789 | SvcName: "kafka", 790 | ApiCalls: []map[string]interface{}{ 791 | {"apicall": "ListClusters", "input_obj": &kafka.ListClustersInput{}}, 792 | }} 793 | 794 | kinesis_svc := &servicemaster.ServiceMaster{ 795 | Svc: kinesis.NewFromConfig(cfg), 796 | SvcName: "kinesis", 797 | ApiCalls: []map[string]interface{}{ 798 | {"apicall": "DescribeStreamConsumer", "input_obj": &kinesis.DescribeStreamConsumerInput{}}, 799 | {"apicall": "ListStreams", "input_obj": &kinesis.ListStreamsInput{}}, 800 | {"apicall": "ListShards", "input_obj": &kinesis.ListShardsInput{}}, 801 | {"apicall": "DescribeLimits", "input_obj": &kinesis.DescribeLimitsInput{}}, 802 | }} 803 | 804 | kinesisanalytics_svc := &servicemaster.ServiceMaster{ 805 | Svc: kinesisanalytics.NewFromConfig(cfg), 806 | SvcName: "kinesisanalytics", 807 | ApiCalls: []map[string]interface{}{ 808 | {"apicall": "ListApplications", "input_obj": &kinesisanalytics.ListApplicationsInput{}}, 809 | }} 810 | 811 | kinesisvideo_svc := &servicemaster.ServiceMaster{ 812 | Svc: kinesisvideo.NewFromConfig(cfg), 813 | SvcName: "kinesisvideo", 814 | ApiCalls: []map[string]interface{}{ 815 | {"apicall": "ListStreams", "input_obj": &kinesisvideo.ListStreamsInput{}}, 816 | {"apicall": "ListTagsForStream", "input_obj": &kinesisvideo.ListTagsForStreamInput{}}, 817 | {"apicall": "DescribeStream", "input_obj": &kinesisvideo.DescribeStreamInput{}}, 818 | }} 819 | 820 | kms_svc := &servicemaster.ServiceMaster{ 821 | Svc: kms.NewFromConfig(cfg), 822 | SvcName: "kms", 823 | ApiCalls: []map[string]interface{}{ 824 | {"apicall": "ListKeys", "input_obj": &kms.ListKeysInput{}}, 825 | {"apicall": "ListAliases", "input_obj": &kms.ListAliasesInput{}}, 826 | {"apicall": "DescribeCustomKeyStores", "input_obj": &kms.DescribeCustomKeyStoresInput{}}, 827 | }} 828 | 829 | lambda_svc := &servicemaster.ServiceMaster{ 830 | Svc: lambda.NewFromConfig(cfg), 831 | SvcName: "lambda", 832 | ApiCalls: []map[string]interface{}{ 833 | {"apicall": "ListLayers", "input_obj": &lambda.ListLayersInput{}}, 834 | {"apicall": "ListEventSourceMappings", "input_obj": &lambda.ListEventSourceMappingsInput{}}, 835 | {"apicall": "GetAccountSettings", "input_obj": &lambda.GetAccountSettingsInput{}}, 836 | {"apicall": "ListFunctions", "input_obj": &lambda.ListFunctionsInput{}}, 837 | }} 838 | 839 | lightsail_svc := &servicemaster.ServiceMaster{ 840 | Svc: lightsail.NewFromConfig(cfg), 841 | SvcName: "lightsail", 842 | ApiCalls: []map[string]interface{}{ 843 | {"apicall": "GetInstanceSnapshots", "input_obj": &lightsail.GetInstanceSnapshotsInput{}}, 844 | {"apicall": "GetRelationalDatabaseSnapshots", "input_obj": &lightsail.GetRelationalDatabaseSnapshotsInput{}}, 845 | {"apicall": "GetActiveNames", "input_obj": &lightsail.GetActiveNamesInput{}}, 846 | {"apicall": "GetCloudFormationStackRecords", "input_obj": &lightsail.GetCloudFormationStackRecordsInput{}}, 847 | {"apicall": "GetRelationalDatabases", "input_obj": &lightsail.GetRelationalDatabasesInput{}}, 848 | {"apicall": "GetKeyPairs", "input_obj": &lightsail.GetKeyPairsInput{}}, 849 | {"apicall": "GetLoadBalancers", "input_obj": &lightsail.GetLoadBalancersInput{}}, 850 | {"apicall": "GetInstances", "input_obj": &lightsail.GetInstancesInput{}}, 851 | {"apicall": "GetRegions", "input_obj": &lightsail.GetRegionsInput{}}, 852 | {"apicall": "GetExportSnapshotRecords", "input_obj": &lightsail.GetExportSnapshotRecordsInput{}}, 853 | {"apicall": "GetRelationalDatabaseBlueprints", "input_obj": &lightsail.GetRelationalDatabaseBlueprintsInput{}}, 854 | {"apicall": "GetRelationalDatabaseBundles", "input_obj": &lightsail.GetRelationalDatabaseBundlesInput{}}, 855 | {"apicall": "GetOperations", "input_obj": &lightsail.GetOperationsInput{}}, 856 | {"apicall": "GetBundles", "input_obj": &lightsail.GetBundlesInput{}}, 857 | {"apicall": "GetBlueprints", "input_obj": &lightsail.GetBlueprintsInput{}}, 858 | {"apicall": "GetDisks", "input_obj": &lightsail.GetDisksInput{}}, 859 | {"apicall": "GetDomains", "input_obj": &lightsail.GetDomainsInput{}}, 860 | {"apicall": "GetStaticIps", "input_obj": &lightsail.GetStaticIpsInput{}}, 861 | {"apicall": "GetDiskSnapshots", "input_obj": &lightsail.GetDiskSnapshotsInput{}}, 862 | }} 863 | 864 | machinelearning_svc := &servicemaster.ServiceMaster{ 865 | Svc: machinelearning.NewFromConfig(cfg), 866 | SvcName: "machinelearning", 867 | ApiCalls: []map[string]interface{}{ 868 | {"apicall": "DescribeMLModels", "input_obj": &machinelearning.DescribeMLModelsInput{}}, 869 | {"apicall": "DescribeDataSources", "input_obj": &machinelearning.DescribeDataSourcesInput{}}, 870 | {"apicall": "DescribeEvaluations", "input_obj": &machinelearning.DescribeEvaluationsInput{}}, 871 | {"apicall": "DescribeBatchPredictions", "input_obj": &machinelearning.DescribeBatchPredictionsInput{}}, 872 | }} 873 | 874 | macie_svc := &servicemaster.ServiceMaster{ 875 | Svc: macie.NewFromConfig(cfg), 876 | SvcName: "macie", 877 | ApiCalls: []map[string]interface{}{ 878 | {"apicall": "ListS3Resources", "input_obj": &macie.ListS3ResourcesInput{}}, 879 | {"apicall": "ListMemberAccounts", "input_obj": &macie.ListMemberAccountsInput{}}, 880 | }} 881 | 882 | mediaconnect_svc := &servicemaster.ServiceMaster{ 883 | Svc: mediaconnect.NewFromConfig(cfg), 884 | SvcName: "mediaconnect", 885 | ApiCalls: []map[string]interface{}{ 886 | {"apicall": "ListEntitlements", "input_obj": &mediaconnect.ListEntitlementsInput{}}, 887 | {"apicall": "ListFlows", "input_obj": &mediaconnect.ListFlowsInput{}}, 888 | }} 889 | 890 | mediaconvert_svc := &servicemaster.ServiceMaster{ 891 | Svc: mediaconvert.NewFromConfig(cfg), 892 | SvcName: "mediaconvert", 893 | ApiCalls: []map[string]interface{}{ 894 | {"apicall": "ListPresets", "input_obj": &mediaconvert.ListPresetsInput{}}, 895 | {"apicall": "ListJobs", "input_obj": &mediaconvert.ListJobsInput{}}, 896 | {"apicall": "ListJobTemplates", "input_obj": &mediaconvert.ListJobTemplatesInput{}}, 897 | {"apicall": "ListQueues", "input_obj": &mediaconvert.ListQueuesInput{}}, 898 | {"apicall": "DescribeEndpoints", "input_obj": &mediaconvert.DescribeEndpointsInput{}}, 899 | }} 900 | 901 | medialive_svc := &servicemaster.ServiceMaster{ 902 | Svc: medialive.NewFromConfig(cfg), 903 | SvcName: "medialive", 904 | ApiCalls: []map[string]interface{}{ 905 | {"apicall": "ListInputs", "input_obj": &medialive.ListInputsInput{}}, 906 | {"apicall": "ListChannels", "input_obj": &medialive.ListChannelsInput{}}, 907 | {"apicall": "ListOfferings", "input_obj": &medialive.ListOfferingsInput{}}, 908 | {"apicall": "ListReservations", "input_obj": &medialive.ListReservationsInput{}}, 909 | {"apicall": "ListInputSecurityGroups", "input_obj": &medialive.ListInputSecurityGroupsInput{}}, 910 | }} 911 | 912 | mediapackage_svc := &servicemaster.ServiceMaster{ 913 | Svc: mediapackage.NewFromConfig(cfg), 914 | SvcName: "mediapackage", 915 | ApiCalls: []map[string]interface{}{ 916 | {"apicall": "ListChannels", "input_obj": &mediapackage.ListChannelsInput{}}, 917 | {"apicall": "ListOriginEndpoints", "input_obj": &mediapackage.ListOriginEndpointsInput{}}, 918 | }} 919 | 920 | mediastore_svc := &servicemaster.ServiceMaster{ 921 | Svc: mediastore.NewFromConfig(cfg), 922 | SvcName: "mediastore", 923 | ApiCalls: []map[string]interface{}{ 924 | {"apicall": "DescribeContainer", "input_obj": &mediastore.DescribeContainerInput{}}, 925 | {"apicall": "ListContainers", "input_obj": &mediastore.ListContainersInput{}}, 926 | }} 927 | 928 | mediatailor_svc := &servicemaster.ServiceMaster{ 929 | Svc: mediatailor.NewFromConfig(cfg), 930 | SvcName: "mediatailor", 931 | ApiCalls: []map[string]interface{}{ 932 | {"apicall": "ListPlaybackConfigurations", "input_obj": &mediatailor.ListPlaybackConfigurationsInput{}}, 933 | }} 934 | 935 | mobile_svc := &servicemaster.ServiceMaster{ 936 | Svc: mobile.NewFromConfig(cfg), 937 | SvcName: "mobile", 938 | ApiCalls: []map[string]interface{}{ 939 | {"apicall": "ListBundles", "input_obj": &mobile.ListBundlesInput{}}, 940 | {"apicall": "ListProjects", "input_obj": &mobile.ListProjectsInput{}}, 941 | }} 942 | 943 | mq_svc := &servicemaster.ServiceMaster{ 944 | Svc: mq.NewFromConfig(cfg), 945 | SvcName: "mq", 946 | ApiCalls: []map[string]interface{}{ 947 | {"apicall": "ListConfigurations", "input_obj": &mq.ListConfigurationsInput{}}, 948 | {"apicall": "ListBrokers", "input_obj": &mq.ListBrokersInput{}}, 949 | }} 950 | 951 | opsworks_svc := &servicemaster.ServiceMaster{ 952 | Svc: opsworks.NewFromConfig(cfg), 953 | SvcName: "opsworks", 954 | ApiCalls: []map[string]interface{}{ 955 | {"apicall": "DescribeMyUserProfile", "input_obj": &opsworks.DescribeMyUserProfileInput{}}, 956 | {"apicall": "DescribeRaidArrays", "input_obj": &opsworks.DescribeRaidArraysInput{}}, 957 | {"apicall": "DescribeUserProfiles", "input_obj": &opsworks.DescribeUserProfilesInput{}}, 958 | {"apicall": "DescribeOperatingSystems", "input_obj": &opsworks.DescribeOperatingSystemsInput{}}, 959 | {"apicall": "DescribeElasticLoadBalancers", "input_obj": &opsworks.DescribeElasticLoadBalancersInput{}}, 960 | {"apicall": "DescribePermissions", "input_obj": &opsworks.DescribePermissionsInput{}}, 961 | {"apicall": "DescribeVolumes", "input_obj": &opsworks.DescribeVolumesInput{}}, 962 | {"apicall": "DescribeDeployments", "input_obj": &opsworks.DescribeDeploymentsInput{}}, 963 | {"apicall": "DescribeEcsClusters", "input_obj": &opsworks.DescribeEcsClustersInput{}}, 964 | {"apicall": "DescribeElasticIps", "input_obj": &opsworks.DescribeElasticIpsInput{}}, 965 | {"apicall": "DescribeAgentVersions", "input_obj": &opsworks.DescribeAgentVersionsInput{}}, 966 | {"apicall": "DescribeLayers", "input_obj": &opsworks.DescribeLayersInput{}}, 967 | {"apicall": "DescribeApps", "input_obj": &opsworks.DescribeAppsInput{}}, 968 | {"apicall": "DescribeCommands", "input_obj": &opsworks.DescribeCommandsInput{}}, 969 | {"apicall": "DescribeInstances", "input_obj": &opsworks.DescribeInstancesInput{}}, 970 | }} 971 | 972 | organizations_svc := &servicemaster.ServiceMaster{ 973 | Svc: organizations.NewFromConfig(cfg), 974 | SvcName: "organizations", 975 | ApiCalls: []map[string]interface{}{ 976 | {"apicall": "ListAWSServiceAccessForOrganization", "input_obj": &organizations.ListAWSServiceAccessForOrganizationInput{}}, 977 | {"apicall": "ListRoots", "input_obj": &organizations.ListRootsInput{}}, 978 | {"apicall": "ListAccounts", "input_obj": &organizations.ListAccountsInput{}}, 979 | {"apicall": "ListCreateAccountStatus", "input_obj": &organizations.ListCreateAccountStatusInput{}}, 980 | {"apicall": "DescribeOrganization", "input_obj": &organizations.DescribeOrganizationInput{}}, 981 | {"apicall": "ListHandshakesForAccount", "input_obj": &organizations.ListHandshakesForAccountInput{}}, 982 | {"apicall": "ListHandshakesForOrganization", "input_obj": &organizations.ListHandshakesForOrganizationInput{}}, 983 | }} 984 | 985 | pinpoint_svc := &servicemaster.ServiceMaster{ 986 | Svc: pinpoint.NewFromConfig(cfg), 987 | SvcName: "pinpoint", 988 | ApiCalls: []map[string]interface{}{ 989 | {"apicall": "GetApps", "input_obj": &pinpoint.GetAppsInput{}}, 990 | }} 991 | 992 | polly_svc := &servicemaster.ServiceMaster{ 993 | Svc: polly.NewFromConfig(cfg), 994 | SvcName: "polly", 995 | ApiCalls: []map[string]interface{}{ 996 | {"apicall": "ListSpeechSynthesisTasks", "input_obj": &polly.ListSpeechSynthesisTasksInput{}}, 997 | {"apicall": "DescribeVoices", "input_obj": &polly.DescribeVoicesInput{}}, 998 | {"apicall": "ListLexicons", "input_obj": &polly.ListLexiconsInput{}}, 999 | }} 1000 | 1001 | pricing_svc := &servicemaster.ServiceMaster{ 1002 | Svc: pricing.NewFromConfig(cfg), 1003 | SvcName: "pricing", 1004 | ApiCalls: []map[string]interface{}{ 1005 | {"apicall": "DescribeServices", "input_obj": &pricing.DescribeServicesInput{}}, 1006 | }} 1007 | 1008 | ram_svc := &servicemaster.ServiceMaster{ 1009 | Svc: ram.NewFromConfig(cfg), 1010 | SvcName: "ram", 1011 | ApiCalls: []map[string]interface{}{ 1012 | {"apicall": "GetResourceShareInvitations", "input_obj": &ram.GetResourceShareInvitationsInput{}}, 1013 | }} 1014 | 1015 | rds_svc := &servicemaster.ServiceMaster{ 1016 | Svc: rds.NewFromConfig(cfg), 1017 | SvcName: "rds", 1018 | ApiCalls: []map[string]interface{}{ 1019 | {"apicall": "DescribeGlobalClusters", "input_obj": &rds.DescribeGlobalClustersInput{}}, 1020 | {"apicall": "DescribeDBClusterEndpoints", "input_obj": &rds.DescribeDBClusterEndpointsInput{}}, 1021 | {"apicall": "DescribeDBInstances", "input_obj": &rds.DescribeDBInstancesInput{}}, 1022 | {"apicall": "DescribeDBSecurityGroups", "input_obj": &rds.DescribeDBSecurityGroupsInput{}}, 1023 | {"apicall": "DescribePendingMaintenanceActions", "input_obj": &rds.DescribePendingMaintenanceActionsInput{}}, 1024 | {"apicall": "DescribeSourceRegions", "input_obj": &rds.DescribeSourceRegionsInput{}}, 1025 | {"apicall": "DescribeDBEngineVersions", "input_obj": &rds.DescribeDBEngineVersionsInput{}}, 1026 | {"apicall": "DescribeDBClusterSnapshots", "input_obj": &rds.DescribeDBClusterSnapshotsInput{}}, 1027 | {"apicall": "DescribeReservedDBInstances", "input_obj": &rds.DescribeReservedDBInstancesInput{}}, 1028 | {"apicall": "DescribeDBClusterParameterGroups", "input_obj": &rds.DescribeDBClusterParameterGroupsInput{}}, 1029 | {"apicall": "DescribeDBSubnetGroups", "input_obj": &rds.DescribeDBSubnetGroupsInput{}}, 1030 | {"apicall": "DescribeCertificates", "input_obj": &rds.DescribeCertificatesInput{}}, 1031 | {"apicall": "DescribeDBInstanceAutomatedBackups", "input_obj": &rds.DescribeDBInstanceAutomatedBackupsInput{}}, 1032 | {"apicall": "DescribeDBParameterGroups", "input_obj": &rds.DescribeDBParameterGroupsInput{}}, 1033 | {"apicall": "DescribeOptionGroups", "input_obj": &rds.DescribeOptionGroupsInput{}}, 1034 | {"apicall": "DescribeDBClusters", "input_obj": &rds.DescribeDBClustersInput{}}, 1035 | {"apicall": "DescribeReservedDBInstancesOfferings", "input_obj": &rds.DescribeReservedDBInstancesOfferingsInput{}}, 1036 | {"apicall": "DescribeEventCategories", "input_obj": &rds.DescribeEventCategoriesInput{}}, 1037 | {"apicall": "DescribeEventSubscriptions", "input_obj": &rds.DescribeEventSubscriptionsInput{}}, 1038 | {"apicall": "DescribeDBSnapshots", "input_obj": &rds.DescribeDBSnapshotsInput{}}, 1039 | {"apicall": "DescribeAccountAttributes", "input_obj": &rds.DescribeAccountAttributesInput{}}, 1040 | }} 1041 | 1042 | redshift_svc := &servicemaster.ServiceMaster{ 1043 | Svc: redshift.NewFromConfig(cfg), 1044 | SvcName: "redshift", 1045 | ApiCalls: []map[string]interface{}{ 1046 | {"apicall": "DescribeHsmClientCertificates", "input_obj": &redshift.DescribeHsmClientCertificatesInput{}}, 1047 | {"apicall": "DescribeClusterSubnetGroups", "input_obj": &redshift.DescribeClusterSubnetGroupsInput{}}, 1048 | {"apicall": "DescribeTableRestoreStatus", "input_obj": &redshift.DescribeTableRestoreStatusInput{}}, 1049 | {"apicall": "DescribeSnapshotSchedules", "input_obj": &redshift.DescribeSnapshotSchedulesInput{}}, 1050 | {"apicall": "DescribeClusterTracks", "input_obj": &redshift.DescribeClusterTracksInput{}}, 1051 | {"apicall": "DescribeClusterSecurityGroups", "input_obj": &redshift.DescribeClusterSecurityGroupsInput{}}, 1052 | {"apicall": "DescribeClusters", "input_obj": &redshift.DescribeClustersInput{}}, 1053 | {"apicall": "DescribeReservedNodeOfferings", "input_obj": &redshift.DescribeReservedNodeOfferingsInput{}}, 1054 | {"apicall": "DescribeOrderableClusterOptions", "input_obj": &redshift.DescribeOrderableClusterOptionsInput{}}, 1055 | {"apicall": "DescribeClusterDbRevisions", "input_obj": &redshift.DescribeClusterDbRevisionsInput{}}, 1056 | {"apicall": "DescribeClusterParameterGroups", "input_obj": &redshift.DescribeClusterParameterGroupsInput{}}, 1057 | {"apicall": "DescribeTags", "input_obj": &redshift.DescribeTagsInput{}}, 1058 | {"apicall": "DescribeSnapshotCopyGrants", "input_obj": &redshift.DescribeSnapshotCopyGrantsInput{}}, 1059 | {"apicall": "DescribeClusterVersions", "input_obj": &redshift.DescribeClusterVersionsInput{}}, 1060 | {"apicall": "DescribeEventCategories", "input_obj": &redshift.DescribeEventCategoriesInput{}}, 1061 | {"apicall": "DescribeHsmConfigurations", "input_obj": &redshift.DescribeHsmConfigurationsInput{}}, 1062 | {"apicall": "DescribeReservedNodes", "input_obj": &redshift.DescribeReservedNodesInput{}}, 1063 | {"apicall": "DescribeStorage", "input_obj": &redshift.DescribeStorageInput{}}, 1064 | {"apicall": "DescribeEventSubscriptions", "input_obj": &redshift.DescribeEventSubscriptionsInput{}}, 1065 | {"apicall": "DescribeAccountAttributes", "input_obj": &redshift.DescribeAccountAttributesInput{}}, 1066 | }} 1067 | 1068 | rekognition_svc := &servicemaster.ServiceMaster{ 1069 | Svc: rekognition.NewFromConfig(cfg), 1070 | SvcName: "rekognition", 1071 | ApiCalls: []map[string]interface{}{ 1072 | {"apicall": "ListStreamProcessors", "input_obj": &rekognition.ListStreamProcessorsInput{}}, 1073 | {"apicall": "ListCollections", "input_obj": &rekognition.ListCollectionsInput{}}, 1074 | }} 1075 | 1076 | robomaker_svc := &servicemaster.ServiceMaster{ 1077 | Svc: robomaker.NewFromConfig(cfg), 1078 | SvcName: "robomaker", 1079 | ApiCalls: []map[string]interface{}{ 1080 | {"apicall": "ListSimulationApplications", "input_obj": &robomaker.ListSimulationApplicationsInput{}}, 1081 | {"apicall": "ListSimulationJobs", "input_obj": &robomaker.ListSimulationJobsInput{}}, 1082 | {"apicall": "ListRobotApplications", "input_obj": &robomaker.ListRobotApplicationsInput{}}, 1083 | {"apicall": "ListRobots", "input_obj": &robomaker.ListRobotsInput{}}, 1084 | {"apicall": "ListFleets", "input_obj": &robomaker.ListFleetsInput{}}, 1085 | {"apicall": "ListDeploymentJobs", "input_obj": &robomaker.ListDeploymentJobsInput{}}, 1086 | }} 1087 | 1088 | route53_svc := &servicemaster.ServiceMaster{ 1089 | Svc: route53.NewFromConfig(cfg), 1090 | SvcName: "route53", 1091 | ApiCalls: []map[string]interface{}{ 1092 | {"apicall": "GetHealthCheckCount", "input_obj": &route53.GetHealthCheckCountInput{}}, 1093 | {"apicall": "GetTrafficPolicyInstanceCount", "input_obj": &route53.GetTrafficPolicyInstanceCountInput{}}, 1094 | {"apicall": "ListHealthChecks", "input_obj": &route53.ListHealthChecksInput{}}, 1095 | {"apicall": "ListHostedZonesByName", "input_obj": &route53.ListHostedZonesByNameInput{}}, 1096 | {"apicall": "ListTrafficPolicyInstances", "input_obj": &route53.ListTrafficPolicyInstancesInput{}}, 1097 | {"apicall": "ListHostedZones", "input_obj": &route53.ListHostedZonesInput{}}, 1098 | {"apicall": "ListQueryLoggingConfigs", "input_obj": &route53.ListQueryLoggingConfigsInput{}}, 1099 | {"apicall": "GetHostedZoneCount", "input_obj": &route53.GetHostedZoneCountInput{}}, 1100 | {"apicall": "ListTrafficPolicies", "input_obj": &route53.ListTrafficPoliciesInput{}}, 1101 | {"apicall": "ListReusableDelegationSets", "input_obj": &route53.ListReusableDelegationSetsInput{}}, 1102 | }} 1103 | 1104 | route53domains_svc := &servicemaster.ServiceMaster{ 1105 | Svc: route53domains.NewFromConfig(cfg), 1106 | SvcName: "route53domains", 1107 | ApiCalls: []map[string]interface{}{ 1108 | {"apicall": "ListOperations", "input_obj": &route53domains.ListOperationsInput{}}, 1109 | {"apicall": "GetContactReachabilityStatus", "input_obj": &route53domains.GetContactReachabilityStatusInput{}}, 1110 | {"apicall": "ListDomains", "input_obj": &route53domains.ListDomainsInput{}}, 1111 | }} 1112 | 1113 | route53resolver_svc := &servicemaster.ServiceMaster{ 1114 | Svc: route53resolver.NewFromConfig(cfg), 1115 | SvcName: "route53resolver", 1116 | ApiCalls: []map[string]interface{}{ 1117 | {"apicall": "ListResolverEndpoints", "input_obj": &route53resolver.ListResolverEndpointsInput{}}, 1118 | {"apicall": "ListResolverRules", "input_obj": &route53resolver.ListResolverRulesInput{}}, 1119 | {"apicall": "ListResolverRuleAssociations", "input_obj": &route53resolver.ListResolverRuleAssociationsInput{}}, 1120 | }} 1121 | 1122 | s3_svc := &servicemaster.ServiceMaster{ 1123 | Svc: s3.NewFromConfig(cfg), 1124 | SvcName: "s3", 1125 | ApiCalls: []map[string]interface{}{ 1126 | {"apicall": "ListBuckets", "input_obj": &s3.ListBucketsInput{}}, 1127 | }} 1128 | 1129 | sagemaker_svc := &servicemaster.ServiceMaster{ 1130 | Svc: sagemaker.NewFromConfig(cfg), 1131 | SvcName: "sagemaker", 1132 | ApiCalls: []map[string]interface{}{ 1133 | {"apicall": "ListWorkteams", "input_obj": &sagemaker.ListWorkteamsInput{}}, 1134 | {"apicall": "ListAlgorithms", "input_obj": &sagemaker.ListAlgorithmsInput{}}, 1135 | {"apicall": "ListNotebookInstanceLifecycleConfigs", "input_obj": &sagemaker.ListNotebookInstanceLifecycleConfigsInput{}}, 1136 | {"apicall": "ListCodeRepositories", "input_obj": &sagemaker.ListCodeRepositoriesInput{}}, 1137 | {"apicall": "ListLabelingJobs", "input_obj": &sagemaker.ListLabelingJobsInput{}}, 1138 | {"apicall": "ListEndpoints", "input_obj": &sagemaker.ListEndpointsInput{}}, 1139 | {"apicall": "ListEndpointConfigs", "input_obj": &sagemaker.ListEndpointConfigsInput{}}, 1140 | {"apicall": "ListSubscribedWorkteams", "input_obj": &sagemaker.ListSubscribedWorkteamsInput{}}, 1141 | {"apicall": "ListTransformJobs", "input_obj": &sagemaker.ListTransformJobsInput{}}, 1142 | {"apicall": "ListTrainingJobs", "input_obj": &sagemaker.ListTrainingJobsInput{}}, 1143 | {"apicall": "ListNotebookInstances", "input_obj": &sagemaker.ListNotebookInstancesInput{}}, 1144 | {"apicall": "ListModelPackages", "input_obj": &sagemaker.ListModelPackagesInput{}}, 1145 | {"apicall": "ListCompilationJobs", "input_obj": &sagemaker.ListCompilationJobsInput{}}, 1146 | {"apicall": "ListModels", "input_obj": &sagemaker.ListModelsInput{}}, 1147 | {"apicall": "ListHyperParameterTuningJobs", "input_obj": &sagemaker.ListHyperParameterTuningJobsInput{}}, 1148 | }} 1149 | 1150 | secretsmanager_svc := &servicemaster.ServiceMaster{ 1151 | Svc: secretsmanager.NewFromConfig(cfg), 1152 | SvcName: "secretsmanager", 1153 | ApiCalls: []map[string]interface{}{ 1154 | {"apicall": "GetRandomPassword", "input_obj": &secretsmanager.GetRandomPasswordInput{}}, 1155 | {"apicall": "ListSecrets", "input_obj": &secretsmanager.ListSecretsInput{}}, 1156 | }} 1157 | 1158 | securityhub_svc := &servicemaster.ServiceMaster{ 1159 | Svc: securityhub.NewFromConfig(cfg), 1160 | SvcName: "securityhub", 1161 | ApiCalls: []map[string]interface{}{ 1162 | {"apicall": "ListInvitations", "input_obj": &securityhub.ListInvitationsInput{}}, 1163 | {"apicall": "ListEnabledProductsForImport", "input_obj": &securityhub.ListEnabledProductsForImportInput{}}, 1164 | {"apicall": "GetFindings", "input_obj": &securityhub.GetFindingsInput{}}, 1165 | {"apicall": "GetInvitationsCount", "input_obj": &securityhub.GetInvitationsCountInput{}}, 1166 | {"apicall": "GetEnabledStandards", "input_obj": &securityhub.GetEnabledStandardsInput{}}, 1167 | {"apicall": "GetInsights", "input_obj": &securityhub.GetInsightsInput{}}, 1168 | {"apicall": "GetMasterAccount", "input_obj": &securityhub.GetMasterAccountInput{}}, 1169 | {"apicall": "ListMembers", "input_obj": &securityhub.ListMembersInput{}}, 1170 | }} 1171 | 1172 | servicecatalog_svc := &servicemaster.ServiceMaster{ 1173 | Svc: servicecatalog.NewFromConfig(cfg), 1174 | SvcName: "servicecatalog", 1175 | ApiCalls: []map[string]interface{}{ 1176 | {"apicall": "ListTagOptions", "input_obj": &servicecatalog.ListTagOptionsInput{}}, 1177 | {"apicall": "ListRecordHistory", "input_obj": &servicecatalog.ListRecordHistoryInput{}}, 1178 | {"apicall": "ListProvisionedProductPlans", "input_obj": &servicecatalog.ListProvisionedProductPlansInput{}}, 1179 | {"apicall": "ListServiceActions", "input_obj": &servicecatalog.ListServiceActionsInput{}}, 1180 | {"apicall": "ListPortfolios", "input_obj": &servicecatalog.ListPortfoliosInput{}}, 1181 | {"apicall": "ListAcceptedPortfolioShares", "input_obj": &servicecatalog.ListAcceptedPortfolioSharesInput{}}, 1182 | {"apicall": "GetAWSOrganizationsAccessStatus", "input_obj": &servicecatalog.GetAWSOrganizationsAccessStatusInput{}}, 1183 | }} 1184 | 1185 | shield_svc := &servicemaster.ServiceMaster{ 1186 | Svc: shield.NewFromConfig(cfg), 1187 | SvcName: "shield", 1188 | ApiCalls: []map[string]interface{}{ 1189 | {"apicall": "DescribeEmergencyContactSettings", "input_obj": &shield.DescribeEmergencyContactSettingsInput{}}, 1190 | {"apicall": "DescribeDRTAccess", "input_obj": &shield.DescribeDRTAccessInput{}}, 1191 | {"apicall": "ListAttacks", "input_obj": &shield.ListAttacksInput{}}, 1192 | {"apicall": "ListProtections", "input_obj": &shield.ListProtectionsInput{}}, 1193 | {"apicall": "GetSubscriptionState", "input_obj": &shield.GetSubscriptionStateInput{}}, 1194 | {"apicall": "DescribeProtection", "input_obj": &shield.DescribeProtectionInput{}}, 1195 | {"apicall": "DescribeSubscription", "input_obj": &shield.DescribeSubscriptionInput{}}, 1196 | }} 1197 | 1198 | signer_svc := &servicemaster.ServiceMaster{ 1199 | Svc: signer.NewFromConfig(cfg), 1200 | SvcName: "signer", 1201 | ApiCalls: []map[string]interface{}{ 1202 | {"apicall": "ListSigningPlatforms", "input_obj": &signer.ListSigningPlatformsInput{}}, 1203 | {"apicall": "ListSigningProfiles", "input_obj": &signer.ListSigningProfilesInput{}}, 1204 | {"apicall": "ListSigningJobs", "input_obj": &signer.ListSigningJobsInput{}}, 1205 | }} 1206 | 1207 | sms_svc := &servicemaster.ServiceMaster{ 1208 | Svc: sms.NewFromConfig(cfg), 1209 | SvcName: "sms", 1210 | ApiCalls: []map[string]interface{}{ 1211 | {"apicall": "GetAppReplicationConfiguration", "input_obj": &sms.GetAppReplicationConfigurationInput{}}, 1212 | {"apicall": "GetAppLaunchConfiguration", "input_obj": &sms.GetAppLaunchConfigurationInput{}}, 1213 | {"apicall": "ListApps", "input_obj": &sms.ListAppsInput{}}, 1214 | {"apicall": "GetReplicationJobs", "input_obj": &sms.GetReplicationJobsInput{}}, 1215 | {"apicall": "GetApp", "input_obj": &sms.GetAppInput{}}, 1216 | {"apicall": "GetServers", "input_obj": &sms.GetServersInput{}}, 1217 | {"apicall": "GetConnectors", "input_obj": &sms.GetConnectorsInput{}}, 1218 | }} 1219 | 1220 | snowball_svc := &servicemaster.ServiceMaster{ 1221 | Svc: snowball.NewFromConfig(cfg), 1222 | SvcName: "snowball", 1223 | ApiCalls: []map[string]interface{}{ 1224 | {"apicall": "ListCompatibleImages", "input_obj": &snowball.ListCompatibleImagesInput{}}, 1225 | {"apicall": "ListClusters", "input_obj": &snowball.ListClustersInput{}}, 1226 | {"apicall": "ListJobs", "input_obj": &snowball.ListJobsInput{}}, 1227 | {"apicall": "GetSnowballUsage", "input_obj": &snowball.GetSnowballUsageInput{}}, 1228 | {"apicall": "DescribeAddresses", "input_obj": &snowball.DescribeAddressesInput{}}, 1229 | }} 1230 | 1231 | sns_svc := &servicemaster.ServiceMaster{ 1232 | Svc: sns.NewFromConfig(cfg), 1233 | SvcName: "sns", 1234 | ApiCalls: []map[string]interface{}{ 1235 | {"apicall": "GetSMSAttributes", "input_obj": &sns.GetSMSAttributesInput{}}, 1236 | {"apicall": "ListPhoneNumbersOptedOut", "input_obj": &sns.ListPhoneNumbersOptedOutInput{}}, 1237 | {"apicall": "ListTopics", "input_obj": &sns.ListTopicsInput{}}, 1238 | {"apicall": "ListPlatformApplications", "input_obj": &sns.ListPlatformApplicationsInput{}}, 1239 | {"apicall": "ListSubscriptions", "input_obj": &sns.ListSubscriptionsInput{}}, 1240 | }} 1241 | 1242 | sqs_svc := &servicemaster.ServiceMaster{ 1243 | Svc: sqs.NewFromConfig(cfg), 1244 | SvcName: "sqs", 1245 | ApiCalls: []map[string]interface{}{ 1246 | {"apicall": "ListQueues", "input_obj": &sqs.ListQueuesInput{}}, 1247 | }} 1248 | 1249 | ssm_svc := &servicemaster.ServiceMaster{ 1250 | Svc: ssm.NewFromConfig(cfg), 1251 | SvcName: "ssm", 1252 | ApiCalls: []map[string]interface{}{ 1253 | {"apicall": "ListCommands", "input_obj": &ssm.ListCommandsInput{}}, 1254 | {"apicall": "ListResourceComplianceSummaries", "input_obj": &ssm.ListResourceComplianceSummariesInput{}}, 1255 | {"apicall": "DescribeAvailablePatches", "input_obj": &ssm.DescribeAvailablePatchesInput{}}, 1256 | {"apicall": "GetInventorySchema", "input_obj": &ssm.GetInventorySchemaInput{}}, 1257 | {"apicall": "ListComplianceSummaries", "input_obj": &ssm.ListComplianceSummariesInput{}}, 1258 | {"apicall": "DescribeAssociation", "input_obj": &ssm.DescribeAssociationInput{}}, 1259 | {"apicall": "DescribeActivations", "input_obj": &ssm.DescribeActivationsInput{}}, 1260 | {"apicall": "ListResourceDataSync", "input_obj": &ssm.ListResourceDataSyncInput{}}, 1261 | {"apicall": "DescribeMaintenanceWindows", "input_obj": &ssm.DescribeMaintenanceWindowsInput{}}, 1262 | {"apicall": "DescribeMaintenanceWindowSchedule", "input_obj": &ssm.DescribeMaintenanceWindowScheduleInput{}}, 1263 | {"apicall": "DescribePatchBaselines", "input_obj": &ssm.DescribePatchBaselinesInput{}}, 1264 | {"apicall": "DescribePatchGroups", "input_obj": &ssm.DescribePatchGroupsInput{}}, 1265 | {"apicall": "ListComplianceItems", "input_obj": &ssm.ListComplianceItemsInput{}}, 1266 | {"apicall": "GetDefaultPatchBaseline", "input_obj": &ssm.GetDefaultPatchBaselineInput{}}, 1267 | {"apicall": "DescribeInventoryDeletions", "input_obj": &ssm.DescribeInventoryDeletionsInput{}}, 1268 | {"apicall": "ListCommandInvocations", "input_obj": &ssm.ListCommandInvocationsInput{}}, 1269 | }} 1270 | 1271 | storagegateway_svc := &servicemaster.ServiceMaster{ 1272 | Svc: storagegateway.NewFromConfig(cfg), 1273 | SvcName: "storagegateway", 1274 | ApiCalls: []map[string]interface{}{ 1275 | {"apicall": "ListVolumes", "input_obj": &storagegateway.ListVolumesInput{}}, 1276 | {"apicall": "ListGateways", "input_obj": &storagegateway.ListGatewaysInput{}}, 1277 | {"apicall": "DescribeTapeArchives", "input_obj": &storagegateway.DescribeTapeArchivesInput{}}, 1278 | {"apicall": "ListFileShares", "input_obj": &storagegateway.ListFileSharesInput{}}, 1279 | {"apicall": "ListTapes", "input_obj": &storagegateway.ListTapesInput{}}, 1280 | }} 1281 | 1282 | sts_svc := &servicemaster.ServiceMaster{ 1283 | Svc: sts.NewFromConfig(cfg), 1284 | SvcName: "sts", 1285 | ApiCalls: []map[string]interface{}{ 1286 | {"apicall": "GetSessionToken", "input_obj": &sts.GetSessionTokenInput{}}, 1287 | {"apicall": "GetCallerIdentity", "input_obj": &sts.GetCallerIdentityInput{}}, 1288 | }} 1289 | 1290 | support_svc := &servicemaster.ServiceMaster{ 1291 | Svc: support.NewFromConfig(cfg), 1292 | SvcName: "support", 1293 | ApiCalls: []map[string]interface{}{ 1294 | {"apicall": "DescribeServices", "input_obj": &support.DescribeServicesInput{}}, 1295 | {"apicall": "DescribeSeverityLevels", "input_obj": &support.DescribeSeverityLevelsInput{}}, 1296 | {"apicall": "DescribeCases", "input_obj": &support.DescribeCasesInput{}}, 1297 | }} 1298 | 1299 | transcribe_svc := &servicemaster.ServiceMaster{ 1300 | Svc: transcribe.NewFromConfig(cfg), 1301 | SvcName: "transcribe", 1302 | ApiCalls: []map[string]interface{}{ 1303 | {"apicall": "ListTranscriptionJobs", "input_obj": &transcribe.ListTranscriptionJobsInput{}}, 1304 | {"apicall": "ListVocabularies", "input_obj": &transcribe.ListVocabulariesInput{}}, 1305 | }} 1306 | 1307 | transfer_svc := &servicemaster.ServiceMaster{ 1308 | Svc: transfer.NewFromConfig(cfg), 1309 | SvcName: "transfer", 1310 | ApiCalls: []map[string]interface{}{ 1311 | {"apicall": "ListServers", "input_obj": &transfer.ListServersInput{}}, 1312 | }} 1313 | 1314 | translate_svc := &servicemaster.ServiceMaster{ 1315 | Svc: translate.NewFromConfig(cfg), 1316 | SvcName: "translate", 1317 | ApiCalls: []map[string]interface{}{ 1318 | {"apicall": "ListTerminologies", "input_obj": &translate.ListTerminologiesInput{}}, 1319 | }} 1320 | 1321 | waf_svc := &servicemaster.ServiceMaster{ 1322 | Svc: waf.NewFromConfig(cfg), 1323 | SvcName: "waf", 1324 | ApiCalls: []map[string]interface{}{ 1325 | {"apicall": "ListIPSets", "input_obj": &waf.ListIPSetsInput{}}, 1326 | {"apicall": "ListByteMatchSets", "input_obj": &waf.ListByteMatchSetsInput{}}, 1327 | {"apicall": "ListRegexMatchSets", "input_obj": &waf.ListRegexMatchSetsInput{}}, 1328 | {"apicall": "GetChangeToken", "input_obj": &waf.GetChangeTokenInput{}}, 1329 | {"apicall": "ListXssMatchSets", "input_obj": &waf.ListXssMatchSetsInput{}}, 1330 | {"apicall": "ListGeoMatchSets", "input_obj": &waf.ListGeoMatchSetsInput{}}, 1331 | {"apicall": "ListRateBasedRules", "input_obj": &waf.ListRateBasedRulesInput{}}, 1332 | {"apicall": "ListRuleGroups", "input_obj": &waf.ListRuleGroupsInput{}}, 1333 | {"apicall": "ListRegexPatternSets", "input_obj": &waf.ListRegexPatternSetsInput{}}, 1334 | {"apicall": "ListRules", "input_obj": &waf.ListRulesInput{}}, 1335 | {"apicall": "ListSizeConstraintSets", "input_obj": &waf.ListSizeConstraintSetsInput{}}, 1336 | {"apicall": "ListLoggingConfigurations", "input_obj": &waf.ListLoggingConfigurationsInput{}}, 1337 | {"apicall": "ListActivatedRulesInRuleGroup", "input_obj": &waf.ListActivatedRulesInRuleGroupInput{}}, 1338 | {"apicall": "ListSubscribedRuleGroups", "input_obj": &waf.ListSubscribedRuleGroupsInput{}}, 1339 | {"apicall": "ListSqlInjectionMatchSets", "input_obj": &waf.ListSqlInjectionMatchSetsInput{}}, 1340 | }} 1341 | 1342 | workdocs_svc := &servicemaster.ServiceMaster{ 1343 | Svc: workdocs.NewFromConfig(cfg), 1344 | SvcName: "workdocs", 1345 | ApiCalls: []map[string]interface{}{ 1346 | {"apicall": "DescribeActivities", "input_obj": &workdocs.DescribeActivitiesInput{}}, 1347 | {"apicall": "DescribeUsers", "input_obj": &workdocs.DescribeUsersInput{}}, 1348 | {"apicall": "GetResources", "input_obj": &workdocs.GetResourcesInput{}}, 1349 | }} 1350 | 1351 | worklink_svc := &servicemaster.ServiceMaster{ 1352 | Svc: worklink.NewFromConfig(cfg), 1353 | SvcName: "worklink", 1354 | ApiCalls: []map[string]interface{}{ 1355 | {"apicall": "ListFleets", "input_obj": &worklink.ListFleetsInput{}}, 1356 | }} 1357 | 1358 | workmail_svc := &servicemaster.ServiceMaster{ 1359 | Svc: workmail.NewFromConfig(cfg), 1360 | SvcName: "workmail", 1361 | ApiCalls: []map[string]interface{}{ 1362 | {"apicall": "ListOrganizations", "input_obj": &workmail.ListOrganizationsInput{}}, 1363 | }} 1364 | 1365 | workspaces_svc := &servicemaster.ServiceMaster{ 1366 | Svc: workspaces.NewFromConfig(cfg), 1367 | SvcName: "workspaces", 1368 | ApiCalls: []map[string]interface{}{ 1369 | {"apicall": "DescribeWorkspacesConnectionStatus", "input_obj": &workspaces.DescribeWorkspacesConnectionStatusInput{}}, 1370 | {"apicall": "DescribeWorkspaceDirectories", "input_obj": &workspaces.DescribeWorkspaceDirectoriesInput{}}, 1371 | {"apicall": "DescribeWorkspaceBundles", "input_obj": &workspaces.DescribeWorkspaceBundlesInput{}}, 1372 | {"apicall": "DescribeIpGroups", "input_obj": &workspaces.DescribeIpGroupsInput{}}, 1373 | {"apicall": "DescribeAccountModifications", "input_obj": &workspaces.DescribeAccountModificationsInput{}}, 1374 | {"apicall": "DescribeWorkspaces", "input_obj": &workspaces.DescribeWorkspacesInput{}}, 1375 | {"apicall": "DescribeAccount", "input_obj": &workspaces.DescribeAccountInput{}}, 1376 | {"apicall": "DescribeWorkspaceImages", "input_obj": &workspaces.DescribeWorkspaceImagesInput{}}, 1377 | }} 1378 | 1379 | xray_svc := &servicemaster.ServiceMaster{ 1380 | Svc: xray.NewFromConfig(cfg), 1381 | SvcName: "xray", 1382 | ApiCalls: []map[string]interface{}{ 1383 | {"apicall": "GetSamplingRules", "input_obj": &xray.GetSamplingRulesInput{}}, 1384 | {"apicall": "GetGroups", "input_obj": &xray.GetGroupsInput{}}, 1385 | {"apicall": "GetSamplingStatisticSummaries", "input_obj": &xray.GetSamplingStatisticSummariesInput{}}, 1386 | {"apicall": "GetEncryptionConfig", "input_obj": &xray.GetEncryptionConfigInput{}}, 1387 | {"apicall": "GetGroup", "input_obj": &xray.GetGroupInput{}}, 1388 | }} 1389 | 1390 | services := []servicemaster.ServiceMaster{*acm_svc, *amplify_svc, *apigateway_svc, *appmesh_svc, *appsync_svc, *athena_svc, *autoscaling_svc, *backup_svc, *batch_svc, *chime_svc, *cloud9_svc, *clouddirectory_svc, *cloudformation_svc, *cloudfront_svc, *cloudhsm_svc, *cloudhsmv2_svc, *cloudsearch_svc, *cloudtrail_svc, *codebuild_svc, *codecommit_svc, *codedeploy_svc, *codepipeline_svc, *codestar_svc, *comprehend_svc, *datapipeline_svc, *datasync_svc, *dax_svc, *devicefarm_svc, *directconnect_svc, *dlm_svc, *dynamodb_svc, *ec2_svc, *ecr_svc, *ecs_svc, *eks_svc, *elasticache_svc, *elasticbeanstalk_svc, *elastictranscoder_svc, *firehose_svc, *fms_svc, *fsx_svc, *gamelift_svc, *globalaccelerator_svc, *glue_svc, *greengrass_svc, *guardduty_svc, *health_svc, *iam_svc, *inspector_svc, *iot_svc, *iotanalytics_svc, *kafka_svc, *kinesis_svc, *kinesisanalytics_svc, *kinesisvideo_svc, *kms_svc, *lambda_svc, *lightsail_svc, *machinelearning_svc, *macie_svc, *mediaconnect_svc, *mediaconvert_svc, *medialive_svc, *mediapackage_svc, *mediastore_svc, *mediatailor_svc, *mobile_svc, *mq_svc, *opsworks_svc, *organizations_svc, *pinpoint_svc, *polly_svc, *pricing_svc, *ram_svc, *rds_svc, *redshift_svc, *rekognition_svc, *robomaker_svc, *route53_svc, *route53domains_svc, *route53resolver_svc, *s3_svc, *sagemaker_svc, *secretsmanager_svc, *securityhub_svc, *servicecatalog_svc, *shield_svc, *signer_svc, *sms_svc, *snowball_svc, *sns_svc, *sqs_svc, *ssm_svc, *storagegateway_svc, *sts_svc, *support_svc, *transcribe_svc, *transfer_svc, *translate_svc, *waf_svc, *workdocs_svc, *worklink_svc, *workmail_svc, *workspaces_svc, *xray_svc} 1391 | 1392 | return services 1393 | } 1394 | -------------------------------------------------------------------------------- /utils/utils.go: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import ( 4 | "bytes" 5 | "encoding/json" 6 | "fmt" 7 | "io/ioutil" 8 | "os" 9 | "reflect" 10 | "strings" 11 | 12 | "github.com/fatih/color" 13 | "github.com/joho/godotenv" 14 | terminal "github.com/wayneashleyberry/terminal-dimensions" 15 | ) 16 | 17 | const FILEPATH string = "./enum-results/" 18 | const ERROR_FILEPATH string = "./enum-results/errors/" 19 | 20 | // Colors 21 | var Yellow = color.New(color.FgYellow).SprintFunc() 22 | var Red = color.New(color.FgRed).SprintFunc() 23 | var White = color.New(color.FgWhite).SprintFunc() 24 | var Cyan = color.New(color.FgCyan).SprintFunc() 25 | var Green = color.New(color.FgGreen).SprintFunc() 26 | var Magenta = color.New(color.FgMagenta).SprintFunc() 27 | 28 | func countPartWidth(terminal_width, service int) (n int) { 29 | if terminal_width%2 == 0 { 30 | if service%2 == 0 { 31 | n = (int(terminal_width) - service - 2) / 2 32 | } else { 33 | n = (int(terminal_width) - service - 2 - 1) / 2 34 | } 35 | } else { 36 | if service%2 == 0 { 37 | n = (int(terminal_width) - service - 2 - 1) / 2 38 | } else { 39 | n = (int(terminal_width) - service - 2) / 2 40 | } 41 | } 42 | return n 43 | } 44 | 45 | func PrintDividedLine(service string) { 46 | 47 | terminal_width, _ := terminal.Width() 48 | n := countPartWidth(int(terminal_width), len(service)) 49 | 50 | fmt.Println() 51 | if service == "" { 52 | fmt.Println(White(strings.Repeat("-", int(terminal_width)))) 53 | } else { 54 | fmt.Println(White(strings.Repeat("-", n)), Magenta(strings.ToUpper(service)), White(strings.Repeat("-", n))) 55 | } 56 | } 57 | 58 | func ProcessServiceArgument(str string) []string { 59 | 60 | s := strings.Split(str, ",") 61 | 62 | if len(s) > 10 { 63 | fmt.Println(Red("Error:"), Yellow("Provide less than 10 services or specify `all` for total enumeration")) 64 | os.Exit(1) 65 | } else if len(s) <= 0 { 66 | fmt.Println(Red("Error:"), Yellow("Provide at least 1 service or specify `all` for total enumeration")) 67 | os.Exit(1) 68 | } 69 | 70 | s = ToLowerServices(s) 71 | s = RemoveDuplicateValues(s) 72 | return s 73 | } 74 | 75 | func ServiceNames() []string { 76 | service_names := []string{"acm", "amplify", "apigateway", "appmesh", "appsync", "athena", "autoscaling", "backup", "batch", "chime", "cloud9", "clouddirectory", "cloudformation", "cloudfront", "cloudhsm", "cloudhsmv2", "cloudsearch", "cloudtrail", "codebuild", "codecommit", "codedeploy", "codepipeline", "codestar", "comprehend", "datapipeline", "datasync", "dax", "devicefarm", "directconnect", "dlm", "dynamodb", "ec2", "ecr", "ecs", "eks", "elasticache", "elasticbeanstalk", "elastictranscoder", "firehose", "fms", "fsx", "gamelift", "globalaccelerator", "glue", "greengrass", "guardduty", "health", "iam", "inspector", "iot", "iotanalytics", "kafka", "kinesis", "kinesisanalytics", "kinesisvideo", "kms", "lambda", "lightsail", "machinelearning", "macie", "mediaconnect", "mediaconvert", "medialive", "mediapackage", "mediastore", "mediatailor", "mobile", "mq", "opsworks", "organizations", "pinpoint", "polly", "pricing", "ram", "rds", "redshift", "rekognition", "robomaker", "route53", "route53domains", "route53resolver", "s3", "sagemaker", "secretsmanager", "securityhub", "servicecatalog", "shield", "signer", "sms", "snowball", "sns", "sqs", "ssm", "storagegateway", "sts", "support", "transcribe", "transfer", "translate", "waf", "workdocs", "worklink", "workmail", "workspaces", "xray"} 77 | return service_names 78 | } 79 | 80 | func Find(a []string, x string) bool { 81 | for _, n := range a { 82 | if x == n { 83 | return true 84 | } 85 | } 86 | return false 87 | } 88 | 89 | func RemoveDuplicateValues(intSlice []string) []string { 90 | keys := make(map[string]bool) 91 | list := []string{} 92 | 93 | // If the key(values of the slice) is not equal 94 | // to the already present value in new slice (list) 95 | // then we append it. else we jump on another element. 96 | for _, entry := range intSlice { 97 | if _, value := keys[entry]; !value { 98 | keys[entry] = true 99 | list = append(list, entry) 100 | } 101 | } 102 | return list 103 | } 104 | 105 | func ToLowerServices(a []string) (services_lowercase []string) { 106 | for _, n := range a { 107 | services_lowercase = append(services_lowercase, strings.ToLower(n)) 108 | } 109 | return services_lowercase 110 | } 111 | 112 | func CheckEnvFileExistance() bool { 113 | if _, err := os.Stat(".env"); err != nil { 114 | if os.IsNotExist(err) { 115 | fmt.Println(Red("Error:"), Yellow("File .env does not exist")) 116 | fmt.Println(Green("Fix:"), Yellow("use `./cloudrider cred -h` command")) 117 | //fmt.Println(Red("Trace:"), Yellow(err)) 118 | os.Exit(1) 119 | return false 120 | } 121 | } 122 | return true 123 | } 124 | 125 | func CheckFileExistance(path string) bool { 126 | if _, err := os.Stat(path); err != nil { 127 | if os.IsNotExist(err) { 128 | fmt.Println(Red("Error:"), Yellow("File"), Yellow(path), Yellow("does not exist")) 129 | fmt.Println(Green("Fix:"), Yellow("DB does not exist, skip this service")) 130 | //fmt.Println(Red("Trace:"), Yellow(err)) 131 | return false 132 | } 133 | } 134 | return true 135 | } 136 | 137 | func LoadEnv() { 138 | err := godotenv.Load(".env") 139 | if err != nil { 140 | fmt.Println(Red("Error:"), Yellow("loading `.env` file")) 141 | os.Exit(1) 142 | } 143 | } 144 | 145 | func PackResponse(response interface{}) string { 146 | obj, err := json.Marshal(response) 147 | if err != nil { 148 | fmt.Println(Red("Error:"), Yellow("Marshal error, can't create a map:")) 149 | fmt.Println(Green("Fix:"), Yellow("The problem should be on our side, contact support please")) 150 | fmt.Println(Red("Trace:"), Yellow(err)) 151 | os.Exit(1) 152 | } 153 | return string(obj) 154 | } 155 | 156 | func PrintPrettifiedJson(to_prettify string) (string, error) { 157 | var prettified bytes.Buffer 158 | err := json.Indent(&prettified, []byte(to_prettify), "", "\t") 159 | 160 | if err != nil { 161 | return "", err 162 | } 163 | 164 | return prettified.String(), err 165 | } 166 | 167 | func GetJsonKey(m string) (key interface{}) { 168 | var l map[string]interface{} 169 | json.Unmarshal([]byte(m), &l) 170 | 171 | p := reflect.ValueOf(l).MapRange() 172 | 173 | for p.Next() { 174 | 175 | key = reflect.ValueOf(p.Key()).Interface() 176 | 177 | } 178 | return key 179 | } 180 | 181 | func GetJsonFromFile(filepath string) (result map[string]interface{}) { 182 | jsonFile, _ := os.Open(filepath) 183 | byteValue, _ := ioutil.ReadAll(jsonFile) 184 | 185 | err := json.Unmarshal(byteValue, &result) 186 | if err != nil { 187 | fmt.Println(Red("Error:"), Yellow("UnMarshal error, can't recreate an object")) 188 | fmt.Println(Green("Fix:"), Yellow("The problem should be on our side, contact support please")) 189 | fmt.Println(Red("Trace:"), Yellow(err)) 190 | } 191 | 192 | return result 193 | } 194 | 195 | func AnalyseService(service string, print bool, filter string, errors_dump bool) { 196 | 197 | // Error or result analyse 198 | var filepath string 199 | if !errors_dump { 200 | filepath = FILEPATH + service + ".json" 201 | } else { 202 | filepath = ERROR_FILEPATH + service + "_errors.json" 203 | } 204 | 205 | // Display 206 | PrintDividedLine(strings.ToUpper(service)) 207 | fmt.Println("") 208 | 209 | // Check the file existance 210 | if CheckFileExistance(filepath) { 211 | 212 | // dump service db_file 213 | result := GetJsonFromFile(filepath) 214 | 215 | // check whether any info was stored 216 | if len(result) == 0 { 217 | fmt.Println(Red("Error:"), Yellow("No entries in provided service")) 218 | } else { 219 | s := reflect.ValueOf(result[service]) 220 | 221 | // go through apicalls 222 | for i := 0; i < s.Len(); i++ { 223 | 224 | m := s.Index(i).Interface().(string) 225 | key := fmt.Sprintf("%v", GetJsonKey(m)) 226 | if strings.Contains(key, filter) { 227 | 228 | // Display key 229 | fmt.Println(Cyan(key)) 230 | 231 | if print { 232 | 233 | json, err := PrintPrettifiedJson(m) 234 | if err != nil { 235 | fmt.Println(err) 236 | } 237 | 238 | // Display 239 | fmt.Println(White(json)) 240 | PrintDividedLine("") 241 | fmt.Println("") 242 | } 243 | } 244 | } 245 | } 246 | 247 | } 248 | } 249 | 250 | func CreateAWScredentialsFile(aws_region, aws_access_key_id, aws_secret_access_key, aws_session_token *string) { 251 | 252 | awsCredentials := "AWS_REGION=" + *aws_region + "\n" 253 | awsCredentials += "AWS_ACCESS_KEY_ID=" + *aws_access_key_id + "\n" 254 | awsCredentials += "AWS_SECRET_ACCESS_KEY=" + *aws_secret_access_key + "\n" 255 | awsCredentials += "AWS_SESSION_TOKEN=" + *aws_session_token + "\n" 256 | 257 | ioutil.WriteFile(".env", []byte(awsCredentials), 0644) 258 | } 259 | 260 | // func LoadAWSCreds() { 261 | // ioutil.ReadFile() 262 | // } 263 | --------------------------------------------------------------------------------