├── .github └── workflows │ └── release.yml ├── .gitignore ├── LICENSE ├── README.md ├── emoji.go ├── go.mod ├── go.sum └── main.go /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: release 2 | 3 | on: 4 | push: 5 | tags: 6 | - "v*" 7 | 8 | permissions: 9 | contents: write 10 | 11 | jobs: 12 | release: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v2 16 | - uses: cli/gh-extension-precompile@v1 17 | with: 18 | go_version: "1.18" 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | bin 3 | 4 | # Binaries for programs and plugins 5 | *.exe 6 | *.exe~ 7 | *.dll 8 | *.so 9 | *.dylib 10 | 11 | # Test binary, built with `go test -c` 12 | *.test 13 | 14 | # Output of the go coverage tool, specifically when used with LiteIDE 15 | *.out 16 | 17 | # Dependency directories (remove the comment below to include it) 18 | # vendor/ 19 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU AFFERO GENERAL PUBLIC LICENSE 2 | Version 3, 19 November 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 Affero General Public License is a free, copyleft license for 11 | software and other kinds of works, specifically designed to ensure 12 | cooperation with the community in the case of network server software. 13 | 14 | The licenses for most software and other practical works are designed 15 | to take away your freedom to share and change the works. By contrast, 16 | our General Public Licenses are intended to guarantee your freedom to 17 | share and change all versions of a program--to make sure it remains free 18 | software for all its users. 19 | 20 | When we speak of free software, we are referring to freedom, not 21 | price. Our General Public Licenses are designed to make sure that you 22 | have the freedom to distribute copies of free software (and charge for 23 | them if you wish), that you receive source code or can get it if you 24 | want it, that you can change the software or use pieces of it in new 25 | free programs, and that you know you can do these things. 26 | 27 | Developers that use our General Public Licenses protect your rights 28 | with two steps: (1) assert copyright on the software, and (2) offer 29 | you this License which gives you legal permission to copy, distribute 30 | and/or modify the software. 31 | 32 | A secondary benefit of defending all users' freedom is that 33 | improvements made in alternate versions of the program, if they 34 | receive widespread use, become available for other developers to 35 | incorporate. Many developers of free software are heartened and 36 | encouraged by the resulting cooperation. However, in the case of 37 | software used on network servers, this result may fail to come about. 38 | The GNU General Public License permits making a modified version and 39 | letting the public access it on a server without ever releasing its 40 | source code to the public. 41 | 42 | The GNU Affero General Public License is designed specifically to 43 | ensure that, in such cases, the modified source code becomes available 44 | to the community. It requires the operator of a network server to 45 | provide the source code of the modified version running there to the 46 | users of that server. Therefore, public use of a modified version, on 47 | a publicly accessible server, gives the public access to the source 48 | code of the modified version. 49 | 50 | An older license, called the Affero General Public License and 51 | published by Affero, was designed to accomplish similar goals. This is 52 | a different license, not a version of the Affero GPL, but Affero has 53 | released a new version of the Affero GPL which permits relicensing under 54 | this license. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | TERMS AND CONDITIONS 60 | 61 | 0. Definitions. 62 | 63 | "This License" refers to version 3 of the GNU Affero General Public License. 64 | 65 | "Copyright" also means copyright-like laws that apply to other kinds of 66 | works, such as semiconductor masks. 67 | 68 | "The Program" refers to any copyrightable work licensed under this 69 | License. Each licensee is addressed as "you". "Licensees" and 70 | "recipients" may be individuals or organizations. 71 | 72 | To "modify" a work means to copy from or adapt all or part of the work 73 | in a fashion requiring copyright permission, other than the making of an 74 | exact copy. The resulting work is called a "modified version" of the 75 | earlier work or a work "based on" the earlier work. 76 | 77 | A "covered work" means either the unmodified Program or a work based 78 | on the Program. 79 | 80 | To "propagate" a work means to do anything with it that, without 81 | permission, would make you directly or secondarily liable for 82 | infringement under applicable copyright law, except executing it on a 83 | computer or modifying a private copy. Propagation includes copying, 84 | distribution (with or without modification), making available to the 85 | public, and in some countries other activities as well. 86 | 87 | To "convey" a work means any kind of propagation that enables other 88 | parties to make or receive copies. Mere interaction with a user through 89 | a computer network, with no transfer of a copy, is not conveying. 90 | 91 | An interactive user interface displays "Appropriate Legal Notices" 92 | to the extent that it includes a convenient and prominently visible 93 | feature that (1) displays an appropriate copyright notice, and (2) 94 | tells the user that there is no warranty for the work (except to the 95 | extent that warranties are provided), that licensees may convey the 96 | work under this License, and how to view a copy of this License. If 97 | the interface presents a list of user commands or options, such as a 98 | menu, a prominent item in the list meets this criterion. 99 | 100 | 1. Source Code. 101 | 102 | The "source code" for a work means the preferred form of the work 103 | for making modifications to it. "Object code" means any non-source 104 | form of a work. 105 | 106 | A "Standard Interface" means an interface that either is an official 107 | standard defined by a recognized standards body, or, in the case of 108 | interfaces specified for a particular programming language, one that 109 | is widely used among developers working in that language. 110 | 111 | The "System Libraries" of an executable work include anything, other 112 | than the work as a whole, that (a) is included in the normal form of 113 | packaging a Major Component, but which is not part of that Major 114 | Component, and (b) serves only to enable use of the work with that 115 | Major Component, or to implement a Standard Interface for which an 116 | implementation is available to the public in source code form. A 117 | "Major Component", in this context, means a major essential component 118 | (kernel, window system, and so on) of the specific operating system 119 | (if any) on which the executable work runs, or a compiler used to 120 | produce the work, or an object code interpreter used to run it. 121 | 122 | The "Corresponding Source" for a work in object code form means all 123 | the source code needed to generate, install, and (for an executable 124 | work) run the object code and to modify the work, including scripts to 125 | control those activities. However, it does not include the work's 126 | System Libraries, or general-purpose tools or generally available free 127 | programs which are used unmodified in performing those activities but 128 | which are not part of the work. For example, Corresponding Source 129 | includes interface definition files associated with source files for 130 | the work, and the source code for shared libraries and dynamically 131 | linked subprograms that the work is specifically designed to require, 132 | such as by intimate data communication or control flow between those 133 | subprograms and other parts of the work. 134 | 135 | The Corresponding Source need not include anything that users 136 | can regenerate automatically from other parts of the Corresponding 137 | Source. 138 | 139 | The Corresponding Source for a work in source code form is that 140 | same work. 141 | 142 | 2. Basic Permissions. 143 | 144 | All rights granted under this License are granted for the term of 145 | copyright on the Program, and are irrevocable provided the stated 146 | conditions are met. This License explicitly affirms your unlimited 147 | permission to run the unmodified Program. The output from running a 148 | covered work is covered by this License only if the output, given its 149 | content, constitutes a covered work. This License acknowledges your 150 | rights of fair use or other equivalent, as provided by copyright law. 151 | 152 | You may make, run and propagate covered works that you do not 153 | convey, without conditions so long as your license otherwise remains 154 | in force. You may convey covered works to others for the sole purpose 155 | of having them make modifications exclusively for you, or provide you 156 | with facilities for running those works, provided that you comply with 157 | the terms of this License in conveying all material for which you do 158 | not control copyright. Those thus making or running the covered works 159 | for you must do so exclusively on your behalf, under your direction 160 | and control, on terms that prohibit them from making any copies of 161 | your copyrighted material outside their relationship with you. 162 | 163 | Conveying under any other circumstances is permitted solely under 164 | the conditions stated below. Sublicensing is not allowed; section 10 165 | makes it unnecessary. 166 | 167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 168 | 169 | No covered work shall be deemed part of an effective technological 170 | measure under any applicable law fulfilling obligations under article 171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 172 | similar laws prohibiting or restricting circumvention of such 173 | measures. 174 | 175 | When you convey a covered work, you waive any legal power to forbid 176 | circumvention of technological measures to the extent such circumvention 177 | is effected by exercising rights under this License with respect to 178 | the covered work, and you disclaim any intention to limit operation or 179 | modification of the work as a means of enforcing, against the work's 180 | users, your or third parties' legal rights to forbid circumvention of 181 | technological measures. 182 | 183 | 4. Conveying Verbatim Copies. 184 | 185 | You may convey verbatim copies of the Program's source code as you 186 | receive it, in any medium, provided that you conspicuously and 187 | appropriately publish on each copy an appropriate copyright notice; 188 | keep intact all notices stating that this License and any 189 | non-permissive terms added in accord with section 7 apply to the code; 190 | keep intact all notices of the absence of any warranty; and give all 191 | recipients a copy of this License along with the Program. 192 | 193 | You may charge any price or no price for each copy that you convey, 194 | and you may offer support or warranty protection for a fee. 195 | 196 | 5. Conveying Modified Source Versions. 197 | 198 | You may convey a work based on the Program, or the modifications to 199 | produce it from the Program, in the form of source code under the 200 | terms of section 4, provided that you also meet all of these conditions: 201 | 202 | a) The work must carry prominent notices stating that you modified 203 | it, and giving a relevant date. 204 | 205 | b) The work must carry prominent notices stating that it is 206 | released under this License and any conditions added under section 207 | 7. This requirement modifies the requirement in section 4 to 208 | "keep intact all notices". 209 | 210 | c) You must license the entire work, as a whole, under this 211 | License to anyone who comes into possession of a copy. This 212 | License will therefore apply, along with any applicable section 7 213 | additional terms, to the whole of the work, and all its parts, 214 | regardless of how they are packaged. This License gives no 215 | permission to license the work in any other way, but it does not 216 | invalidate such permission if you have separately received it. 217 | 218 | d) If the work has interactive user interfaces, each must display 219 | Appropriate Legal Notices; however, if the Program has interactive 220 | interfaces that do not display Appropriate Legal Notices, your 221 | work need not make them do so. 222 | 223 | A compilation of a covered work with other separate and independent 224 | works, which are not by their nature extensions of the covered work, 225 | and which are not combined with it such as to form a larger program, 226 | in or on a volume of a storage or distribution medium, is called an 227 | "aggregate" if the compilation and its resulting copyright are not 228 | used to limit the access or legal rights of the compilation's users 229 | beyond what the individual works permit. Inclusion of a covered work 230 | in an aggregate does not cause this License to apply to the other 231 | parts of the aggregate. 232 | 233 | 6. Conveying Non-Source Forms. 234 | 235 | You may convey a covered work in object code form under the terms 236 | of sections 4 and 5, provided that you also convey the 237 | machine-readable Corresponding Source under the terms of this License, 238 | in one of these ways: 239 | 240 | a) Convey the object code in, or embodied in, a physical product 241 | (including a physical distribution medium), accompanied by the 242 | Corresponding Source fixed on a durable physical medium 243 | customarily used for software interchange. 244 | 245 | b) Convey the object code in, or embodied in, a physical product 246 | (including a physical distribution medium), accompanied by a 247 | written offer, valid for at least three years and valid for as 248 | long as you offer spare parts or customer support for that product 249 | model, to give anyone who possesses the object code either (1) a 250 | copy of the Corresponding Source for all the software in the 251 | product that is covered by this License, on a durable physical 252 | medium customarily used for software interchange, for a price no 253 | more than your reasonable cost of physically performing this 254 | conveying of source, or (2) access to copy the 255 | Corresponding Source from a network server at no charge. 256 | 257 | c) Convey individual copies of the object code with a copy of the 258 | written offer to provide the Corresponding Source. This 259 | alternative is allowed only occasionally and noncommercially, and 260 | only if you received the object code with such an offer, in accord 261 | with subsection 6b. 262 | 263 | d) Convey the object code by offering access from a designated 264 | place (gratis or for a charge), and offer equivalent access to the 265 | Corresponding Source in the same way through the same place at no 266 | further charge. You need not require recipients to copy the 267 | Corresponding Source along with the object code. If the place to 268 | copy the object code is a network server, the Corresponding Source 269 | may be on a different server (operated by you or a third party) 270 | that supports equivalent copying facilities, provided you maintain 271 | clear directions next to the object code saying where to find the 272 | Corresponding Source. Regardless of what server hosts the 273 | Corresponding Source, you remain obligated to ensure that it is 274 | available for as long as needed to satisfy these requirements. 275 | 276 | e) Convey the object code using peer-to-peer transmission, provided 277 | you inform other peers where the object code and Corresponding 278 | Source of the work are being offered to the general public at no 279 | charge under subsection 6d. 280 | 281 | A separable portion of the object code, whose source code is excluded 282 | from the Corresponding Source as a System Library, need not be 283 | included in conveying the object code work. 284 | 285 | A "User Product" is either (1) a "consumer product", which means any 286 | tangible personal property which is normally used for personal, family, 287 | or household purposes, or (2) anything designed or sold for incorporation 288 | into a dwelling. In determining whether a product is a consumer product, 289 | doubtful cases shall be resolved in favor of coverage. For a particular 290 | product received by a particular user, "normally used" refers to a 291 | typical or common use of that class of product, regardless of the status 292 | of the particular user or of the way in which the particular user 293 | actually uses, or expects or is expected to use, the product. A product 294 | is a consumer product regardless of whether the product has substantial 295 | commercial, industrial or non-consumer uses, unless such uses represent 296 | the only significant mode of use of the product. 297 | 298 | "Installation Information" for a User Product means any methods, 299 | procedures, authorization keys, or other information required to install 300 | and execute modified versions of a covered work in that User Product from 301 | a modified version of its Corresponding Source. The information must 302 | suffice to ensure that the continued functioning of the modified object 303 | code is in no case prevented or interfered with solely because 304 | modification has been made. 305 | 306 | If you convey an object code work under this section in, or with, or 307 | specifically for use in, a User Product, and the conveying occurs as 308 | part of a transaction in which the right of possession and use of the 309 | User Product is transferred to the recipient in perpetuity or for a 310 | fixed term (regardless of how the transaction is characterized), the 311 | Corresponding Source conveyed under this section must be accompanied 312 | by the Installation Information. But this requirement does not apply 313 | if neither you nor any third party retains the ability to install 314 | modified object code on the User Product (for example, the work has 315 | been installed in ROM). 316 | 317 | The requirement to provide Installation Information does not include a 318 | requirement to continue to provide support service, warranty, or updates 319 | for a work that has been modified or installed by the recipient, or for 320 | the User Product in which it has been modified or installed. Access to a 321 | network may be denied when the modification itself materially and 322 | adversely affects the operation of the network or violates the rules and 323 | protocols for communication across the network. 324 | 325 | Corresponding Source conveyed, and Installation Information provided, 326 | in accord with this section must be in a format that is publicly 327 | documented (and with an implementation available to the public in 328 | source code form), and must require no special password or key for 329 | unpacking, reading or copying. 330 | 331 | 7. Additional Terms. 332 | 333 | "Additional permissions" are terms that supplement the terms of this 334 | License by making exceptions from one or more of its conditions. 335 | Additional permissions that are applicable to the entire Program shall 336 | be treated as though they were included in this License, to the extent 337 | that they are valid under applicable law. If additional permissions 338 | apply only to part of the Program, that part may be used separately 339 | under those permissions, but the entire Program remains governed by 340 | this License without regard to the additional permissions. 341 | 342 | When you convey a copy of a covered work, you may at your option 343 | remove any additional permissions from that copy, or from any part of 344 | it. (Additional permissions may be written to require their own 345 | removal in certain cases when you modify the work.) You may place 346 | additional permissions on material, added by you to a covered work, 347 | for which you have or can give appropriate copyright permission. 348 | 349 | Notwithstanding any other provision of this License, for material you 350 | add to a covered work, you may (if authorized by the copyright holders of 351 | that material) supplement the terms of this License with terms: 352 | 353 | a) Disclaiming warranty or limiting liability differently from the 354 | terms of sections 15 and 16 of this License; or 355 | 356 | b) Requiring preservation of specified reasonable legal notices or 357 | author attributions in that material or in the Appropriate Legal 358 | Notices displayed by works containing it; or 359 | 360 | c) Prohibiting misrepresentation of the origin of that material, or 361 | requiring that modified versions of such material be marked in 362 | reasonable ways as different from the original version; or 363 | 364 | d) Limiting the use for publicity purposes of names of licensors or 365 | authors of the material; or 366 | 367 | e) Declining to grant rights under trademark law for use of some 368 | trade names, trademarks, or service marks; or 369 | 370 | f) Requiring indemnification of licensors and authors of that 371 | material by anyone who conveys the material (or modified versions of 372 | it) with contractual assumptions of liability to the recipient, for 373 | any liability that these contractual assumptions directly impose on 374 | those licensors and authors. 375 | 376 | All other non-permissive additional terms are considered "further 377 | restrictions" within the meaning of section 10. If the Program as you 378 | received it, or any part of it, contains a notice stating that it is 379 | governed by this License along with a term that is a further 380 | restriction, you may remove that term. If a license document contains 381 | a further restriction but permits relicensing or conveying under this 382 | License, you may add to a covered work material governed by the terms 383 | of that license document, provided that the further restriction does 384 | not survive such relicensing or conveying. 385 | 386 | If you add terms to a covered work in accord with this section, you 387 | must place, in the relevant source files, a statement of the 388 | additional terms that apply to those files, or a notice indicating 389 | where to find the applicable terms. 390 | 391 | Additional terms, permissive or non-permissive, may be stated in the 392 | form of a separately written license, or stated as exceptions; 393 | the above requirements apply either way. 394 | 395 | 8. Termination. 396 | 397 | You may not propagate or modify a covered work except as expressly 398 | provided under this License. Any attempt otherwise to propagate or 399 | modify it is void, and will automatically terminate your rights under 400 | this License (including any patent licenses granted under the third 401 | paragraph of section 11). 402 | 403 | However, if you cease all violation of this License, then your 404 | license from a particular copyright holder is reinstated (a) 405 | provisionally, unless and until the copyright holder explicitly and 406 | finally terminates your license, and (b) permanently, if the copyright 407 | holder fails to notify you of the violation by some reasonable means 408 | prior to 60 days after the cessation. 409 | 410 | Moreover, your license from a particular copyright holder is 411 | reinstated permanently if the copyright holder notifies you of the 412 | violation by some reasonable means, this is the first time you have 413 | received notice of violation of this License (for any work) from that 414 | copyright holder, and you cure the violation prior to 30 days after 415 | your receipt of the notice. 416 | 417 | Termination of your rights under this section does not terminate the 418 | licenses of parties who have received copies or rights from you under 419 | this License. If your rights have been terminated and not permanently 420 | reinstated, you do not qualify to receive new licenses for the same 421 | material under section 10. 422 | 423 | 9. Acceptance Not Required for Having Copies. 424 | 425 | You are not required to accept this License in order to receive or 426 | run a copy of the Program. Ancillary propagation of a covered work 427 | occurring solely as a consequence of using peer-to-peer transmission 428 | to receive a copy likewise does not require acceptance. However, 429 | nothing other than this License grants you permission to propagate or 430 | modify any covered work. These actions infringe copyright if you do 431 | not accept this License. Therefore, by modifying or propagating a 432 | covered work, you indicate your acceptance of this License to do so. 433 | 434 | 10. Automatic Licensing of Downstream Recipients. 435 | 436 | Each time you convey a covered work, the recipient automatically 437 | receives a license from the original licensors, to run, modify and 438 | propagate that work, subject to this License. You are not responsible 439 | for enforcing compliance by third parties with this License. 440 | 441 | An "entity transaction" is a transaction transferring control of an 442 | organization, or substantially all assets of one, or subdividing an 443 | organization, or merging organizations. If propagation of a covered 444 | work results from an entity transaction, each party to that 445 | transaction who receives a copy of the work also receives whatever 446 | licenses to the work the party's predecessor in interest had or could 447 | give under the previous paragraph, plus a right to possession of the 448 | Corresponding Source of the work from the predecessor in interest, if 449 | the predecessor has it or can get it with reasonable efforts. 450 | 451 | You may not impose any further restrictions on the exercise of the 452 | rights granted or affirmed under this License. For example, you may 453 | not impose a license fee, royalty, or other charge for exercise of 454 | rights granted under this License, and you may not initiate litigation 455 | (including a cross-claim or counterclaim in a lawsuit) alleging that 456 | any patent claim is infringed by making, using, selling, offering for 457 | sale, or importing the Program or any portion of it. 458 | 459 | 11. Patents. 460 | 461 | A "contributor" is a copyright holder who authorizes use under this 462 | License of the Program or a work on which the Program is based. The 463 | work thus licensed is called the contributor's "contributor version". 464 | 465 | A contributor's "essential patent claims" are all patent claims 466 | owned or controlled by the contributor, whether already acquired or 467 | hereafter acquired, that would be infringed by some manner, permitted 468 | by this License, of making, using, or selling its contributor version, 469 | but do not include claims that would be infringed only as a 470 | consequence of further modification of the contributor version. For 471 | purposes of this definition, "control" includes the right to grant 472 | patent sublicenses in a manner consistent with the requirements of 473 | this License. 474 | 475 | Each contributor grants you a non-exclusive, worldwide, royalty-free 476 | patent license under the contributor's essential patent claims, to 477 | make, use, sell, offer for sale, import and otherwise run, modify and 478 | propagate the contents of its contributor version. 479 | 480 | In the following three paragraphs, a "patent license" is any express 481 | agreement or commitment, however denominated, not to enforce a patent 482 | (such as an express permission to practice a patent or covenant not to 483 | sue for patent infringement). To "grant" such a patent license to a 484 | party means to make such an agreement or commitment not to enforce a 485 | patent against the party. 486 | 487 | If you convey a covered work, knowingly relying on a patent license, 488 | and the Corresponding Source of the work is not available for anyone 489 | to copy, free of charge and under the terms of this License, through a 490 | publicly available network server or other readily accessible means, 491 | then you must either (1) cause the Corresponding Source to be so 492 | available, or (2) arrange to deprive yourself of the benefit of the 493 | patent license for this particular work, or (3) arrange, in a manner 494 | consistent with the requirements of this License, to extend the patent 495 | license to downstream recipients. "Knowingly relying" means you have 496 | actual knowledge that, but for the patent license, your conveying the 497 | covered work in a country, or your recipient's use of the covered work 498 | in a country, would infringe one or more identifiable patents in that 499 | country that you have reason to believe are valid. 500 | 501 | If, pursuant to or in connection with a single transaction or 502 | arrangement, you convey, or propagate by procuring conveyance of, a 503 | covered work, and grant a patent license to some of the parties 504 | receiving the covered work authorizing them to use, propagate, modify 505 | or convey a specific copy of the covered work, then the patent license 506 | you grant is automatically extended to all recipients of the covered 507 | work and works based on it. 508 | 509 | A patent license is "discriminatory" if it does not include within 510 | the scope of its coverage, prohibits the exercise of, or is 511 | conditioned on the non-exercise of one or more of the rights that are 512 | specifically granted under this License. You may not convey a covered 513 | work if you are a party to an arrangement with a third party that is 514 | in the business of distributing software, under which you make payment 515 | to the third party based on the extent of your activity of conveying 516 | the work, and under which the third party grants, to any of the 517 | parties who would receive the covered work from you, a discriminatory 518 | patent license (a) in connection with copies of the covered work 519 | conveyed by you (or copies made from those copies), or (b) primarily 520 | for and in connection with specific products or compilations that 521 | contain the covered work, unless you entered into that arrangement, 522 | or that patent license was granted, prior to 28 March 2007. 523 | 524 | Nothing in this License shall be construed as excluding or limiting 525 | any implied license or other defenses to infringement that may 526 | otherwise be available to you under applicable patent law. 527 | 528 | 12. No Surrender of Others' Freedom. 529 | 530 | If conditions are imposed on you (whether by court order, agreement or 531 | otherwise) that contradict the conditions of this License, they do not 532 | excuse you from the conditions of this License. If you cannot convey a 533 | covered work so as to satisfy simultaneously your obligations under this 534 | License and any other pertinent obligations, then as a consequence you may 535 | not convey it at all. For example, if you agree to terms that obligate you 536 | to collect a royalty for further conveying from those to whom you convey 537 | the Program, the only way you could satisfy both those terms and this 538 | License would be to refrain entirely from conveying the Program. 539 | 540 | 13. Remote Network Interaction; Use with the GNU General Public License. 541 | 542 | Notwithstanding any other provision of this License, if you modify the 543 | Program, your modified version must prominently offer all users 544 | interacting with it remotely through a computer network (if your version 545 | supports such interaction) an opportunity to receive the Corresponding 546 | Source of your version by providing access to the Corresponding Source 547 | from a network server at no charge, through some standard or customary 548 | means of facilitating copying of software. This Corresponding Source 549 | shall include the Corresponding Source for any work covered by version 3 550 | of the GNU General Public License that is incorporated pursuant to the 551 | following paragraph. 552 | 553 | Notwithstanding any other provision of this License, you have 554 | permission to link or combine any covered work with a work licensed 555 | under version 3 of the GNU General Public License into a single 556 | combined work, and to convey the resulting work. The terms of this 557 | License will continue to apply to the part which is the covered work, 558 | but the work with which it is combined will remain governed by version 559 | 3 of the GNU General Public License. 560 | 561 | 14. Revised Versions of this License. 562 | 563 | The Free Software Foundation may publish revised and/or new versions of 564 | the GNU Affero General Public License from time to time. Such new versions 565 | will be similar in spirit to the present version, but may differ in detail to 566 | address new problems or concerns. 567 | 568 | Each version is given a distinguishing version number. If the 569 | Program specifies that a certain numbered version of the GNU Affero General 570 | Public License "or any later version" applies to it, you have the 571 | option of following the terms and conditions either of that numbered 572 | version or of any later version published by the Free Software 573 | Foundation. If the Program does not specify a version number of the 574 | GNU Affero General Public License, you may choose any version ever published 575 | by the Free Software Foundation. 576 | 577 | If the Program specifies that a proxy can decide which future 578 | versions of the GNU Affero General Public License can be used, that proxy's 579 | public statement of acceptance of a version permanently authorizes you 580 | to choose that version for the Program. 581 | 582 | Later license versions may give you additional or different 583 | permissions. However, no additional obligations are imposed on any 584 | author or copyright holder as a result of your choosing to follow a 585 | later version. 586 | 587 | 15. Disclaimer of Warranty. 588 | 589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 597 | 598 | 16. Limitation of Liability. 599 | 600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 608 | SUCH DAMAGES. 609 | 610 | 17. Interpretation of Sections 15 and 16. 611 | 612 | If the disclaimer of warranty and limitation of liability provided 613 | above cannot be given local legal effect according to their terms, 614 | reviewing courts shall apply local law that most closely approximates 615 | an absolute waiver of all civil liability in connection with the 616 | Program, unless a warranty or assumption of liability accompanies a 617 | copy of the Program in return for a fee. 618 | 619 | END OF TERMS AND CONDITIONS 620 | 621 | How to Apply These Terms to Your New Programs 622 | 623 | If you develop a new program, and you want it to be of the greatest 624 | possible use to the public, the best way to achieve this is to make it 625 | free software which everyone can redistribute and change under these terms. 626 | 627 | To do so, attach the following notices to the program. It is safest 628 | to attach them to the start of each source file to most effectively 629 | state the exclusion of warranty; and each file should have at least 630 | the "copyright" line and a pointer to where the full notice is found. 631 | 632 | 633 | Copyright (C) 634 | 635 | This program is free software: you can redistribute it and/or modify 636 | it under the terms of the GNU Affero General Public License as published 637 | by the Free Software Foundation, either version 3 of the License, or 638 | (at your option) any later version. 639 | 640 | This program is distributed in the hope that it will be useful, 641 | but WITHOUT ANY WARRANTY; without even the implied warranty of 642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 643 | GNU Affero General Public License for more details. 644 | 645 | You should have received a copy of the GNU Affero General Public License 646 | along with this program. If not, see . 647 | 648 | Also add information on how to contact you by electronic and paper mail. 649 | 650 | If your software can interact with users remotely through a computer 651 | network, you should also make sure that it provides a way for users to 652 | get its source. For example, if your program is a web application, its 653 | interface could display a "Source" link that leads users to an archive 654 | of the code. There are many ways you could offer source, and different 655 | solutions will be better for different programs; see section 13 for the 656 | specific requirements. 657 | 658 | You should also get your employer (if you work as a programmer) or school, 659 | if any, to sign a "copyright disclaimer" for the program, if necessary. 660 | For more information on this, and how to apply and follow the GNU AGPL, see 661 | . 662 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gh user-status 2 | 3 | being an extension for interacting with the status on a GitHub profile. 4 | 5 | ## installation 6 | 7 | ``` 8 | gh extension install vilmibm/gh-user-status 9 | ``` 10 | 11 | ## usage 12 | 13 | - `gh user-status set` 14 | - `gh user-status set` interactively set status 15 | - `gh user-status set --limited "vacation"` set a status with limited availability 16 | - `gh user-status set --expiry 1h "leave me alone"` set with 1 hour expiry 17 | - `gh user-status set --emoji "pizza" "eating lunch"` set with an emoji 18 | - `gh user-status get` 19 | - `gh user-status get` see your status 20 | - `gh user-status get mislav` see another user's status 21 | 22 | By default, the :thought_balloon: emoji is used. 23 | 24 | Limiting visibility of the status to an organization is not yet supported. 25 | 26 | ## author 27 | 28 | vilmibm 29 | -------------------------------------------------------------------------------- /emoji.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "strings" 4 | 5 | // heavily borrowed from https://github.com/yuin/goldmark-emoji/ 6 | 7 | type emojiManager struct { 8 | emojis []emoji 9 | } 10 | 11 | func (em emojiManager) Emojis() []emoji { 12 | return em.emojis 13 | } 14 | 15 | func (em emojiManager) ReplaceAll(s string) string { 16 | out := []string{} 17 | bySpace := strings.Split(s, " ") 18 | for _, piece := range bySpace { 19 | if strings.HasPrefix(piece, ":") && strings.HasSuffix(piece, ":") { 20 | for _, e := range em.emojis { 21 | for _, n := range e.names { 22 | if piece == ":"+n+":" { 23 | out = append(out, string(e.codepoint)) 24 | } 25 | } 26 | } 27 | } else { 28 | out = append(out, piece) 29 | } 30 | } 31 | return strings.Join(out, " ") 32 | } 33 | 34 | type emoji struct { 35 | desc string 36 | codepoint []int32 37 | names []string 38 | } 39 | 40 | func newEmoji(desc string, codepoint []int32, names ...string) emoji { 41 | return emoji{ 42 | desc: desc, 43 | codepoint: codepoint, 44 | names: names, 45 | } 46 | } 47 | 48 | func newEmojiManager() emojiManager { 49 | emojis := []emoji{ 50 | newEmoji("grinning face", []int32{128512}, "grinning"), 51 | newEmoji("grinning face with big eyes", []int32{128515}, "smiley"), 52 | newEmoji("grinning face with smiling eyes", []int32{128516}, "smile"), 53 | newEmoji("beaming face with smiling eyes", []int32{128513}, "grin"), 54 | newEmoji("grinning squinting face", []int32{128518}, "laughing", "satisfied"), 55 | newEmoji("grinning face with sweat", []int32{128517}, "sweat_smile"), 56 | newEmoji("rolling on the floor laughing", []int32{129315}, "rofl"), 57 | newEmoji("face with tears of joy", []int32{128514}, "joy"), 58 | newEmoji("slightly smiling face", []int32{128578}, "slightly_smiling_face"), 59 | newEmoji("upside-down face", []int32{128579}, "upside_down_face"), 60 | newEmoji("winking face", []int32{128521}, "wink"), 61 | newEmoji("smiling face with smiling eyes", []int32{128522}, "blush"), 62 | newEmoji("smiling face with halo", []int32{128519}, "innocent"), 63 | newEmoji("smiling face with hearts", []int32{129392}, "smiling_face_with_three_hearts"), 64 | newEmoji("smiling face with heart-eyes", []int32{128525}, "heart_eyes"), 65 | newEmoji("star-struck", []int32{129321}, "star_struck"), 66 | newEmoji("face blowing a kiss", []int32{128536}, "kissing_heart"), 67 | newEmoji("kissing face", []int32{128535}, "kissing"), 68 | newEmoji("smiling face", []int32{9786, 65039}, "relaxed"), 69 | newEmoji("kissing face with closed eyes", []int32{128538}, "kissing_closed_eyes"), 70 | newEmoji("kissing face with smiling eyes", []int32{128537}, "kissing_smiling_eyes"), 71 | newEmoji("face savoring food", []int32{128523}, "yum"), 72 | newEmoji("face with tongue", []int32{128539}, "stuck_out_tongue"), 73 | newEmoji("winking face with tongue", []int32{128540}, "stuck_out_tongue_winking_eye"), 74 | newEmoji("zany face", []int32{129322}, "zany_face"), 75 | newEmoji("squinting face with tongue", []int32{128541}, "stuck_out_tongue_closed_eyes"), 76 | newEmoji("money-mouth face", []int32{129297}, "money_mouth_face"), 77 | newEmoji("hugging face", []int32{129303}, "hugs"), 78 | newEmoji("face with hand over mouth", []int32{129325}, "hand_over_mouth"), 79 | newEmoji("shushing face", []int32{129323}, "shushing_face"), 80 | newEmoji("thinking face", []int32{129300}, "thinking"), 81 | newEmoji("zipper-mouth face", []int32{129296}, "zipper_mouth_face"), 82 | newEmoji("face with raised eyebrow", []int32{129320}, "raised_eyebrow"), 83 | newEmoji("neutral face", []int32{128528}, "neutral_face"), 84 | newEmoji("expressionless face", []int32{128529}, "expressionless"), 85 | newEmoji("face without mouth", []int32{128566}, "no_mouth"), 86 | newEmoji("smirking face", []int32{128527}, "smirk"), 87 | newEmoji("unamused face", []int32{128530}, "unamused"), 88 | newEmoji("face with rolling eyes", []int32{128580}, "roll_eyes"), 89 | newEmoji("grimacing face", []int32{128556}, "grimacing"), 90 | newEmoji("lying face", []int32{129317}, "lying_face"), 91 | newEmoji("relieved face", []int32{128524}, "relieved"), 92 | newEmoji("pensive face", []int32{128532}, "pensive"), 93 | newEmoji("sleepy face", []int32{128554}, "sleepy"), 94 | newEmoji("drooling face", []int32{129316}, "drooling_face"), 95 | newEmoji("sleeping face", []int32{128564}, "sleeping"), 96 | newEmoji("face with medical mask", []int32{128567}, "mask"), 97 | newEmoji("face with thermometer", []int32{129298}, "face_with_thermometer"), 98 | newEmoji("face with head-bandage", []int32{129301}, "face_with_head_bandage"), 99 | newEmoji("nauseated face", []int32{129314}, "nauseated_face"), 100 | newEmoji("face vomiting", []int32{129326}, "vomiting_face"), 101 | newEmoji("sneezing face", []int32{129319}, "sneezing_face"), 102 | newEmoji("hot face", []int32{129397}, "hot_face"), 103 | newEmoji("cold face", []int32{129398}, "cold_face"), 104 | newEmoji("woozy face", []int32{129396}, "woozy_face"), 105 | newEmoji("dizzy face", []int32{128565}, "dizzy_face"), 106 | newEmoji("exploding head", []int32{129327}, "exploding_head"), 107 | newEmoji("cowboy hat face", []int32{129312}, "cowboy_hat_face"), 108 | newEmoji("partying face", []int32{129395}, "partying_face"), 109 | newEmoji("smiling face with sunglasses", []int32{128526}, "sunglasses"), 110 | newEmoji("nerd face", []int32{129299}, "nerd_face"), 111 | newEmoji("face with monocle", []int32{129488}, "monocle_face"), 112 | newEmoji("confused face", []int32{128533}, "confused"), 113 | newEmoji("worried face", []int32{128543}, "worried"), 114 | newEmoji("slightly frowning face", []int32{128577}, "slightly_frowning_face"), 115 | newEmoji("frowning face", []int32{9785, 65039}, "frowning_face"), 116 | newEmoji("face with open mouth", []int32{128558}, "open_mouth"), 117 | newEmoji("hushed face", []int32{128559}, "hushed"), 118 | newEmoji("astonished face", []int32{128562}, "astonished"), 119 | newEmoji("flushed face", []int32{128563}, "flushed"), 120 | newEmoji("pleading face", []int32{129402}, "pleading_face"), 121 | newEmoji("frowning face with open mouth", []int32{128550}, "frowning"), 122 | newEmoji("anguished face", []int32{128551}, "anguished"), 123 | newEmoji("fearful face", []int32{128552}, "fearful"), 124 | newEmoji("anxious face with sweat", []int32{128560}, "cold_sweat"), 125 | newEmoji("sad but relieved face", []int32{128549}, "disappointed_relieved"), 126 | newEmoji("crying face", []int32{128546}, "cry"), 127 | newEmoji("loudly crying face", []int32{128557}, "sob"), 128 | newEmoji("face screaming in fear", []int32{128561}, "scream"), 129 | newEmoji("confounded face", []int32{128534}, "confounded"), 130 | newEmoji("persevering face", []int32{128547}, "persevere"), 131 | newEmoji("disappointed face", []int32{128542}, "disappointed"), 132 | newEmoji("downcast face with sweat", []int32{128531}, "sweat"), 133 | newEmoji("weary face", []int32{128553}, "weary"), 134 | newEmoji("tired face", []int32{128555}, "tired_face"), 135 | newEmoji("yawning face", []int32{129393}, "yawning_face"), 136 | newEmoji("face with steam from nose", []int32{128548}, "triumph"), 137 | newEmoji("pouting face", []int32{128545}, "rage", "pout"), 138 | newEmoji("angry face", []int32{128544}, "angry"), 139 | newEmoji("face with symbols on mouth", []int32{129324}, "cursing_face"), 140 | newEmoji("smiling face with horns", []int32{128520}, "smiling_imp"), 141 | newEmoji("angry face with horns", []int32{128127}, "imp"), 142 | newEmoji("skull", []int32{128128}, "skull"), 143 | newEmoji("skull and crossbones", []int32{9760, 65039}, "skull_and_crossbones"), 144 | newEmoji("pile of poo", []int32{128169}, "hankey", "poop", "shit"), 145 | newEmoji("clown face", []int32{129313}, "clown_face"), 146 | newEmoji("ogre", []int32{128121}, "japanese_ogre"), 147 | newEmoji("goblin", []int32{128122}, "japanese_goblin"), 148 | newEmoji("ghost", []int32{128123}, "ghost"), 149 | newEmoji("alien", []int32{128125}, "alien"), 150 | newEmoji("alien monster", []int32{128126}, "space_invader"), 151 | newEmoji("robot", []int32{129302}, "robot"), 152 | newEmoji("grinning cat", []int32{128570}, "smiley_cat"), 153 | newEmoji("grinning cat with smiling eyes", []int32{128568}, "smile_cat"), 154 | newEmoji("cat with tears of joy", []int32{128569}, "joy_cat"), 155 | newEmoji("smiling cat with heart-eyes", []int32{128571}, "heart_eyes_cat"), 156 | newEmoji("cat with wry smile", []int32{128572}, "smirk_cat"), 157 | newEmoji("kissing cat", []int32{128573}, "kissing_cat"), 158 | newEmoji("weary cat", []int32{128576}, "scream_cat"), 159 | newEmoji("crying cat", []int32{128575}, "crying_cat_face"), 160 | newEmoji("pouting cat", []int32{128574}, "pouting_cat"), 161 | newEmoji("see-no-evil monkey", []int32{128584}, "see_no_evil"), 162 | newEmoji("hear-no-evil monkey", []int32{128585}, "hear_no_evil"), 163 | newEmoji("speak-no-evil monkey", []int32{128586}, "speak_no_evil"), 164 | newEmoji("kiss mark", []int32{128139}, "kiss"), 165 | newEmoji("love letter", []int32{128140}, "love_letter"), 166 | newEmoji("heart with arrow", []int32{128152}, "cupid"), 167 | newEmoji("heart with ribbon", []int32{128157}, "gift_heart"), 168 | newEmoji("sparkling heart", []int32{128150}, "sparkling_heart"), 169 | newEmoji("growing heart", []int32{128151}, "heartpulse"), 170 | newEmoji("beating heart", []int32{128147}, "heartbeat"), 171 | newEmoji("revolving hearts", []int32{128158}, "revolving_hearts"), 172 | newEmoji("two hearts", []int32{128149}, "two_hearts"), 173 | newEmoji("heart decoration", []int32{128159}, "heart_decoration"), 174 | newEmoji("heart exclamation", []int32{10083, 65039}, "heavy_heart_exclamation"), 175 | newEmoji("broken heart", []int32{128148}, "broken_heart"), 176 | newEmoji("red heart", []int32{10084, 65039}, "heart"), 177 | newEmoji("orange heart", []int32{129505}, "orange_heart"), 178 | newEmoji("yellow heart", []int32{128155}, "yellow_heart"), 179 | newEmoji("green heart", []int32{128154}, "green_heart"), 180 | newEmoji("blue heart", []int32{128153}, "blue_heart"), 181 | newEmoji("purple heart", []int32{128156}, "purple_heart"), 182 | newEmoji("brown heart", []int32{129294}, "brown_heart"), 183 | newEmoji("black heart", []int32{128420}, "black_heart"), 184 | newEmoji("white heart", []int32{129293}, "white_heart"), 185 | newEmoji("hundred points", []int32{128175}, "100"), 186 | newEmoji("anger symbol", []int32{128162}, "anger"), 187 | newEmoji("collision", []int32{128165}, "boom", "collision"), 188 | newEmoji("dizzy", []int32{128171}, "dizzy"), 189 | newEmoji("sweat droplets", []int32{128166}, "sweat_drops"), 190 | newEmoji("dashing away", []int32{128168}, "dash"), 191 | newEmoji("hole", []int32{128371, 65039}, "hole"), 192 | newEmoji("bomb", []int32{128163}, "bomb"), 193 | newEmoji("speech balloon", []int32{128172}, "speech_balloon"), 194 | newEmoji("eye in speech bubble", []int32{128065, 65039, 8205, 128488, 65039}, "eye_speech_bubble"), 195 | newEmoji("left speech bubble", []int32{128488, 65039}, "left_speech_bubble"), 196 | newEmoji("right anger bubble", []int32{128495, 65039}, "right_anger_bubble"), 197 | newEmoji("thought balloon", []int32{128173}, "thought_balloon"), 198 | newEmoji("zzz", []int32{128164}, "zzz"), 199 | newEmoji("waving hand", []int32{128075}, "wave"), 200 | newEmoji("raised back of hand", []int32{129306}, "raised_back_of_hand"), 201 | newEmoji("hand with fingers splayed", []int32{128400, 65039}, "raised_hand_with_fingers_splayed"), 202 | newEmoji("raised hand", []int32{9995}, "hand", "raised_hand"), 203 | newEmoji("vulcan salute", []int32{128406}, "vulcan_salute"), 204 | newEmoji("OK hand", []int32{128076}, "ok_hand"), 205 | newEmoji("pinching hand", []int32{129295}, "pinching_hand"), 206 | newEmoji("victory hand", []int32{9996, 65039}, "v"), 207 | newEmoji("crossed fingers", []int32{129310}, "crossed_fingers"), 208 | newEmoji("love-you gesture", []int32{129311}, "love_you_gesture"), 209 | newEmoji("sign of the horns", []int32{129304}, "metal"), 210 | newEmoji("call me hand", []int32{129305}, "call_me_hand"), 211 | newEmoji("backhand index pointing left", []int32{128072}, "point_left"), 212 | newEmoji("backhand index pointing right", []int32{128073}, "point_right"), 213 | newEmoji("backhand index pointing up", []int32{128070}, "point_up_2"), 214 | newEmoji("middle finger", []int32{128405}, "middle_finger", "fu"), 215 | newEmoji("backhand index pointing down", []int32{128071}, "point_down"), 216 | newEmoji("index pointing up", []int32{9757, 65039}, "point_up"), 217 | newEmoji("thumbs up", []int32{128077}, "+1", "thumbsup"), 218 | newEmoji("thumbs down", []int32{128078}, "-1", "thumbsdown"), 219 | newEmoji("raised fist", []int32{9994}, "fist_raised", "fist"), 220 | newEmoji("oncoming fist", []int32{128074}, "fist_oncoming", "facepunch", "punch"), 221 | newEmoji("left-facing fist", []int32{129307}, "fist_left"), 222 | newEmoji("right-facing fist", []int32{129308}, "fist_right"), 223 | newEmoji("clapping hands", []int32{128079}, "clap"), 224 | newEmoji("raising hands", []int32{128588}, "raised_hands"), 225 | newEmoji("open hands", []int32{128080}, "open_hands"), 226 | newEmoji("palms up together", []int32{129330}, "palms_up_together"), 227 | newEmoji("handshake", []int32{129309}, "handshake"), 228 | newEmoji("folded hands", []int32{128591}, "pray"), 229 | newEmoji("writing hand", []int32{9997, 65039}, "writing_hand"), 230 | newEmoji("nail polish", []int32{128133}, "nail_care"), 231 | newEmoji("selfie", []int32{129331}, "selfie"), 232 | newEmoji("flexed biceps", []int32{128170}, "muscle"), 233 | newEmoji("mechanical arm", []int32{129470}, "mechanical_arm"), 234 | newEmoji("mechanical leg", []int32{129471}, "mechanical_leg"), 235 | newEmoji("leg", []int32{129461}, "leg"), 236 | newEmoji("foot", []int32{129462}, "foot"), 237 | newEmoji("ear", []int32{128066}, "ear"), 238 | newEmoji("ear with hearing aid", []int32{129467}, "ear_with_hearing_aid"), 239 | newEmoji("nose", []int32{128067}, "nose"), 240 | newEmoji("brain", []int32{129504}, "brain"), 241 | newEmoji("tooth", []int32{129463}, "tooth"), 242 | newEmoji("bone", []int32{129460}, "bone"), 243 | newEmoji("eyes", []int32{128064}, "eyes"), 244 | newEmoji("eye", []int32{128065, 65039}, "eye"), 245 | newEmoji("tongue", []int32{128069}, "tongue"), 246 | newEmoji("mouth", []int32{128068}, "lips"), 247 | newEmoji("baby", []int32{128118}, "baby"), 248 | newEmoji("child", []int32{129490}, "child"), 249 | newEmoji("boy", []int32{128102}, "boy"), 250 | newEmoji("girl", []int32{128103}, "girl"), 251 | newEmoji("person", []int32{129489}, "adult"), 252 | newEmoji("person: blond hair", []int32{128113}, "blond_haired_person"), 253 | newEmoji("man", []int32{128104}, "man"), 254 | newEmoji("man: beard", []int32{129492}, "bearded_person"), 255 | newEmoji("man: red hair", []int32{128104, 8205, 129456}, "red_haired_man"), 256 | newEmoji("man: curly hair", []int32{128104, 8205, 129457}, "curly_haired_man"), 257 | newEmoji("man: white hair", []int32{128104, 8205, 129459}, "white_haired_man"), 258 | newEmoji("man: bald", []int32{128104, 8205, 129458}, "bald_man"), 259 | newEmoji("woman", []int32{128105}, "woman"), 260 | newEmoji("woman: red hair", []int32{128105, 8205, 129456}, "red_haired_woman"), 261 | newEmoji("person: red hair", []int32{129489, 8205, 129456}, "person_red_hair"), 262 | newEmoji("woman: curly hair", []int32{128105, 8205, 129457}, "curly_haired_woman"), 263 | newEmoji("person: curly hair", []int32{129489, 8205, 129457}, "person_curly_hair"), 264 | newEmoji("woman: white hair", []int32{128105, 8205, 129459}, "white_haired_woman"), 265 | newEmoji("person: white hair", []int32{129489, 8205, 129459}, "person_white_hair"), 266 | newEmoji("woman: bald", []int32{128105, 8205, 129458}, "bald_woman"), 267 | newEmoji("person: bald", []int32{129489, 8205, 129458}, "person_bald"), 268 | newEmoji("woman: blond hair", []int32{128113, 8205, 9792, 65039}, "blond_haired_woman", "blonde_woman"), 269 | newEmoji("man: blond hair", []int32{128113, 8205, 9794, 65039}, "blond_haired_man"), 270 | newEmoji("older person", []int32{129491}, "older_adult"), 271 | newEmoji("old man", []int32{128116}, "older_man"), 272 | newEmoji("old woman", []int32{128117}, "older_woman"), 273 | newEmoji("person frowning", []int32{128589}, "frowning_person"), 274 | newEmoji("man frowning", []int32{128589, 8205, 9794, 65039}, "frowning_man"), 275 | newEmoji("woman frowning", []int32{128589, 8205, 9792, 65039}, "frowning_woman"), 276 | newEmoji("person pouting", []int32{128590}, "pouting_face"), 277 | newEmoji("man pouting", []int32{128590, 8205, 9794, 65039}, "pouting_man"), 278 | newEmoji("woman pouting", []int32{128590, 8205, 9792, 65039}, "pouting_woman"), 279 | newEmoji("person gesturing NO", []int32{128581}, "no_good"), 280 | newEmoji("man gesturing NO", []int32{128581, 8205, 9794, 65039}, "no_good_man", "ng_man"), 281 | newEmoji("woman gesturing NO", []int32{128581, 8205, 9792, 65039}, "no_good_woman", "ng_woman"), 282 | newEmoji("person gesturing OK", []int32{128582}, "ok_person"), 283 | newEmoji("man gesturing OK", []int32{128582, 8205, 9794, 65039}, "ok_man"), 284 | newEmoji("woman gesturing OK", []int32{128582, 8205, 9792, 65039}, "ok_woman"), 285 | newEmoji("person tipping hand", []int32{128129}, "tipping_hand_person", "information_desk_person"), 286 | newEmoji("man tipping hand", []int32{128129, 8205, 9794, 65039}, "tipping_hand_man", "sassy_man"), 287 | newEmoji("woman tipping hand", []int32{128129, 8205, 9792, 65039}, "tipping_hand_woman", "sassy_woman"), 288 | newEmoji("person raising hand", []int32{128587}, "raising_hand"), 289 | newEmoji("man raising hand", []int32{128587, 8205, 9794, 65039}, "raising_hand_man"), 290 | newEmoji("woman raising hand", []int32{128587, 8205, 9792, 65039}, "raising_hand_woman"), 291 | newEmoji("deaf person", []int32{129487}, "deaf_person"), 292 | newEmoji("deaf man", []int32{129487, 8205, 9794, 65039}, "deaf_man"), 293 | newEmoji("deaf woman", []int32{129487, 8205, 9792, 65039}, "deaf_woman"), 294 | newEmoji("person bowing", []int32{128583}, "bow"), 295 | newEmoji("man bowing", []int32{128583, 8205, 9794, 65039}, "bowing_man"), 296 | newEmoji("woman bowing", []int32{128583, 8205, 9792, 65039}, "bowing_woman"), 297 | newEmoji("person facepalming", []int32{129318}, "facepalm"), 298 | newEmoji("man facepalming", []int32{129318, 8205, 9794, 65039}, "man_facepalming"), 299 | newEmoji("woman facepalming", []int32{129318, 8205, 9792, 65039}, "woman_facepalming"), 300 | newEmoji("person shrugging", []int32{129335}, "shrug"), 301 | newEmoji("man shrugging", []int32{129335, 8205, 9794, 65039}, "man_shrugging"), 302 | newEmoji("woman shrugging", []int32{129335, 8205, 9792, 65039}, "woman_shrugging"), 303 | newEmoji("health worker", []int32{129489, 8205, 9877, 65039}, "health_worker"), 304 | newEmoji("man health worker", []int32{128104, 8205, 9877, 65039}, "man_health_worker"), 305 | newEmoji("woman health worker", []int32{128105, 8205, 9877, 65039}, "woman_health_worker"), 306 | newEmoji("student", []int32{129489, 8205, 127891}, "student"), 307 | newEmoji("man student", []int32{128104, 8205, 127891}, "man_student"), 308 | newEmoji("woman student", []int32{128105, 8205, 127891}, "woman_student"), 309 | newEmoji("teacher", []int32{129489, 8205, 127979}, "teacher"), 310 | newEmoji("man teacher", []int32{128104, 8205, 127979}, "man_teacher"), 311 | newEmoji("woman teacher", []int32{128105, 8205, 127979}, "woman_teacher"), 312 | newEmoji("judge", []int32{129489, 8205, 9878, 65039}, "judge"), 313 | newEmoji("man judge", []int32{128104, 8205, 9878, 65039}, "man_judge"), 314 | newEmoji("woman judge", []int32{128105, 8205, 9878, 65039}, "woman_judge"), 315 | newEmoji("farmer", []int32{129489, 8205, 127806}, "farmer"), 316 | newEmoji("man farmer", []int32{128104, 8205, 127806}, "man_farmer"), 317 | newEmoji("woman farmer", []int32{128105, 8205, 127806}, "woman_farmer"), 318 | newEmoji("cook", []int32{129489, 8205, 127859}, "cook"), 319 | newEmoji("man cook", []int32{128104, 8205, 127859}, "man_cook"), 320 | newEmoji("woman cook", []int32{128105, 8205, 127859}, "woman_cook"), 321 | newEmoji("mechanic", []int32{129489, 8205, 128295}, "mechanic"), 322 | newEmoji("man mechanic", []int32{128104, 8205, 128295}, "man_mechanic"), 323 | newEmoji("woman mechanic", []int32{128105, 8205, 128295}, "woman_mechanic"), 324 | newEmoji("factory worker", []int32{129489, 8205, 127981}, "factory_worker"), 325 | newEmoji("man factory worker", []int32{128104, 8205, 127981}, "man_factory_worker"), 326 | newEmoji("woman factory worker", []int32{128105, 8205, 127981}, "woman_factory_worker"), 327 | newEmoji("office worker", []int32{129489, 8205, 128188}, "office_worker"), 328 | newEmoji("man office worker", []int32{128104, 8205, 128188}, "man_office_worker"), 329 | newEmoji("woman office worker", []int32{128105, 8205, 128188}, "woman_office_worker"), 330 | newEmoji("scientist", []int32{129489, 8205, 128300}, "scientist"), 331 | newEmoji("man scientist", []int32{128104, 8205, 128300}, "man_scientist"), 332 | newEmoji("woman scientist", []int32{128105, 8205, 128300}, "woman_scientist"), 333 | newEmoji("technologist", []int32{129489, 8205, 128187}, "technologist"), 334 | newEmoji("man technologist", []int32{128104, 8205, 128187}, "man_technologist"), 335 | newEmoji("woman technologist", []int32{128105, 8205, 128187}, "woman_technologist"), 336 | newEmoji("singer", []int32{129489, 8205, 127908}, "singer"), 337 | newEmoji("man singer", []int32{128104, 8205, 127908}, "man_singer"), 338 | newEmoji("woman singer", []int32{128105, 8205, 127908}, "woman_singer"), 339 | newEmoji("artist", []int32{129489, 8205, 127912}, "artist"), 340 | newEmoji("man artist", []int32{128104, 8205, 127912}, "man_artist"), 341 | newEmoji("woman artist", []int32{128105, 8205, 127912}, "woman_artist"), 342 | newEmoji("pilot", []int32{129489, 8205, 9992, 65039}, "pilot"), 343 | newEmoji("man pilot", []int32{128104, 8205, 9992, 65039}, "man_pilot"), 344 | newEmoji("woman pilot", []int32{128105, 8205, 9992, 65039}, "woman_pilot"), 345 | newEmoji("astronaut", []int32{129489, 8205, 128640}, "astronaut"), 346 | newEmoji("man astronaut", []int32{128104, 8205, 128640}, "man_astronaut"), 347 | newEmoji("woman astronaut", []int32{128105, 8205, 128640}, "woman_astronaut"), 348 | newEmoji("firefighter", []int32{129489, 8205, 128658}, "firefighter"), 349 | newEmoji("man firefighter", []int32{128104, 8205, 128658}, "man_firefighter"), 350 | newEmoji("woman firefighter", []int32{128105, 8205, 128658}, "woman_firefighter"), 351 | newEmoji("police officer", []int32{128110}, "police_officer", "cop"), 352 | newEmoji("man police officer", []int32{128110, 8205, 9794, 65039}, "policeman"), 353 | newEmoji("woman police officer", []int32{128110, 8205, 9792, 65039}, "policewoman"), 354 | newEmoji("detective", []int32{128373, 65039}, "detective"), 355 | newEmoji("man detective", []int32{128373, 65039, 8205, 9794, 65039}, "male_detective"), 356 | newEmoji("woman detective", []int32{128373, 65039, 8205, 9792, 65039}, "female_detective"), 357 | newEmoji("guard", []int32{128130}, "guard"), 358 | newEmoji("man guard", []int32{128130, 8205, 9794, 65039}, "guardsman"), 359 | newEmoji("woman guard", []int32{128130, 8205, 9792, 65039}, "guardswoman"), 360 | newEmoji("construction worker", []int32{128119}, "construction_worker"), 361 | newEmoji("man construction worker", []int32{128119, 8205, 9794, 65039}, "construction_worker_man"), 362 | newEmoji("woman construction worker", []int32{128119, 8205, 9792, 65039}, "construction_worker_woman"), 363 | newEmoji("prince", []int32{129332}, "prince"), 364 | newEmoji("princess", []int32{128120}, "princess"), 365 | newEmoji("person wearing turban", []int32{128115}, "person_with_turban"), 366 | newEmoji("man wearing turban", []int32{128115, 8205, 9794, 65039}, "man_with_turban"), 367 | newEmoji("woman wearing turban", []int32{128115, 8205, 9792, 65039}, "woman_with_turban"), 368 | newEmoji("person with skullcap", []int32{128114}, "man_with_gua_pi_mao"), 369 | newEmoji("woman with headscarf", []int32{129493}, "woman_with_headscarf"), 370 | newEmoji("man in tuxedo", []int32{129333, 8205, 9794, 65039}, "man_in_tuxedo"), 371 | newEmoji("woman with veil", []int32{128112, 8205, 9792, 65039}, "bride_with_veil"), 372 | newEmoji("pregnant woman", []int32{129328}, "pregnant_woman"), 373 | newEmoji("breast-feeding", []int32{129329}, "breast_feeding"), 374 | newEmoji("baby angel", []int32{128124}, "angel"), 375 | newEmoji("Santa Claus", []int32{127877}, "santa"), 376 | newEmoji("Mrs. Claus", []int32{129334}, "mrs_claus"), 377 | newEmoji("superhero", []int32{129464}, "superhero"), 378 | newEmoji("man superhero", []int32{129464, 8205, 9794, 65039}, "superhero_man"), 379 | newEmoji("woman superhero", []int32{129464, 8205, 9792, 65039}, "superhero_woman"), 380 | newEmoji("supervillain", []int32{129465}, "supervillain"), 381 | newEmoji("man supervillain", []int32{129465, 8205, 9794, 65039}, "supervillain_man"), 382 | newEmoji("woman supervillain", []int32{129465, 8205, 9792, 65039}, "supervillain_woman"), 383 | newEmoji("mage", []int32{129497}, "mage"), 384 | newEmoji("man mage", []int32{129497, 8205, 9794, 65039}, "mage_man"), 385 | newEmoji("woman mage", []int32{129497, 8205, 9792, 65039}, "mage_woman"), 386 | newEmoji("fairy", []int32{129498}, "fairy"), 387 | newEmoji("man fairy", []int32{129498, 8205, 9794, 65039}, "fairy_man"), 388 | newEmoji("woman fairy", []int32{129498, 8205, 9792, 65039}, "fairy_woman"), 389 | newEmoji("vampire", []int32{129499}, "vampire"), 390 | newEmoji("man vampire", []int32{129499, 8205, 9794, 65039}, "vampire_man"), 391 | newEmoji("woman vampire", []int32{129499, 8205, 9792, 65039}, "vampire_woman"), 392 | newEmoji("merperson", []int32{129500}, "merperson"), 393 | newEmoji("merman", []int32{129500, 8205, 9794, 65039}, "merman"), 394 | newEmoji("mermaid", []int32{129500, 8205, 9792, 65039}, "mermaid"), 395 | newEmoji("elf", []int32{129501}, "elf"), 396 | newEmoji("man elf", []int32{129501, 8205, 9794, 65039}, "elf_man"), 397 | newEmoji("woman elf", []int32{129501, 8205, 9792, 65039}, "elf_woman"), 398 | newEmoji("genie", []int32{129502}, "genie"), 399 | newEmoji("man genie", []int32{129502, 8205, 9794, 65039}, "genie_man"), 400 | newEmoji("woman genie", []int32{129502, 8205, 9792, 65039}, "genie_woman"), 401 | newEmoji("zombie", []int32{129503}, "zombie"), 402 | newEmoji("man zombie", []int32{129503, 8205, 9794, 65039}, "zombie_man"), 403 | newEmoji("woman zombie", []int32{129503, 8205, 9792, 65039}, "zombie_woman"), 404 | newEmoji("person getting massage", []int32{128134}, "massage"), 405 | newEmoji("man getting massage", []int32{128134, 8205, 9794, 65039}, "massage_man"), 406 | newEmoji("woman getting massage", []int32{128134, 8205, 9792, 65039}, "massage_woman"), 407 | newEmoji("person getting haircut", []int32{128135}, "haircut"), 408 | newEmoji("man getting haircut", []int32{128135, 8205, 9794, 65039}, "haircut_man"), 409 | newEmoji("woman getting haircut", []int32{128135, 8205, 9792, 65039}, "haircut_woman"), 410 | newEmoji("person walking", []int32{128694}, "walking"), 411 | newEmoji("man walking", []int32{128694, 8205, 9794, 65039}, "walking_man"), 412 | newEmoji("woman walking", []int32{128694, 8205, 9792, 65039}, "walking_woman"), 413 | newEmoji("person standing", []int32{129485}, "standing_person"), 414 | newEmoji("man standing", []int32{129485, 8205, 9794, 65039}, "standing_man"), 415 | newEmoji("woman standing", []int32{129485, 8205, 9792, 65039}, "standing_woman"), 416 | newEmoji("person kneeling", []int32{129486}, "kneeling_person"), 417 | newEmoji("man kneeling", []int32{129486, 8205, 9794, 65039}, "kneeling_man"), 418 | newEmoji("woman kneeling", []int32{129486, 8205, 9792, 65039}, "kneeling_woman"), 419 | newEmoji("person with white cane", []int32{129489, 8205, 129455}, "person_with_probing_cane"), 420 | newEmoji("man with white cane", []int32{128104, 8205, 129455}, "man_with_probing_cane"), 421 | newEmoji("woman with white cane", []int32{128105, 8205, 129455}, "woman_with_probing_cane"), 422 | newEmoji("person in motorized wheelchair", []int32{129489, 8205, 129468}, "person_in_motorized_wheelchair"), 423 | newEmoji("man in motorized wheelchair", []int32{128104, 8205, 129468}, "man_in_motorized_wheelchair"), 424 | newEmoji("woman in motorized wheelchair", []int32{128105, 8205, 129468}, "woman_in_motorized_wheelchair"), 425 | newEmoji("person in manual wheelchair", []int32{129489, 8205, 129469}, "person_in_manual_wheelchair"), 426 | newEmoji("man in manual wheelchair", []int32{128104, 8205, 129469}, "man_in_manual_wheelchair"), 427 | newEmoji("woman in manual wheelchair", []int32{128105, 8205, 129469}, "woman_in_manual_wheelchair"), 428 | newEmoji("person running", []int32{127939}, "runner", "running"), 429 | newEmoji("man running", []int32{127939, 8205, 9794, 65039}, "running_man"), 430 | newEmoji("woman running", []int32{127939, 8205, 9792, 65039}, "running_woman"), 431 | newEmoji("woman dancing", []int32{128131}, "woman_dancing", "dancer"), 432 | newEmoji("man dancing", []int32{128378}, "man_dancing"), 433 | newEmoji("person in suit levitating", []int32{128372, 65039}, "business_suit_levitating"), 434 | newEmoji("people with bunny ears", []int32{128111}, "dancers"), 435 | newEmoji("men with bunny ears", []int32{128111, 8205, 9794, 65039}, "dancing_men"), 436 | newEmoji("women with bunny ears", []int32{128111, 8205, 9792, 65039}, "dancing_women"), 437 | newEmoji("person in steamy room", []int32{129494}, "sauna_person"), 438 | newEmoji("man in steamy room", []int32{129494, 8205, 9794, 65039}, "sauna_man"), 439 | newEmoji("woman in steamy room", []int32{129494, 8205, 9792, 65039}, "sauna_woman"), 440 | newEmoji("person climbing", []int32{129495}, "climbing"), 441 | newEmoji("man climbing", []int32{129495, 8205, 9794, 65039}, "climbing_man"), 442 | newEmoji("woman climbing", []int32{129495, 8205, 9792, 65039}, "climbing_woman"), 443 | newEmoji("person fencing", []int32{129338}, "person_fencing"), 444 | newEmoji("horse racing", []int32{127943}, "horse_racing"), 445 | newEmoji("skier", []int32{9975, 65039}, "skier"), 446 | newEmoji("snowboarder", []int32{127938}, "snowboarder"), 447 | newEmoji("person golfing", []int32{127948, 65039}, "golfing"), 448 | newEmoji("man golfing", []int32{127948, 65039, 8205, 9794, 65039}, "golfing_man"), 449 | newEmoji("woman golfing", []int32{127948, 65039, 8205, 9792, 65039}, "golfing_woman"), 450 | newEmoji("person surfing", []int32{127940}, "surfer"), 451 | newEmoji("man surfing", []int32{127940, 8205, 9794, 65039}, "surfing_man"), 452 | newEmoji("woman surfing", []int32{127940, 8205, 9792, 65039}, "surfing_woman"), 453 | newEmoji("person rowing boat", []int32{128675}, "rowboat"), 454 | newEmoji("man rowing boat", []int32{128675, 8205, 9794, 65039}, "rowing_man"), 455 | newEmoji("woman rowing boat", []int32{128675, 8205, 9792, 65039}, "rowing_woman"), 456 | newEmoji("person swimming", []int32{127946}, "swimmer"), 457 | newEmoji("man swimming", []int32{127946, 8205, 9794, 65039}, "swimming_man"), 458 | newEmoji("woman swimming", []int32{127946, 8205, 9792, 65039}, "swimming_woman"), 459 | newEmoji("person bouncing ball", []int32{9977, 65039}, "bouncing_ball_person"), 460 | newEmoji("man bouncing ball", []int32{9977, 65039, 8205, 9794, 65039}, "bouncing_ball_man", "basketball_man"), 461 | newEmoji("woman bouncing ball", []int32{9977, 65039, 8205, 9792, 65039}, "bouncing_ball_woman", "basketball_woman"), 462 | newEmoji("person lifting weights", []int32{127947, 65039}, "weight_lifting"), 463 | newEmoji("man lifting weights", []int32{127947, 65039, 8205, 9794, 65039}, "weight_lifting_man"), 464 | newEmoji("woman lifting weights", []int32{127947, 65039, 8205, 9792, 65039}, "weight_lifting_woman"), 465 | newEmoji("person biking", []int32{128692}, "bicyclist"), 466 | newEmoji("man biking", []int32{128692, 8205, 9794, 65039}, "biking_man"), 467 | newEmoji("woman biking", []int32{128692, 8205, 9792, 65039}, "biking_woman"), 468 | newEmoji("person mountain biking", []int32{128693}, "mountain_bicyclist"), 469 | newEmoji("man mountain biking", []int32{128693, 8205, 9794, 65039}, "mountain_biking_man"), 470 | newEmoji("woman mountain biking", []int32{128693, 8205, 9792, 65039}, "mountain_biking_woman"), 471 | newEmoji("person cartwheeling", []int32{129336}, "cartwheeling"), 472 | newEmoji("man cartwheeling", []int32{129336, 8205, 9794, 65039}, "man_cartwheeling"), 473 | newEmoji("woman cartwheeling", []int32{129336, 8205, 9792, 65039}, "woman_cartwheeling"), 474 | newEmoji("people wrestling", []int32{129340}, "wrestling"), 475 | newEmoji("men wrestling", []int32{129340, 8205, 9794, 65039}, "men_wrestling"), 476 | newEmoji("women wrestling", []int32{129340, 8205, 9792, 65039}, "women_wrestling"), 477 | newEmoji("person playing water polo", []int32{129341}, "water_polo"), 478 | newEmoji("man playing water polo", []int32{129341, 8205, 9794, 65039}, "man_playing_water_polo"), 479 | newEmoji("woman playing water polo", []int32{129341, 8205, 9792, 65039}, "woman_playing_water_polo"), 480 | newEmoji("person playing handball", []int32{129342}, "handball_person"), 481 | newEmoji("man playing handball", []int32{129342, 8205, 9794, 65039}, "man_playing_handball"), 482 | newEmoji("woman playing handball", []int32{129342, 8205, 9792, 65039}, "woman_playing_handball"), 483 | newEmoji("person juggling", []int32{129337}, "juggling_person"), 484 | newEmoji("man juggling", []int32{129337, 8205, 9794, 65039}, "man_juggling"), 485 | newEmoji("woman juggling", []int32{129337, 8205, 9792, 65039}, "woman_juggling"), 486 | newEmoji("person in lotus position", []int32{129496}, "lotus_position"), 487 | newEmoji("man in lotus position", []int32{129496, 8205, 9794, 65039}, "lotus_position_man"), 488 | newEmoji("woman in lotus position", []int32{129496, 8205, 9792, 65039}, "lotus_position_woman"), 489 | newEmoji("person taking bath", []int32{128704}, "bath"), 490 | newEmoji("person in bed", []int32{128716}, "sleeping_bed"), 491 | newEmoji("people holding hands", []int32{129489, 8205, 129309, 8205, 129489}, "people_holding_hands"), 492 | newEmoji("women holding hands", []int32{128109}, "two_women_holding_hands"), 493 | newEmoji("woman and man holding hands", []int32{128107}, "couple"), 494 | newEmoji("men holding hands", []int32{128108}, "two_men_holding_hands"), 495 | newEmoji("kiss", []int32{128143}, "couplekiss"), 496 | newEmoji("kiss: woman, man", []int32{128105, 8205, 10084, 65039, 8205, 128139, 8205, 128104}, "couplekiss_man_woman"), 497 | newEmoji("kiss: man, man", []int32{128104, 8205, 10084, 65039, 8205, 128139, 8205, 128104}, "couplekiss_man_man"), 498 | newEmoji("kiss: woman, woman", []int32{128105, 8205, 10084, 65039, 8205, 128139, 8205, 128105}, "couplekiss_woman_woman"), 499 | newEmoji("couple with heart", []int32{128145}, "couple_with_heart"), 500 | newEmoji("couple with heart: woman, man", []int32{128105, 8205, 10084, 65039, 8205, 128104}, "couple_with_heart_woman_man"), 501 | newEmoji("couple with heart: man, man", []int32{128104, 8205, 10084, 65039, 8205, 128104}, "couple_with_heart_man_man"), 502 | newEmoji("couple with heart: woman, woman", []int32{128105, 8205, 10084, 65039, 8205, 128105}, "couple_with_heart_woman_woman"), 503 | newEmoji("family", []int32{128106}, "family"), 504 | newEmoji("family: man, woman, boy", []int32{128104, 8205, 128105, 8205, 128102}, "family_man_woman_boy"), 505 | newEmoji("family: man, woman, girl", []int32{128104, 8205, 128105, 8205, 128103}, "family_man_woman_girl"), 506 | newEmoji("family: man, woman, girl, boy", []int32{128104, 8205, 128105, 8205, 128103, 8205, 128102}, "family_man_woman_girl_boy"), 507 | newEmoji("family: man, woman, boy, boy", []int32{128104, 8205, 128105, 8205, 128102, 8205, 128102}, "family_man_woman_boy_boy"), 508 | newEmoji("family: man, woman, girl, girl", []int32{128104, 8205, 128105, 8205, 128103, 8205, 128103}, "family_man_woman_girl_girl"), 509 | newEmoji("family: man, man, boy", []int32{128104, 8205, 128104, 8205, 128102}, "family_man_man_boy"), 510 | newEmoji("family: man, man, girl", []int32{128104, 8205, 128104, 8205, 128103}, "family_man_man_girl"), 511 | newEmoji("family: man, man, girl, boy", []int32{128104, 8205, 128104, 8205, 128103, 8205, 128102}, "family_man_man_girl_boy"), 512 | newEmoji("family: man, man, boy, boy", []int32{128104, 8205, 128104, 8205, 128102, 8205, 128102}, "family_man_man_boy_boy"), 513 | newEmoji("family: man, man, girl, girl", []int32{128104, 8205, 128104, 8205, 128103, 8205, 128103}, "family_man_man_girl_girl"), 514 | newEmoji("family: woman, woman, boy", []int32{128105, 8205, 128105, 8205, 128102}, "family_woman_woman_boy"), 515 | newEmoji("family: woman, woman, girl", []int32{128105, 8205, 128105, 8205, 128103}, "family_woman_woman_girl"), 516 | newEmoji("family: woman, woman, girl, boy", []int32{128105, 8205, 128105, 8205, 128103, 8205, 128102}, "family_woman_woman_girl_boy"), 517 | newEmoji("family: woman, woman, boy, boy", []int32{128105, 8205, 128105, 8205, 128102, 8205, 128102}, "family_woman_woman_boy_boy"), 518 | newEmoji("family: woman, woman, girl, girl", []int32{128105, 8205, 128105, 8205, 128103, 8205, 128103}, "family_woman_woman_girl_girl"), 519 | newEmoji("family: man, boy", []int32{128104, 8205, 128102}, "family_man_boy"), 520 | newEmoji("family: man, boy, boy", []int32{128104, 8205, 128102, 8205, 128102}, "family_man_boy_boy"), 521 | newEmoji("family: man, girl", []int32{128104, 8205, 128103}, "family_man_girl"), 522 | newEmoji("family: man, girl, boy", []int32{128104, 8205, 128103, 8205, 128102}, "family_man_girl_boy"), 523 | newEmoji("family: man, girl, girl", []int32{128104, 8205, 128103, 8205, 128103}, "family_man_girl_girl"), 524 | newEmoji("family: woman, boy", []int32{128105, 8205, 128102}, "family_woman_boy"), 525 | newEmoji("family: woman, boy, boy", []int32{128105, 8205, 128102, 8205, 128102}, "family_woman_boy_boy"), 526 | newEmoji("family: woman, girl", []int32{128105, 8205, 128103}, "family_woman_girl"), 527 | newEmoji("family: woman, girl, boy", []int32{128105, 8205, 128103, 8205, 128102}, "family_woman_girl_boy"), 528 | newEmoji("family: woman, girl, girl", []int32{128105, 8205, 128103, 8205, 128103}, "family_woman_girl_girl"), 529 | newEmoji("speaking head", []int32{128483, 65039}, "speaking_head"), 530 | newEmoji("bust in silhouette", []int32{128100}, "bust_in_silhouette"), 531 | newEmoji("busts in silhouette", []int32{128101}, "busts_in_silhouette"), 532 | newEmoji("footprints", []int32{128099}, "footprints"), 533 | newEmoji("monkey face", []int32{128053}, "monkey_face"), 534 | newEmoji("monkey", []int32{128018}, "monkey"), 535 | newEmoji("gorilla", []int32{129421}, "gorilla"), 536 | newEmoji("orangutan", []int32{129447}, "orangutan"), 537 | newEmoji("dog face", []int32{128054}, "dog"), 538 | newEmoji("dog", []int32{128021}, "dog2"), 539 | newEmoji("guide dog", []int32{129454}, "guide_dog"), 540 | newEmoji("service dog", []int32{128021, 8205, 129466}, "service_dog"), 541 | newEmoji("poodle", []int32{128041}, "poodle"), 542 | newEmoji("wolf", []int32{128058}, "wolf"), 543 | newEmoji("fox", []int32{129418}, "fox_face"), 544 | newEmoji("raccoon", []int32{129437}, "raccoon"), 545 | newEmoji("cat face", []int32{128049}, "cat"), 546 | newEmoji("cat", []int32{128008}, "cat2"), 547 | newEmoji("lion", []int32{129409}, "lion"), 548 | newEmoji("tiger face", []int32{128047}, "tiger"), 549 | newEmoji("tiger", []int32{128005}, "tiger2"), 550 | newEmoji("leopard", []int32{128006}, "leopard"), 551 | newEmoji("horse face", []int32{128052}, "horse"), 552 | newEmoji("horse", []int32{128014}, "racehorse"), 553 | newEmoji("unicorn", []int32{129412}, "unicorn"), 554 | newEmoji("zebra", []int32{129427}, "zebra"), 555 | newEmoji("deer", []int32{129420}, "deer"), 556 | newEmoji("cow face", []int32{128046}, "cow"), 557 | newEmoji("ox", []int32{128002}, "ox"), 558 | newEmoji("water buffalo", []int32{128003}, "water_buffalo"), 559 | newEmoji("cow", []int32{128004}, "cow2"), 560 | newEmoji("pig face", []int32{128055}, "pig"), 561 | newEmoji("pig", []int32{128022}, "pig2"), 562 | newEmoji("boar", []int32{128023}, "boar"), 563 | newEmoji("pig nose", []int32{128061}, "pig_nose"), 564 | newEmoji("ram", []int32{128015}, "ram"), 565 | newEmoji("ewe", []int32{128017}, "sheep"), 566 | newEmoji("goat", []int32{128016}, "goat"), 567 | newEmoji("camel", []int32{128042}, "dromedary_camel"), 568 | newEmoji("two-hump camel", []int32{128043}, "camel"), 569 | newEmoji("llama", []int32{129433}, "llama"), 570 | newEmoji("giraffe", []int32{129426}, "giraffe"), 571 | newEmoji("elephant", []int32{128024}, "elephant"), 572 | newEmoji("rhinoceros", []int32{129423}, "rhinoceros"), 573 | newEmoji("hippopotamus", []int32{129435}, "hippopotamus"), 574 | newEmoji("mouse face", []int32{128045}, "mouse"), 575 | newEmoji("mouse", []int32{128001}, "mouse2"), 576 | newEmoji("rat", []int32{128000}, "rat"), 577 | newEmoji("hamster", []int32{128057}, "hamster"), 578 | newEmoji("rabbit face", []int32{128048}, "rabbit"), 579 | newEmoji("rabbit", []int32{128007}, "rabbit2"), 580 | newEmoji("chipmunk", []int32{128063, 65039}, "chipmunk"), 581 | newEmoji("hedgehog", []int32{129428}, "hedgehog"), 582 | newEmoji("bat", []int32{129415}, "bat"), 583 | newEmoji("bear", []int32{128059}, "bear"), 584 | newEmoji("koala", []int32{128040}, "koala"), 585 | newEmoji("panda", []int32{128060}, "panda_face"), 586 | newEmoji("sloth", []int32{129445}, "sloth"), 587 | newEmoji("otter", []int32{129446}, "otter"), 588 | newEmoji("skunk", []int32{129448}, "skunk"), 589 | newEmoji("kangaroo", []int32{129432}, "kangaroo"), 590 | newEmoji("badger", []int32{129441}, "badger"), 591 | newEmoji("paw prints", []int32{128062}, "feet", "paw_prints"), 592 | newEmoji("turkey", []int32{129411}, "turkey"), 593 | newEmoji("chicken", []int32{128020}, "chicken"), 594 | newEmoji("rooster", []int32{128019}, "rooster"), 595 | newEmoji("hatching chick", []int32{128035}, "hatching_chick"), 596 | newEmoji("baby chick", []int32{128036}, "baby_chick"), 597 | newEmoji("front-facing baby chick", []int32{128037}, "hatched_chick"), 598 | newEmoji("bird", []int32{128038}, "bird"), 599 | newEmoji("penguin", []int32{128039}, "penguin"), 600 | newEmoji("dove", []int32{128330, 65039}, "dove"), 601 | newEmoji("eagle", []int32{129413}, "eagle"), 602 | newEmoji("duck", []int32{129414}, "duck"), 603 | newEmoji("swan", []int32{129442}, "swan"), 604 | newEmoji("owl", []int32{129417}, "owl"), 605 | newEmoji("flamingo", []int32{129449}, "flamingo"), 606 | newEmoji("peacock", []int32{129434}, "peacock"), 607 | newEmoji("parrot", []int32{129436}, "parrot"), 608 | newEmoji("crocodile", []int32{128010}, "crocodile"), 609 | newEmoji("turtle", []int32{128034}, "turtle"), 610 | newEmoji("lizard", []int32{129422}, "lizard"), 611 | newEmoji("snake", []int32{128013}, "snake"), 612 | newEmoji("dragon face", []int32{128050}, "dragon_face"), 613 | newEmoji("dragon", []int32{128009}, "dragon"), 614 | newEmoji("sauropod", []int32{129429}, "sauropod"), 615 | newEmoji("T-Rex", []int32{129430}, "t-rex"), 616 | newEmoji("spouting whale", []int32{128051}, "whale"), 617 | newEmoji("whale", []int32{128011}, "whale2"), 618 | newEmoji("dolphin", []int32{128044}, "dolphin", "flipper"), 619 | newEmoji("fish", []int32{128031}, "fish"), 620 | newEmoji("tropical fish", []int32{128032}, "tropical_fish"), 621 | newEmoji("blowfish", []int32{128033}, "blowfish"), 622 | newEmoji("shark", []int32{129416}, "shark"), 623 | newEmoji("octopus", []int32{128025}, "octopus"), 624 | newEmoji("spiral shell", []int32{128026}, "shell"), 625 | newEmoji("snail", []int32{128012}, "snail"), 626 | newEmoji("butterfly", []int32{129419}, "butterfly"), 627 | newEmoji("bug", []int32{128027}, "bug"), 628 | newEmoji("ant", []int32{128028}, "ant"), 629 | newEmoji("honeybee", []int32{128029}, "bee", "honeybee"), 630 | newEmoji("beetle", []int32{129714}, "beetle"), 631 | newEmoji("cricket", []int32{129431}, "cricket"), 632 | newEmoji("spider", []int32{128375, 65039}, "spider"), 633 | newEmoji("spider web", []int32{128376, 65039}, "spider_web"), 634 | newEmoji("scorpion", []int32{129410}, "scorpion"), 635 | newEmoji("mosquito", []int32{129439}, "mosquito"), 636 | newEmoji("microbe", []int32{129440}, "microbe"), 637 | newEmoji("bouquet", []int32{128144}, "bouquet"), 638 | newEmoji("cherry blossom", []int32{127800}, "cherry_blossom"), 639 | newEmoji("white flower", []int32{128174}, "white_flower"), 640 | newEmoji("rosette", []int32{127989, 65039}, "rosette"), 641 | newEmoji("rose", []int32{127801}, "rose"), 642 | newEmoji("wilted flower", []int32{129344}, "wilted_flower"), 643 | newEmoji("hibiscus", []int32{127802}, "hibiscus"), 644 | newEmoji("sunflower", []int32{127803}, "sunflower"), 645 | newEmoji("blossom", []int32{127804}, "blossom"), 646 | newEmoji("tulip", []int32{127799}, "tulip"), 647 | newEmoji("seedling", []int32{127793}, "seedling"), 648 | newEmoji("evergreen tree", []int32{127794}, "evergreen_tree"), 649 | newEmoji("deciduous tree", []int32{127795}, "deciduous_tree"), 650 | newEmoji("palm tree", []int32{127796}, "palm_tree"), 651 | newEmoji("cactus", []int32{127797}, "cactus"), 652 | newEmoji("sheaf of rice", []int32{127806}, "ear_of_rice"), 653 | newEmoji("herb", []int32{127807}, "herb"), 654 | newEmoji("shamrock", []int32{9752, 65039}, "shamrock"), 655 | newEmoji("four leaf clover", []int32{127808}, "four_leaf_clover"), 656 | newEmoji("maple leaf", []int32{127809}, "maple_leaf"), 657 | newEmoji("fallen leaf", []int32{127810}, "fallen_leaf"), 658 | newEmoji("leaf fluttering in wind", []int32{127811}, "leaves"), 659 | newEmoji("grapes", []int32{127815}, "grapes"), 660 | newEmoji("melon", []int32{127816}, "melon"), 661 | newEmoji("watermelon", []int32{127817}, "watermelon"), 662 | newEmoji("tangerine", []int32{127818}, "tangerine", "orange", "mandarin"), 663 | newEmoji("lemon", []int32{127819}, "lemon"), 664 | newEmoji("banana", []int32{127820}, "banana"), 665 | newEmoji("pineapple", []int32{127821}, "pineapple"), 666 | newEmoji("mango", []int32{129389}, "mango"), 667 | newEmoji("red apple", []int32{127822}, "apple"), 668 | newEmoji("green apple", []int32{127823}, "green_apple"), 669 | newEmoji("pear", []int32{127824}, "pear"), 670 | newEmoji("peach", []int32{127825}, "peach"), 671 | newEmoji("cherries", []int32{127826}, "cherries"), 672 | newEmoji("strawberry", []int32{127827}, "strawberry"), 673 | newEmoji("kiwi fruit", []int32{129373}, "kiwi_fruit"), 674 | newEmoji("tomato", []int32{127813}, "tomato"), 675 | newEmoji("coconut", []int32{129381}, "coconut"), 676 | newEmoji("avocado", []int32{129361}, "avocado"), 677 | newEmoji("potato", []int32{129364}, "potato"), 678 | newEmoji("carrot", []int32{129365}, "carrot"), 679 | newEmoji("ear of corn", []int32{127805}, "corn"), 680 | newEmoji("hot pepper", []int32{127798, 65039}, "hot_pepper"), 681 | newEmoji("cucumber", []int32{129362}, "cucumber"), 682 | newEmoji("leafy green", []int32{129388}, "leafy_green"), 683 | newEmoji("broccoli", []int32{129382}, "broccoli"), 684 | newEmoji("garlic", []int32{129476}, "garlic"), 685 | newEmoji("onion", []int32{129477}, "onion"), 686 | newEmoji("mushroom", []int32{127812}, "mushroom"), 687 | newEmoji("peanuts", []int32{129372}, "peanuts"), 688 | newEmoji("chestnut", []int32{127792}, "chestnut"), 689 | newEmoji("bread", []int32{127838}, "bread"), 690 | newEmoji("croissant", []int32{129360}, "croissant"), 691 | newEmoji("baguette bread", []int32{129366}, "baguette_bread"), 692 | newEmoji("pretzel", []int32{129384}, "pretzel"), 693 | newEmoji("bagel", []int32{129391}, "bagel"), 694 | newEmoji("pancakes", []int32{129374}, "pancakes"), 695 | newEmoji("waffle", []int32{129479}, "waffle"), 696 | newEmoji("cheese wedge", []int32{129472}, "cheese"), 697 | newEmoji("meat on bone", []int32{127830}, "meat_on_bone"), 698 | newEmoji("poultry leg", []int32{127831}, "poultry_leg"), 699 | newEmoji("cut of meat", []int32{129385}, "cut_of_meat"), 700 | newEmoji("bacon", []int32{129363}, "bacon"), 701 | newEmoji("hamburger", []int32{127828}, "hamburger"), 702 | newEmoji("french fries", []int32{127839}, "fries"), 703 | newEmoji("pizza", []int32{127829}, "pizza"), 704 | newEmoji("hot dog", []int32{127789}, "hotdog"), 705 | newEmoji("sandwich", []int32{129386}, "sandwich"), 706 | newEmoji("taco", []int32{127790}, "taco"), 707 | newEmoji("burrito", []int32{127791}, "burrito"), 708 | newEmoji("stuffed flatbread", []int32{129369}, "stuffed_flatbread"), 709 | newEmoji("falafel", []int32{129478}, "falafel"), 710 | newEmoji("egg", []int32{129370}, "egg"), 711 | newEmoji("cooking", []int32{127859}, "fried_egg"), 712 | newEmoji("shallow pan of food", []int32{129368}, "shallow_pan_of_food"), 713 | newEmoji("pot of food", []int32{127858}, "stew"), 714 | newEmoji("bowl with spoon", []int32{129379}, "bowl_with_spoon"), 715 | newEmoji("green salad", []int32{129367}, "green_salad"), 716 | newEmoji("popcorn", []int32{127871}, "popcorn"), 717 | newEmoji("butter", []int32{129480}, "butter"), 718 | newEmoji("salt", []int32{129474}, "salt"), 719 | newEmoji("canned food", []int32{129387}, "canned_food"), 720 | newEmoji("bento box", []int32{127857}, "bento"), 721 | newEmoji("rice cracker", []int32{127832}, "rice_cracker"), 722 | newEmoji("rice ball", []int32{127833}, "rice_ball"), 723 | newEmoji("cooked rice", []int32{127834}, "rice"), 724 | newEmoji("curry rice", []int32{127835}, "curry"), 725 | newEmoji("steaming bowl", []int32{127836}, "ramen"), 726 | newEmoji("spaghetti", []int32{127837}, "spaghetti"), 727 | newEmoji("roasted sweet potato", []int32{127840}, "sweet_potato"), 728 | newEmoji("oden", []int32{127842}, "oden"), 729 | newEmoji("sushi", []int32{127843}, "sushi"), 730 | newEmoji("fried shrimp", []int32{127844}, "fried_shrimp"), 731 | newEmoji("fish cake with swirl", []int32{127845}, "fish_cake"), 732 | newEmoji("moon cake", []int32{129390}, "moon_cake"), 733 | newEmoji("dango", []int32{127841}, "dango"), 734 | newEmoji("dumpling", []int32{129375}, "dumpling"), 735 | newEmoji("fortune cookie", []int32{129376}, "fortune_cookie"), 736 | newEmoji("takeout box", []int32{129377}, "takeout_box"), 737 | newEmoji("crab", []int32{129408}, "crab"), 738 | newEmoji("lobster", []int32{129438}, "lobster"), 739 | newEmoji("shrimp", []int32{129424}, "shrimp"), 740 | newEmoji("squid", []int32{129425}, "squid"), 741 | newEmoji("oyster", []int32{129450}, "oyster"), 742 | newEmoji("soft ice cream", []int32{127846}, "icecream"), 743 | newEmoji("shaved ice", []int32{127847}, "shaved_ice"), 744 | newEmoji("ice cream", []int32{127848}, "ice_cream"), 745 | newEmoji("doughnut", []int32{127849}, "doughnut"), 746 | newEmoji("cookie", []int32{127850}, "cookie"), 747 | newEmoji("birthday cake", []int32{127874}, "birthday"), 748 | newEmoji("shortcake", []int32{127856}, "cake"), 749 | newEmoji("cupcake", []int32{129473}, "cupcake"), 750 | newEmoji("pie", []int32{129383}, "pie"), 751 | newEmoji("chocolate bar", []int32{127851}, "chocolate_bar"), 752 | newEmoji("candy", []int32{127852}, "candy"), 753 | newEmoji("lollipop", []int32{127853}, "lollipop"), 754 | newEmoji("custard", []int32{127854}, "custard"), 755 | newEmoji("honey pot", []int32{127855}, "honey_pot"), 756 | newEmoji("baby bottle", []int32{127868}, "baby_bottle"), 757 | newEmoji("glass of milk", []int32{129371}, "milk_glass"), 758 | newEmoji("hot beverage", []int32{9749}, "coffee"), 759 | newEmoji("teacup without handle", []int32{127861}, "tea"), 760 | newEmoji("sake", []int32{127862}, "sake"), 761 | newEmoji("bottle with popping cork", []int32{127870}, "champagne"), 762 | newEmoji("wine glass", []int32{127863}, "wine_glass"), 763 | newEmoji("cocktail glass", []int32{127864}, "cocktail"), 764 | newEmoji("tropical drink", []int32{127865}, "tropical_drink"), 765 | newEmoji("beer mug", []int32{127866}, "beer"), 766 | newEmoji("clinking beer mugs", []int32{127867}, "beers"), 767 | newEmoji("clinking glasses", []int32{129346}, "clinking_glasses"), 768 | newEmoji("tumbler glass", []int32{129347}, "tumbler_glass"), 769 | newEmoji("cup with straw", []int32{129380}, "cup_with_straw"), 770 | newEmoji("beverage box", []int32{129475}, "beverage_box"), 771 | newEmoji("mate", []int32{129481}, "mate"), 772 | newEmoji("ice", []int32{129482}, "ice_cube"), 773 | newEmoji("chopsticks", []int32{129378}, "chopsticks"), 774 | newEmoji("fork and knife with plate", []int32{127869, 65039}, "plate_with_cutlery"), 775 | newEmoji("fork and knife", []int32{127860}, "fork_and_knife"), 776 | newEmoji("spoon", []int32{129348}, "spoon"), 777 | newEmoji("kitchen knife", []int32{128298}, "hocho", "knife"), 778 | newEmoji("amphora", []int32{127994}, "amphora"), 779 | newEmoji("globe showing Europe-Africa", []int32{127757}, "earth_africa"), 780 | newEmoji("globe showing Americas", []int32{127758}, "earth_americas"), 781 | newEmoji("globe showing Asia-Australia", []int32{127759}, "earth_asia"), 782 | newEmoji("globe with meridians", []int32{127760}, "globe_with_meridians"), 783 | newEmoji("world map", []int32{128506, 65039}, "world_map"), 784 | newEmoji("map of Japan", []int32{128510}, "japan"), 785 | newEmoji("compass", []int32{129517}, "compass"), 786 | newEmoji("snow-capped mountain", []int32{127956, 65039}, "mountain_snow"), 787 | newEmoji("mountain", []int32{9968, 65039}, "mountain"), 788 | newEmoji("volcano", []int32{127755}, "volcano"), 789 | newEmoji("mount fuji", []int32{128507}, "mount_fuji"), 790 | newEmoji("camping", []int32{127957, 65039}, "camping"), 791 | newEmoji("beach with umbrella", []int32{127958, 65039}, "beach_umbrella"), 792 | newEmoji("desert", []int32{127964, 65039}, "desert"), 793 | newEmoji("desert island", []int32{127965, 65039}, "desert_island"), 794 | newEmoji("national park", []int32{127966, 65039}, "national_park"), 795 | newEmoji("stadium", []int32{127967, 65039}, "stadium"), 796 | newEmoji("classical building", []int32{127963, 65039}, "classical_building"), 797 | newEmoji("building construction", []int32{127959, 65039}, "building_construction"), 798 | newEmoji("brick", []int32{129521}, "bricks"), 799 | newEmoji("houses", []int32{127960, 65039}, "houses"), 800 | newEmoji("derelict house", []int32{127962, 65039}, "derelict_house"), 801 | newEmoji("house", []int32{127968}, "house"), 802 | newEmoji("house with garden", []int32{127969}, "house_with_garden"), 803 | newEmoji("office building", []int32{127970}, "office"), 804 | newEmoji("Japanese post office", []int32{127971}, "post_office"), 805 | newEmoji("post office", []int32{127972}, "european_post_office"), 806 | newEmoji("hospital", []int32{127973}, "hospital"), 807 | newEmoji("bank", []int32{127974}, "bank"), 808 | newEmoji("hotel", []int32{127976}, "hotel"), 809 | newEmoji("love hotel", []int32{127977}, "love_hotel"), 810 | newEmoji("convenience store", []int32{127978}, "convenience_store"), 811 | newEmoji("school", []int32{127979}, "school"), 812 | newEmoji("department store", []int32{127980}, "department_store"), 813 | newEmoji("factory", []int32{127981}, "factory"), 814 | newEmoji("Japanese castle", []int32{127983}, "japanese_castle"), 815 | newEmoji("castle", []int32{127984}, "european_castle"), 816 | newEmoji("wedding", []int32{128146}, "wedding"), 817 | newEmoji("Tokyo tower", []int32{128508}, "tokyo_tower"), 818 | newEmoji("Statue of Liberty", []int32{128509}, "statue_of_liberty"), 819 | newEmoji("church", []int32{9962}, "church"), 820 | newEmoji("mosque", []int32{128332}, "mosque"), 821 | newEmoji("hindu temple", []int32{128725}, "hindu_temple"), 822 | newEmoji("synagogue", []int32{128333}, "synagogue"), 823 | newEmoji("shinto shrine", []int32{9961, 65039}, "shinto_shrine"), 824 | newEmoji("kaaba", []int32{128331}, "kaaba"), 825 | newEmoji("fountain", []int32{9970}, "fountain"), 826 | newEmoji("tent", []int32{9978}, "tent"), 827 | newEmoji("foggy", []int32{127745}, "foggy"), 828 | newEmoji("night with stars", []int32{127747}, "night_with_stars"), 829 | newEmoji("cityscape", []int32{127961, 65039}, "cityscape"), 830 | newEmoji("sunrise over mountains", []int32{127748}, "sunrise_over_mountains"), 831 | newEmoji("sunrise", []int32{127749}, "sunrise"), 832 | newEmoji("cityscape at dusk", []int32{127750}, "city_sunset"), 833 | newEmoji("sunset", []int32{127751}, "city_sunrise"), 834 | newEmoji("bridge at night", []int32{127753}, "bridge_at_night"), 835 | newEmoji("hot springs", []int32{9832, 65039}, "hotsprings"), 836 | newEmoji("carousel horse", []int32{127904}, "carousel_horse"), 837 | newEmoji("ferris wheel", []int32{127905}, "ferris_wheel"), 838 | newEmoji("roller coaster", []int32{127906}, "roller_coaster"), 839 | newEmoji("barber pole", []int32{128136}, "barber"), 840 | newEmoji("circus tent", []int32{127914}, "circus_tent"), 841 | newEmoji("locomotive", []int32{128642}, "steam_locomotive"), 842 | newEmoji("railway car", []int32{128643}, "railway_car"), 843 | newEmoji("high-speed train", []int32{128644}, "bullettrain_side"), 844 | newEmoji("bullet train", []int32{128645}, "bullettrain_front"), 845 | newEmoji("train", []int32{128646}, "train2"), 846 | newEmoji("metro", []int32{128647}, "metro"), 847 | newEmoji("light rail", []int32{128648}, "light_rail"), 848 | newEmoji("station", []int32{128649}, "station"), 849 | newEmoji("tram", []int32{128650}, "tram"), 850 | newEmoji("monorail", []int32{128669}, "monorail"), 851 | newEmoji("mountain railway", []int32{128670}, "mountain_railway"), 852 | newEmoji("tram car", []int32{128651}, "train"), 853 | newEmoji("bus", []int32{128652}, "bus"), 854 | newEmoji("oncoming bus", []int32{128653}, "oncoming_bus"), 855 | newEmoji("trolleybus", []int32{128654}, "trolleybus"), 856 | newEmoji("minibus", []int32{128656}, "minibus"), 857 | newEmoji("ambulance", []int32{128657}, "ambulance"), 858 | newEmoji("fire engine", []int32{128658}, "fire_engine"), 859 | newEmoji("police car", []int32{128659}, "police_car"), 860 | newEmoji("oncoming police car", []int32{128660}, "oncoming_police_car"), 861 | newEmoji("taxi", []int32{128661}, "taxi"), 862 | newEmoji("oncoming taxi", []int32{128662}, "oncoming_taxi"), 863 | newEmoji("automobile", []int32{128663}, "car", "red_car"), 864 | newEmoji("oncoming automobile", []int32{128664}, "oncoming_automobile"), 865 | newEmoji("sport utility vehicle", []int32{128665}, "blue_car"), 866 | newEmoji("delivery truck", []int32{128666}, "truck"), 867 | newEmoji("articulated lorry", []int32{128667}, "articulated_lorry"), 868 | newEmoji("tractor", []int32{128668}, "tractor"), 869 | newEmoji("racing car", []int32{127950, 65039}, "racing_car"), 870 | newEmoji("motorcycle", []int32{127949, 65039}, "motorcycle"), 871 | newEmoji("motor scooter", []int32{128757}, "motor_scooter"), 872 | newEmoji("manual wheelchair", []int32{129469}, "manual_wheelchair"), 873 | newEmoji("motorized wheelchair", []int32{129468}, "motorized_wheelchair"), 874 | newEmoji("auto rickshaw", []int32{128762}, "auto_rickshaw"), 875 | newEmoji("bicycle", []int32{128690}, "bike"), 876 | newEmoji("kick scooter", []int32{128756}, "kick_scooter"), 877 | newEmoji("skateboard", []int32{128761}, "skateboard"), 878 | newEmoji("bus stop", []int32{128655}, "busstop"), 879 | newEmoji("motorway", []int32{128739, 65039}, "motorway"), 880 | newEmoji("railway track", []int32{128740, 65039}, "railway_track"), 881 | newEmoji("oil drum", []int32{128738, 65039}, "oil_drum"), 882 | newEmoji("fuel pump", []int32{9981}, "fuelpump"), 883 | newEmoji("police car light", []int32{128680}, "rotating_light"), 884 | newEmoji("horizontal traffic light", []int32{128677}, "traffic_light"), 885 | newEmoji("vertical traffic light", []int32{128678}, "vertical_traffic_light"), 886 | newEmoji("stop sign", []int32{128721}, "stop_sign"), 887 | newEmoji("construction", []int32{128679}, "construction"), 888 | newEmoji("anchor", []int32{9875}, "anchor"), 889 | newEmoji("sailboat", []int32{9973}, "boat", "sailboat"), 890 | newEmoji("canoe", []int32{128758}, "canoe"), 891 | newEmoji("speedboat", []int32{128676}, "speedboat"), 892 | newEmoji("passenger ship", []int32{128755, 65039}, "passenger_ship"), 893 | newEmoji("ferry", []int32{9972, 65039}, "ferry"), 894 | newEmoji("motor boat", []int32{128741, 65039}, "motor_boat"), 895 | newEmoji("ship", []int32{128674}, "ship"), 896 | newEmoji("airplane", []int32{9992, 65039}, "airplane"), 897 | newEmoji("small airplane", []int32{128745, 65039}, "small_airplane"), 898 | newEmoji("airplane departure", []int32{128747}, "flight_departure"), 899 | newEmoji("airplane arrival", []int32{128748}, "flight_arrival"), 900 | newEmoji("parachute", []int32{129666}, "parachute"), 901 | newEmoji("seat", []int32{128186}, "seat"), 902 | newEmoji("helicopter", []int32{128641}, "helicopter"), 903 | newEmoji("suspension railway", []int32{128671}, "suspension_railway"), 904 | newEmoji("mountain cableway", []int32{128672}, "mountain_cableway"), 905 | newEmoji("aerial tramway", []int32{128673}, "aerial_tramway"), 906 | newEmoji("satellite", []int32{128752, 65039}, "artificial_satellite"), 907 | newEmoji("rocket", []int32{128640}, "rocket"), 908 | newEmoji("flying saucer", []int32{128760}, "flying_saucer"), 909 | newEmoji("bellhop bell", []int32{128718, 65039}, "bellhop_bell"), 910 | newEmoji("luggage", []int32{129523}, "luggage"), 911 | newEmoji("hourglass done", []int32{8987}, "hourglass"), 912 | newEmoji("hourglass not done", []int32{9203}, "hourglass_flowing_sand"), 913 | newEmoji("watch", []int32{8986}, "watch"), 914 | newEmoji("alarm clock", []int32{9200}, "alarm_clock"), 915 | newEmoji("stopwatch", []int32{9201, 65039}, "stopwatch"), 916 | newEmoji("timer clock", []int32{9202, 65039}, "timer_clock"), 917 | newEmoji("mantelpiece clock", []int32{128368, 65039}, "mantelpiece_clock"), 918 | newEmoji("twelve o’clock", []int32{128347}, "clock12"), 919 | newEmoji("twelve-thirty", []int32{128359}, "clock1230"), 920 | newEmoji("one o’clock", []int32{128336}, "clock1"), 921 | newEmoji("one-thirty", []int32{128348}, "clock130"), 922 | newEmoji("two o’clock", []int32{128337}, "clock2"), 923 | newEmoji("two-thirty", []int32{128349}, "clock230"), 924 | newEmoji("three o’clock", []int32{128338}, "clock3"), 925 | newEmoji("three-thirty", []int32{128350}, "clock330"), 926 | newEmoji("four o’clock", []int32{128339}, "clock4"), 927 | newEmoji("four-thirty", []int32{128351}, "clock430"), 928 | newEmoji("five o’clock", []int32{128340}, "clock5"), 929 | newEmoji("five-thirty", []int32{128352}, "clock530"), 930 | newEmoji("six o’clock", []int32{128341}, "clock6"), 931 | newEmoji("six-thirty", []int32{128353}, "clock630"), 932 | newEmoji("seven o’clock", []int32{128342}, "clock7"), 933 | newEmoji("seven-thirty", []int32{128354}, "clock730"), 934 | newEmoji("eight o’clock", []int32{128343}, "clock8"), 935 | newEmoji("eight-thirty", []int32{128355}, "clock830"), 936 | newEmoji("nine o’clock", []int32{128344}, "clock9"), 937 | newEmoji("nine-thirty", []int32{128356}, "clock930"), 938 | newEmoji("ten o’clock", []int32{128345}, "clock10"), 939 | newEmoji("ten-thirty", []int32{128357}, "clock1030"), 940 | newEmoji("eleven o’clock", []int32{128346}, "clock11"), 941 | newEmoji("eleven-thirty", []int32{128358}, "clock1130"), 942 | newEmoji("new moon", []int32{127761}, "new_moon"), 943 | newEmoji("waxing crescent moon", []int32{127762}, "waxing_crescent_moon"), 944 | newEmoji("first quarter moon", []int32{127763}, "first_quarter_moon"), 945 | newEmoji("waxing gibbous moon", []int32{127764}, "moon", "waxing_gibbous_moon"), 946 | newEmoji("full moon", []int32{127765}, "full_moon"), 947 | newEmoji("waning gibbous moon", []int32{127766}, "waning_gibbous_moon"), 948 | newEmoji("last quarter moon", []int32{127767}, "last_quarter_moon"), 949 | newEmoji("waning crescent moon", []int32{127768}, "waning_crescent_moon"), 950 | newEmoji("crescent moon", []int32{127769}, "crescent_moon"), 951 | newEmoji("new moon face", []int32{127770}, "new_moon_with_face"), 952 | newEmoji("first quarter moon face", []int32{127771}, "first_quarter_moon_with_face"), 953 | newEmoji("last quarter moon face", []int32{127772}, "last_quarter_moon_with_face"), 954 | newEmoji("thermometer", []int32{127777, 65039}, "thermometer"), 955 | newEmoji("sun", []int32{9728, 65039}, "sunny"), 956 | newEmoji("full moon face", []int32{127773}, "full_moon_with_face"), 957 | newEmoji("sun with face", []int32{127774}, "sun_with_face"), 958 | newEmoji("ringed planet", []int32{129680}, "ringed_planet"), 959 | newEmoji("star", []int32{11088}, "star"), 960 | newEmoji("glowing star", []int32{127775}, "star2"), 961 | newEmoji("shooting star", []int32{127776}, "stars"), 962 | newEmoji("milky way", []int32{127756}, "milky_way"), 963 | newEmoji("cloud", []int32{9729, 65039}, "cloud"), 964 | newEmoji("sun behind cloud", []int32{9925}, "partly_sunny"), 965 | newEmoji("cloud with lightning and rain", []int32{9928, 65039}, "cloud_with_lightning_and_rain"), 966 | newEmoji("sun behind small cloud", []int32{127780, 65039}, "sun_behind_small_cloud"), 967 | newEmoji("sun behind large cloud", []int32{127781, 65039}, "sun_behind_large_cloud"), 968 | newEmoji("sun behind rain cloud", []int32{127782, 65039}, "sun_behind_rain_cloud"), 969 | newEmoji("cloud with rain", []int32{127783, 65039}, "cloud_with_rain"), 970 | newEmoji("cloud with snow", []int32{127784, 65039}, "cloud_with_snow"), 971 | newEmoji("cloud with lightning", []int32{127785, 65039}, "cloud_with_lightning"), 972 | newEmoji("tornado", []int32{127786, 65039}, "tornado"), 973 | newEmoji("fog", []int32{127787, 65039}, "fog"), 974 | newEmoji("wind face", []int32{127788, 65039}, "wind_face"), 975 | newEmoji("cyclone", []int32{127744}, "cyclone"), 976 | newEmoji("rainbow", []int32{127752}, "rainbow"), 977 | newEmoji("closed umbrella", []int32{127746}, "closed_umbrella"), 978 | newEmoji("umbrella", []int32{9730, 65039}, "open_umbrella"), 979 | newEmoji("umbrella with rain drops", []int32{9748}, "umbrella"), 980 | newEmoji("umbrella on ground", []int32{9969, 65039}, "parasol_on_ground"), 981 | newEmoji("high voltage", []int32{9889}, "zap"), 982 | newEmoji("snowflake", []int32{10052, 65039}, "snowflake"), 983 | newEmoji("snowman", []int32{9731, 65039}, "snowman_with_snow"), 984 | newEmoji("snowman without snow", []int32{9924}, "snowman"), 985 | newEmoji("comet", []int32{9732, 65039}, "comet"), 986 | newEmoji("fire", []int32{128293}, "fire"), 987 | newEmoji("droplet", []int32{128167}, "droplet"), 988 | newEmoji("water wave", []int32{127754}, "ocean"), 989 | newEmoji("jack-o-lantern", []int32{127875}, "jack_o_lantern"), 990 | newEmoji("Christmas tree", []int32{127876}, "christmas_tree"), 991 | newEmoji("fireworks", []int32{127878}, "fireworks"), 992 | newEmoji("sparkler", []int32{127879}, "sparkler"), 993 | newEmoji("firecracker", []int32{129512}, "firecracker"), 994 | newEmoji("sparkles", []int32{10024}, "sparkles"), 995 | newEmoji("balloon", []int32{127880}, "balloon"), 996 | newEmoji("party popper", []int32{127881}, "tada"), 997 | newEmoji("confetti ball", []int32{127882}, "confetti_ball"), 998 | newEmoji("tanabata tree", []int32{127883}, "tanabata_tree"), 999 | newEmoji("pine decoration", []int32{127885}, "bamboo"), 1000 | newEmoji("Japanese dolls", []int32{127886}, "dolls"), 1001 | newEmoji("carp streamer", []int32{127887}, "flags"), 1002 | newEmoji("wind chime", []int32{127888}, "wind_chime"), 1003 | newEmoji("moon viewing ceremony", []int32{127889}, "rice_scene"), 1004 | newEmoji("red envelope", []int32{129511}, "red_envelope"), 1005 | newEmoji("ribbon", []int32{127872}, "ribbon"), 1006 | newEmoji("wrapped gift", []int32{127873}, "gift"), 1007 | newEmoji("reminder ribbon", []int32{127895, 65039}, "reminder_ribbon"), 1008 | newEmoji("admission tickets", []int32{127903, 65039}, "tickets"), 1009 | newEmoji("ticket", []int32{127915}, "ticket"), 1010 | newEmoji("military medal", []int32{127894, 65039}, "medal_military"), 1011 | newEmoji("trophy", []int32{127942}, "trophy"), 1012 | newEmoji("sports medal", []int32{127941}, "medal_sports"), 1013 | newEmoji("1st place medal", []int32{129351}, "1st_place_medal"), 1014 | newEmoji("2nd place medal", []int32{129352}, "2nd_place_medal"), 1015 | newEmoji("3rd place medal", []int32{129353}, "3rd_place_medal"), 1016 | newEmoji("soccer ball", []int32{9917}, "soccer"), 1017 | newEmoji("baseball", []int32{9918}, "baseball"), 1018 | newEmoji("softball", []int32{129358}, "softball"), 1019 | newEmoji("basketball", []int32{127936}, "basketball"), 1020 | newEmoji("volleyball", []int32{127952}, "volleyball"), 1021 | newEmoji("american football", []int32{127944}, "football"), 1022 | newEmoji("rugby football", []int32{127945}, "rugby_football"), 1023 | newEmoji("tennis", []int32{127934}, "tennis"), 1024 | newEmoji("flying disc", []int32{129359}, "flying_disc"), 1025 | newEmoji("bowling", []int32{127923}, "bowling"), 1026 | newEmoji("cricket game", []int32{127951}, "cricket_game"), 1027 | newEmoji("field hockey", []int32{127953}, "field_hockey"), 1028 | newEmoji("ice hockey", []int32{127954}, "ice_hockey"), 1029 | newEmoji("lacrosse", []int32{129357}, "lacrosse"), 1030 | newEmoji("ping pong", []int32{127955}, "ping_pong"), 1031 | newEmoji("badminton", []int32{127992}, "badminton"), 1032 | newEmoji("boxing glove", []int32{129354}, "boxing_glove"), 1033 | newEmoji("martial arts uniform", []int32{129355}, "martial_arts_uniform"), 1034 | newEmoji("goal net", []int32{129349}, "goal_net"), 1035 | newEmoji("flag in hole", []int32{9971}, "golf"), 1036 | newEmoji("ice skate", []int32{9976, 65039}, "ice_skate"), 1037 | newEmoji("fishing pole", []int32{127907}, "fishing_pole_and_fish"), 1038 | newEmoji("diving mask", []int32{129343}, "diving_mask"), 1039 | newEmoji("running shirt", []int32{127933}, "running_shirt_with_sash"), 1040 | newEmoji("skis", []int32{127935}, "ski"), 1041 | newEmoji("sled", []int32{128759}, "sled"), 1042 | newEmoji("curling stone", []int32{129356}, "curling_stone"), 1043 | newEmoji("direct hit", []int32{127919}, "dart"), 1044 | newEmoji("yo-yo", []int32{129664}, "yo_yo"), 1045 | newEmoji("kite", []int32{129665}, "kite"), 1046 | newEmoji("pool 8 ball", []int32{127921}, "8ball"), 1047 | newEmoji("crystal ball", []int32{128302}, "crystal_ball"), 1048 | newEmoji("nazar amulet", []int32{129535}, "nazar_amulet"), 1049 | newEmoji("video game", []int32{127918}, "video_game"), 1050 | newEmoji("joystick", []int32{128377, 65039}, "joystick"), 1051 | newEmoji("slot machine", []int32{127920}, "slot_machine"), 1052 | newEmoji("game die", []int32{127922}, "game_die"), 1053 | newEmoji("puzzle piece", []int32{129513}, "jigsaw"), 1054 | newEmoji("teddy bear", []int32{129528}, "teddy_bear"), 1055 | newEmoji("spade suit", []int32{9824, 65039}, "spades"), 1056 | newEmoji("heart suit", []int32{9829, 65039}, "hearts"), 1057 | newEmoji("diamond suit", []int32{9830, 65039}, "diamonds"), 1058 | newEmoji("club suit", []int32{9827, 65039}, "clubs"), 1059 | newEmoji("chess pawn", []int32{9823, 65039}, "chess_pawn"), 1060 | newEmoji("joker", []int32{127183}, "black_joker"), 1061 | newEmoji("mahjong red dragon", []int32{126980}, "mahjong"), 1062 | newEmoji("flower playing cards", []int32{127924}, "flower_playing_cards"), 1063 | newEmoji("performing arts", []int32{127917}, "performing_arts"), 1064 | newEmoji("framed picture", []int32{128444, 65039}, "framed_picture"), 1065 | newEmoji("artist palette", []int32{127912}, "art"), 1066 | newEmoji("thread", []int32{129525}, "thread"), 1067 | newEmoji("yarn", []int32{129526}, "yarn"), 1068 | newEmoji("glasses", []int32{128083}, "eyeglasses"), 1069 | newEmoji("sunglasses", []int32{128374, 65039}, "dark_sunglasses"), 1070 | newEmoji("goggles", []int32{129405}, "goggles"), 1071 | newEmoji("lab coat", []int32{129404}, "lab_coat"), 1072 | newEmoji("safety vest", []int32{129466}, "safety_vest"), 1073 | newEmoji("necktie", []int32{128084}, "necktie"), 1074 | newEmoji("t-shirt", []int32{128085}, "shirt", "tshirt"), 1075 | newEmoji("jeans", []int32{128086}, "jeans"), 1076 | newEmoji("scarf", []int32{129507}, "scarf"), 1077 | newEmoji("gloves", []int32{129508}, "gloves"), 1078 | newEmoji("coat", []int32{129509}, "coat"), 1079 | newEmoji("socks", []int32{129510}, "socks"), 1080 | newEmoji("dress", []int32{128087}, "dress"), 1081 | newEmoji("kimono", []int32{128088}, "kimono"), 1082 | newEmoji("sari", []int32{129403}, "sari"), 1083 | newEmoji("one-piece swimsuit", []int32{129649}, "one_piece_swimsuit"), 1084 | newEmoji("briefs", []int32{129650}, "swim_brief"), 1085 | newEmoji("shorts", []int32{129651}, "shorts"), 1086 | newEmoji("bikini", []int32{128089}, "bikini"), 1087 | newEmoji("woman’s clothes", []int32{128090}, "womans_clothes"), 1088 | newEmoji("purse", []int32{128091}, "purse"), 1089 | newEmoji("handbag", []int32{128092}, "handbag"), 1090 | newEmoji("clutch bag", []int32{128093}, "pouch"), 1091 | newEmoji("shopping bags", []int32{128717, 65039}, "shopping"), 1092 | newEmoji("backpack", []int32{127890}, "school_satchel"), 1093 | newEmoji("man’s shoe", []int32{128094}, "mans_shoe", "shoe"), 1094 | newEmoji("running shoe", []int32{128095}, "athletic_shoe"), 1095 | newEmoji("hiking boot", []int32{129406}, "hiking_boot"), 1096 | newEmoji("flat shoe", []int32{129407}, "flat_shoe"), 1097 | newEmoji("high-heeled shoe", []int32{128096}, "high_heel"), 1098 | newEmoji("woman’s sandal", []int32{128097}, "sandal"), 1099 | newEmoji("ballet shoes", []int32{129648}, "ballet_shoes"), 1100 | newEmoji("woman’s boot", []int32{128098}, "boot"), 1101 | newEmoji("crown", []int32{128081}, "crown"), 1102 | newEmoji("woman’s hat", []int32{128082}, "womans_hat"), 1103 | newEmoji("top hat", []int32{127913}, "tophat"), 1104 | newEmoji("graduation cap", []int32{127891}, "mortar_board"), 1105 | newEmoji("billed cap", []int32{129506}, "billed_cap"), 1106 | newEmoji("rescue worker’s helmet", []int32{9937, 65039}, "rescue_worker_helmet"), 1107 | newEmoji("prayer beads", []int32{128255}, "prayer_beads"), 1108 | newEmoji("lipstick", []int32{128132}, "lipstick"), 1109 | newEmoji("ring", []int32{128141}, "ring"), 1110 | newEmoji("gem stone", []int32{128142}, "gem"), 1111 | newEmoji("muted speaker", []int32{128263}, "mute"), 1112 | newEmoji("speaker low volume", []int32{128264}, "speaker"), 1113 | newEmoji("speaker medium volume", []int32{128265}, "sound"), 1114 | newEmoji("speaker high volume", []int32{128266}, "loud_sound"), 1115 | newEmoji("loudspeaker", []int32{128226}, "loudspeaker"), 1116 | newEmoji("megaphone", []int32{128227}, "mega"), 1117 | newEmoji("postal horn", []int32{128239}, "postal_horn"), 1118 | newEmoji("bell", []int32{128276}, "bell"), 1119 | newEmoji("bell with slash", []int32{128277}, "no_bell"), 1120 | newEmoji("musical score", []int32{127932}, "musical_score"), 1121 | newEmoji("musical note", []int32{127925}, "musical_note"), 1122 | newEmoji("musical notes", []int32{127926}, "notes"), 1123 | newEmoji("studio microphone", []int32{127897, 65039}, "studio_microphone"), 1124 | newEmoji("level slider", []int32{127898, 65039}, "level_slider"), 1125 | newEmoji("control knobs", []int32{127899, 65039}, "control_knobs"), 1126 | newEmoji("microphone", []int32{127908}, "microphone"), 1127 | newEmoji("headphone", []int32{127911}, "headphones"), 1128 | newEmoji("radio", []int32{128251}, "radio"), 1129 | newEmoji("saxophone", []int32{127927}, "saxophone"), 1130 | newEmoji("guitar", []int32{127928}, "guitar"), 1131 | newEmoji("musical keyboard", []int32{127929}, "musical_keyboard"), 1132 | newEmoji("trumpet", []int32{127930}, "trumpet"), 1133 | newEmoji("violin", []int32{127931}, "violin"), 1134 | newEmoji("banjo", []int32{129685}, "banjo"), 1135 | newEmoji("drum", []int32{129345}, "drum"), 1136 | newEmoji("mobile phone", []int32{128241}, "iphone"), 1137 | newEmoji("mobile phone with arrow", []int32{128242}, "calling"), 1138 | newEmoji("telephone", []int32{9742, 65039}, "phone", "telephone"), 1139 | newEmoji("telephone receiver", []int32{128222}, "telephone_receiver"), 1140 | newEmoji("pager", []int32{128223}, "pager"), 1141 | newEmoji("fax machine", []int32{128224}, "fax"), 1142 | newEmoji("battery", []int32{128267}, "battery"), 1143 | newEmoji("electric plug", []int32{128268}, "electric_plug"), 1144 | newEmoji("laptop", []int32{128187}, "computer"), 1145 | newEmoji("desktop computer", []int32{128421, 65039}, "desktop_computer"), 1146 | newEmoji("printer", []int32{128424, 65039}, "printer"), 1147 | newEmoji("keyboard", []int32{9000, 65039}, "keyboard"), 1148 | newEmoji("computer mouse", []int32{128433, 65039}, "computer_mouse"), 1149 | newEmoji("trackball", []int32{128434, 65039}, "trackball"), 1150 | newEmoji("computer disk", []int32{128189}, "minidisc"), 1151 | newEmoji("floppy disk", []int32{128190}, "floppy_disk"), 1152 | newEmoji("optical disk", []int32{128191}, "cd"), 1153 | newEmoji("dvd", []int32{128192}, "dvd"), 1154 | newEmoji("abacus", []int32{129518}, "abacus"), 1155 | newEmoji("movie camera", []int32{127909}, "movie_camera"), 1156 | newEmoji("film frames", []int32{127902, 65039}, "film_strip"), 1157 | newEmoji("film projector", []int32{128253, 65039}, "film_projector"), 1158 | newEmoji("clapper board", []int32{127916}, "clapper"), 1159 | newEmoji("television", []int32{128250}, "tv"), 1160 | newEmoji("camera", []int32{128247}, "camera"), 1161 | newEmoji("camera with flash", []int32{128248}, "camera_flash"), 1162 | newEmoji("video camera", []int32{128249}, "video_camera"), 1163 | newEmoji("videocassette", []int32{128252}, "vhs"), 1164 | newEmoji("magnifying glass tilted left", []int32{128269}, "mag"), 1165 | newEmoji("magnifying glass tilted right", []int32{128270}, "mag_right"), 1166 | newEmoji("candle", []int32{128367, 65039}, "candle"), 1167 | newEmoji("light bulb", []int32{128161}, "bulb"), 1168 | newEmoji("flashlight", []int32{128294}, "flashlight"), 1169 | newEmoji("red paper lantern", []int32{127982}, "izakaya_lantern", "lantern"), 1170 | newEmoji("diya lamp", []int32{129684}, "diya_lamp"), 1171 | newEmoji("notebook with decorative cover", []int32{128212}, "notebook_with_decorative_cover"), 1172 | newEmoji("closed book", []int32{128213}, "closed_book"), 1173 | newEmoji("open book", []int32{128214}, "book", "open_book"), 1174 | newEmoji("green book", []int32{128215}, "green_book"), 1175 | newEmoji("blue book", []int32{128216}, "blue_book"), 1176 | newEmoji("orange book", []int32{128217}, "orange_book"), 1177 | newEmoji("books", []int32{128218}, "books"), 1178 | newEmoji("notebook", []int32{128211}, "notebook"), 1179 | newEmoji("ledger", []int32{128210}, "ledger"), 1180 | newEmoji("page with curl", []int32{128195}, "page_with_curl"), 1181 | newEmoji("scroll", []int32{128220}, "scroll"), 1182 | newEmoji("page facing up", []int32{128196}, "page_facing_up"), 1183 | newEmoji("newspaper", []int32{128240}, "newspaper"), 1184 | newEmoji("rolled-up newspaper", []int32{128478, 65039}, "newspaper_roll"), 1185 | newEmoji("bookmark tabs", []int32{128209}, "bookmark_tabs"), 1186 | newEmoji("bookmark", []int32{128278}, "bookmark"), 1187 | newEmoji("label", []int32{127991, 65039}, "label"), 1188 | newEmoji("money bag", []int32{128176}, "moneybag"), 1189 | newEmoji("yen banknote", []int32{128180}, "yen"), 1190 | newEmoji("dollar banknote", []int32{128181}, "dollar"), 1191 | newEmoji("euro banknote", []int32{128182}, "euro"), 1192 | newEmoji("pound banknote", []int32{128183}, "pound"), 1193 | newEmoji("money with wings", []int32{128184}, "money_with_wings"), 1194 | newEmoji("credit card", []int32{128179}, "credit_card"), 1195 | newEmoji("receipt", []int32{129534}, "receipt"), 1196 | newEmoji("chart increasing with yen", []int32{128185}, "chart"), 1197 | newEmoji("envelope", []int32{9993, 65039}, "envelope"), 1198 | newEmoji("e-mail", []int32{128231}, "email", "e-mail"), 1199 | newEmoji("incoming envelope", []int32{128232}, "incoming_envelope"), 1200 | newEmoji("envelope with arrow", []int32{128233}, "envelope_with_arrow"), 1201 | newEmoji("outbox tray", []int32{128228}, "outbox_tray"), 1202 | newEmoji("inbox tray", []int32{128229}, "inbox_tray"), 1203 | newEmoji("package", []int32{128230}, "package"), 1204 | newEmoji("closed mailbox with raised flag", []int32{128235}, "mailbox"), 1205 | newEmoji("closed mailbox with lowered flag", []int32{128234}, "mailbox_closed"), 1206 | newEmoji("open mailbox with raised flag", []int32{128236}, "mailbox_with_mail"), 1207 | newEmoji("open mailbox with lowered flag", []int32{128237}, "mailbox_with_no_mail"), 1208 | newEmoji("postbox", []int32{128238}, "postbox"), 1209 | newEmoji("ballot box with ballot", []int32{128499, 65039}, "ballot_box"), 1210 | newEmoji("pencil", []int32{9999, 65039}, "pencil2"), 1211 | newEmoji("black nib", []int32{10002, 65039}, "black_nib"), 1212 | newEmoji("fountain pen", []int32{128395, 65039}, "fountain_pen"), 1213 | newEmoji("pen", []int32{128394, 65039}, "pen"), 1214 | newEmoji("paintbrush", []int32{128396, 65039}, "paintbrush"), 1215 | newEmoji("crayon", []int32{128397, 65039}, "crayon"), 1216 | newEmoji("memo", []int32{128221}, "memo", "pencil"), 1217 | newEmoji("briefcase", []int32{128188}, "briefcase"), 1218 | newEmoji("file folder", []int32{128193}, "file_folder"), 1219 | newEmoji("open file folder", []int32{128194}, "open_file_folder"), 1220 | newEmoji("card index dividers", []int32{128450, 65039}, "card_index_dividers"), 1221 | newEmoji("calendar", []int32{128197}, "date"), 1222 | newEmoji("tear-off calendar", []int32{128198}, "calendar"), 1223 | newEmoji("spiral notepad", []int32{128466, 65039}, "spiral_notepad"), 1224 | newEmoji("spiral calendar", []int32{128467, 65039}, "spiral_calendar"), 1225 | newEmoji("card index", []int32{128199}, "card_index"), 1226 | newEmoji("chart increasing", []int32{128200}, "chart_with_upwards_trend"), 1227 | newEmoji("chart decreasing", []int32{128201}, "chart_with_downwards_trend"), 1228 | newEmoji("bar chart", []int32{128202}, "bar_chart"), 1229 | newEmoji("clipboard", []int32{128203}, "clipboard"), 1230 | newEmoji("pushpin", []int32{128204}, "pushpin"), 1231 | newEmoji("round pushpin", []int32{128205}, "round_pushpin"), 1232 | newEmoji("paperclip", []int32{128206}, "paperclip"), 1233 | newEmoji("linked paperclips", []int32{128391, 65039}, "paperclips"), 1234 | newEmoji("straight ruler", []int32{128207}, "straight_ruler"), 1235 | newEmoji("triangular ruler", []int32{128208}, "triangular_ruler"), 1236 | newEmoji("scissors", []int32{9986, 65039}, "scissors"), 1237 | newEmoji("card file box", []int32{128451, 65039}, "card_file_box"), 1238 | newEmoji("file cabinet", []int32{128452, 65039}, "file_cabinet"), 1239 | newEmoji("wastebasket", []int32{128465, 65039}, "wastebasket"), 1240 | newEmoji("locked", []int32{128274}, "lock"), 1241 | newEmoji("unlocked", []int32{128275}, "unlock"), 1242 | newEmoji("locked with pen", []int32{128271}, "lock_with_ink_pen"), 1243 | newEmoji("locked with key", []int32{128272}, "closed_lock_with_key"), 1244 | newEmoji("key", []int32{128273}, "key"), 1245 | newEmoji("old key", []int32{128477, 65039}, "old_key"), 1246 | newEmoji("hammer", []int32{128296}, "hammer"), 1247 | newEmoji("axe", []int32{129683}, "axe"), 1248 | newEmoji("pick", []int32{9935, 65039}, "pick"), 1249 | newEmoji("hammer and pick", []int32{9874, 65039}, "hammer_and_pick"), 1250 | newEmoji("hammer and wrench", []int32{128736, 65039}, "hammer_and_wrench"), 1251 | newEmoji("dagger", []int32{128481, 65039}, "dagger"), 1252 | newEmoji("crossed swords", []int32{9876, 65039}, "crossed_swords"), 1253 | newEmoji("pistol", []int32{128299}, "gun"), 1254 | newEmoji("bow and arrow", []int32{127993}, "bow_and_arrow"), 1255 | newEmoji("shield", []int32{128737, 65039}, "shield"), 1256 | newEmoji("wrench", []int32{128295}, "wrench"), 1257 | newEmoji("nut and bolt", []int32{128297}, "nut_and_bolt"), 1258 | newEmoji("gear", []int32{9881, 65039}, "gear"), 1259 | newEmoji("clamp", []int32{128476, 65039}, "clamp"), 1260 | newEmoji("balance scale", []int32{9878, 65039}, "balance_scale"), 1261 | newEmoji("white cane", []int32{129455}, "probing_cane"), 1262 | newEmoji("link", []int32{128279}, "link"), 1263 | newEmoji("chains", []int32{9939, 65039}, "chains"), 1264 | newEmoji("toolbox", []int32{129520}, "toolbox"), 1265 | newEmoji("magnet", []int32{129522}, "magnet"), 1266 | newEmoji("alembic", []int32{9879, 65039}, "alembic"), 1267 | newEmoji("test tube", []int32{129514}, "test_tube"), 1268 | newEmoji("petri dish", []int32{129515}, "petri_dish"), 1269 | newEmoji("dna", []int32{129516}, "dna"), 1270 | newEmoji("microscope", []int32{128300}, "microscope"), 1271 | newEmoji("telescope", []int32{128301}, "telescope"), 1272 | newEmoji("satellite antenna", []int32{128225}, "satellite"), 1273 | newEmoji("syringe", []int32{128137}, "syringe"), 1274 | newEmoji("drop of blood", []int32{129656}, "drop_of_blood"), 1275 | newEmoji("pill", []int32{128138}, "pill"), 1276 | newEmoji("adhesive bandage", []int32{129657}, "adhesive_bandage"), 1277 | newEmoji("stethoscope", []int32{129658}, "stethoscope"), 1278 | newEmoji("door", []int32{128682}, "door"), 1279 | newEmoji("bed", []int32{128719, 65039}, "bed"), 1280 | newEmoji("couch and lamp", []int32{128715, 65039}, "couch_and_lamp"), 1281 | newEmoji("chair", []int32{129681}, "chair"), 1282 | newEmoji("toilet", []int32{128701}, "toilet"), 1283 | newEmoji("shower", []int32{128703}, "shower"), 1284 | newEmoji("bathtub", []int32{128705}, "bathtub"), 1285 | newEmoji("razor", []int32{129682}, "razor"), 1286 | newEmoji("lotion bottle", []int32{129524}, "lotion_bottle"), 1287 | newEmoji("safety pin", []int32{129527}, "safety_pin"), 1288 | newEmoji("broom", []int32{129529}, "broom"), 1289 | newEmoji("basket", []int32{129530}, "basket"), 1290 | newEmoji("roll of paper", []int32{129531}, "roll_of_paper"), 1291 | newEmoji("soap", []int32{129532}, "soap"), 1292 | newEmoji("sponge", []int32{129533}, "sponge"), 1293 | newEmoji("fire extinguisher", []int32{129519}, "fire_extinguisher"), 1294 | newEmoji("shopping cart", []int32{128722}, "shopping_cart"), 1295 | newEmoji("cigarette", []int32{128684}, "smoking"), 1296 | newEmoji("coffin", []int32{9904, 65039}, "coffin"), 1297 | newEmoji("funeral urn", []int32{9905, 65039}, "funeral_urn"), 1298 | newEmoji("moai", []int32{128511}, "moyai"), 1299 | newEmoji("ATM sign", []int32{127975}, "atm"), 1300 | newEmoji("litter in bin sign", []int32{128686}, "put_litter_in_its_place"), 1301 | newEmoji("potable water", []int32{128688}, "potable_water"), 1302 | newEmoji("wheelchair symbol", []int32{9855}, "wheelchair"), 1303 | newEmoji("men’s room", []int32{128697}, "mens"), 1304 | newEmoji("women’s room", []int32{128698}, "womens"), 1305 | newEmoji("restroom", []int32{128699}, "restroom"), 1306 | newEmoji("baby symbol", []int32{128700}, "baby_symbol"), 1307 | newEmoji("water closet", []int32{128702}, "wc"), 1308 | newEmoji("passport control", []int32{128706}, "passport_control"), 1309 | newEmoji("customs", []int32{128707}, "customs"), 1310 | newEmoji("baggage claim", []int32{128708}, "baggage_claim"), 1311 | newEmoji("left luggage", []int32{128709}, "left_luggage"), 1312 | newEmoji("warning", []int32{9888, 65039}, "warning"), 1313 | newEmoji("children crossing", []int32{128696}, "children_crossing"), 1314 | newEmoji("no entry", []int32{9940}, "no_entry"), 1315 | newEmoji("prohibited", []int32{128683}, "no_entry_sign"), 1316 | newEmoji("no bicycles", []int32{128691}, "no_bicycles"), 1317 | newEmoji("no smoking", []int32{128685}, "no_smoking"), 1318 | newEmoji("no littering", []int32{128687}, "do_not_litter"), 1319 | newEmoji("non-potable water", []int32{128689}, "non-potable_water"), 1320 | newEmoji("no pedestrians", []int32{128695}, "no_pedestrians"), 1321 | newEmoji("no mobile phones", []int32{128245}, "no_mobile_phones"), 1322 | newEmoji("no one under eighteen", []int32{128286}, "underage"), 1323 | newEmoji("radioactive", []int32{9762, 65039}, "radioactive"), 1324 | newEmoji("biohazard", []int32{9763, 65039}, "biohazard"), 1325 | newEmoji("up arrow", []int32{11014, 65039}, "arrow_up"), 1326 | newEmoji("up-right arrow", []int32{8599, 65039}, "arrow_upper_right"), 1327 | newEmoji("right arrow", []int32{10145, 65039}, "arrow_right"), 1328 | newEmoji("down-right arrow", []int32{8600, 65039}, "arrow_lower_right"), 1329 | newEmoji("down arrow", []int32{11015, 65039}, "arrow_down"), 1330 | newEmoji("down-left arrow", []int32{8601, 65039}, "arrow_lower_left"), 1331 | newEmoji("left arrow", []int32{11013, 65039}, "arrow_left"), 1332 | newEmoji("up-left arrow", []int32{8598, 65039}, "arrow_upper_left"), 1333 | newEmoji("up-down arrow", []int32{8597, 65039}, "arrow_up_down"), 1334 | newEmoji("left-right arrow", []int32{8596, 65039}, "left_right_arrow"), 1335 | newEmoji("right arrow curving left", []int32{8617, 65039}, "leftwards_arrow_with_hook"), 1336 | newEmoji("left arrow curving right", []int32{8618, 65039}, "arrow_right_hook"), 1337 | newEmoji("right arrow curving up", []int32{10548, 65039}, "arrow_heading_up"), 1338 | newEmoji("right arrow curving down", []int32{10549, 65039}, "arrow_heading_down"), 1339 | newEmoji("clockwise vertical arrows", []int32{128259}, "arrows_clockwise"), 1340 | newEmoji("counterclockwise arrows button", []int32{128260}, "arrows_counterclockwise"), 1341 | newEmoji("BACK arrow", []int32{128281}, "back"), 1342 | newEmoji("END arrow", []int32{128282}, "end"), 1343 | newEmoji("ON! arrow", []int32{128283}, "on"), 1344 | newEmoji("SOON arrow", []int32{128284}, "soon"), 1345 | newEmoji("TOP arrow", []int32{128285}, "top"), 1346 | newEmoji("place of worship", []int32{128720}, "place_of_worship"), 1347 | newEmoji("atom symbol", []int32{9883, 65039}, "atom_symbol"), 1348 | newEmoji("om", []int32{128329, 65039}, "om"), 1349 | newEmoji("star of David", []int32{10017, 65039}, "star_of_david"), 1350 | newEmoji("wheel of dharma", []int32{9784, 65039}, "wheel_of_dharma"), 1351 | newEmoji("yin yang", []int32{9775, 65039}, "yin_yang"), 1352 | newEmoji("latin cross", []int32{10013, 65039}, "latin_cross"), 1353 | newEmoji("orthodox cross", []int32{9766, 65039}, "orthodox_cross"), 1354 | newEmoji("star and crescent", []int32{9770, 65039}, "star_and_crescent"), 1355 | newEmoji("peace symbol", []int32{9774, 65039}, "peace_symbol"), 1356 | newEmoji("menorah", []int32{128334}, "menorah"), 1357 | newEmoji("dotted six-pointed star", []int32{128303}, "six_pointed_star"), 1358 | newEmoji("Aries", []int32{9800}, "aries"), 1359 | newEmoji("Taurus", []int32{9801}, "taurus"), 1360 | newEmoji("Gemini", []int32{9802}, "gemini"), 1361 | newEmoji("Cancer", []int32{9803}, "cancer"), 1362 | newEmoji("Leo", []int32{9804}, "leo"), 1363 | newEmoji("Virgo", []int32{9805}, "virgo"), 1364 | newEmoji("Libra", []int32{9806}, "libra"), 1365 | newEmoji("Scorpio", []int32{9807}, "scorpius"), 1366 | newEmoji("Sagittarius", []int32{9808}, "sagittarius"), 1367 | newEmoji("Capricorn", []int32{9809}, "capricorn"), 1368 | newEmoji("Aquarius", []int32{9810}, "aquarius"), 1369 | newEmoji("Pisces", []int32{9811}, "pisces"), 1370 | newEmoji("Ophiuchus", []int32{9934}, "ophiuchus"), 1371 | newEmoji("shuffle tracks button", []int32{128256}, "twisted_rightwards_arrows"), 1372 | newEmoji("repeat button", []int32{128257}, "repeat"), 1373 | newEmoji("repeat single button", []int32{128258}, "repeat_one"), 1374 | newEmoji("play button", []int32{9654, 65039}, "arrow_forward"), 1375 | newEmoji("fast-forward button", []int32{9193}, "fast_forward"), 1376 | newEmoji("next track button", []int32{9197, 65039}, "next_track_button"), 1377 | newEmoji("play or pause button", []int32{9199, 65039}, "play_or_pause_button"), 1378 | newEmoji("reverse button", []int32{9664, 65039}, "arrow_backward"), 1379 | newEmoji("fast reverse button", []int32{9194}, "rewind"), 1380 | newEmoji("last track button", []int32{9198, 65039}, "previous_track_button"), 1381 | newEmoji("upwards button", []int32{128316}, "arrow_up_small"), 1382 | newEmoji("fast up button", []int32{9195}, "arrow_double_up"), 1383 | newEmoji("downwards button", []int32{128317}, "arrow_down_small"), 1384 | newEmoji("fast down button", []int32{9196}, "arrow_double_down"), 1385 | newEmoji("pause button", []int32{9208, 65039}, "pause_button"), 1386 | newEmoji("stop button", []int32{9209, 65039}, "stop_button"), 1387 | newEmoji("record button", []int32{9210, 65039}, "record_button"), 1388 | newEmoji("eject button", []int32{9167, 65039}, "eject_button"), 1389 | newEmoji("cinema", []int32{127910}, "cinema"), 1390 | newEmoji("dim button", []int32{128261}, "low_brightness"), 1391 | newEmoji("bright button", []int32{128262}, "high_brightness"), 1392 | newEmoji("antenna bars", []int32{128246}, "signal_strength"), 1393 | newEmoji("vibration mode", []int32{128243}, "vibration_mode"), 1394 | newEmoji("mobile phone off", []int32{128244}, "mobile_phone_off"), 1395 | newEmoji("female sign", []int32{9792, 65039}, "female_sign"), 1396 | newEmoji("male sign", []int32{9794, 65039}, "male_sign"), 1397 | newEmoji("multiply", []int32{10006, 65039}, "heavy_multiplication_x"), 1398 | newEmoji("plus", []int32{10133}, "heavy_plus_sign"), 1399 | newEmoji("minus", []int32{10134}, "heavy_minus_sign"), 1400 | newEmoji("divide", []int32{10135}, "heavy_division_sign"), 1401 | newEmoji("infinity", []int32{9854, 65039}, "infinity"), 1402 | newEmoji("double exclamation mark", []int32{8252, 65039}, "bangbang"), 1403 | newEmoji("exclamation question mark", []int32{8265, 65039}, "interrobang"), 1404 | newEmoji("question mark", []int32{10067}, "question"), 1405 | newEmoji("white question mark", []int32{10068}, "grey_question"), 1406 | newEmoji("white exclamation mark", []int32{10069}, "grey_exclamation"), 1407 | newEmoji("exclamation mark", []int32{10071}, "exclamation", "heavy_exclamation_mark"), 1408 | newEmoji("wavy dash", []int32{12336, 65039}, "wavy_dash"), 1409 | newEmoji("currency exchange", []int32{128177}, "currency_exchange"), 1410 | newEmoji("heavy dollar sign", []int32{128178}, "heavy_dollar_sign"), 1411 | newEmoji("medical symbol", []int32{9877, 65039}, "medical_symbol"), 1412 | newEmoji("recycling symbol", []int32{9851, 65039}, "recycle"), 1413 | newEmoji("fleur-de-lis", []int32{9884, 65039}, "fleur_de_lis"), 1414 | newEmoji("trident emblem", []int32{128305}, "trident"), 1415 | newEmoji("name badge", []int32{128219}, "name_badge"), 1416 | newEmoji("Japanese symbol for beginner", []int32{128304}, "beginner"), 1417 | newEmoji("hollow red circle", []int32{11093}, "o"), 1418 | newEmoji("check mark button", []int32{9989}, "white_check_mark"), 1419 | newEmoji("check box with check", []int32{9745, 65039}, "ballot_box_with_check"), 1420 | newEmoji("check mark", []int32{10004, 65039}, "heavy_check_mark"), 1421 | newEmoji("cross mark", []int32{10060}, "x"), 1422 | newEmoji("cross mark button", []int32{10062}, "negative_squared_cross_mark"), 1423 | newEmoji("curly loop", []int32{10160}, "curly_loop"), 1424 | newEmoji("double curly loop", []int32{10175}, "loop"), 1425 | newEmoji("part alternation mark", []int32{12349, 65039}, "part_alternation_mark"), 1426 | newEmoji("eight-spoked asterisk", []int32{10035, 65039}, "eight_spoked_asterisk"), 1427 | newEmoji("eight-pointed star", []int32{10036, 65039}, "eight_pointed_black_star"), 1428 | newEmoji("sparkle", []int32{10055, 65039}, "sparkle"), 1429 | newEmoji("copyright", []int32{169, 65039}, "copyright"), 1430 | newEmoji("registered", []int32{174, 65039}, "registered"), 1431 | newEmoji("trade mark", []int32{8482, 65039}, "tm"), 1432 | newEmoji("keycap: #", []int32{35, 65039, 8419}, "hash"), 1433 | newEmoji("keycap: *", []int32{42, 65039, 8419}, "asterisk"), 1434 | newEmoji("keycap: 0", []int32{48, 65039, 8419}, "zero"), 1435 | newEmoji("keycap: 1", []int32{49, 65039, 8419}, "one"), 1436 | newEmoji("keycap: 2", []int32{50, 65039, 8419}, "two"), 1437 | newEmoji("keycap: 3", []int32{51, 65039, 8419}, "three"), 1438 | newEmoji("keycap: 4", []int32{52, 65039, 8419}, "four"), 1439 | newEmoji("keycap: 5", []int32{53, 65039, 8419}, "five"), 1440 | newEmoji("keycap: 6", []int32{54, 65039, 8419}, "six"), 1441 | newEmoji("keycap: 7", []int32{55, 65039, 8419}, "seven"), 1442 | newEmoji("keycap: 8", []int32{56, 65039, 8419}, "eight"), 1443 | newEmoji("keycap: 9", []int32{57, 65039, 8419}, "nine"), 1444 | newEmoji("keycap: 10", []int32{128287}, "keycap_ten"), 1445 | newEmoji("input latin uppercase", []int32{128288}, "capital_abcd"), 1446 | newEmoji("input latin lowercase", []int32{128289}, "abcd"), 1447 | newEmoji("input numbers", []int32{128290}, "1234"), 1448 | newEmoji("input symbols", []int32{128291}, "symbols"), 1449 | newEmoji("input latin letters", []int32{128292}, "abc"), 1450 | newEmoji("A button (blood type)", []int32{127344, 65039}, "a"), 1451 | newEmoji("AB button (blood type)", []int32{127374}, "ab"), 1452 | newEmoji("B button (blood type)", []int32{127345, 65039}, "b"), 1453 | newEmoji("CL button", []int32{127377}, "cl"), 1454 | newEmoji("COOL button", []int32{127378}, "cool"), 1455 | newEmoji("FREE button", []int32{127379}, "free"), 1456 | newEmoji("information", []int32{8505, 65039}, "information_source"), 1457 | newEmoji("ID button", []int32{127380}, "id"), 1458 | newEmoji("circled M", []int32{9410, 65039}, "m"), 1459 | newEmoji("NEW button", []int32{127381}, "new"), 1460 | newEmoji("NG button", []int32{127382}, "ng"), 1461 | newEmoji("O button (blood type)", []int32{127358, 65039}, "o2"), 1462 | newEmoji("OK button", []int32{127383}, "ok"), 1463 | newEmoji("P button", []int32{127359, 65039}, "parking"), 1464 | newEmoji("SOS button", []int32{127384}, "sos"), 1465 | newEmoji("UP! button", []int32{127385}, "up"), 1466 | newEmoji("VS button", []int32{127386}, "vs"), 1467 | newEmoji("Japanese “here” button", []int32{127489}, "koko"), 1468 | newEmoji("Japanese “service charge” button", []int32{127490, 65039}, "sa"), 1469 | newEmoji("Japanese “monthly amount” button", []int32{127543, 65039}, "u6708"), 1470 | newEmoji("Japanese “not free of charge” button", []int32{127542}, "u6709"), 1471 | newEmoji("Japanese “reserved” button", []int32{127535}, "u6307"), 1472 | newEmoji("Japanese “bargain” button", []int32{127568}, "ideograph_advantage"), 1473 | newEmoji("Japanese “discount” button", []int32{127545}, "u5272"), 1474 | newEmoji("Japanese “free of charge” button", []int32{127514}, "u7121"), 1475 | newEmoji("Japanese “prohibited” button", []int32{127538}, "u7981"), 1476 | newEmoji("Japanese “acceptable” button", []int32{127569}, "accept"), 1477 | newEmoji("Japanese “application” button", []int32{127544}, "u7533"), 1478 | newEmoji("Japanese “passing grade” button", []int32{127540}, "u5408"), 1479 | newEmoji("Japanese “vacancy” button", []int32{127539}, "u7a7a"), 1480 | newEmoji("Japanese “congratulations” button", []int32{12951, 65039}, "congratulations"), 1481 | newEmoji("Japanese “secret” button", []int32{12953, 65039}, "secret"), 1482 | newEmoji("Japanese “open for business” button", []int32{127546}, "u55b6"), 1483 | newEmoji("Japanese “no vacancy” button", []int32{127541}, "u6e80"), 1484 | newEmoji("red circle", []int32{128308}, "red_circle"), 1485 | newEmoji("orange circle", []int32{128992}, "orange_circle"), 1486 | newEmoji("yellow circle", []int32{128993}, "yellow_circle"), 1487 | newEmoji("green circle", []int32{128994}, "green_circle"), 1488 | newEmoji("blue circle", []int32{128309}, "large_blue_circle"), 1489 | newEmoji("purple circle", []int32{128995}, "purple_circle"), 1490 | newEmoji("brown circle", []int32{128996}, "brown_circle"), 1491 | newEmoji("black circle", []int32{9899}, "black_circle"), 1492 | newEmoji("white circle", []int32{9898}, "white_circle"), 1493 | newEmoji("red square", []int32{128997}, "red_square"), 1494 | newEmoji("orange square", []int32{128999}, "orange_square"), 1495 | newEmoji("yellow square", []int32{129000}, "yellow_square"), 1496 | newEmoji("green square", []int32{129001}, "green_square"), 1497 | newEmoji("blue square", []int32{128998}, "blue_square"), 1498 | newEmoji("purple square", []int32{129002}, "purple_square"), 1499 | newEmoji("brown square", []int32{129003}, "brown_square"), 1500 | newEmoji("black large square", []int32{11035}, "black_large_square"), 1501 | newEmoji("white large square", []int32{11036}, "white_large_square"), 1502 | newEmoji("black medium square", []int32{9724, 65039}, "black_medium_square"), 1503 | newEmoji("white medium square", []int32{9723, 65039}, "white_medium_square"), 1504 | newEmoji("black medium-small square", []int32{9726}, "black_medium_small_square"), 1505 | newEmoji("white medium-small square", []int32{9725}, "white_medium_small_square"), 1506 | newEmoji("black small square", []int32{9642, 65039}, "black_small_square"), 1507 | newEmoji("white small square", []int32{9643, 65039}, "white_small_square"), 1508 | newEmoji("large orange diamond", []int32{128310}, "large_orange_diamond"), 1509 | newEmoji("large blue diamond", []int32{128311}, "large_blue_diamond"), 1510 | newEmoji("small orange diamond", []int32{128312}, "small_orange_diamond"), 1511 | newEmoji("small blue diamond", []int32{128313}, "small_blue_diamond"), 1512 | newEmoji("red triangle pointed up", []int32{128314}, "small_red_triangle"), 1513 | newEmoji("red triangle pointed down", []int32{128315}, "small_red_triangle_down"), 1514 | newEmoji("diamond with a dot", []int32{128160}, "diamond_shape_with_a_dot_inside"), 1515 | newEmoji("radio button", []int32{128280}, "radio_button"), 1516 | newEmoji("white square button", []int32{128307}, "white_square_button"), 1517 | newEmoji("black square button", []int32{128306}, "black_square_button"), 1518 | newEmoji("chequered flag", []int32{127937}, "checkered_flag"), 1519 | newEmoji("triangular flag", []int32{128681}, "triangular_flag_on_post"), 1520 | newEmoji("crossed flags", []int32{127884}, "crossed_flags"), 1521 | newEmoji("black flag", []int32{127988}, "black_flag"), 1522 | newEmoji("white flag", []int32{127987, 65039}, "white_flag"), 1523 | newEmoji("rainbow flag", []int32{127987, 65039, 8205, 127752}, "rainbow_flag"), 1524 | newEmoji("pirate flag", []int32{127988, 8205, 9760, 65039}, "pirate_flag"), 1525 | newEmoji("flag: Ascension Island", []int32{127462, 127464}, "ascension_island"), 1526 | newEmoji("flag: Andorra", []int32{127462, 127465}, "andorra"), 1527 | newEmoji("flag: United Arab Emirates", []int32{127462, 127466}, "united_arab_emirates"), 1528 | newEmoji("flag: Afghanistan", []int32{127462, 127467}, "afghanistan"), 1529 | newEmoji("flag: Antigua & Barbuda", []int32{127462, 127468}, "antigua_barbuda"), 1530 | newEmoji("flag: Anguilla", []int32{127462, 127470}, "anguilla"), 1531 | newEmoji("flag: Albania", []int32{127462, 127473}, "albania"), 1532 | newEmoji("flag: Armenia", []int32{127462, 127474}, "armenia"), 1533 | newEmoji("flag: Angola", []int32{127462, 127476}, "angola"), 1534 | newEmoji("flag: Antarctica", []int32{127462, 127478}, "antarctica"), 1535 | newEmoji("flag: Argentina", []int32{127462, 127479}, "argentina"), 1536 | newEmoji("flag: American Samoa", []int32{127462, 127480}, "american_samoa"), 1537 | newEmoji("flag: Austria", []int32{127462, 127481}, "austria"), 1538 | newEmoji("flag: Australia", []int32{127462, 127482}, "australia"), 1539 | newEmoji("flag: Aruba", []int32{127462, 127484}, "aruba"), 1540 | newEmoji("flag: Åland Islands", []int32{127462, 127485}, "aland_islands"), 1541 | newEmoji("flag: Azerbaijan", []int32{127462, 127487}, "azerbaijan"), 1542 | newEmoji("flag: Bosnia & Herzegovina", []int32{127463, 127462}, "bosnia_herzegovina"), 1543 | newEmoji("flag: Barbados", []int32{127463, 127463}, "barbados"), 1544 | newEmoji("flag: Bangladesh", []int32{127463, 127465}, "bangladesh"), 1545 | newEmoji("flag: Belgium", []int32{127463, 127466}, "belgium"), 1546 | newEmoji("flag: Burkina Faso", []int32{127463, 127467}, "burkina_faso"), 1547 | newEmoji("flag: Bulgaria", []int32{127463, 127468}, "bulgaria"), 1548 | newEmoji("flag: Bahrain", []int32{127463, 127469}, "bahrain"), 1549 | newEmoji("flag: Burundi", []int32{127463, 127470}, "burundi"), 1550 | newEmoji("flag: Benin", []int32{127463, 127471}, "benin"), 1551 | newEmoji("flag: St. Barthélemy", []int32{127463, 127473}, "st_barthelemy"), 1552 | newEmoji("flag: Bermuda", []int32{127463, 127474}, "bermuda"), 1553 | newEmoji("flag: Brunei", []int32{127463, 127475}, "brunei"), 1554 | newEmoji("flag: Bolivia", []int32{127463, 127476}, "bolivia"), 1555 | newEmoji("flag: Caribbean Netherlands", []int32{127463, 127478}, "caribbean_netherlands"), 1556 | newEmoji("flag: Brazil", []int32{127463, 127479}, "brazil"), 1557 | newEmoji("flag: Bahamas", []int32{127463, 127480}, "bahamas"), 1558 | newEmoji("flag: Bhutan", []int32{127463, 127481}, "bhutan"), 1559 | newEmoji("flag: Bouvet Island", []int32{127463, 127483}, "bouvet_island"), 1560 | newEmoji("flag: Botswana", []int32{127463, 127484}, "botswana"), 1561 | newEmoji("flag: Belarus", []int32{127463, 127486}, "belarus"), 1562 | newEmoji("flag: Belize", []int32{127463, 127487}, "belize"), 1563 | newEmoji("flag: Canada", []int32{127464, 127462}, "canada"), 1564 | newEmoji("flag: Cocos (Keeling) Islands", []int32{127464, 127464}, "cocos_islands"), 1565 | newEmoji("flag: Congo - Kinshasa", []int32{127464, 127465}, "congo_kinshasa"), 1566 | newEmoji("flag: Central African Republic", []int32{127464, 127467}, "central_african_republic"), 1567 | newEmoji("flag: Congo - Brazzaville", []int32{127464, 127468}, "congo_brazzaville"), 1568 | newEmoji("flag: Switzerland", []int32{127464, 127469}, "switzerland"), 1569 | newEmoji("flag: Côte d’Ivoire", []int32{127464, 127470}, "cote_divoire"), 1570 | newEmoji("flag: Cook Islands", []int32{127464, 127472}, "cook_islands"), 1571 | newEmoji("flag: Chile", []int32{127464, 127473}, "chile"), 1572 | newEmoji("flag: Cameroon", []int32{127464, 127474}, "cameroon"), 1573 | newEmoji("flag: China", []int32{127464, 127475}, "cn"), 1574 | newEmoji("flag: Colombia", []int32{127464, 127476}, "colombia"), 1575 | newEmoji("flag: Clipperton Island", []int32{127464, 127477}, "clipperton_island"), 1576 | newEmoji("flag: Costa Rica", []int32{127464, 127479}, "costa_rica"), 1577 | newEmoji("flag: Cuba", []int32{127464, 127482}, "cuba"), 1578 | newEmoji("flag: Cape Verde", []int32{127464, 127483}, "cape_verde"), 1579 | newEmoji("flag: Curaçao", []int32{127464, 127484}, "curacao"), 1580 | newEmoji("flag: Christmas Island", []int32{127464, 127485}, "christmas_island"), 1581 | newEmoji("flag: Cyprus", []int32{127464, 127486}, "cyprus"), 1582 | newEmoji("flag: Czechia", []int32{127464, 127487}, "czech_republic"), 1583 | newEmoji("flag: Germany", []int32{127465, 127466}, "de"), 1584 | newEmoji("flag: Diego Garcia", []int32{127465, 127468}, "diego_garcia"), 1585 | newEmoji("flag: Djibouti", []int32{127465, 127471}, "djibouti"), 1586 | newEmoji("flag: Denmark", []int32{127465, 127472}, "denmark"), 1587 | newEmoji("flag: Dominica", []int32{127465, 127474}, "dominica"), 1588 | newEmoji("flag: Dominican Republic", []int32{127465, 127476}, "dominican_republic"), 1589 | newEmoji("flag: Algeria", []int32{127465, 127487}, "algeria"), 1590 | newEmoji("flag: Ceuta & Melilla", []int32{127466, 127462}, "ceuta_melilla"), 1591 | newEmoji("flag: Ecuador", []int32{127466, 127464}, "ecuador"), 1592 | newEmoji("flag: Estonia", []int32{127466, 127466}, "estonia"), 1593 | newEmoji("flag: Egypt", []int32{127466, 127468}, "egypt"), 1594 | newEmoji("flag: Western Sahara", []int32{127466, 127469}, "western_sahara"), 1595 | newEmoji("flag: Eritrea", []int32{127466, 127479}, "eritrea"), 1596 | newEmoji("flag: Spain", []int32{127466, 127480}, "es"), 1597 | newEmoji("flag: Ethiopia", []int32{127466, 127481}, "ethiopia"), 1598 | newEmoji("flag: European Union", []int32{127466, 127482}, "eu", "european_union"), 1599 | newEmoji("flag: Finland", []int32{127467, 127470}, "finland"), 1600 | newEmoji("flag: Fiji", []int32{127467, 127471}, "fiji"), 1601 | newEmoji("flag: Falkland Islands", []int32{127467, 127472}, "falkland_islands"), 1602 | newEmoji("flag: Micronesia", []int32{127467, 127474}, "micronesia"), 1603 | newEmoji("flag: Faroe Islands", []int32{127467, 127476}, "faroe_islands"), 1604 | newEmoji("flag: France", []int32{127467, 127479}, "fr"), 1605 | newEmoji("flag: Gabon", []int32{127468, 127462}, "gabon"), 1606 | newEmoji("flag: United Kingdom", []int32{127468, 127463}, "gb", "uk"), 1607 | newEmoji("flag: Grenada", []int32{127468, 127465}, "grenada"), 1608 | newEmoji("flag: Georgia", []int32{127468, 127466}, "georgia"), 1609 | newEmoji("flag: French Guiana", []int32{127468, 127467}, "french_guiana"), 1610 | newEmoji("flag: Guernsey", []int32{127468, 127468}, "guernsey"), 1611 | newEmoji("flag: Ghana", []int32{127468, 127469}, "ghana"), 1612 | newEmoji("flag: Gibraltar", []int32{127468, 127470}, "gibraltar"), 1613 | newEmoji("flag: Greenland", []int32{127468, 127473}, "greenland"), 1614 | newEmoji("flag: Gambia", []int32{127468, 127474}, "gambia"), 1615 | newEmoji("flag: Guinea", []int32{127468, 127475}, "guinea"), 1616 | newEmoji("flag: Guadeloupe", []int32{127468, 127477}, "guadeloupe"), 1617 | newEmoji("flag: Equatorial Guinea", []int32{127468, 127478}, "equatorial_guinea"), 1618 | newEmoji("flag: Greece", []int32{127468, 127479}, "greece"), 1619 | newEmoji("flag: South Georgia & South Sandwich Islands", []int32{127468, 127480}, "south_georgia_south_sandwich_islands"), 1620 | newEmoji("flag: Guatemala", []int32{127468, 127481}, "guatemala"), 1621 | newEmoji("flag: Guam", []int32{127468, 127482}, "guam"), 1622 | newEmoji("flag: Guinea-Bissau", []int32{127468, 127484}, "guinea_bissau"), 1623 | newEmoji("flag: Guyana", []int32{127468, 127486}, "guyana"), 1624 | newEmoji("flag: Hong Kong SAR China", []int32{127469, 127472}, "hong_kong"), 1625 | newEmoji("flag: Heard & McDonald Islands", []int32{127469, 127474}, "heard_mcdonald_islands"), 1626 | newEmoji("flag: Honduras", []int32{127469, 127475}, "honduras"), 1627 | newEmoji("flag: Croatia", []int32{127469, 127479}, "croatia"), 1628 | newEmoji("flag: Haiti", []int32{127469, 127481}, "haiti"), 1629 | newEmoji("flag: Hungary", []int32{127469, 127482}, "hungary"), 1630 | newEmoji("flag: Canary Islands", []int32{127470, 127464}, "canary_islands"), 1631 | newEmoji("flag: Indonesia", []int32{127470, 127465}, "indonesia"), 1632 | newEmoji("flag: Ireland", []int32{127470, 127466}, "ireland"), 1633 | newEmoji("flag: Israel", []int32{127470, 127473}, "israel"), 1634 | newEmoji("flag: Isle of Man", []int32{127470, 127474}, "isle_of_man"), 1635 | newEmoji("flag: India", []int32{127470, 127475}, "india"), 1636 | newEmoji("flag: British Indian Ocean Territory", []int32{127470, 127476}, "british_indian_ocean_territory"), 1637 | newEmoji("flag: Iraq", []int32{127470, 127478}, "iraq"), 1638 | newEmoji("flag: Iran", []int32{127470, 127479}, "iran"), 1639 | newEmoji("flag: Iceland", []int32{127470, 127480}, "iceland"), 1640 | newEmoji("flag: Italy", []int32{127470, 127481}, "it"), 1641 | newEmoji("flag: Jersey", []int32{127471, 127466}, "jersey"), 1642 | newEmoji("flag: Jamaica", []int32{127471, 127474}, "jamaica"), 1643 | newEmoji("flag: Jordan", []int32{127471, 127476}, "jordan"), 1644 | newEmoji("flag: Japan", []int32{127471, 127477}, "jp"), 1645 | newEmoji("flag: Kenya", []int32{127472, 127466}, "kenya"), 1646 | newEmoji("flag: Kyrgyzstan", []int32{127472, 127468}, "kyrgyzstan"), 1647 | newEmoji("flag: Cambodia", []int32{127472, 127469}, "cambodia"), 1648 | newEmoji("flag: Kiribati", []int32{127472, 127470}, "kiribati"), 1649 | newEmoji("flag: Comoros", []int32{127472, 127474}, "comoros"), 1650 | newEmoji("flag: St. Kitts & Nevis", []int32{127472, 127475}, "st_kitts_nevis"), 1651 | newEmoji("flag: North Korea", []int32{127472, 127477}, "north_korea"), 1652 | newEmoji("flag: South Korea", []int32{127472, 127479}, "kr"), 1653 | newEmoji("flag: Kuwait", []int32{127472, 127484}, "kuwait"), 1654 | newEmoji("flag: Cayman Islands", []int32{127472, 127486}, "cayman_islands"), 1655 | newEmoji("flag: Kazakhstan", []int32{127472, 127487}, "kazakhstan"), 1656 | newEmoji("flag: Laos", []int32{127473, 127462}, "laos"), 1657 | newEmoji("flag: Lebanon", []int32{127473, 127463}, "lebanon"), 1658 | newEmoji("flag: St. Lucia", []int32{127473, 127464}, "st_lucia"), 1659 | newEmoji("flag: Liechtenstein", []int32{127473, 127470}, "liechtenstein"), 1660 | newEmoji("flag: Sri Lanka", []int32{127473, 127472}, "sri_lanka"), 1661 | newEmoji("flag: Liberia", []int32{127473, 127479}, "liberia"), 1662 | newEmoji("flag: Lesotho", []int32{127473, 127480}, "lesotho"), 1663 | newEmoji("flag: Lithuania", []int32{127473, 127481}, "lithuania"), 1664 | newEmoji("flag: Luxembourg", []int32{127473, 127482}, "luxembourg"), 1665 | newEmoji("flag: Latvia", []int32{127473, 127483}, "latvia"), 1666 | newEmoji("flag: Libya", []int32{127473, 127486}, "libya"), 1667 | newEmoji("flag: Morocco", []int32{127474, 127462}, "morocco"), 1668 | newEmoji("flag: Monaco", []int32{127474, 127464}, "monaco"), 1669 | newEmoji("flag: Moldova", []int32{127474, 127465}, "moldova"), 1670 | newEmoji("flag: Montenegro", []int32{127474, 127466}, "montenegro"), 1671 | newEmoji("flag: St. Martin", []int32{127474, 127467}, "st_martin"), 1672 | newEmoji("flag: Madagascar", []int32{127474, 127468}, "madagascar"), 1673 | newEmoji("flag: Marshall Islands", []int32{127474, 127469}, "marshall_islands"), 1674 | newEmoji("flag: North Macedonia", []int32{127474, 127472}, "macedonia"), 1675 | newEmoji("flag: Mali", []int32{127474, 127473}, "mali"), 1676 | newEmoji("flag: Myanmar (Burma)", []int32{127474, 127474}, "myanmar"), 1677 | newEmoji("flag: Mongolia", []int32{127474, 127475}, "mongolia"), 1678 | newEmoji("flag: Macao SAR China", []int32{127474, 127476}, "macau"), 1679 | newEmoji("flag: Northern Mariana Islands", []int32{127474, 127477}, "northern_mariana_islands"), 1680 | newEmoji("flag: Martinique", []int32{127474, 127478}, "martinique"), 1681 | newEmoji("flag: Mauritania", []int32{127474, 127479}, "mauritania"), 1682 | newEmoji("flag: Montserrat", []int32{127474, 127480}, "montserrat"), 1683 | newEmoji("flag: Malta", []int32{127474, 127481}, "malta"), 1684 | newEmoji("flag: Mauritius", []int32{127474, 127482}, "mauritius"), 1685 | newEmoji("flag: Maldives", []int32{127474, 127483}, "maldives"), 1686 | newEmoji("flag: Malawi", []int32{127474, 127484}, "malawi"), 1687 | newEmoji("flag: Mexico", []int32{127474, 127485}, "mexico"), 1688 | newEmoji("flag: Malaysia", []int32{127474, 127486}, "malaysia"), 1689 | newEmoji("flag: Mozambique", []int32{127474, 127487}, "mozambique"), 1690 | newEmoji("flag: Namibia", []int32{127475, 127462}, "namibia"), 1691 | newEmoji("flag: New Caledonia", []int32{127475, 127464}, "new_caledonia"), 1692 | newEmoji("flag: Niger", []int32{127475, 127466}, "niger"), 1693 | newEmoji("flag: Norfolk Island", []int32{127475, 127467}, "norfolk_island"), 1694 | newEmoji("flag: Nigeria", []int32{127475, 127468}, "nigeria"), 1695 | newEmoji("flag: Nicaragua", []int32{127475, 127470}, "nicaragua"), 1696 | newEmoji("flag: Netherlands", []int32{127475, 127473}, "netherlands"), 1697 | newEmoji("flag: Norway", []int32{127475, 127476}, "norway"), 1698 | newEmoji("flag: Nepal", []int32{127475, 127477}, "nepal"), 1699 | newEmoji("flag: Nauru", []int32{127475, 127479}, "nauru"), 1700 | newEmoji("flag: Niue", []int32{127475, 127482}, "niue"), 1701 | newEmoji("flag: New Zealand", []int32{127475, 127487}, "new_zealand"), 1702 | newEmoji("flag: Oman", []int32{127476, 127474}, "oman"), 1703 | newEmoji("flag: Panama", []int32{127477, 127462}, "panama"), 1704 | newEmoji("flag: Peru", []int32{127477, 127466}, "peru"), 1705 | newEmoji("flag: French Polynesia", []int32{127477, 127467}, "french_polynesia"), 1706 | newEmoji("flag: Papua New Guinea", []int32{127477, 127468}, "papua_new_guinea"), 1707 | newEmoji("flag: Philippines", []int32{127477, 127469}, "philippines"), 1708 | newEmoji("flag: Pakistan", []int32{127477, 127472}, "pakistan"), 1709 | newEmoji("flag: Poland", []int32{127477, 127473}, "poland"), 1710 | newEmoji("flag: St. Pierre & Miquelon", []int32{127477, 127474}, "st_pierre_miquelon"), 1711 | newEmoji("flag: Pitcairn Islands", []int32{127477, 127475}, "pitcairn_islands"), 1712 | newEmoji("flag: Puerto Rico", []int32{127477, 127479}, "puerto_rico"), 1713 | newEmoji("flag: Palestinian Territories", []int32{127477, 127480}, "palestinian_territories"), 1714 | newEmoji("flag: Portugal", []int32{127477, 127481}, "portugal"), 1715 | newEmoji("flag: Palau", []int32{127477, 127484}, "palau"), 1716 | newEmoji("flag: Paraguay", []int32{127477, 127486}, "paraguay"), 1717 | newEmoji("flag: Qatar", []int32{127478, 127462}, "qatar"), 1718 | newEmoji("flag: Réunion", []int32{127479, 127466}, "reunion"), 1719 | newEmoji("flag: Romania", []int32{127479, 127476}, "romania"), 1720 | newEmoji("flag: Serbia", []int32{127479, 127480}, "serbia"), 1721 | newEmoji("flag: Russia", []int32{127479, 127482}, "ru"), 1722 | newEmoji("flag: Rwanda", []int32{127479, 127484}, "rwanda"), 1723 | newEmoji("flag: Saudi Arabia", []int32{127480, 127462}, "saudi_arabia"), 1724 | newEmoji("flag: Solomon Islands", []int32{127480, 127463}, "solomon_islands"), 1725 | newEmoji("flag: Seychelles", []int32{127480, 127464}, "seychelles"), 1726 | newEmoji("flag: Sudan", []int32{127480, 127465}, "sudan"), 1727 | newEmoji("flag: Sweden", []int32{127480, 127466}, "sweden"), 1728 | newEmoji("flag: Singapore", []int32{127480, 127468}, "singapore"), 1729 | newEmoji("flag: St. Helena", []int32{127480, 127469}, "st_helena"), 1730 | newEmoji("flag: Slovenia", []int32{127480, 127470}, "slovenia"), 1731 | newEmoji("flag: Svalbard & Jan Mayen", []int32{127480, 127471}, "svalbard_jan_mayen"), 1732 | newEmoji("flag: Slovakia", []int32{127480, 127472}, "slovakia"), 1733 | newEmoji("flag: Sierra Leone", []int32{127480, 127473}, "sierra_leone"), 1734 | newEmoji("flag: San Marino", []int32{127480, 127474}, "san_marino"), 1735 | newEmoji("flag: Senegal", []int32{127480, 127475}, "senegal"), 1736 | newEmoji("flag: Somalia", []int32{127480, 127476}, "somalia"), 1737 | newEmoji("flag: Suriname", []int32{127480, 127479}, "suriname"), 1738 | newEmoji("flag: South Sudan", []int32{127480, 127480}, "south_sudan"), 1739 | newEmoji("flag: São Tomé & Príncipe", []int32{127480, 127481}, "sao_tome_principe"), 1740 | newEmoji("flag: El Salvador", []int32{127480, 127483}, "el_salvador"), 1741 | newEmoji("flag: Sint Maarten", []int32{127480, 127485}, "sint_maarten"), 1742 | newEmoji("flag: Syria", []int32{127480, 127486}, "syria"), 1743 | newEmoji("flag: Eswatini", []int32{127480, 127487}, "swaziland"), 1744 | newEmoji("flag: Tristan da Cunha", []int32{127481, 127462}, "tristan_da_cunha"), 1745 | newEmoji("flag: Turks & Caicos Islands", []int32{127481, 127464}, "turks_caicos_islands"), 1746 | newEmoji("flag: Chad", []int32{127481, 127465}, "chad"), 1747 | newEmoji("flag: French Southern Territories", []int32{127481, 127467}, "french_southern_territories"), 1748 | newEmoji("flag: Togo", []int32{127481, 127468}, "togo"), 1749 | newEmoji("flag: Thailand", []int32{127481, 127469}, "thailand"), 1750 | newEmoji("flag: Tajikistan", []int32{127481, 127471}, "tajikistan"), 1751 | newEmoji("flag: Tokelau", []int32{127481, 127472}, "tokelau"), 1752 | newEmoji("flag: Timor-Leste", []int32{127481, 127473}, "timor_leste"), 1753 | newEmoji("flag: Turkmenistan", []int32{127481, 127474}, "turkmenistan"), 1754 | newEmoji("flag: Tunisia", []int32{127481, 127475}, "tunisia"), 1755 | newEmoji("flag: Tonga", []int32{127481, 127476}, "tonga"), 1756 | newEmoji("flag: Turkey", []int32{127481, 127479}, "tr"), 1757 | newEmoji("flag: Trinidad & Tobago", []int32{127481, 127481}, "trinidad_tobago"), 1758 | newEmoji("flag: Tuvalu", []int32{127481, 127483}, "tuvalu"), 1759 | newEmoji("flag: Taiwan", []int32{127481, 127484}, "taiwan"), 1760 | newEmoji("flag: Tanzania", []int32{127481, 127487}, "tanzania"), 1761 | newEmoji("flag: Ukraine", []int32{127482, 127462}, "ukraine"), 1762 | newEmoji("flag: Uganda", []int32{127482, 127468}, "uganda"), 1763 | newEmoji("flag: U.S. Outlying Islands", []int32{127482, 127474}, "us_outlying_islands"), 1764 | newEmoji("flag: United Nations", []int32{127482, 127475}, "united_nations"), 1765 | newEmoji("flag: United States", []int32{127482, 127480}, "us"), 1766 | newEmoji("flag: Uruguay", []int32{127482, 127486}, "uruguay"), 1767 | newEmoji("flag: Uzbekistan", []int32{127482, 127487}, "uzbekistan"), 1768 | newEmoji("flag: Vatican City", []int32{127483, 127462}, "vatican_city"), 1769 | newEmoji("flag: St. Vincent & Grenadines", []int32{127483, 127464}, "st_vincent_grenadines"), 1770 | newEmoji("flag: Venezuela", []int32{127483, 127466}, "venezuela"), 1771 | newEmoji("flag: British Virgin Islands", []int32{127483, 127468}, "british_virgin_islands"), 1772 | newEmoji("flag: U.S. Virgin Islands", []int32{127483, 127470}, "us_virgin_islands"), 1773 | newEmoji("flag: Vietnam", []int32{127483, 127475}, "vietnam"), 1774 | newEmoji("flag: Vanuatu", []int32{127483, 127482}, "vanuatu"), 1775 | newEmoji("flag: Wallis & Futuna", []int32{127484, 127467}, "wallis_futuna"), 1776 | newEmoji("flag: Samoa", []int32{127484, 127480}, "samoa"), 1777 | newEmoji("flag: Kosovo", []int32{127485, 127472}, "kosovo"), 1778 | newEmoji("flag: Yemen", []int32{127486, 127466}, "yemen"), 1779 | newEmoji("flag: Mayotte", []int32{127486, 127481}, "mayotte"), 1780 | newEmoji("flag: South Africa", []int32{127487, 127462}, "south_africa"), 1781 | newEmoji("flag: Zambia", []int32{127487, 127474}, "zambia"), 1782 | newEmoji("flag: Zimbabwe", []int32{127487, 127484}, "zimbabwe"), 1783 | newEmoji("flag: England", []int32{127988, 917607, 917602, 917605, 917614, 917607, 917631}, "england"), 1784 | newEmoji("flag: Scotland", []int32{127988, 917607, 917602, 917619, 917603, 917620, 917631}, "scotland"), 1785 | newEmoji("flag: Wales", []int32{127988, 917607, 917602, 917623, 917612, 917619, 917631}, "wales"), 1786 | } 1787 | return emojiManager{emojis: emojis} 1788 | } 1789 | -------------------------------------------------------------------------------- /go.mod: -------------------------------------------------------------------------------- 1 | module github.com/vilmibm/gh-user-status 2 | 3 | go 1.16 4 | 5 | require ( 6 | github.com/AlecAivazis/survey/v2 v2.2.16 7 | github.com/cli/safeexec v1.0.0 8 | github.com/spf13/cobra v1.2.1 9 | ) 10 | -------------------------------------------------------------------------------- /go.sum: -------------------------------------------------------------------------------- 1 | cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 2 | cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= 3 | cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= 4 | cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= 5 | cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= 6 | cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= 7 | cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= 8 | cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= 9 | cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= 10 | cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= 11 | cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= 12 | cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= 13 | cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= 14 | cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= 15 | cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= 16 | cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= 17 | cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= 18 | cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= 19 | cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= 20 | cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= 21 | cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= 22 | cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= 23 | cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= 24 | cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= 25 | cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= 26 | cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= 27 | cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= 28 | cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= 29 | cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= 30 | cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= 31 | cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= 32 | cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= 33 | cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= 34 | cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= 35 | cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= 36 | cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= 37 | cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= 38 | cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= 39 | dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= 40 | github.com/AlecAivazis/survey/v2 v2.2.16 h1:KJ4fLFqY/NfR5OaFLcf4pThxrlV2YCHGCnCHAKLsJ+U= 41 | github.com/AlecAivazis/survey/v2 v2.2.16/go.mod h1:TH2kPCDU3Kqq7pLbnCWwZXDBjnhZtmsCle5EiYDJ2fg= 42 | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= 43 | github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= 44 | github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw= 45 | github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= 46 | github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= 47 | github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= 48 | github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= 49 | github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= 50 | github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= 51 | github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= 52 | github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= 53 | github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= 54 | github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= 55 | github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= 56 | github.com/cli/safeexec v1.0.0 h1:0VngyaIyqACHdcMNWfo6+KdUYnqEr2Sg+bSP1pdF+dI= 57 | github.com/cli/safeexec v1.0.0/go.mod h1:Z/D4tTN8Vs5gXYHDCbaM1S/anmEDnJb1iW0+EJ5zx3Q= 58 | github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= 59 | github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= 60 | github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= 61 | github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= 62 | github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= 63 | github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= 64 | github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= 65 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 66 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 67 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 68 | github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= 69 | github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= 70 | github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= 71 | github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= 72 | github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= 73 | github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= 74 | github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= 75 | github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= 76 | github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= 77 | github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 78 | github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= 79 | github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= 80 | github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= 81 | github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= 82 | github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= 83 | github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= 84 | github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 85 | github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 86 | github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 87 | github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= 88 | github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= 89 | github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= 90 | github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 91 | github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 92 | github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= 93 | github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= 94 | github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= 95 | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 96 | github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 97 | github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 98 | github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= 99 | github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= 100 | github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= 101 | github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= 102 | github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= 103 | github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= 104 | github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= 105 | github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= 106 | github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= 107 | github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 108 | github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= 109 | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= 110 | github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= 111 | github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= 112 | github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 113 | github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 114 | github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= 115 | github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 116 | github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= 117 | github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 118 | github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 119 | github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 120 | github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 121 | github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 122 | github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 123 | github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 124 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= 125 | github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 126 | github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= 127 | github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= 128 | github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= 129 | github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= 130 | github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= 131 | github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 132 | github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 133 | github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 134 | github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 135 | github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= 136 | github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 137 | github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 138 | github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 139 | github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 140 | github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= 141 | github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 142 | github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= 143 | github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= 144 | github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= 145 | github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= 146 | github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= 147 | github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= 148 | github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= 149 | github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= 150 | github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= 151 | github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= 152 | github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= 153 | github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= 154 | github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= 155 | github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= 156 | github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= 157 | github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= 158 | github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= 159 | github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= 160 | github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= 161 | github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= 162 | github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= 163 | github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= 164 | github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= 165 | github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= 166 | github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174 h1:WlZsjVhE8Af9IcZDGgJGQpNflI3+MJSBhsgT5PCtzBQ= 167 | github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A= 168 | github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= 169 | github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= 170 | github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= 171 | github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= 172 | github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 173 | github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= 174 | github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= 175 | github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= 176 | github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= 177 | github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= 178 | github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= 179 | github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= 180 | github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= 181 | github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= 182 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 183 | github.com/kr/pty v1.1.4 h1:5Myjjh3JY/NaAi4IsUbHADytDyl1VE1Y9PXDlL+P/VQ= 184 | github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 185 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 186 | github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= 187 | github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= 188 | github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU= 189 | github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= 190 | github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= 191 | github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= 192 | github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= 193 | github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= 194 | github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= 195 | github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= 196 | github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= 197 | github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= 198 | github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= 199 | github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= 200 | github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= 201 | github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= 202 | github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= 203 | github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= 204 | github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= 205 | github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 206 | github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= 207 | github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= 208 | github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= 209 | github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 210 | github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= 211 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 212 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 213 | github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= 214 | github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= 215 | github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= 216 | github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= 217 | github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= 218 | github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= 219 | github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= 220 | github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= 221 | github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= 222 | github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= 223 | github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= 224 | github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= 225 | github.com/spf13/cobra v1.2.1 h1:+KmjbUw1hriSNMF55oPrkZcb27aECyrj8V2ytv7kWDw= 226 | github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= 227 | github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= 228 | github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= 229 | github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= 230 | github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns= 231 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 232 | github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 233 | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 234 | github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= 235 | github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= 236 | github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= 237 | github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 238 | github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= 239 | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= 240 | github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= 241 | github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 242 | github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 243 | github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 244 | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 245 | github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= 246 | go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= 247 | go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= 248 | go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= 249 | go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= 250 | go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= 251 | go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 252 | go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 253 | go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= 254 | go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= 255 | go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= 256 | go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= 257 | go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= 258 | go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= 259 | golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= 260 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 261 | golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 262 | golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 263 | golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 264 | golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 265 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 266 | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 267 | golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 268 | golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= 269 | golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= 270 | golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= 271 | golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= 272 | golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= 273 | golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= 274 | golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= 275 | golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= 276 | golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= 277 | golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= 278 | golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= 279 | golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 280 | golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= 281 | golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= 282 | golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 283 | golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 284 | golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 285 | golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= 286 | golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= 287 | golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 288 | golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 289 | golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 290 | golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= 291 | golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= 292 | golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= 293 | golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= 294 | golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= 295 | golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 296 | golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= 297 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 298 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 299 | golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 300 | golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 301 | golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 302 | golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 303 | golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 304 | golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 305 | golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 306 | golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 307 | golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 308 | golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 309 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 310 | golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 311 | golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 312 | golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 313 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 314 | golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 315 | golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 316 | golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 317 | golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 318 | golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 319 | golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 320 | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 321 | golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 322 | golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 323 | golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 324 | golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 325 | golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 326 | golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 327 | golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 328 | golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 329 | golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= 330 | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 331 | golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 332 | golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 333 | golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 334 | golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 335 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 336 | golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= 337 | golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= 338 | golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= 339 | golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 340 | golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 341 | golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 342 | golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= 343 | golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 344 | golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 345 | golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 346 | golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 347 | golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 348 | golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 349 | golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= 350 | golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 351 | golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 352 | golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 353 | golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 354 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 355 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 356 | golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 357 | golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 358 | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 359 | golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 360 | golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 361 | golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 362 | golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 363 | golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 364 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 365 | golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 366 | golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 367 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 368 | golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 369 | golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 370 | golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 371 | golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 372 | golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 373 | golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 374 | golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 375 | golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 376 | golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 377 | golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 378 | golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 379 | golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 380 | golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 381 | golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 382 | golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 383 | golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 384 | golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 385 | golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 386 | golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 387 | golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 388 | golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 389 | golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 390 | golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 391 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 392 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 393 | golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 394 | golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 395 | golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 396 | golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 397 | golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 398 | golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 399 | golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 400 | golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 401 | golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 402 | golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= 403 | golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 404 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 405 | golang.org/x/term v0.0.0-20210503060354-a79de5458b56 h1:b8jxX3zqjpqb2LklXPzKSGJhzyxCOZSz8ncv8Nv+y7w= 406 | golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY= 407 | golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 408 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 409 | golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 410 | golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 411 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 412 | golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 413 | golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ= 414 | golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 415 | golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 416 | golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 417 | golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= 418 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 419 | golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 420 | golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= 421 | golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 422 | golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 423 | golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 424 | golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= 425 | golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 426 | golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 427 | golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= 428 | golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 429 | golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 430 | golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= 431 | golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 432 | golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 433 | golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 434 | golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 435 | golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 436 | golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 437 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 438 | golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 439 | golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 440 | golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 441 | golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 442 | golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 443 | golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 444 | golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 445 | golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 446 | golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 447 | golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 448 | golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 449 | golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= 450 | golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= 451 | golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= 452 | golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= 453 | golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 454 | golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 455 | golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 456 | golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 457 | golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= 458 | golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 459 | golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 460 | golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= 461 | golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= 462 | golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 463 | golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 464 | golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 465 | golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 466 | golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 467 | golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= 468 | golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= 469 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 470 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 471 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 472 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 473 | google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= 474 | google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= 475 | google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= 476 | google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= 477 | google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 478 | google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 479 | google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= 480 | google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 481 | google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 482 | google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 483 | google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 484 | google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= 485 | google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 486 | google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= 487 | google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= 488 | google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= 489 | google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= 490 | google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= 491 | google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= 492 | google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= 493 | google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= 494 | google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= 495 | google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 496 | google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 497 | google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= 498 | google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= 499 | google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 500 | google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 501 | google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= 502 | google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 503 | google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 504 | google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 505 | google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 506 | google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= 507 | google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 508 | google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= 509 | google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= 510 | google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 511 | google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 512 | google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 513 | google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 514 | google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 515 | google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= 516 | google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= 517 | google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 518 | google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 519 | google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 520 | google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 521 | google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 522 | google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 523 | google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 524 | google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 525 | google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= 526 | google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= 527 | google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= 528 | google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 529 | google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 530 | google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 531 | google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 532 | google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 533 | google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 534 | google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 535 | google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 536 | google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 537 | google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 538 | google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 539 | google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 540 | google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= 541 | google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= 542 | google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= 543 | google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= 544 | google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= 545 | google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= 546 | google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= 547 | google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= 548 | google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 549 | google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 550 | google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= 551 | google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= 552 | google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= 553 | google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= 554 | google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= 555 | google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= 556 | google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= 557 | google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= 558 | google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= 559 | google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= 560 | google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= 561 | google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= 562 | google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= 563 | google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= 564 | google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= 565 | google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= 566 | google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= 567 | google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= 568 | google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= 569 | google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= 570 | google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= 571 | google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= 572 | google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= 573 | google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= 574 | google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= 575 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 576 | gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 577 | gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= 578 | gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= 579 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 580 | gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 581 | gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 582 | gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 583 | gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 584 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= 585 | gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= 586 | honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 587 | honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 588 | honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 589 | honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 590 | honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= 591 | honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 592 | honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= 593 | rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= 594 | rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= 595 | rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= 596 | -------------------------------------------------------------------------------- /main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "encoding/json" 6 | "errors" 7 | "fmt" 8 | "os" 9 | "os/exec" 10 | "strings" 11 | "time" 12 | 13 | "github.com/AlecAivazis/survey/v2" 14 | "github.com/cli/safeexec" 15 | "github.com/spf13/cobra" 16 | ) 17 | 18 | func rootCmd() *cobra.Command { 19 | return &cobra.Command{ 20 | Use: "user-status", 21 | } 22 | } 23 | 24 | type setOptions struct { 25 | Message string 26 | Limited bool 27 | Expiry time.Duration 28 | Emoji string 29 | OrgName string 30 | } 31 | 32 | func prompt(em emojiManager, opts *setOptions) error { 33 | emojiChoices := []string{} 34 | for _, e := range em.Emojis() { 35 | emojiChoices = append(emojiChoices, fmt.Sprintf("%s %s %s", string(e.codepoint), e.names, e.desc)) 36 | } 37 | qs := []*survey.Question{ 38 | { 39 | Name: "status", 40 | Prompt: &survey.Input{Message: "Status"}, 41 | Validate: survey.Required, 42 | }, 43 | { 44 | Name: "emoji", 45 | Prompt: &survey.Select{ 46 | Message: "Emoji", 47 | Options: emojiChoices, 48 | Default: 147, 49 | }, 50 | }, 51 | { 52 | Name: "limited", 53 | Prompt: &survey.Confirm{ 54 | Message: "Indicate limited availability?", 55 | }, 56 | }, 57 | { 58 | Name: "expiry", 59 | Prompt: &survey.Select{ 60 | Message: "Clear status in", 61 | Options: []string{ 62 | "Never", 63 | "30m", 64 | "1h", 65 | "4h", 66 | "24h", 67 | "7d", 68 | }, 69 | }, 70 | }, 71 | } 72 | answers := struct { 73 | Status string 74 | Emoji int 75 | Limited bool 76 | Expiry string 77 | }{} 78 | err := survey.Ask(qs, &answers) 79 | if err != nil { 80 | return err 81 | } 82 | 83 | if answers.Expiry == "Never" { 84 | answers.Expiry = "0s" 85 | } 86 | 87 | if answers.Expiry == "7d" { 88 | answers.Expiry = "168h" 89 | } 90 | 91 | opts.Expiry, _ = time.ParseDuration(answers.Expiry) 92 | opts.Message = answers.Status 93 | opts.Emoji = em.Emojis()[answers.Emoji].names[0] 94 | opts.Limited = answers.Limited 95 | 96 | return nil 97 | } 98 | 99 | func setCmd() *cobra.Command { 100 | opts := setOptions{} 101 | cmd := &cobra.Command{ 102 | Use: "set ", 103 | Short: "set your GitHub status", 104 | Args: cobra.MaximumNArgs(1), 105 | RunE: func(cmd *cobra.Command, args []string) error { 106 | if len(args) > 0 { 107 | opts.Message = args[0] 108 | } 109 | return runSet(opts) 110 | }, 111 | } 112 | cmd.Flags().StringVarP(&opts.Emoji, "emoji", "e", "thought_balloon", "Emoji for status") 113 | cmd.Flags().BoolVarP(&opts.Limited, "limited", "l", false, "Indicate limited availability") 114 | cmd.Flags().DurationVarP(&opts.Expiry, "expiry", "E", time.Duration(0), "Expire status after this duration") 115 | cmd.Flags().StringVarP(&opts.OrgName, "org", "o", "", "Limit status visibility to an organization") 116 | 117 | return cmd 118 | } 119 | 120 | func runSet(opts setOptions) error { 121 | em := newEmojiManager() 122 | if opts.Message == "" { 123 | err := prompt(em, &opts) 124 | if err != nil { 125 | return err 126 | } 127 | } 128 | // TODO org flag -- punted on this bc i have to resolve an org ID and it didn't feel worth it. 129 | mutation := `mutation($emoji: String!, $message: String!, $limited: Boolean!, $expiry: DateTime) { 130 | changeUserStatus(input: {emoji: $emoji, message: $message, limitedAvailability: $limited, expiresAt: $expiry}) { 131 | status { 132 | message 133 | emoji 134 | } 135 | } 136 | }` 137 | 138 | limited := "false" 139 | if opts.Limited { 140 | limited = "true" 141 | } 142 | 143 | expiry := "null" 144 | if opts.Expiry > time.Duration(0) { 145 | expiry = time.Now().Add(opts.Expiry).Format("2006-01-02T15:04:05-0700") 146 | } 147 | 148 | emoji := fmt.Sprintf(":%s:", opts.Emoji) 149 | 150 | cmdArgs := []string{ 151 | "api", "graphql", 152 | "-f", fmt.Sprintf("query=%s", mutation), 153 | "-f", fmt.Sprintf("message=%s", opts.Message), 154 | "-f", fmt.Sprintf("emoji=%s", emoji), 155 | "-F", fmt.Sprintf("limited=%s", limited), 156 | "-F", fmt.Sprintf("expiry=%s", expiry), 157 | } 158 | 159 | out, stderr, err := gh(cmdArgs...) 160 | if err != nil { 161 | if !strings.Contains(stderr.String(), "one of the following scopes: ['user']") { 162 | return err 163 | } 164 | 165 | fmt.Println("! Sorry, this extension requires the 'user' scope.") 166 | answer := false 167 | err = survey.AskOne( 168 | &survey.Confirm{ 169 | Message: "Would you like to add the user scope now?", 170 | Default: true, 171 | }, &answer) 172 | if err != nil { 173 | return fmt.Errorf("could not prompt: %w", err) 174 | } 175 | if !answer { 176 | return nil 177 | } 178 | if err = ghWithInput("auth", "refresh", "-s", "user"); err != nil { 179 | return err 180 | } 181 | out, _, err = gh(cmdArgs...) 182 | if err != nil { 183 | return err 184 | } 185 | } 186 | 187 | type response struct { 188 | Data struct { 189 | ChangeUserStatus struct { 190 | Status status 191 | } 192 | } 193 | } 194 | var resp response 195 | err = json.Unmarshal(out.Bytes(), &resp) 196 | if err != nil { 197 | return fmt.Errorf("failed to deserialize JSON: %w", err) 198 | } 199 | 200 | if resp.Data.ChangeUserStatus.Status.Emoji != emoji { 201 | return errors.New("failed to set status. Perhaps try another emoji") 202 | } 203 | 204 | msg := fmt.Sprintf("✓ Status set to %s %s", emoji, opts.Message) 205 | fmt.Println(em.ReplaceAll(msg)) 206 | 207 | return nil 208 | } 209 | 210 | type getOptions struct { 211 | Login string 212 | } 213 | 214 | func getCmd() *cobra.Command { 215 | return &cobra.Command{ 216 | Use: "get []", 217 | Short: "get a GitHub user's status or your own", 218 | Args: cobra.MaximumNArgs(1), 219 | RunE: func(cmd *cobra.Command, args []string) error { 220 | opts := getOptions{} 221 | if len(args) > 0 { 222 | opts.Login = args[0] 223 | } 224 | return runGet(opts) 225 | }, 226 | } 227 | } 228 | 229 | type status struct { 230 | IndicatesLimitedAvailability bool 231 | Message string 232 | Emoji string 233 | } 234 | 235 | func runGet(opts getOptions) error { 236 | em := newEmojiManager() 237 | 238 | s, err := apiStatus(opts.Login) 239 | if err != nil { 240 | return err 241 | } 242 | 243 | availability := "" 244 | if s.IndicatesLimitedAvailability { 245 | availability = "(availability is limited)" 246 | } 247 | msg := fmt.Sprintf("%s %s %s", s.Emoji, s.Message, availability) 248 | 249 | fmt.Println(em.ReplaceAll(msg)) 250 | 251 | return nil 252 | } 253 | 254 | func apiStatus(login string) (*status, error) { 255 | key := "user" 256 | query := fmt.Sprintf( 257 | `query { user(login:"%s") { status { indicatesLimitedAvailability message emoji }}}`, 258 | login) 259 | if login == "" { 260 | key = "viewer" 261 | query = `query {viewer { status { indicatesLimitedAvailability message emoji }}}` 262 | } 263 | 264 | args := []string{"api", "graphql", "-f", fmt.Sprintf("query=%s", query)} 265 | sout, _, err := gh(args...) 266 | if err != nil { 267 | return nil, err 268 | } 269 | 270 | resp := map[string]map[string]map[string]status{} 271 | 272 | err = json.Unmarshal(sout.Bytes(), &resp) 273 | if err != nil { 274 | return nil, fmt.Errorf("failed to deserialize JSON: %w", err) 275 | } 276 | 277 | s, ok := resp["data"][key]["status"] 278 | if !ok { 279 | return nil, errors.New("failed to deserialize JSON") 280 | } 281 | 282 | return &s, nil 283 | } 284 | 285 | func main() { 286 | rc := rootCmd() 287 | rc.AddCommand(setCmd()) 288 | rc.AddCommand(getCmd()) 289 | 290 | if err := rc.Execute(); err != nil { 291 | // TODO not bothering as long as cobra is also printing error 292 | //fmt.Println(err) 293 | os.Exit(1) 294 | } 295 | } 296 | 297 | // gh shells out to gh, returning STDOUT/STDERR and any error 298 | func gh(args ...string) (sout, eout bytes.Buffer, err error) { 299 | ghBin, err := safeexec.LookPath("gh") 300 | if err != nil { 301 | err = fmt.Errorf("could not find gh. Is it installed? error: %w", err) 302 | return 303 | } 304 | 305 | cmd := exec.Command(ghBin, args...) 306 | cmd.Stderr = &eout 307 | cmd.Stdout = &sout 308 | 309 | err = cmd.Run() 310 | if err != nil { 311 | err = fmt.Errorf("failed to run gh. error: %w, stderr: %s", err, eout.String()) 312 | return 313 | } 314 | 315 | return 316 | } 317 | 318 | // gh shells out to gh, connecting IO handles for user input 319 | func ghWithInput(args ...string) error { 320 | ghBin, err := safeexec.LookPath("gh") 321 | if err != nil { 322 | return fmt.Errorf("could not find gh. Is it installed? error: %w", err) 323 | } 324 | 325 | cmd := exec.Command(ghBin, args...) 326 | cmd.Stderr = os.Stderr 327 | cmd.Stdout = os.Stdout 328 | cmd.Stdin = os.Stdin 329 | 330 | err = cmd.Run() 331 | if err != nil { 332 | return fmt.Errorf("failed to run gh. error: %w", err) 333 | } 334 | 335 | return nil 336 | } 337 | --------------------------------------------------------------------------------