{
  "fileName": "ERC721PresetMinterPauserAutoId.sol",
  "contractName": "ERC721PresetMinterPauserAutoIdUpgradeSafe",
  "source": "pragma solidity ^0.6.0;\n\nimport \"../access/AccessControl.sol\";\nimport \"../GSN/Context.sol\";\nimport \"../utils/Counters.sol\";\nimport \"../token/ERC721/ERC721.sol\";\nimport \"../token/ERC721/ERC721Burnable.sol\";\nimport \"../token/ERC721/ERC721Pausable.sol\";\nimport \"../Initializable.sol\";\n\n/**\n * @dev {ERC721} token, including:\n *\n *  - ability for holders to burn (destroy) their tokens\n *  - a minter role that allows for token minting (creation)\n *  - a pauser role that allows to stop all token transfers\n *  - token ID and URI autogeneration\n *\n * This contract uses {AccessControl} to lock permissioned functions using the\n * different roles - head to its documentation for details.\n *\n * The account that deploys the contract will be granted the minter and pauser\n * roles, as well as the default admin role, which will let it grant both minter\n * and pauser roles to aother accounts\n */\ncontract ERC721PresetMinterPauserAutoIdUpgradeSafe is Initializable, ContextUpgradeSafe, AccessControlUpgradeSafe, ERC721BurnableUpgradeSafe, ERC721PausableUpgradeSafe {\n    using Counters for Counters.Counter;\n\n    bytes32 public constant MINTER_ROLE = keccak256(\"MINTER_ROLE\");\n    bytes32 public constant PAUSER_ROLE = keccak256(\"PAUSER_ROLE\");\n\n    Counters.Counter private _tokenIdTracker;\n\n    /**\n     * @dev Grants `DEFAULT_ADMIN_ROLE` and `MINTER_ROLE`to the account that\n     * deploys the contract.\n     *\n     * Token URIs will be autogenerated based on `baseURI` and their token IDs.\n     * See {ERC721-tokenURI}.\n     */\n\n    function initialize(string memory name, string memory symbol, string memory baseURI) public {\n        __ERC721PresetMinterPauserAutoId_init(name, symbol, baseURI);\n    }\n\n    function __ERC721PresetMinterPauserAutoId_init(string memory name, string memory symbol, string memory baseURI) internal initializer {\n        __Context_init_unchained();\n        __AccessControl_init_unchained();\n        __ERC165_init_unchained();\n        __ERC721_init_unchained(name, symbol);\n        __ERC721Burnable_init_unchained();\n        __Pausable_init_unchained();\n        __ERC721Pausable_init_unchained();\n        __ERC721PresetMinterPauserAutoId_init_unchained(name, symbol, baseURI);\n    }\n\n    function __ERC721PresetMinterPauserAutoId_init_unchained(string memory name, string memory symbol, string memory baseURI) internal initializer {\n\n\n        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());\n\n        _setupRole(MINTER_ROLE, _msgSender());\n        _setupRole(PAUSER_ROLE, _msgSender());\n\n        _setBaseURI(baseURI);\n\n    }\n\n\n    /**\n     * @dev Creates a new token for `to`. Its token ID will be automatically\n     * assigned (and available on the emitted {Transfer} event), and the token\n     * URI autogenerated based on the base URI passed at construction.\n     *\n     * See {ERC721-_mint}.\n     *\n     * Requirements:\n     *\n     * - the caller must have the `MINTER_ROLE`.\n     */\n    function mint(address to) public {\n        require(hasRole(MINTER_ROLE, _msgSender()), \"ERC721PresetMinterPauserAutoId: must have minter role to mint\");\n\n        // We can just use balanceOf to create the new tokenId because tokens\n        // can be burned (destroyed), so we need a separate counter.\n        _mint(to, _tokenIdTracker.current());\n        _tokenIdTracker.increment();\n    }\n\n    /**\n     * @dev Pauses all token transfers.\n     *\n     * See {ERC721Pausable} and {Pausable-_pause}.\n     *\n     * Requirements:\n     *\n     * - the caller must have the `PAUSER_ROLE`.\n     */\n    function pause() public {\n        require(hasRole(PAUSER_ROLE, _msgSender()), \"ERC721PresetMinterPauserAutoId: must have pauser role to pause\");\n        _pause();\n    }\n\n    /**\n     * @dev Unpauses all token transfers.\n     *\n     * See {ERC721Pausable} and {Pausable-_unpause}.\n     *\n     * Requirements:\n     *\n     * - the caller must have the `PAUSER_ROLE`.\n     */\n    function unpause() public {\n        require(hasRole(PAUSER_ROLE, _msgSender()), \"ERC721PresetMinterPauserAutoId: must have pauser role to unpause\");\n        _unpause();\n    }\n\n    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721UpgradeSafe, ERC721PausableUpgradeSafe) {\n        super._beforeTokenTransfer(from, to, tokenId);\n    }\n\n    uint256[49] private __gap;\n}\n",
  "sourcePath": "contracts/presets/ERC721PresetMinterPauserAutoId.sol",
  "sourceMap": "889:3407:77:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;889:3407:77;;;;;;;",
  "deployedSourceMap": "889:3407:77:-:0;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;889:3407:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;1103:140:12;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1103:140:12;-1:-1:-1;;;;;;1103:140:12;;:::i;:::-;;;;;;;;;;;;;;;;;;5028:90:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5028:90:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9688:209;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9688:209:86;;:::i;:::-;;;;-1:-1:-1;;;;;9688:209:86;;;;;;;;;;;;;;9022:381;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;9022:381:86;;;;;;;;:::i;:::-;;7902:200;;;:::i;:::-;;;;;;;;;;;;;;;;11399:300;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;11399:300:86;;;;;;;;;;;;;;;;;:::i;3920:112:7:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3920:112:7;;:::i;4282:223::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4282:223:7;;;;;;-1:-1:-1;;;;;4282:223:7;;:::i;7597:152:86:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;7597:152:86;;;;;;;;:::i;5456:205:7:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;5456:205:7;;;;;;-1:-1:-1;;;;;5456:205:7;;:::i;3883:174:77:-;;;:::i;12348:149:86:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;12348:149:86;;;;;;;;;;;;;;;;;:::i;713:241:87:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;713:241:87;;:::i;8440:161:86:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;8440:161:86;;:::i;1248:76:104:-;;;:::i;4756:167:86:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4756:167:86;;:::i;2914:389:77:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2914:389:77;-1:-1:-1;;;;;2914:389:77;;:::i;7136:87:86:-;;;:::i;4326:211::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4326:211:86;-1:-1:-1;;;;;4326:211:86;;:::i;3507:168:77:-;;;:::i;3603:136:7:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;3603:136:7;;;;;;;:::i;2588:137::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2588:137:7;;;;;;-1:-1:-1;;;;;2588:137:7;;:::i;5227:94:86:-;;;:::i;1778:49:7:-;;;:::i;10196:290:86:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;10196:290:86;;;;;;;;;;:::i;1529:169:77:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;1529:169:77;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;1529:169:77;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;1529:169:77;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1529:169:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1529:169:77;;;;;;;;-1:-1:-1;1529:169:77;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;1529:169:77;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;1529:169:77;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1529:169:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1529:169:77;;;;;;;;-1:-1:-1;1529:169:77;;-1:-1:-1;;;;;11:28;;8:2;;;52:1;49;42:12;8:2;1529:169:77;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;1529:169:77;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1529:169:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;1529:169:77;;-1:-1:-1;1529:169:77;;-1:-1:-1;;;;;1529:169:77:i;13220:282:86:-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;13220:282:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;13220:282:86;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;13220:282:86;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;-1:-1;;;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;13220:282:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;13220:282:86;;-1:-1:-1;13220:282:86;;-1:-1:-1;;;;;13220:282:86:i;6164:740::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;6164:740:86;;:::i;2893:125:7:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2893:125:7;;:::i;1105:62:77:-;;;:::i;4739:226:7:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;4739:226:7;;;;;;-1:-1:-1;;;;;4739:226:7;;:::i;1173:62:77:-;;;:::i;10808:154:86:-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;10808:154:86;;;;;;;;;;:::i;1103:140:12:-;-1:-1:-1;;;;;;1203:33:12;;1180:4;1203:33;;;:20;:33;;;;;;;;1103:140;;;;:::o;5028:90:86:-;5106:5;5099:12;;;;;;;;-1:-1:-1;;5099:12:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5074:13;;5099:12;;5106:5;;5099:12;;5106:5;5099:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5028:90;;:::o;9688:209::-;9756:7;9783:16;9791:7;9783;:16::i;:::-;9775:73;;;;-1:-1:-1;;;9775:73:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9866:24:86;;;;:15;:24;;;;;;-1:-1:-1;;;;;9866:24:86;;9688:209::o;9022:381::-;9102:13;9118:16;9126:7;9118;:16::i;:::-;9102:32;;9158:5;-1:-1:-1;;;;;9152:11:86;:2;-1:-1:-1;;;;;9152:11:86;;;9144:57;;;;-1:-1:-1;;;9144:57:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9236:5;-1:-1:-1;;;;;9220:21:86;:12;:10;:12::i;:::-;-1:-1:-1;;;;;9220:21:86;;:62;;;;9245:37;9262:5;9269:12;:10;:12::i;:::-;9245:16;:37::i;:::-;9212:152;;;;-1:-1:-1;;;9212:152:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9375:21;9384:2;9388:7;9375:8;:21::i;:::-;9022:381;;;:::o;7902:200::-;7955:7;8074:21;:12;:19;:21::i;:::-;8067:28;;7902:200;:::o;11399:300::-;11558:41;11577:12;:10;:12::i;:::-;11591:7;11558:18;:41::i;:::-;11550:103;;;;-1:-1:-1;;;11550:103:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11664:28;11674:4;11680:2;11684:7;11664:9;:28::i;3920:112:7:-;3977:7;4003:12;;;:6;:12;;;;;:22;;;;3920:112::o;4282:223::-;4373:12;;;;:6;:12;;;;;:22;;;4365:45;;4397:12;:10;:12::i;:::-;4365:7;:45::i;:::-;4357:105;;;;-1:-1:-1;;;4357:105:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4473:25;4484:4;4490:7;4473:10;:25::i;:::-;4282:223;;:::o;7597:152:86:-;-1:-1:-1;;;;;7712:20:86;;7686:7;7712:20;;;:13;:20;;;;;:30;;7736:5;7712:30;:23;:30;:::i;:::-;7705:37;;7597:152;;;;;:::o;5456:205:7:-;5553:12;:10;:12::i;:::-;-1:-1:-1;;;;;5542:23:7;:7;-1:-1:-1;;;;;5542:23:7;;5534:83;;;;-1:-1:-1;;;5534:83:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5628:26;5640:4;5646:7;5628:11;:26::i;3883:174:77:-;1211:24;;;-1:-1:-1;;;1211:24:77;;;;;;;;;;;;3927:34;;3948:12;:10;:12::i;3927:34::-;3919:111;;;;-1:-1:-1;;;3919:111:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4040:10;:8;:10::i;:::-;3883:174::o;12348:149:86:-;12451:39;12468:4;12474:2;12478:7;12451:39;;;;;;;;;;;;:16;:39::i;713:241:87:-;829:41;848:12;:10;:12::i;829:41::-;821:102;;;;-1:-1:-1;;;821:102:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;933:14;939:7;933:5;:14::i;:::-;713:241;:::o;8440:161:86:-;8507:7;;8548:22;:12;8564:5;8548:22;:15;:22;:::i;:::-;-1:-1:-1;8526:44:86;8440:161;-1:-1:-1;;;8440:161:86:o;1248:76:104:-;1310:7;;;;1248:76;:::o;4756:167:86:-;4820:7;4846:70;4863:7;4846:70;;;;;;;;;;;;;;;;;:12;;:70;;:16;:70;:::i;2914:389:77:-;1143:24;;;-1:-1:-1;;;1143:24:77;;;;;;;;;;;;2965:34;;2986:12;:10;:12::i;2965:34::-;2957:108;;;;-1:-1:-1;;;2957:108:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3223:36;3229:2;3233:25;:15;:23;:25::i;:::-;3223:5;:36::i;:::-;3269:27;:15;:25;:27::i;7136:87:86:-;7208:8;7201:15;;;;;;;;-1:-1:-1;;7201:15:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7176:13;;7201:15;;7208:8;;7201:15;;7208:8;7201:15;;;;;;;;;;;;;;;;;;;;;;;;4326:211;4390:7;-1:-1:-1;;;;;4417:19:86;;4409:74;;;;-1:-1:-1;;;4409:74:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4501:20:86;;;;;;:13;:20;;;;;:29;;:27;:29::i;3507:168:77:-;1211:24;;;-1:-1:-1;;;1211:24:77;;;;;;;;;;;;3549:34;;3570:12;:10;:12::i;3549:34::-;3541:109;;;;-1:-1:-1;;;3541:109:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3660:8;:6;:8::i;3603:136:7:-;3676:7;3702:12;;;:6;:12;;;;;:30;;3726:5;3702:30;:23;:30;:::i;2588:137::-;2657:4;2680:12;;;:6;:12;;;;;:38;;2710:7;2680:38;:29;:38;:::i;5227:94:86:-;5307:7;5300:14;;;;;;;;-1:-1:-1;;5300:14:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5275:13;;5300:14;;5307:7;;5300:14;;5307:7;5300:14;;;;;;;;;;;;;;;;;;;;;;;;1778:49:7;1823:4;1778:49;:::o;10196:290:86:-;10310:12;:10;:12::i;:::-;-1:-1:-1;;;;;10298:24:86;:8;-1:-1:-1;;;;;10298:24:86;;;10290:62;;;;;-1:-1:-1;;;10290:62:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;10408:8;10363:18;:32;10382:12;:10;:12::i;:::-;-1:-1:-1;;;;;10363:32:86;;;;;;;;;;;;;;;;;-1:-1:-1;10363:32:86;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;10363:53:86;;;;;;;;;;;10446:12;:10;:12::i;:::-;10431:48;;;;;;;;;;-1:-1:-1;;;;;10431:48:86;;;;;;;;;;;;;;10196:290;;:::o;1529:169:77:-;1631:60;1669:4;1675:6;1683:7;1631:37;:60::i;13220:282:86:-;13351:41;13370:12;:10;:12::i;:::-;13384:7;13351:18;:41::i;:::-;13343:103;;;;-1:-1:-1;;;13343:103:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13456:39;13470:4;13476:2;13480:7;13489:5;13456:13;:39::i;:::-;13220:282;;;;:::o;6164:740::-;6229:13;6262:16;6270:7;6262;:16::i;:::-;6254:76;;;;-1:-1:-1;;;6254:76:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6367:19;;;;:10;:19;;;;;;;;;6341:45;;;;;;-1:-1:-1;;6341:45:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;:45;;;6367:19;6341:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6465:8:86;6459:22;6341:45;;-1:-1:-1;;;;6459:22:86;-1:-1:-1;;6459:22:86;;;;;;;;;;;6455:74;;6509:9;-1:-1:-1;6502:16:86;;6455:74;6631:23;;:27;6627:110;;6705:8;6715:9;6688:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6688:37:86;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6688:37:86;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6688:37:86;;;6674:52;;;;;6627:110;6867:8;6877:18;:7;:16;:18::i;:::-;6850:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6850:46:86;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;6850:46:86;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6850:46:86;;;6836:61;;;6164:740;;;:::o;2893:125:7:-;2956:7;2982:12;;;:6;:12;;;;;:29;;:27;:29::i;1105:62:77:-;1143:24;;;-1:-1:-1;;;1143:24:77;;;;;;;;;;;;1105:62;:::o;4739:226:7:-;4831:12;;;;:6;:12;;;;;:22;;;4823:45;;4855:12;:10;:12::i;4823:45::-;4815:106;;;;-1:-1:-1;;;4815:106:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1173:62:77;1211:24;;;-1:-1:-1;;;1211:24:77;;;;;;;;;;;;1173:62;:::o;10808:154:86:-;-1:-1:-1;;;;;10920:25:86;;;10897:4;10920:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10808:154::o;14671:117::-;14728:4;14751:30;:12;14773:7;14751:30;:21;:30;:::i;931:104:0:-;1018:10;931:104;:::o;21695:155:86:-;21760:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;21760:29:86;-1:-1:-1;;;;;21760:29:86;;;;;;;;:24;;21813:16;21760:24;21813:7;:16::i;:::-;-1:-1:-1;;;;;21804:39:86;;;;;;;;;;;21695:155;;:::o;6990:121:102:-;7059:7;7085:19;7093:3;7085:7;:19::i;15149:329:86:-;15234:4;15258:16;15266:7;15258;:16::i;:::-;15250:73;;;;-1:-1:-1;;;15250:73:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15333:13;15349:16;15357:7;15349;:16::i;:::-;15333:32;;15394:5;-1:-1:-1;;;;;15383:16:86;:7;-1:-1:-1;;;;;15383:16:86;;:51;;;;15427:7;-1:-1:-1;;;;;15403:31:86;:20;15415:7;15403:11;:20::i;:::-;-1:-1:-1;;;;;15403:31:86;;15383:51;:87;;;;15438:32;15455:5;15462:7;15438:16;:32::i;:::-;15375:96;15149:329;-1:-1:-1;;;;15149:329:86:o;18661:559::-;18778:4;-1:-1:-1;;;;;18758:24:86;:16;18766:7;18758;:16::i;:::-;-1:-1:-1;;;;;18758:24:86;;18750:78;;;;-1:-1:-1;;;18750:78:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18846:16:86;;18838:65;;;;-1:-1:-1;;;18838:65:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18914:39;18935:4;18941:2;18945:7;18914:20;:39::i;:::-;19015:29;19032:1;19036:7;19015:8;:29::i;:::-;-1:-1:-1;;;;;19055:19:86;;;;;;:13;:19;;;;;:35;;19082:7;19055:35;:26;:35;:::i;:::-;-1:-1:-1;;;;;;19100:17:86;;;;;;:13;:17;;;;;:30;;19122:7;19100:30;:21;:30;:::i;:::-;-1:-1:-1;19141:29:86;:12;19158:7;19167:2;19141:29;:16;:29;:::i;:::-;;19205:7;19201:2;-1:-1:-1;;;;;19186:27:86;19195:4;-1:-1:-1;;;;;19186:27:86;;;;;;;;;;;18661:559;;;:::o;6543:184:7:-;6616:12;;;;:6;:12;;;;;:33;;6641:7;6616:33;:24;:33;:::i;:::-;6612:109;;;6697:12;:10;:12::i;:::-;-1:-1:-1;;;;;6670:40:7;6688:7;-1:-1:-1;;;;;6670:40:7;6682:4;6670:40;;;;;;;;;;6543:184;;:::o;7616:135:103:-;7687:7;7721:22;7725:3;7737:5;7721:3;:22::i;6733:188:7:-;6807:12;;;;:6;:12;;;;;:36;;6835:7;6807:36;:27;:36;:::i;:::-;6803:112;;;6891:12;:10;:12::i;:::-;-1:-1:-1;;;;;6864:40:7;6882:7;-1:-1:-1;;;;;6864:40:7;6876:4;6864:40;;;;;;;;;;6733:188;;:::o;1950:117:104:-;1668:7;;;;1660:40;;;;;-1:-1:-1;;;1660:40:104;;;;;;;;;;;;-1:-1:-1;;;1660:40:104;;;;;;;;;;;;;;;2008:7:::1;:15:::0;;-1:-1:-1;;2008:15:104::1;::::0;;2038:22:::1;2047:12;:10;:12::i;:::-;2038:22;::::0;;-1:-1:-1;;;;;2038:22:104;;::::1;::::0;;;;;;;::::1;::::0;;::::1;1950:117::o:0;17782:502:86:-;17841:13;17857:16;17865:7;17857;:16::i;:::-;17841:32;;17884:48;17905:5;17920:1;17924:7;17884:20;:48::i;:::-;17970:29;17987:1;17991:7;17970:8;:29::i;:::-;18055:19;;;;:10;:19;;;;;18049:33;;-1:-1:-1;;18049:33:86;;;;;;;;;;;:38;18045:95;;18110:19;;;;:10;:19;;;;;18103:26;;;:::i;:::-;-1:-1:-1;;;;;18150:20:86;;;;;;:13;:20;;;;;:36;;18178:7;18150:36;:27;:36;:::i;:::-;-1:-1:-1;18197:28:86;:12;18217:7;18197:28;:19;:28;:::i;:::-;-1:-1:-1;18241:36:86;;18269:7;;18265:1;;-1:-1:-1;;;;;18241:36:86;;;;;18265:1;;18241:36;17782:502;;:::o;7439:224:102:-;7519:7;;;;7578:22;7582:3;7594:5;7578:3;:22::i;:::-;7547:53;;;;-1:-1:-1;7439:224:102;-1:-1:-1;;;;;7439:224:102:o;8082:202::-;8189:7;8231:44;8236:3;8256;8262:12;8231:4;:44::i;:::-;8223:53;-1:-1:-1;8082:202:102;;;;;;:::o;1065:112:100:-;1156:14;;1065:112::o;17208:393:86:-;-1:-1:-1;;;;;17287:16:86;;17279:61;;;;;-1:-1:-1;;;17279:61:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17359:16;17367:7;17359;:16::i;:::-;17358:17;17350:58;;;;;-1:-1:-1;;;17350:58:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;17419:45;17448:1;17452:2;17456:7;17419:20;:45::i;:::-;-1:-1:-1;;;;;17475:17:86;;;;;;:13;:17;;;;;:30;;17497:7;17475:30;:21;:30;:::i;:::-;-1:-1:-1;17516:29:86;:12;17533:7;17542:2;17516:29;:16;:29;:::i;:::-;-1:-1:-1;17561:33:86;;17586:7;;-1:-1:-1;;;;;17561:33:86;;;17578:1;;17561:33;;17578:1;;17561:33;17208:393;;:::o;1183:178:100:-;1335:19;;1353:1;1335:19;;;1183:178::o;1776:115:104:-;1477:7;;;;1476:8;1468:37;;;;;-1:-1:-1;;;1468:37:104;;;;;;;;;;;;-1:-1:-1;;;1468:37:104;;;;;;;;;;;;;;;1835:7:::1;:14:::0;;-1:-1:-1;;1835:14:104::1;1845:4;1835:14;::::0;;1864:20:::1;1871:12;:10;:12::i;5368:156:103:-:0;5448:4;5471:46;5481:3;-1:-1:-1;;;;;5501:14:103;;5471:9;:46::i;1704:503:77:-;1024:12:6;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:6;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:6;;;;;1225:18;1213:4;1225:18;;;1170:80;1847:26:77::1;:24;:26::i;:::-;1883:32;:30;:32::i;:::-;1925:25;:23;:25::i;:::-;1960:37;1984:4;1990:6;1960:23;:37::i;:::-;2007:33;:31;:33::i;:::-;2050:27;:25;:27::i;:::-;2087:33;:31;:33::i;:::-;2130:70;2178:4;2184:6;2192:7;2130:47;:70::i;:::-;1268:14:6::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:6;;;1704:503:77;;;;:::o;14207:269:86:-;14320:28;14330:4;14336:2;14340:7;14320:9;:28::i;:::-;14366:48;14389:4;14395:2;14399:7;14408:5;14366:22;:48::i;:::-;14358:111;;;;-1:-1:-1;;;14358:111:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;169:723:107;225:13;442:10;438:51;;-1:-1:-1;468:10:107;;;;;;;;;;;;-1:-1:-1;;;468:10:107;;;;;;438:51;513:5;498:12;552:75;559:9;;552:75;;584:8;;614:2;606:10;;;;552:75;;;636:19;668:6;658:17;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;658:17:107;;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;658:17:107;87:42:-1;143:17;;-1:-1;658:17:107;-1:-1:-1;728:5:107;;-1:-1:-1;636:39:107;-1:-1:-1;;;701:10:107;;743:112;750:9;;743:112;;816:2;809:4;:9;804:2;:14;793:27;;775:6;782:7;;;;;;;775:15;;;;;;;;;;;:45;-1:-1:-1;;;;;775:45:107;;;;;;;;-1:-1:-1;842:2:107;834:10;;;;743:112;;;-1:-1:-1;878:6:107;169:723;-1:-1:-1;;;;169:723:107:o;6758:149:102:-;6842:4;6865:35;6875:3;6895;6865:9;:35::i;4063:199:77:-;4210:45;4237:4;4243:2;4247:7;4210:26;:45::i;6731:135:103:-;6801:4;6824:35;6832:3;6852:5;6824:7;:35::i;6434:129::-;6501:4;6524:32;6529:3;6549:5;6524:4;:32::i;6206:174:102:-;6295:4;6318:55;6323:3;6343;-1:-1:-1;;;;;6357:14:102;;6318:4;:55::i;4831:141:103:-;4901:4;4924:41;4929:3;-1:-1:-1;;;;;4949:14:103;;4924:4;:41::i;4390:201::-;4484:18;;4457:7;;4484:26;-1:-1:-1;4476:73:103;;;;-1:-1:-1;;;4476:73:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4566:3;:11;;4578:5;4566:18;;;;;;;;;;;;;;;;4559:25;;4390:201;;;;:::o;5140:147::-;5213:4;5236:44;5244:3;-1:-1:-1;;;;;5264:14:103;;5236:7;:44::i;6539:140:102:-;6616:4;6639:33;6647:3;6667;6639:7;:33::i;4901:274::-;5004:19;;4968:7;;;;5004:27;-1:-1:-1;4996:74:102;;;;-1:-1:-1;;;4996:74:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5081:22;5106:3;:12;;5119:5;5106:19;;;;;;;;;;;;;;;;;;5081:44;;5143:5;:10;;;5155:5;:12;;;5135:33;;;;;4901:274;;;;;:::o;5582:315::-;5676:7;5714:17;;;:12;;;:17;;;;;;5764:12;5749:13;5741:36;;;;-1:-1:-1;;;5741:36:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;5741:36:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5830:3;:12;;5854:1;5843:8;:12;5830:26;;;;;;;;;;;;;;;;;;:33;;;5823:40;;;5582:315;;;;;:::o;3743:127:103:-;3816:4;3839:19;;;:12;;;;;:19;;;;;;:24;;;3743:127::o;1409:498:6:-;1820:4;1864:17;1895:7;1409:498;:::o;858:66:0:-;1024:12:6;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:6;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:6;;;;;1225:18;1213:4;1225:18;;;1170:80;1268:14;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:6;;;858:66:0;:::o;700:252:12:-;1024:12:6;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:6;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:6;;;;;1225:18;1213:4;1225:18;;;1170:80;904:40:12::1;-1:-1:-1::0;;;904:18:12::1;:40::i;3719:402:86:-:0;1024:12:6;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:6;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:6;;;;;1225:18;1213:4;1225:18;;;1170:80;3827:12:86;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;3849:16:86;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;3953:40:86::1;-1:-1:-1::0;;;3953:18:86::1;:40::i;:::-;4003:49;-1:-1:-1::0;;;4003:18:86::1;:49::i;:::-;4062:51;-1:-1:-1::0;;;4062:18:86::1;:51::i;:::-;1268:14:6::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:6;;;3719:402:86;;;:::o;1059:93:104:-;1024:12:6;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:6;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:6;;;;;1225:18;1213:4;1225:18;;;1170:80;1129:7:104::1;:15:::0;;-1:-1:-1;;1129:15:104::1;::::0;;1264:55:6;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:6;;;1059:93:104;:::o;2213:333:77:-;1024:12:6;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:6;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:6;;;;;1225:18;1213:4;1225:18;;;1170:80;2368:44:77::1;1823:4:7;2399:12:77;:10;:12::i;:::-;2368:10;:44::i;:::-;1143:24;::::0;;-1:-1:-1;;;1143:24:77;;;;;;;;::::1;::::0;;;2423:37:::1;::::0;2447:12:::1;:10;:12::i;2423:37::-;1211:24;::::0;;-1:-1:-1;;;1211:24:77;;;;;;;;::::1;::::0;;;2470:37:::1;::::0;2494:12:::1;:10;:12::i;2470:37::-;2518:20;2530:7;2518:11;:20::i;20639:1050:86:-:0;20759:4;20784:15;:2;-1:-1:-1;;;;;20784:13:86;;:15::i;:::-;20779:58;;-1:-1:-1;20822:4:86;20815:11;;20779:58;20906:12;20920:23;-1:-1:-1;;;;;20947:7:86;;-1:-1:-1;;;21050:12:86;:10;:12::i;:::-;21076:4;21094:7;21115:5;20955:175;;;;;;-1:-1:-1;;;;;20955:175:86;-1:-1:-1;;;;;20955:175:86;;;;;;-1:-1:-1;;;;;20955:175:86;-1:-1:-1;;;;;20955:175:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20955:175:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20955:175:86;;;-1:-1:-1;;26:21;;;22:32;6:49;;20955:175:86;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;20955:175:86;;;179:29:-1;;;;160:49;;20947:184:86;;;20955:175;;20947:184;;-1:-1:-1;20947:184:86;;-1:-1:-1;25:18;-1:-1;20947:184:86;-1:-1:-1;20947:184:86;;-1:-1:-1;20947:184:86;;-1:-1:-1;25:18;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;20947:184:86;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;20905:226:86;;;;21146:7;21141:542;;21173:17;;:21;21169:376;;21338:10;21332:17;21398:15;21385:10;21381:2;21377:19;21370:44;21287:145;21470:60;;-1:-1:-1;;;21470:60:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21141:542;21575:13;21602:10;21591:32;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21591:32:86;-1:-1:-1;;;;;;21645:26:86;-1:-1:-1;;;21645:26:86;;-1:-1:-1;21637:35:86;;-1:-1:-1;;;21637:35:86;933:237:89;1042:45;1069:4;1075:2;1079:7;1042:26;:45::i;:::-;1107:8;:6;:8::i;:::-;1106:9;1098:65;;;;-1:-1:-1;;;1098:65:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2150:1512:103;2216:4;2353:19;;;:12;;;:19;;;;;;2387:15;;2383:1273;;2816:18;;-1:-1:-1;;2768:14:103;;;;2816:22;;;;2744:21;;2816:3;;:22;;3098;;;;;;;;;;;;;;3078:42;;3241:9;3212:3;:11;;3224:13;3212:26;;;;;;;;;;;;;;;;;;;:38;;;;3316:23;;;3358:1;3316:12;;;:23;;;;;;3342:17;;;3316:43;;3465:17;;3316:3;;3465:17;;;;;;;;;;;;;;;;;;;;;;3557:3;:12;;:19;3570:5;3557:19;;;;;;;;;;;3550:26;;;3598:4;3591:11;;;;;;;;2383:1273;3640:5;3633:12;;;;;1578:404;1641:4;1662:21;1672:3;1677:5;1662:9;:21::i;:::-;1657:319;;-1:-1:-1;27:10;;39:1;23:18;;;45:23;;1699:11:103;:23;;;;;;;;;;;;;1879:18;;1857:19;;;:12;;;:19;;;;;;:40;;;;1911:11;;1657:319;-1:-1:-1;1960:5:103;1953:12;;1795:678:102;1871:4;2004:17;;;:12;;;:17;;;;;;2036:13;2032:435;;-1:-1:-1;;2120:38:102;;;;;;;;;;;;;;;;;;27:10:-1;;39:1;23:18;;;45:23;;2102:12:102;:57;;;;;;;;;;;;;;;;;;;;;;;;2314:19;;2294:17;;;:12;;;:17;;;;;;;:39;2347:11;;2032:435;2425:5;2389:3;:12;;2413:1;2402:8;:12;2389:26;;;;;;;;;;;;;;;;;;:33;;:41;;;;2451:5;2444:12;;;;;2641:1517;2705:4;2838:17;;;:12;;;:17;;;;;;2870:13;;2866:1286;;3296:19;;-1:-1:-1;;3250:12:102;;;;3296:23;;;;3226:21;;3296:3;;:23;;3588;;;;;;;;;;;;;;;;3559:52;;3733:9;3703:3;:12;;3716:13;3703:27;;;;;;;;;;;;;;;;:39;;:27;;;;;:39;;;;;;;;;;;;;;;3821:14;;3808:28;;:12;;;:28;;;;;3839:17;;;3808:48;;3962:18;;3808:3;;3962:18;;;;;;;;;;;;;;-1:-1:-1;;3962:18:102;;;;;;;;;;;;;;;;;;;;;4055:17;;;:12;;;:17;;;;;;4048:24;;;;3962:18;-1:-1:-1;4087:11:102;;-1:-1:-1;;;;4087:11:102;1637:198:12;-1:-1:-1;;;;;;1720:25:12;;;;;1712:66;;;;;-1:-1:-1;;;1712:66:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1788:33:12;;;;;:20;:33;;;;;:40;;-1:-1:-1;;1788:40:12;1824:4;1788:40;;;1637:198::o;19988:98:86:-;20060:19;;;;:8;;:19;;;;;:::i;685:610:98:-;745:4;1206:20;;1051:66;1245:23;;;;;;:42;;-1:-1:-1;;1272:15:98;;;1237:51;-1:-1:-1;;685:610:98:o;889:3407:77:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;889:3407:77;;;-1:-1:-1;889:3407:77;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MINTER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PAUSER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "baseURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "baseURI",
          "type": "string"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "contracts/presets/ERC721PresetMinterPauserAutoId.sol",
    "exportedSymbols": {
      "ERC721PresetMinterPauserAutoIdUpgradeSafe": [
        9647
      ]
    },
    "id": 9648,
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 9434,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "0:23:77"
      },
      {
        "absolutePath": "contracts/access/AccessControl.sol",
        "file": "../access/AccessControl.sol",
        "id": 9435,
        "nodeType": "ImportDirective",
        "scope": 9648,
        "sourceUnit": 1698,
        "src": "25:37:77",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/GSN/Context.sol",
        "file": "../GSN/Context.sol",
        "id": 9436,
        "nodeType": "ImportDirective",
        "scope": 9648,
        "sourceUnit": 45,
        "src": "63:28:77",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/utils/Counters.sol",
        "file": "../utils/Counters.sol",
        "id": 9437,
        "nodeType": "ImportDirective",
        "scope": 9648,
        "sourceUnit": 14073,
        "src": "92:31:77",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/token/ERC721/ERC721.sol",
        "file": "../token/ERC721/ERC721.sol",
        "id": 9438,
        "nodeType": "ImportDirective",
        "scope": 9648,
        "sourceUnit": 12204,
        "src": "124:36:77",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/token/ERC721/ERC721Burnable.sol",
        "file": "../token/ERC721/ERC721Burnable.sol",
        "id": 9439,
        "nodeType": "ImportDirective",
        "scope": 9648,
        "sourceUnit": 12262,
        "src": "161:44:77",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/token/ERC721/ERC721Pausable.sol",
        "file": "../token/ERC721/ERC721Pausable.sol",
        "id": 9440,
        "nodeType": "ImportDirective",
        "scope": 9648,
        "sourceUnit": 12377,
        "src": "206:44:77",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/Initializable.sol",
        "file": "../Initializable.sol",
        "id": 9441,
        "nodeType": "ImportDirective",
        "scope": 9648,
        "sourceUnit": 1408,
        "src": "251:30:77",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9443,
              "name": "Initializable",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1407,
              "src": "943:13:77",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Initializable_$1407",
                "typeString": "contract Initializable"
              }
            },
            "id": 9444,
            "nodeType": "InheritanceSpecifier",
            "src": "943:13:77"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9445,
              "name": "ContextUpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 44,
              "src": "958:18:77",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ContextUpgradeSafe_$44",
                "typeString": "contract ContextUpgradeSafe"
              }
            },
            "id": 9446,
            "nodeType": "InheritanceSpecifier",
            "src": "958:18:77"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9447,
              "name": "AccessControlUpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 1697,
              "src": "978:24:77",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_AccessControlUpgradeSafe_$1697",
                "typeString": "contract AccessControlUpgradeSafe"
              }
            },
            "id": 9448,
            "nodeType": "InheritanceSpecifier",
            "src": "978:24:77"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9449,
              "name": "ERC721BurnableUpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12261,
              "src": "1004:25:77",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC721BurnableUpgradeSafe_$12261",
                "typeString": "contract ERC721BurnableUpgradeSafe"
              }
            },
            "id": 9450,
            "nodeType": "InheritanceSpecifier",
            "src": "1004:25:77"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 9451,
              "name": "ERC721PausableUpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 12376,
              "src": "1031:25:77",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ERC721PausableUpgradeSafe_$12376",
                "typeString": "contract ERC721PausableUpgradeSafe"
              }
            },
            "id": 9452,
            "nodeType": "InheritanceSpecifier",
            "src": "1031:25:77"
          }
        ],
        "contractDependencies": [
          44,
          1407,
          1697,
          2511,
          2779,
          12203,
          12261,
          12376,
          12484,
          12512,
          12536,
          15143
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 9442,
          "nodeType": "StructuredDocumentation",
          "src": "283:605:77",
          "text": "@dev {ERC721} token, including:\n *  - ability for holders to burn (destroy) their tokens\n - a minter role that allows for token minting (creation)\n - a pauser role that allows to stop all token transfers\n - token ID and URI autogeneration\n * This contract uses {AccessControl} to lock permissioned functions using the\ndifferent roles - head to its documentation for details.\n * The account that deploys the contract will be granted the minter and pauser\nroles, as well as the default admin role, which will let it grant both minter\nand pauser roles to aother accounts"
        },
        "fullyImplemented": true,
        "id": 9647,
        "linearizedBaseContracts": [
          9647,
          12376,
          15143,
          12261,
          12203,
          12512,
          12536,
          12484,
          2511,
          2779,
          1697,
          44,
          1407
        ],
        "name": "ERC721PresetMinterPauserAutoIdUpgradeSafe",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 9455,
            "libraryName": {
              "contractScope": null,
              "id": 9453,
              "name": "Counters",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14072,
              "src": "1069:8:77",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Counters_$14072",
                "typeString": "library Counters"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "1063:36:77",
            "typeName": {
              "contractScope": null,
              "id": 9454,
              "name": "Counters.Counter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14032,
              "src": "1082:16:77",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$14032_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            }
          },
          {
            "constant": true,
            "functionSelector": "d5391393",
            "id": 9460,
            "mutability": "constant",
            "name": "MINTER_ROLE",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9647,
            "src": "1105:62:77",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 9456,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1105:7:77",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "4d494e5445525f524f4c45",
                  "id": 9458,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1153:13:77",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
                    "typeString": "literal_string \"MINTER_ROLE\""
                  },
                  "value": "MINTER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
                    "typeString": "literal_string \"MINTER_ROLE\""
                  }
                ],
                "id": 9457,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "1143:9:77",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 9459,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1143:24:77",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": true,
            "functionSelector": "e63ab1e9",
            "id": 9465,
            "mutability": "constant",
            "name": "PAUSER_ROLE",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9647,
            "src": "1173:62:77",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 9461,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1173:7:77",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "argumentTypes": null,
              "arguments": [
                {
                  "argumentTypes": null,
                  "hexValue": "5041555345525f524f4c45",
                  "id": 9463,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1221:13:77",
                  "subdenomination": null,
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a",
                    "typeString": "literal_string \"PAUSER_ROLE\""
                  },
                  "value": "PAUSER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a",
                    "typeString": "literal_string \"PAUSER_ROLE\""
                  }
                ],
                "id": 9462,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "1211:9:77",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 9464,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1211:24:77",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "public"
          },
          {
            "constant": false,
            "id": 9467,
            "mutability": "mutable",
            "name": "_tokenIdTracker",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9647,
            "src": "1242:40:77",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_struct$_Counter_$14032_storage",
              "typeString": "struct Counters.Counter"
            },
            "typeName": {
              "contractScope": null,
              "id": 9466,
              "name": "Counters.Counter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 14032,
              "src": "1242:16:77",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Counter_$14032_storage_ptr",
                "typeString": "struct Counters.Counter"
              }
            },
            "value": null,
            "visibility": "private"
          },
          {
            "body": {
              "id": 9483,
              "nodeType": "Block",
              "src": "1621:77:77",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9478,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9470,
                        "src": "1669:4:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9479,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9472,
                        "src": "1675:6:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9480,
                        "name": "baseURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9474,
                        "src": "1683:7:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9477,
                      "name": "__ERC721PresetMinterPauserAutoId_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9525,
                      "src": "1631:37:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,string memory,string memory)"
                      }
                    },
                    "id": 9481,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1631:60:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9482,
                  "nodeType": "ExpressionStatement",
                  "src": "1631:60:77"
                }
              ]
            },
            "documentation": {
              "id": 9468,
              "nodeType": "StructuredDocumentation",
              "src": "1289:234:77",
              "text": "@dev Grants `DEFAULT_ADMIN_ROLE` and `MINTER_ROLE`to the account that\ndeploys the contract.\n     * Token URIs will be autogenerated based on `baseURI` and their token IDs.\nSee {ERC721-tokenURI}."
            },
            "functionSelector": "a6487c53",
            "id": 9484,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9475,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9470,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9484,
                  "src": "1549:18:77",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9469,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1549:6:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9472,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9484,
                  "src": "1569:20:77",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9471,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1569:6:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9474,
                  "mutability": "mutable",
                  "name": "baseURI",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9484,
                  "src": "1591:21:77",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9473,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1591:6:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1548:65:77"
            },
            "returnParameters": {
              "id": 9476,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1621:0:77"
            },
            "scope": 9647,
            "src": "1529:169:77",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9524,
              "nodeType": "Block",
              "src": "1837:370:77",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9495,
                      "name": "__Context_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 19,
                      "src": "1847:24:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1847:26:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9497,
                  "nodeType": "ExpressionStatement",
                  "src": "1847:26:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9498,
                      "name": "__AccessControl_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1436,
                      "src": "1883:30:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9499,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1883:32:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9500,
                  "nodeType": "ExpressionStatement",
                  "src": "1883:32:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9501,
                      "name": "__ERC165_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2472,
                      "src": "1925:23:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1925:25:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9503,
                  "nodeType": "ExpressionStatement",
                  "src": "1925:25:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9505,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9486,
                        "src": "1984:4:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9506,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9488,
                        "src": "1990:6:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9504,
                      "name": "__ERC721_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11356,
                      "src": "1960:23:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,string memory)"
                      }
                    },
                    "id": 9507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1960:37:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9508,
                  "nodeType": "ExpressionStatement",
                  "src": "1960:37:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9509,
                      "name": "__ERC721Burnable_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12236,
                      "src": "2007:31:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9510,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2007:33:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9511,
                  "nodeType": "ExpressionStatement",
                  "src": "2007:33:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9512,
                      "name": "__Pausable_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15076,
                      "src": "2050:25:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2050:27:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9514,
                  "nodeType": "ExpressionStatement",
                  "src": "2050:27:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9515,
                      "name": "__ERC721Pausable_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12344,
                      "src": "2087:31:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2087:33:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9517,
                  "nodeType": "ExpressionStatement",
                  "src": "2087:33:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9519,
                        "name": "name",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9486,
                        "src": "2178:4:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9520,
                        "name": "symbol",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9488,
                        "src": "2184:6:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9521,
                        "name": "baseURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9490,
                        "src": "2192:7:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9518,
                      "name": "__ERC721PresetMinterPauserAutoId_init_unchained",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 9559,
                      "src": "2130:47:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory,string memory,string memory)"
                      }
                    },
                    "id": 9522,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2130:70:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9523,
                  "nodeType": "ExpressionStatement",
                  "src": "2130:70:77"
                }
              ]
            },
            "documentation": null,
            "id": 9525,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9493,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9492,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1380,
                  "src": "1825:11:77",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1825:11:77"
              }
            ],
            "name": "__ERC721PresetMinterPauserAutoId_init",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9491,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9486,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9525,
                  "src": "1751:18:77",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9485,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1751:6:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9488,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9525,
                  "src": "1771:20:77",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9487,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1771:6:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9490,
                  "mutability": "mutable",
                  "name": "baseURI",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9525,
                  "src": "1793:21:77",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9489,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1793:6:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1750:65:77"
            },
            "returnParameters": {
              "id": 9494,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1837:0:77"
            },
            "scope": 9647,
            "src": "1704:503:77",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9558,
              "nodeType": "Block",
              "src": "2356:190:77",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9537,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1454,
                        "src": "2379:18:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 9538,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28,
                          "src": "2399:10:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                            "typeString": "function () view returns (address payable)"
                          }
                        },
                        "id": 9539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2399:12:77",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 9536,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1628,
                      "src": "2368:10:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 9540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2368:44:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9541,
                  "nodeType": "ExpressionStatement",
                  "src": "2368:44:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9543,
                        "name": "MINTER_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9460,
                        "src": "2434:11:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 9544,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28,
                          "src": "2447:10:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                            "typeString": "function () view returns (address payable)"
                          }
                        },
                        "id": 9545,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2447:12:77",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 9542,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1628,
                      "src": "2423:10:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 9546,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2423:37:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9547,
                  "nodeType": "ExpressionStatement",
                  "src": "2423:37:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9549,
                        "name": "PAUSER_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9465,
                        "src": "2481:11:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 9550,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28,
                          "src": "2494:10:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                            "typeString": "function () view returns (address payable)"
                          }
                        },
                        "id": 9551,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2494:12:77",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 9548,
                      "name": "_setupRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1628,
                      "src": "2470:10:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,address)"
                      }
                    },
                    "id": 9552,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2470:37:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9553,
                  "nodeType": "ExpressionStatement",
                  "src": "2470:37:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9555,
                        "name": "baseURI",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9531,
                        "src": "2530:7:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 9554,
                      "name": "_setBaseURI",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 12089,
                      "src": "2518:11:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory)"
                      }
                    },
                    "id": 9556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2518:20:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9557,
                  "nodeType": "ExpressionStatement",
                  "src": "2518:20:77"
                }
              ]
            },
            "documentation": null,
            "id": 9559,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 9534,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 9533,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1380,
                  "src": "2344:11:77",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "2344:11:77"
              }
            ],
            "name": "__ERC721PresetMinterPauserAutoId_init_unchained",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9532,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9527,
                  "mutability": "mutable",
                  "name": "name",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9559,
                  "src": "2270:18:77",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9526,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2270:6:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9529,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9559,
                  "src": "2290:20:77",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9528,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2290:6:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9531,
                  "mutability": "mutable",
                  "name": "baseURI",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9559,
                  "src": "2312:21:77",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 9530,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2312:6:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2269:65:77"
            },
            "returnParameters": {
              "id": 9535,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2356:0:77"
            },
            "scope": 9647,
            "src": "2213:333:77",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 9586,
              "nodeType": "Block",
              "src": "2947:356:77",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9567,
                            "name": "MINTER_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9460,
                            "src": "2973:11:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9568,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28,
                              "src": "2986:10:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 9569,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "2986:12:77",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 9566,
                          "name": "hasRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1491,
                          "src": "2965:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address) view returns (bool)"
                          }
                        },
                        "id": 9570,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2965:34:77",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552433732315072657365744d696e7465725061757365724175746f49643a206d7573742068617665206d696e74657220726f6c6520746f206d696e74",
                        "id": 9571,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3001:63:77",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ea198f3e8a5129d820e5e0bb8ade0f42a56b75e06362ce80ffa86409143aedbb",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have minter role to mint\""
                        },
                        "value": "ERC721PresetMinterPauserAutoId: must have minter role to mint"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ea198f3e8a5129d820e5e0bb8ade0f42a56b75e06362ce80ffa86409143aedbb",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have minter role to mint\""
                        }
                      ],
                      "id": 9565,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "2957:7:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9572,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2957:108:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9573,
                  "nodeType": "ExpressionStatement",
                  "src": "2957:108:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9575,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9562,
                        "src": "3229:2:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "argumentTypes": null,
                            "id": 9576,
                            "name": "_tokenIdTracker",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9467,
                            "src": "3233:15:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Counter_$14032_storage",
                              "typeString": "struct Counters.Counter storage ref"
                            }
                          },
                          "id": 9577,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "current",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 14043,
                          "src": "3233:23:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_struct$_Counter_$14032_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Counter_$14032_storage_ptr_$",
                            "typeString": "function (struct Counters.Counter storage pointer) view returns (uint256)"
                          }
                        },
                        "id": 9578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3233:25:77",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 9574,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 11917,
                      "src": "3223:5:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 9579,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3223:36:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9580,
                  "nodeType": "ExpressionStatement",
                  "src": "3223:36:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9581,
                        "name": "_tokenIdTracker",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9467,
                        "src": "3269:15:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Counter_$14032_storage",
                          "typeString": "struct Counters.Counter storage ref"
                        }
                      },
                      "id": 9583,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "increment",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 14055,
                      "src": "3269:25:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Counter_$14032_storage_ptr_$returns$__$bound_to$_t_struct$_Counter_$14032_storage_ptr_$",
                        "typeString": "function (struct Counters.Counter storage pointer)"
                      }
                    },
                    "id": 9584,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3269:27:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9585,
                  "nodeType": "ExpressionStatement",
                  "src": "3269:27:77"
                }
              ]
            },
            "documentation": {
              "id": 9560,
              "nodeType": "StructuredDocumentation",
              "src": "2553:356:77",
              "text": "@dev Creates a new token for `to`. Its token ID will be automatically\nassigned (and available on the emitted {Transfer} event), and the token\nURI autogenerated based on the base URI passed at construction.\n     * See {ERC721-_mint}.\n     * Requirements:\n     * - the caller must have the `MINTER_ROLE`."
            },
            "functionSelector": "6a627842",
            "id": 9587,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "mint",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9563,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9562,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9587,
                  "src": "2928:10:77",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9561,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2928:7:77",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2927:12:77"
            },
            "returnParameters": {
              "id": 9564,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2947:0:77"
            },
            "scope": 9647,
            "src": "2914:389:77",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9603,
              "nodeType": "Block",
              "src": "3531:144:77",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9593,
                            "name": "PAUSER_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9465,
                            "src": "3557:11:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9594,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28,
                              "src": "3570:10:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 9595,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3570:12:77",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 9592,
                          "name": "hasRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1491,
                          "src": "3549:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address) view returns (bool)"
                          }
                        },
                        "id": 9596,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3549:34:77",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f207061757365",
                        "id": 9597,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3585:64:77",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_40c9c95e9f416c51c55d88e1508883bb887c746928503de15b750cf10a750aef",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have pauser role to pause\""
                        },
                        "value": "ERC721PresetMinterPauserAutoId: must have pauser role to pause"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_40c9c95e9f416c51c55d88e1508883bb887c746928503de15b750cf10a750aef",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have pauser role to pause\""
                        }
                      ],
                      "id": 9591,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3541:7:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3541:109:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9599,
                  "nodeType": "ExpressionStatement",
                  "src": "3541:109:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9600,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15122,
                      "src": "3660:6:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3660:8:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9602,
                  "nodeType": "ExpressionStatement",
                  "src": "3660:8:77"
                }
              ]
            },
            "documentation": {
              "id": 9588,
              "nodeType": "StructuredDocumentation",
              "src": "3309:193:77",
              "text": "@dev Pauses all token transfers.\n     * See {ERC721Pausable} and {Pausable-_pause}.\n     * Requirements:\n     * - the caller must have the `PAUSER_ROLE`."
            },
            "functionSelector": "8456cb59",
            "id": 9604,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "pause",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9589,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3521:2:77"
            },
            "returnParameters": {
              "id": 9590,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3531:0:77"
            },
            "scope": 9647,
            "src": "3507:168:77",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 9620,
              "nodeType": "Block",
              "src": "3909:148:77",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 9610,
                            "name": "PAUSER_ROLE",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 9465,
                            "src": "3935:11:77",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 9611,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28,
                              "src": "3948:10:77",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_payable_$",
                                "typeString": "function () view returns (address payable)"
                              }
                            },
                            "id": 9612,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3948:12:77",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          ],
                          "id": 9609,
                          "name": "hasRole",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1491,
                          "src": "3927:7:77",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (bytes32,address) view returns (bool)"
                          }
                        },
                        "id": 9613,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3927:34:77",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "4552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f20756e7061757365",
                        "id": 9614,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3963:66:77",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f3877585dfb2235e1900eee5d9e32a457b9d6148f93823a62cb07ae76c6585a8",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have pauser role to unpause\""
                        },
                        "value": "ERC721PresetMinterPauserAutoId: must have pauser role to unpause"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f3877585dfb2235e1900eee5d9e32a457b9d6148f93823a62cb07ae76c6585a8",
                          "typeString": "literal_string \"ERC721PresetMinterPauserAutoId: must have pauser role to unpause\""
                        }
                      ],
                      "id": 9608,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "3919:7:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 9615,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3919:111:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9616,
                  "nodeType": "ExpressionStatement",
                  "src": "3919:111:77"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 9617,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 15138,
                      "src": "4040:8:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 9618,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4040:10:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9619,
                  "nodeType": "ExpressionStatement",
                  "src": "4040:10:77"
                }
              ]
            },
            "documentation": {
              "id": 9605,
              "nodeType": "StructuredDocumentation",
              "src": "3681:197:77",
              "text": "@dev Unpauses all token transfers.\n     * See {ERC721Pausable} and {Pausable-_unpause}.\n     * Requirements:\n     * - the caller must have the `PAUSER_ROLE`."
            },
            "functionSelector": "3f4ba83a",
            "id": 9621,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "unpause",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 9606,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3899:2:77"
            },
            "returnParameters": {
              "id": 9607,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3909:0:77"
            },
            "scope": 9647,
            "src": "3883:174:77",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              12198,
              12371
            ],
            "body": {
              "id": 9641,
              "nodeType": "Block",
              "src": "4200:62:77",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 9636,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9623,
                        "src": "4237:4:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9637,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9625,
                        "src": "4243:2:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 9638,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 9627,
                        "src": "4247:7:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 9633,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "4210:5:77",
                        "typeDescriptions": {
                          "typeIdentifier": "t_super$_ERC721PresetMinterPauserAutoIdUpgradeSafe_$9647",
                          "typeString": "contract super ERC721PresetMinterPauserAutoIdUpgradeSafe"
                        }
                      },
                      "id": 9635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_beforeTokenTransfer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 12371,
                      "src": "4210:26:77",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 9639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4210:45:77",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 9640,
                  "nodeType": "ExpressionStatement",
                  "src": "4210:45:77"
                }
              ]
            },
            "documentation": null,
            "id": 9642,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_beforeTokenTransfer",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 9631,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "contractScope": null,
                  "id": 9629,
                  "name": "ERC721UpgradeSafe",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 12203,
                  "src": "4154:17:77",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC721UpgradeSafe_$12203",
                    "typeString": "contract ERC721UpgradeSafe"
                  }
                },
                {
                  "contractScope": null,
                  "id": 9630,
                  "name": "ERC721PausableUpgradeSafe",
                  "nodeType": "UserDefinedTypeName",
                  "referencedDeclaration": 12376,
                  "src": "4173:25:77",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC721PausableUpgradeSafe_$12376",
                    "typeString": "contract ERC721PausableUpgradeSafe"
                  }
                }
              ],
              "src": "4145:54:77"
            },
            "parameters": {
              "id": 9628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 9623,
                  "mutability": "mutable",
                  "name": "from",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9642,
                  "src": "4093:12:77",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9622,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4093:7:77",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9625,
                  "mutability": "mutable",
                  "name": "to",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9642,
                  "src": "4107:10:77",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 9624,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4107:7:77",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 9627,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 9642,
                  "src": "4119:15:77",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 9626,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4119:7:77",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4092:43:77"
            },
            "returnParameters": {
              "id": 9632,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4200:0:77"
            },
            "scope": 9647,
            "src": "4063:199:77",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 9646,
            "mutability": "mutable",
            "name": "__gap",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 9647,
            "src": "4268:25:77",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$49_storage",
              "typeString": "uint256[49]"
            },
            "typeName": {
              "baseType": {
                "id": 9643,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "4268:7:77",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 9645,
              "length": {
                "argumentTypes": null,
                "hexValue": "3439",
                "id": 9644,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "4276:2:77",
                "subdenomination": null,
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_49_by_1",
                  "typeString": "int_const 49"
                },
                "value": "49"
              },
              "nodeType": "ArrayTypeName",
              "src": "4268:11:77",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$49_storage_ptr",
                "typeString": "uint256[49]"
              }
            },
            "value": null,
            "visibility": "private"
          }
        ],
        "scope": 9648,
        "src": "889:3407:77"
      }
    ],
    "src": "0:4297:77"
  },
  "bytecode": "0x608060405234801561001057600080fd5b50612ecd806100206000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636a6278421161011a578063a22cb465116100ad578063ca15c8731161007c578063ca15c87314610825578063d539139314610842578063d547741f1461084a578063e63ab1e914610876578063e985e9c51461087e576101fb565b8063a22cb46514610568578063a6487c5314610596578063b88d4fde14610744578063c87b56dd14610808576101fb565b80639010d07c116100e95780639010d07c1461050957806391d148541461052c57806395d89b4114610558578063a217fddf14610560576101fb565b80636a627842146104ad5780636c0360eb146104d357806370a08231146104db5780638456cb5914610501576101fb565b80632f745c591161019257806342966c681161016157806342966c681461044e5780634f6ccce71461046b5780635c975abb146104885780636352211e14610490576101fb565b80632f745c59146103b857806336568abe146103e45780633f4ba83a1461041057806342842e0e14610418576101fb565b806318160ddd116101ce57806318160ddd1461031f57806323b872dd14610339578063248a9ca31461036f5780632f2ff15d1461038c576101fb565b806301ffc9a71461020057806306fdde031461023b578063081812fc146102b8578063095ea7b3146102f1575b600080fd5b6102276004803603602081101561021657600080fd5b50356001600160e01b0319166108ac565b604080519115158252519081900360200190f35b6102436108cf565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027d578181015183820152602001610265565b50505050905090810190601f1680156102aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360208110156102ce57600080fd5b5035610966565b604080516001600160a01b039092168252519081900360200190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b0381351690602001356109c8565b005b610327610aa3565b60408051918252519081900360200190f35b61031d6004803603606081101561034f57600080fd5b506001600160a01b03813581169160208101359091169060400135610ab4565b6103276004803603602081101561038557600080fd5b5035610b0b565b61031d600480360360408110156103a257600080fd5b50803590602001356001600160a01b0316610b20565b610327600480360360408110156103ce57600080fd5b506001600160a01b038135169060200135610b8c565b61031d600480360360408110156103fa57600080fd5b50803590602001356001600160a01b0316610bbd565b61031d610c1e565b61031d6004803603606081101561042e57600080fd5b506001600160a01b03813581169160208101359091169060400135610c8f565b61031d6004803603602081101561046457600080fd5b5035610caa565b6103276004803603602081101561048157600080fd5b5035610cfc565b610227610d18565b6102d5600480360360208110156104a657600080fd5b5035610d22565b61031d600480360360208110156104c357600080fd5b50356001600160a01b0316610d50565b610243610dd6565b610327600480360360208110156104f157600080fd5b50356001600160a01b0316610e37565b61031d610e9f565b6102d56004803603604081101561051f57600080fd5b5080359060200135610f0e565b6102276004803603604081101561054257600080fd5b50803590602001356001600160a01b0316610f2c565b610243610f4a565b610327610fab565b61031d6004803603604081101561057e57600080fd5b506001600160a01b0381351690602001351515610fb0565b61031d600480360360608110156105ac57600080fd5b810190602081018135600160201b8111156105c657600080fd5b8201836020820111156105d857600080fd5b803590602001918460018302840111600160201b831117156105f957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561064b57600080fd5b82018360208201111561065d57600080fd5b803590602001918460018302840111600160201b8311171561067e57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156106d057600080fd5b8201836020820111156106e257600080fd5b803590602001918460018302840111600160201b8311171561070357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506110b5945050505050565b61031d6004803603608081101561075a57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561079457600080fd5b8201836020820111156107a657600080fd5b803590602001918460018302840111600160201b831117156107c757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506110c0945050505050565b6102436004803603602081101561081e57600080fd5b503561111e565b6103276004803603602081101561083b57600080fd5b50356113c5565b6103276113dc565b61031d6004803603604081101561086057600080fd5b50803590602001356001600160a01b03166113ff565b610327611458565b6102276004803603604081101561089457600080fd5b506001600160a01b038135811691602001351661147b565b6001600160e01b0319811660009081526097602052604090205460ff165b919050565b60ce8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561095b5780601f106109305761010080835404028352916020019161095b565b820191906000526020600020905b81548152906001019060200180831161093e57829003601f168201915b505050505090505b90565b6000610971826114a9565b6109ac5760405162461bcd60e51b815260040180806020018281038252602c815260200180612cb8602c913960400191505060405180910390fd5b50600090815260cc60205260409020546001600160a01b031690565b60006109d382610d22565b9050806001600160a01b0316836001600160a01b03161415610a265760405162461bcd60e51b8152600401808060200182810382526021815260200180612d6a6021913960400191505060405180910390fd5b806001600160a01b0316610a386114bc565b6001600160a01b03161480610a595750610a5981610a546114bc565b61147b565b610a945760405162461bcd60e51b8152600401808060200182810382526038815260200180612c0b6038913960400191505060405180910390fd5b610a9e83836114c0565b505050565b6000610aaf60ca61152e565b905090565b610ac5610abf6114bc565b82611539565b610b005760405162461bcd60e51b8152600401808060200182810382526031815260200180612d8b6031913960400191505060405180910390fd5b610a9e8383836115dd565b60009081526065602052604090206002015490565b600082815260656020526040902060020154610b4390610b3e6114bc565b610f2c565b610b7e5760405162461bcd60e51b815260040180806020018281038252602f815260200180612aec602f913960400191505060405180910390fd5b610b88828261173b565b5050565b6001600160a01b038216600090815260c960205260408120610bb4908363ffffffff6117aa16565b90505b92915050565b610bc56114bc565b6001600160a01b0316816001600160a01b031614610c145760405162461bcd60e51b815260040180806020018281038252602f815260200180612e69602f913960400191505060405180910390fd5b610b8882826117b6565b604080516a5041555345525f524f4c4560a81b8152905190819003600b019020610c4a90610b3e6114bc565b610c855760405162461bcd60e51b8152600401808060200182810382526040815260200180612e296040913960400191505060405180910390fd5b610c8d611825565b565b610a9e838383604051806020016040528060008152506110c0565b610cb5610abf6114bc565b610cf05760405162461bcd60e51b8152600401808060200182810382526030815260200180612df96030913960400191505060405180910390fd5b610cf9816118c5565b50565b600080610d1060ca8463ffffffff61199e16565b509392505050565b61012d5460ff1690565b6000610bb782604051806060016040528060298152602001612c6d6029913960ca919063ffffffff6119ba16565b604080516a4d494e5445525f524f4c4560a81b8152905190819003600b019020610d7c90610b3e6114bc565b610db75760405162461bcd60e51b815260040180806020018281038252603d815260200180612dbc603d913960400191505060405180910390fd5b610dcb81610dc66101916119d1565b6119d5565b610cf9610191611b0f565b60d18054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561095b5780601f106109305761010080835404028352916020019161095b565b60006001600160a01b038216610e7e5760405162461bcd60e51b815260040180806020018281038252602a815260200180612c43602a913960400191505060405180910390fd5b6001600160a01b038216600090815260c960205260409020610bb79061152e565b604080516a5041555345525f524f4c4560a81b8152905190819003600b019020610ecb90610b3e6114bc565b610f065760405162461bcd60e51b815260040180806020018281038252603e815260200180612b4d603e913960400191505060405180910390fd5b610c8d611b18565b6000828152606560205260408120610bb4908363ffffffff6117aa16565b6000828152606560205260408120610bb4908363ffffffff611b9b16565b60cf8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561095b5780601f106109305761010080835404028352916020019161095b565b600081565b610fb86114bc565b6001600160a01b0316826001600160a01b0316141561101e576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8060cd600061102b6114bc565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561106f6114bc565b60408051841515815290516001600160a01b0392909216917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b610a9e838383611bb0565b6110d16110cb6114bc565b83611539565b61110c5760405162461bcd60e51b8152600401808060200182810382526031815260200180612d8b6031913960400191505060405180910390fd5b61111884848484611c99565b50505050565b6060611129826114a9565b6111645760405162461bcd60e51b815260040180806020018281038252602f815260200180612d3b602f913960400191505060405180910390fd5b600082815260d0602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156111f95780601f106111ce576101008083540402835291602001916111f9565b820191906000526020600020905b8154815290600101906020018083116111dc57829003601f168201915b505060d154939450505050600260001961010060018416150201909116046112225790506108ca565b8051156112f35760d181604051602001808380546001816001161561010002031660029004801561128a5780601f1061126857610100808354040283529182019161128a565b820191906000526020600020905b815481529060010190602001808311611276575b5050825160208401908083835b602083106112b65780518252601f199092019160209182019101611297565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150506108ca565b60d16112fe84611ceb565b604051602001808380546001816001161561010002031660029004801561135c5780601f1061133a57610100808354040283529182019161135c565b820191906000526020600020905b815481529060010190602001808311611348575b5050825160208401908083835b602083106113885780518252601f199092019160209182019101611369565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b6000818152606560205260408120610bb79061152e565b604080516a4d494e5445525f524f4c4560a81b8152905190819003600b01902081565b60008281526065602052604090206002015461141d90610b3e6114bc565b610c145760405162461bcd60e51b8152600401808060200182810382526030815260200180612bdb6030913960400191505060405180910390fd5b604080516a5041555345525f524f4c4560a81b8152905190819003600b01902081565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205460ff1690565b6000610bb760ca8363ffffffff611dc616565b3390565b600081815260cc6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906114f582610d22565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610bb7826119d1565b6000611544826114a9565b61157f5760405162461bcd60e51b815260040180806020018281038252602c815260200180612baf602c913960400191505060405180910390fd5b600061158a83610d22565b9050806001600160a01b0316846001600160a01b031614806115c55750836001600160a01b03166115ba84610966565b6001600160a01b0316145b806115d557506115d5818561147b565b949350505050565b826001600160a01b03166115f082610d22565b6001600160a01b0316146116355760405162461bcd60e51b8152600401808060200182810382526029815260200180612d126029913960400191505060405180910390fd5b6001600160a01b03821661167a5760405162461bcd60e51b8152600401808060200182810382526024815260200180612b8b6024913960400191505060405180910390fd5b611685838383611dd2565b6116906000826114c0565b6001600160a01b038316600090815260c9602052604090206116b8908263ffffffff611ddd16565b506001600160a01b038216600090815260c9602052604090206116e1908263ffffffff611de916565b506116f460ca828463ffffffff611df516565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000828152606560205260409020611759908263ffffffff611e0b16565b15610b88576117666114bc565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610bb48383611e20565b60008281526065602052604090206117d4908263ffffffff611e8416565b15610b88576117e16114bc565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b61012d5460ff16611874576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6118a86114bc565b604080516001600160a01b039092168252519081900360200190a1565b60006118d082610d22565b90506118de81600084611dd2565b6118e96000836114c0565b600082815260d06020526040902054600260001961010060018416150201909116041561192757600082815260d060205260408120611927916129c2565b6001600160a01b038116600090815260c96020526040902061194f908363ffffffff611ddd16565b5061196160ca8363ffffffff611e9916565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008080806119ad8686611ea5565b9097909650945050505050565b60006119c7848484611f20565b90505b9392505050565b5490565b6001600160a01b038216611a30576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b611a39816114a9565b15611a8b576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b611a9760008383611dd2565b6001600160a01b038216600090815260c960205260409020611abf908263ffffffff611de916565b50611ad260ca828463ffffffff611df516565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b61012d5460ff1615611b64576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118a86114bc565b6000610bb4836001600160a01b038416611fea565b600054610100900460ff1680611bc95750611bc9612002565b80611bd7575060005460ff16155b611c125760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff16158015611c3d576000805460ff1961ff0019909116610100171660011790555b611c45612008565b611c4d612008565b611c556120a9565b611c5f8484612146565b611c67612008565b611c6f612241565b611c77612008565b611c828484846122ed565b8015611118576000805461ff001916905550505050565b611ca48484846115dd565b611cb0848484846123ed565b6111185760405162461bcd60e51b8152600401808060200182810382526032815260200180612b1b6032913960400191505060405180910390fd5b606081611d1057506040805180820190915260018152600360fc1b60208201526108ca565b8160005b8115611d2857600101600a82049150611d14565b60608167ffffffffffffffff81118015611d4157600080fd5b506040519080825280601f01601f191660200182016040528015611d6c576020820181803683370190505b50859350905060001982015b8315611dbd57600a840660300160f81b82828060019003935081518110611d9b57fe5b60200101906001600160f81b031916908160001a905350600a84049350611d78565b50949350505050565b6000610bb48383611fea565b610a9e838383612628565b6000610bb48383612677565b6000610bb4838361273d565b60006119c784846001600160a01b038516612787565b6000610bb4836001600160a01b03841661273d565b81546000908210611e625760405162461bcd60e51b8152600401808060200182810382526022815260200180612a9f6022913960400191505060405180910390fd5b826000018281548110611e7157fe5b9060005260206000200154905092915050565b6000610bb4836001600160a01b038416612677565b6000610bb4838361281e565b815460009081908310611ee95760405162461bcd60e51b8152600401808060200182810382526022815260200180612c966022913960400191505060405180910390fd5b6000846000018481548110611efa57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281611fbb5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f80578181015183820152602001611f68565b50505050905090810190601f168015611fad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50846000016001820381548110611fce57fe5b9060005260206000209060020201600101549150509392505050565b60009081526001919091016020526040902054151590565b303b1590565b600054610100900460ff16806120215750612021612002565b8061202f575060005460ff16155b61206a5760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff16158015612095576000805460ff1961ff0019909116610100171660011790555b8015610cf9576000805461ff001916905550565b600054610100900460ff16806120c257506120c2612002565b806120d0575060005460ff16155b61210b5760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff16158015612136576000805460ff1961ff0019909116610100171660011790555b6120956301ffc9a760e01b6128f2565b600054610100900460ff168061215f575061215f612002565b8061216d575060005460ff16155b6121a85760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff161580156121d3576000805460ff1961ff0019909116610100171660011790555b82516121e69060ce906020860190612a06565b5081516121fa9060cf906020850190612a06565b5061220b6380ac58cd60e01b6128f2565b61221b635b5e139f60e01b6128f2565b61222b63780e9d6360e01b6128f2565b8015610a9e576000805461ff0019169055505050565b600054610100900460ff168061225a575061225a612002565b80612268575060005460ff16155b6122a35760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff161580156122ce576000805460ff1961ff0019909116610100171660011790555b61012d805460ff191690558015610cf9576000805461ff001916905550565b600054610100900460ff16806123065750612306612002565b80612314575060005460ff16155b61234f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff1615801561237a576000805460ff1961ff0019909116610100171660011790555b61238c60006123876114bc565b610b7e565b604080516a4d494e5445525f524f4c4560a81b8152905190819003600b0190206123b8906123876114bc565b604080516a5041555345525f524f4c4560a81b8152905190819003600b0190206123e4906123876114bc565b611c8282612976565b6000612401846001600160a01b0316612989565b61240d575060016115d5565b600060606001600160a01b038616630a85bd0160e11b61242b6114bc565b89888860405160240180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156124a457818101518382015260200161248c565b50505050905090810190601f1680156124d15780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909a16999099178952518151919890975087965094509250829150849050835b602083106125395780518252601f19909201916020918201910161251a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461259b576040519150601f19603f3d011682016040523d82523d6000602084013e6125a0565b606091505b5091509150816125f1578051156125ba5780518082602001fd5b60405162461bcd60e51b8152600401808060200182810382526032815260200180612b1b6032913960400191505060405180910390fd5b600081806020019051602081101561260857600080fd5b50516001600160e01b031916630a85bd0160e11b1493506115d592505050565b612633838383610a9e565b61263b610d18565b15610a9e5760405162461bcd60e51b815260040180806020018281038252602b815260200180612ac1602b913960400191505060405180910390fd5b6000818152600183016020526040812054801561273357835460001980830191908101906000908790839081106126aa57fe5b90600052602060002001549050808760000184815481106126c757fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806126f757fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610bb7565b6000915050610bb7565b60006127498383611fea565b61277f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bb7565b506000610bb7565b6000828152600184016020526040812054806127ec5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556119ca565b828560000160018303815481106127ff57fe5b90600052602060002090600202016001018190555060009150506119ca565b60008181526001830160205260408120548015612733578354600019808301919081019060009087908390811061285157fe5b906000526020600020906002020190508087600001848154811061287157fe5b6000918252602080832084546002909302019182556001938401549184019190915583548252898301905260409020908401905586548790806128b057fe5b6000828152602080822060026000199094019384020182815560019081018390559290935588815289820190925260408220919091559450610bb79350505050565b6001600160e01b03198082161415612951576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152609760205260409020805460ff19166001179055565b8051610b889060d1906020840190612a06565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906115d5575050151592915050565b50805460018160011615610100020316600290046000825580601f106129e85750610cf9565b601f016020900490600052602060002090810190610cf99190612a84565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a4757805160ff1916838001178555612a74565b82800160010185558215612a74579182015b82811115612a74578251825591602001919060010190612a59565b50612a80929150612a84565b5090565b61096391905b80821115612a805760008155600101612a8a56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732315061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e744552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f2070617573654552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b654552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732315072657365744d696e7465725061757365724175746f49643a206d7573742068617665206d696e74657220726f6c6520746f206d696e744552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f20756e7061757365416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220174a83c35a2fbd85fb67ad55b3542c82c2f3a0179044bb1ce49995e5da24309b64736f6c63430006070033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c80636a6278421161011a578063a22cb465116100ad578063ca15c8731161007c578063ca15c87314610825578063d539139314610842578063d547741f1461084a578063e63ab1e914610876578063e985e9c51461087e576101fb565b8063a22cb46514610568578063a6487c5314610596578063b88d4fde14610744578063c87b56dd14610808576101fb565b80639010d07c116100e95780639010d07c1461050957806391d148541461052c57806395d89b4114610558578063a217fddf14610560576101fb565b80636a627842146104ad5780636c0360eb146104d357806370a08231146104db5780638456cb5914610501576101fb565b80632f745c591161019257806342966c681161016157806342966c681461044e5780634f6ccce71461046b5780635c975abb146104885780636352211e14610490576101fb565b80632f745c59146103b857806336568abe146103e45780633f4ba83a1461041057806342842e0e14610418576101fb565b806318160ddd116101ce57806318160ddd1461031f57806323b872dd14610339578063248a9ca31461036f5780632f2ff15d1461038c576101fb565b806301ffc9a71461020057806306fdde031461023b578063081812fc146102b8578063095ea7b3146102f1575b600080fd5b6102276004803603602081101561021657600080fd5b50356001600160e01b0319166108ac565b604080519115158252519081900360200190f35b6102436108cf565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027d578181015183820152602001610265565b50505050905090810190601f1680156102aa5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d5600480360360208110156102ce57600080fd5b5035610966565b604080516001600160a01b039092168252519081900360200190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b0381351690602001356109c8565b005b610327610aa3565b60408051918252519081900360200190f35b61031d6004803603606081101561034f57600080fd5b506001600160a01b03813581169160208101359091169060400135610ab4565b6103276004803603602081101561038557600080fd5b5035610b0b565b61031d600480360360408110156103a257600080fd5b50803590602001356001600160a01b0316610b20565b610327600480360360408110156103ce57600080fd5b506001600160a01b038135169060200135610b8c565b61031d600480360360408110156103fa57600080fd5b50803590602001356001600160a01b0316610bbd565b61031d610c1e565b61031d6004803603606081101561042e57600080fd5b506001600160a01b03813581169160208101359091169060400135610c8f565b61031d6004803603602081101561046457600080fd5b5035610caa565b6103276004803603602081101561048157600080fd5b5035610cfc565b610227610d18565b6102d5600480360360208110156104a657600080fd5b5035610d22565b61031d600480360360208110156104c357600080fd5b50356001600160a01b0316610d50565b610243610dd6565b610327600480360360208110156104f157600080fd5b50356001600160a01b0316610e37565b61031d610e9f565b6102d56004803603604081101561051f57600080fd5b5080359060200135610f0e565b6102276004803603604081101561054257600080fd5b50803590602001356001600160a01b0316610f2c565b610243610f4a565b610327610fab565b61031d6004803603604081101561057e57600080fd5b506001600160a01b0381351690602001351515610fb0565b61031d600480360360608110156105ac57600080fd5b810190602081018135600160201b8111156105c657600080fd5b8201836020820111156105d857600080fd5b803590602001918460018302840111600160201b831117156105f957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561064b57600080fd5b82018360208201111561065d57600080fd5b803590602001918460018302840111600160201b8311171561067e57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b8111156106d057600080fd5b8201836020820111156106e257600080fd5b803590602001918460018302840111600160201b8311171561070357600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506110b5945050505050565b61031d6004803603608081101561075a57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561079457600080fd5b8201836020820111156107a657600080fd5b803590602001918460018302840111600160201b831117156107c757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506110c0945050505050565b6102436004803603602081101561081e57600080fd5b503561111e565b6103276004803603602081101561083b57600080fd5b50356113c5565b6103276113dc565b61031d6004803603604081101561086057600080fd5b50803590602001356001600160a01b03166113ff565b610327611458565b6102276004803603604081101561089457600080fd5b506001600160a01b038135811691602001351661147b565b6001600160e01b0319811660009081526097602052604090205460ff165b919050565b60ce8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561095b5780601f106109305761010080835404028352916020019161095b565b820191906000526020600020905b81548152906001019060200180831161093e57829003601f168201915b505050505090505b90565b6000610971826114a9565b6109ac5760405162461bcd60e51b815260040180806020018281038252602c815260200180612cb8602c913960400191505060405180910390fd5b50600090815260cc60205260409020546001600160a01b031690565b60006109d382610d22565b9050806001600160a01b0316836001600160a01b03161415610a265760405162461bcd60e51b8152600401808060200182810382526021815260200180612d6a6021913960400191505060405180910390fd5b806001600160a01b0316610a386114bc565b6001600160a01b03161480610a595750610a5981610a546114bc565b61147b565b610a945760405162461bcd60e51b8152600401808060200182810382526038815260200180612c0b6038913960400191505060405180910390fd5b610a9e83836114c0565b505050565b6000610aaf60ca61152e565b905090565b610ac5610abf6114bc565b82611539565b610b005760405162461bcd60e51b8152600401808060200182810382526031815260200180612d8b6031913960400191505060405180910390fd5b610a9e8383836115dd565b60009081526065602052604090206002015490565b600082815260656020526040902060020154610b4390610b3e6114bc565b610f2c565b610b7e5760405162461bcd60e51b815260040180806020018281038252602f815260200180612aec602f913960400191505060405180910390fd5b610b88828261173b565b5050565b6001600160a01b038216600090815260c960205260408120610bb4908363ffffffff6117aa16565b90505b92915050565b610bc56114bc565b6001600160a01b0316816001600160a01b031614610c145760405162461bcd60e51b815260040180806020018281038252602f815260200180612e69602f913960400191505060405180910390fd5b610b8882826117b6565b604080516a5041555345525f524f4c4560a81b8152905190819003600b019020610c4a90610b3e6114bc565b610c855760405162461bcd60e51b8152600401808060200182810382526040815260200180612e296040913960400191505060405180910390fd5b610c8d611825565b565b610a9e838383604051806020016040528060008152506110c0565b610cb5610abf6114bc565b610cf05760405162461bcd60e51b8152600401808060200182810382526030815260200180612df96030913960400191505060405180910390fd5b610cf9816118c5565b50565b600080610d1060ca8463ffffffff61199e16565b509392505050565b61012d5460ff1690565b6000610bb782604051806060016040528060298152602001612c6d6029913960ca919063ffffffff6119ba16565b604080516a4d494e5445525f524f4c4560a81b8152905190819003600b019020610d7c90610b3e6114bc565b610db75760405162461bcd60e51b815260040180806020018281038252603d815260200180612dbc603d913960400191505060405180910390fd5b610dcb81610dc66101916119d1565b6119d5565b610cf9610191611b0f565b60d18054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561095b5780601f106109305761010080835404028352916020019161095b565b60006001600160a01b038216610e7e5760405162461bcd60e51b815260040180806020018281038252602a815260200180612c43602a913960400191505060405180910390fd5b6001600160a01b038216600090815260c960205260409020610bb79061152e565b604080516a5041555345525f524f4c4560a81b8152905190819003600b019020610ecb90610b3e6114bc565b610f065760405162461bcd60e51b815260040180806020018281038252603e815260200180612b4d603e913960400191505060405180910390fd5b610c8d611b18565b6000828152606560205260408120610bb4908363ffffffff6117aa16565b6000828152606560205260408120610bb4908363ffffffff611b9b16565b60cf8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561095b5780601f106109305761010080835404028352916020019161095b565b600081565b610fb86114bc565b6001600160a01b0316826001600160a01b0316141561101e576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8060cd600061102b6114bc565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff19169215159290921790915561106f6114bc565b60408051841515815290516001600160a01b0392909216917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b610a9e838383611bb0565b6110d16110cb6114bc565b83611539565b61110c5760405162461bcd60e51b8152600401808060200182810382526031815260200180612d8b6031913960400191505060405180910390fd5b61111884848484611c99565b50505050565b6060611129826114a9565b6111645760405162461bcd60e51b815260040180806020018281038252602f815260200180612d3b602f913960400191505060405180910390fd5b600082815260d0602090815260409182902080548351601f60026000196101006001861615020190931692909204918201849004840281018401909452808452606093928301828280156111f95780601f106111ce576101008083540402835291602001916111f9565b820191906000526020600020905b8154815290600101906020018083116111dc57829003601f168201915b505060d154939450505050600260001961010060018416150201909116046112225790506108ca565b8051156112f35760d181604051602001808380546001816001161561010002031660029004801561128a5780601f1061126857610100808354040283529182019161128a565b820191906000526020600020905b815481529060010190602001808311611276575b5050825160208401908083835b602083106112b65780518252601f199092019160209182019101611297565b6001836020036101000a038019825116818451168082178552505050505050905001925050506040516020818303038152906040529150506108ca565b60d16112fe84611ceb565b604051602001808380546001816001161561010002031660029004801561135c5780601f1061133a57610100808354040283529182019161135c565b820191906000526020600020905b815481529060010190602001808311611348575b5050825160208401908083835b602083106113885780518252601f199092019160209182019101611369565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b6000818152606560205260408120610bb79061152e565b604080516a4d494e5445525f524f4c4560a81b8152905190819003600b01902081565b60008281526065602052604090206002015461141d90610b3e6114bc565b610c145760405162461bcd60e51b8152600401808060200182810382526030815260200180612bdb6030913960400191505060405180910390fd5b604080516a5041555345525f524f4c4560a81b8152905190819003600b01902081565b6001600160a01b03918216600090815260cd6020908152604080832093909416825291909152205460ff1690565b6000610bb760ca8363ffffffff611dc616565b3390565b600081815260cc6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906114f582610d22565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610bb7826119d1565b6000611544826114a9565b61157f5760405162461bcd60e51b815260040180806020018281038252602c815260200180612baf602c913960400191505060405180910390fd5b600061158a83610d22565b9050806001600160a01b0316846001600160a01b031614806115c55750836001600160a01b03166115ba84610966565b6001600160a01b0316145b806115d557506115d5818561147b565b949350505050565b826001600160a01b03166115f082610d22565b6001600160a01b0316146116355760405162461bcd60e51b8152600401808060200182810382526029815260200180612d126029913960400191505060405180910390fd5b6001600160a01b03821661167a5760405162461bcd60e51b8152600401808060200182810382526024815260200180612b8b6024913960400191505060405180910390fd5b611685838383611dd2565b6116906000826114c0565b6001600160a01b038316600090815260c9602052604090206116b8908263ffffffff611ddd16565b506001600160a01b038216600090815260c9602052604090206116e1908263ffffffff611de916565b506116f460ca828463ffffffff611df516565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000828152606560205260409020611759908263ffffffff611e0b16565b15610b88576117666114bc565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000610bb48383611e20565b60008281526065602052604090206117d4908263ffffffff611e8416565b15610b88576117e16114bc565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b61012d5460ff16611874576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b61012d805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6118a86114bc565b604080516001600160a01b039092168252519081900360200190a1565b60006118d082610d22565b90506118de81600084611dd2565b6118e96000836114c0565b600082815260d06020526040902054600260001961010060018416150201909116041561192757600082815260d060205260408120611927916129c2565b6001600160a01b038116600090815260c96020526040902061194f908363ffffffff611ddd16565b5061196160ca8363ffffffff611e9916565b5060405182906000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b60008080806119ad8686611ea5565b9097909650945050505050565b60006119c7848484611f20565b90505b9392505050565b5490565b6001600160a01b038216611a30576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b611a39816114a9565b15611a8b576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b611a9760008383611dd2565b6001600160a01b038216600090815260c960205260409020611abf908263ffffffff611de916565b50611ad260ca828463ffffffff611df516565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b61012d5460ff1615611b64576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b61012d805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586118a86114bc565b6000610bb4836001600160a01b038416611fea565b600054610100900460ff1680611bc95750611bc9612002565b80611bd7575060005460ff16155b611c125760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff16158015611c3d576000805460ff1961ff0019909116610100171660011790555b611c45612008565b611c4d612008565b611c556120a9565b611c5f8484612146565b611c67612008565b611c6f612241565b611c77612008565b611c828484846122ed565b8015611118576000805461ff001916905550505050565b611ca48484846115dd565b611cb0848484846123ed565b6111185760405162461bcd60e51b8152600401808060200182810382526032815260200180612b1b6032913960400191505060405180910390fd5b606081611d1057506040805180820190915260018152600360fc1b60208201526108ca565b8160005b8115611d2857600101600a82049150611d14565b60608167ffffffffffffffff81118015611d4157600080fd5b506040519080825280601f01601f191660200182016040528015611d6c576020820181803683370190505b50859350905060001982015b8315611dbd57600a840660300160f81b82828060019003935081518110611d9b57fe5b60200101906001600160f81b031916908160001a905350600a84049350611d78565b50949350505050565b6000610bb48383611fea565b610a9e838383612628565b6000610bb48383612677565b6000610bb4838361273d565b60006119c784846001600160a01b038516612787565b6000610bb4836001600160a01b03841661273d565b81546000908210611e625760405162461bcd60e51b8152600401808060200182810382526022815260200180612a9f6022913960400191505060405180910390fd5b826000018281548110611e7157fe5b9060005260206000200154905092915050565b6000610bb4836001600160a01b038416612677565b6000610bb4838361281e565b815460009081908310611ee95760405162461bcd60e51b8152600401808060200182810382526022815260200180612c966022913960400191505060405180910390fd5b6000846000018481548110611efa57fe5b906000526020600020906002020190508060000154816001015492509250509250929050565b60008281526001840160205260408120548281611fbb5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611f80578181015183820152602001611f68565b50505050905090810190601f168015611fad5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50846000016001820381548110611fce57fe5b9060005260206000209060020201600101549150509392505050565b60009081526001919091016020526040902054151590565b303b1590565b600054610100900460ff16806120215750612021612002565b8061202f575060005460ff16155b61206a5760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff16158015612095576000805460ff1961ff0019909116610100171660011790555b8015610cf9576000805461ff001916905550565b600054610100900460ff16806120c257506120c2612002565b806120d0575060005460ff16155b61210b5760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff16158015612136576000805460ff1961ff0019909116610100171660011790555b6120956301ffc9a760e01b6128f2565b600054610100900460ff168061215f575061215f612002565b8061216d575060005460ff16155b6121a85760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff161580156121d3576000805460ff1961ff0019909116610100171660011790555b82516121e69060ce906020860190612a06565b5081516121fa9060cf906020850190612a06565b5061220b6380ac58cd60e01b6128f2565b61221b635b5e139f60e01b6128f2565b61222b63780e9d6360e01b6128f2565b8015610a9e576000805461ff0019169055505050565b600054610100900460ff168061225a575061225a612002565b80612268575060005460ff16155b6122a35760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff161580156122ce576000805460ff1961ff0019909116610100171660011790555b61012d805460ff191690558015610cf9576000805461ff001916905550565b600054610100900460ff16806123065750612306612002565b80612314575060005460ff16155b61234f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612ce4602e913960400191505060405180910390fd5b600054610100900460ff1615801561237a576000805460ff1961ff0019909116610100171660011790555b61238c60006123876114bc565b610b7e565b604080516a4d494e5445525f524f4c4560a81b8152905190819003600b0190206123b8906123876114bc565b604080516a5041555345525f524f4c4560a81b8152905190819003600b0190206123e4906123876114bc565b611c8282612976565b6000612401846001600160a01b0316612989565b61240d575060016115d5565b600060606001600160a01b038616630a85bd0160e11b61242b6114bc565b89888860405160240180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156124a457818101518382015260200161248c565b50505050905090810190601f1680156124d15780820380516001836020036101000a031916815260200191505b5060408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909a16999099178952518151919890975087965094509250829150849050835b602083106125395780518252601f19909201916020918201910161251a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461259b576040519150601f19603f3d011682016040523d82523d6000602084013e6125a0565b606091505b5091509150816125f1578051156125ba5780518082602001fd5b60405162461bcd60e51b8152600401808060200182810382526032815260200180612b1b6032913960400191505060405180910390fd5b600081806020019051602081101561260857600080fd5b50516001600160e01b031916630a85bd0160e11b1493506115d592505050565b612633838383610a9e565b61263b610d18565b15610a9e5760405162461bcd60e51b815260040180806020018281038252602b815260200180612ac1602b913960400191505060405180910390fd5b6000818152600183016020526040812054801561273357835460001980830191908101906000908790839081106126aa57fe5b90600052602060002001549050808760000184815481106126c757fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806126f757fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610bb7565b6000915050610bb7565b60006127498383611fea565b61277f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610bb7565b506000610bb7565b6000828152600184016020526040812054806127ec5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556119ca565b828560000160018303815481106127ff57fe5b90600052602060002090600202016001018190555060009150506119ca565b60008181526001830160205260408120548015612733578354600019808301919081019060009087908390811061285157fe5b906000526020600020906002020190508087600001848154811061287157fe5b6000918252602080832084546002909302019182556001938401549184019190915583548252898301905260409020908401905586548790806128b057fe5b6000828152602080822060026000199094019384020182815560019081018390559290935588815289820190925260408220919091559450610bb79350505050565b6001600160e01b03198082161415612951576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152609760205260409020805460ff19166001179055565b8051610b889060d1906020840190612a06565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906115d5575050151592915050565b50805460018160011615610100020316600290046000825580601f106129e85750610cf9565b601f016020900490600052602060002090810190610cf99190612a84565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a4757805160ff1916838001178555612a74565b82800160010185558215612a74579182015b82811115612a74578251825591602001919060010190612a59565b50612a80929150612a84565b5090565b61096391905b80821115612a805760008155600101612a8a56fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e64734552433732315061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e744552433732313a207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e7465724552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f2070617573654552433732313a207472616e7366657220746f20746865207a65726f20616464726573734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b654552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e64734552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65644552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732314d657461646174613a2055524920717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732315072657365744d696e7465725061757365724175746f49643a206d7573742068617665206d696e74657220726f6c6520746f206d696e744552433732314275726e61626c653a2063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f7665644552433732315072657365744d696e7465725061757365724175746f49643a206d75737420686176652070617573657220726f6c6520746f20756e7061757365416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a2646970667358221220174a83c35a2fbd85fb67ad55b3542c82c2f3a0179044bb1ce49995e5da24309b64736f6c63430006070033",
  "compiler": {
    "name": "solc",
    "version": "0.6.7+commit.b8d736ae.Emscripten.clang",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "evmVersion": "petersburg"
  }
}
