{
  "_format": "hh-sol-artifact-1",
  "contractName": "KAMI721C",
  "sourceName": "contracts/KAMI721C.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "usdcAddress_",
          "type": "address"
        },
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "baseTokenURI_",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "initialMintPrice_",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "platformAddress_",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "platformCommissionPercentage_",
          "type": "uint96"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "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": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "feeNumerator",
              "type": "uint96"
            }
          ],
          "indexed": false,
          "internalType": "struct KAMI721C.RoyaltyData[]",
          "name": "royalties",
          "type": "tuple[]"
        }
      ],
      "name": "MintRoyaltiesUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "platformAddress",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "PlatformCommissionPaid",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint96",
          "name": "newPercentage",
          "type": "uint96"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newPlatformAddress",
          "type": "address"
        }
      ],
      "name": "PlatformCommissionUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "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": false,
          "internalType": "uint96",
          "name": "newPercentage",
          "type": "uint96"
        }
      ],
      "name": "RoyaltyPercentageUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "feeNumerator",
              "type": "uint96"
            }
          ],
          "indexed": false,
          "internalType": "struct KAMI721C.RoyaltyData[]",
          "name": "royalties",
          "type": "tuple[]"
        }
      ],
      "name": "TokenMintRoyaltiesUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "salePrice",
          "type": "uint256"
        }
      ],
      "name": "TokenSold",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "feeNumerator",
              "type": "uint96"
            }
          ],
          "indexed": false,
          "internalType": "struct KAMI721C.RoyaltyData[]",
          "name": "royalties",
          "type": "tuple[]"
        }
      ],
      "name": "TokenTransferRoyaltiesUpdated",
      "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": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "feeNumerator",
              "type": "uint96"
            }
          ],
          "indexed": false,
          "internalType": "struct KAMI721C.RoyaltyData[]",
          "name": "royalties",
          "type": "tuple[]"
        }
      ],
      "name": "TransferRoyaltiesUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "TransferRoyaltyDistributed",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OWNER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PLATFORM_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RENTER_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": [
        {
          "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": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getMintRoyaltyReceivers",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "feeNumerator",
              "type": "uint96"
            }
          ],
          "internalType": "struct KAMI721C.RoyaltyData[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "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": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getTransferRoyaltyReceivers",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "feeNumerator",
              "type": "uint96"
            }
          ],
          "internalType": "struct KAMI721C.RoyaltyData[]",
          "name": "",
          "type": "tuple[]"
        }
      ],
      "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": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "mintPrice",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "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": "platformAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "platformCommissionPercentage",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "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": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "royaltyAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "royaltyPercentage",
      "outputs": [
        {
          "internalType": "uint96",
          "name": "",
          "type": "uint96"
        }
      ],
      "stateMutability": "view",
      "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": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "salePrice",
          "type": "uint256"
        }
      ],
      "name": "sellToken",
      "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": "string",
          "name": "baseURI",
          "type": "string"
        }
      ],
      "name": "setBaseURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "newMintPrice",
          "type": "uint256"
        }
      ],
      "name": "setMintPrice",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "feeNumerator",
              "type": "uint96"
            }
          ],
          "internalType": "struct KAMI721C.RoyaltyData[]",
          "name": "royalties",
          "type": "tuple[]"
        }
      ],
      "name": "setMintRoyalties",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint96",
          "name": "newPlatformCommissionPercentage",
          "type": "uint96"
        },
        {
          "internalType": "address",
          "name": "newPlatformAddress",
          "type": "address"
        }
      ],
      "name": "setPlatformCommission",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint96",
          "name": "newRoyaltyPercentage",
          "type": "uint96"
        }
      ],
      "name": "setRoyaltyPercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "feeNumerator",
              "type": "uint96"
            }
          ],
          "internalType": "struct KAMI721C.RoyaltyData[]",
          "name": "royalties",
          "type": "tuple[]"
        }
      ],
      "name": "setTokenMintRoyalties",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "feeNumerator",
              "type": "uint96"
            }
          ],
          "internalType": "struct KAMI721C.RoyaltyData[]",
          "name": "royalties",
          "type": "tuple[]"
        }
      ],
      "name": "setTokenTransferRoyalties",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            },
            {
              "internalType": "uint96",
              "name": "feeNumerator",
              "type": "uint96"
            }
          ],
          "internalType": "struct KAMI721C.RoyaltyData[]",
          "name": "royalties",
          "type": "tuple[]"
        }
      ],
      "name": "setTransferRoyalties",
      "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": "usdcToken",
      "outputs": [
        {
          "internalType": "contract IERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x604060a081523462000765576200450d803803806200001e816200076a565b928339810160e0828203126200076557620000398262000790565b60208381015190939192916001600160401b039182811162000765578362000063918301620007a5565b90868101518381116200076557846200007e918301620007a5565b9360608201519084821162000765576200009a918301620007a5565b9260808201519060c0620000b160a0850162000790565b9301516001600160601b03811695908690036200076557845196828811620004c2576001978854968988811c981680156200075a575b8c891014620004a15781908c601f998a811162000701575b50508c908983116001146200068d5760009262000681575b5050600019600383901b1c191690891b1788555b805190838211620004c257600254908982811c9216801562000676575b8c831014620004a1578b82898594116200061c575b50508b90888311600114620005b057600092620005a4575b5050600019600383901b1c191690881b176002555b601580546001600160601b03199081166103e8179091556001600160a01b03988916989095908915620005605785169889156200051c576107d08811620004d8576080528151928311620004c257600f54918883811c93168015620004b7575b8b841014620004a157828285941162000448575b508a918311600114620003de57600092620003d2575b5050600019600383901b1c191690861b17600f555b600e5560601b161760105560008052600083528360002033600052835260ff8460002054161562000395575b7fb19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214e80600052600084528460002033600052845260ff8560002054161562000356575b507f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e9283600052600081528460002083600052815260ff8560002054161562000316575b8451613cd590816200081882396080518181816119e301528181611a1e01528181611a9f01528181611b8a01528181611f45015261220f0152f35b836000526000815284600020908360005252836000209060ff198254161790553391600080516020620044ed833981519152600080a438808080620002db565b806000526000845284600020336000528452846000208260ff1982541617905533903390600080516020620044ed833981519152600080a43862000297565b600080526000835283600020336000528352836000208160ff1982541617905533336000600080516020620044ed8339815191528180a462000255565b01519050388062000214565b90889350601f19831691600f6000528b6000209260005b8d82821062000431575050841162000417575b505050811b01600f5562000229565b015160001960f88460031b161c1916905538808062000408565b8385015186558c97909501949384019301620003f5565b90919250600f6000528a6000208380860160051c8201928d871062000497575b9186958c929594930160051c01915b82811062000487575050620001fe565b600081558695508b910162000477565b9250819262000468565b634e487b7160e01b600052602260045260246000fd5b92607f1692620001ea565b634e487b7160e01b600052604160045260246000fd5b8b5162461bcd60e51b8152600481018c9052601c60248201527f506c6174666f726d20636f6d6d697373696f6e20746f6f2068696768000000006044820152606490fd5b8b5162461bcd60e51b8152600481018c9052601860248201527f496e76616c696420706c6174666f726d206164647265737300000000000000006044820152606490fd5b8b5162461bcd60e51b8152600481018c9052601460248201527f496e76616c6964205553444320616464726573730000000000000000000000006044820152606490fd5b01519050388062000175565b8a9350908c91601f198416600260005283600020936000905b828210620006045750508411620005ea575b505050811b016002556200018a565b015160001960f88460031b161c19169055388080620005db565b8385015186558e979095019493840193018f620005c9565b90919250600260005288826000209181860160051c83019386106200066c575b918c91869594930160051c01915b8281106200065c57508d91506200015d565b600081558594508c91016200064a565b925081926200063c565b91607f169162000148565b01519050388062000117565b8b9350908d91601f1984168560005283600020936000905b828210620006df5750508411620006c5575b505050811b0188556200012b565b015160001960f88460031b161c19169055388080620006b7565b91929395968291958786015181550195019301908f918e9695949392620006a5565b909192508b60005289826000209181860160051c830193861062000750575b918d91869594930160051c01915b8281106200074057508e9150620000ff565b600081558594508d91016200072e565b9250819262000720565b97607f1697620000e7565b600080fd5b6040519190601f01601f191682016001600160401b03811183821017620004c257604052565b51906001600160a01b03821682036200076557565b919080601f84011215620007655782516001600160401b038111620004c257602090620007db601f8201601f191683016200076a565b92818452828287010111620007655760005b8181106200080357508260009394955001015290565b8581018301518482018401528201620007ed56fe6080806040526004908136101561001557600080fd5b60003560e01c90816301ffc9a7146125b65750806306fdde0314612508578063081812fc146124ea578063095ea7b31461236f5780630a0a35151461223e57806311eac855146121f95780631249c58b14611ef857806318160ddd14611eda57806323b872dd14611eb6578063248a9ca314611e885780632a55205a14611e4b5780632f2ff15d14611d995780632f745c5914611ce657806336568abe14611c565780633e11741f1461195457806342842e0e1461193d57806342966c68146116af578063463dace014611690578063492ae5a3146114e15780634f6ccce71461145057806355f804b3146112865780635e27a7751461125b578063602481b614610f7c5780636352211e14610f4c5780636817c76c14610f2e57806370824c5c14610ef357806370a0823114610ec85780638a71bb2d14610ea157806391d1485414610e5457806392303e0614610e2d57806395d89b4114610d5e5780639f6d68b014610c85578063a217fddf14610c69578063a22cb46514610b96578063b88d4fde14610b11578063b97c9f7714610ad6578063c87b56dd146107fe578063d547741f146107bd578063dbe55e561461079c578063e58378bb14610773578063e5f2e0cc1461050c578063e985e9c5146104b6578063f249fd161461024a5763f4a0a5281461020557600080fd5b3461024557602036600319011261024557336000908152600080516020613c60833981519152602052604090205461023f9060ff1661292b565b35600e55005b600080fd5b50346102455760403660031901126102455761026461289d565b61026c6126d4565b336000908152600080516020613c60833981519152602090815260409091205490919061029b9060ff1661292b565b6001600160a01b038116928315610472576001600160601b0316936107d0851161042e577f410d007abb80c65964518a8b4f3007c4b354d36d7cfb908d3e3fa6411506e27460408686868660105460601c906001600160601b03199060601b168417601055828103610314575b508351928352820152a1005b7f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e9081600052600083528560002081600052835260ff8660002054166103c3575b5080600052600082528460002083600052825260ff8560002054166103085780600052600082528460002083600052825284600020600160ff198254161790558233917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a485610308565b81600052600083528560002081600052835260ff86600020541615610355578160005260008352856000208160005283528560002060ff1981541690553390827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a486610355565b60405162461bcd60e51b8152908101839052601c60248201527f506c6174666f726d20636f6d6d697373696f6e20746f6f2068696768000000006044820152606490fd5b60405162461bcd60e51b8152808601849052601860248201527f496e76616c696420706c6174666f726d206164647265737300000000000000006044820152606490fd5b34610245576040366003190112610245576104cf6126be565b6104d76126d4565b9060018060a01b03809116600052600660205260406000209116600052602052602060ff604060002054166040519015158152f35b50346102455761051b3661271a565b90600080516020613c8083398151915260005260209360008552604060002033600052855261055160ff6040600020541661292b565b600084815260036020526040902054610574906001600160a01b03161515612970565b83600052601480865261058a60406000206129dc565b6000906000905b8582106107015750506127106105b2816001600160601b0380941614612f5b565b841580156105f3575b867fcacd6190ee2ad101cd34b99d8fbaf3cdcda816ef83aaa4759f111ba1c416e62087876105ee60405192839283612b95565b0390a2005b6106ec5761060084612a3a565b6106198361060f8a8801612a8d565b169283111561380b565b6001600160a01b039081169384156106a857509061069e939291600c7fcacd6190ee2ad101cd34b99d8fbaf3cdcda816ef83aaa4759f111ba1c416e620989960405195610665876127de565b865280860193845260008b815291905260409020935191516001600160a01b039190921616911660a01b6001600160a01b031916179055565b83923880806105bb565b60405162461bcd60e51b8152908101899052601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606490fd5b603283634e487b7160e01b6000525260246000fd5b909160019061074b906107306001600160a01b03610728610723888c8c612a14565b612a3a565b161515612a4e565b6107458a61073f878b8b612a14565b01612a8d565b90612aa1565b928760005282895261076c6040600020610766838a8a612a14565b90612af3565b0190610591565b34610245576000366003190112610245576020604051600080516020613c808339815191528152f35b3461024557600036600319011261024557602060105460601c604051908152f35b5034610245576040366003190112610245576107fc90356107dc6126d4565b908060005260006020526107f7600160406000200154613461565b613797565b005b503461024557602090816003193601126102455780356000818152600360205260409020549091839161083b906001600160a01b03161515612fc2565b604051906000600f549161084e836128b3565b808552848681019360019588600182169182600014610abb575050600114610a5d575b61087d9250038561282a565b835115610a41578586916000977a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000009081811015610a33575b50506d04ee2d6d415b85acef810000000080841015610a25575b50662386f26fc1000080841015610a16575b506305f5e10080841015610a07575b50612710808410156109f9575b505060648210156109e9575b600a809210156109df575b92600187019381602161093a6109248861284b565b97610932604051998a61282a565b80895261284b565b878a019a90601f1901368c37870101905b6109a9575b505050509361098f9392916109836109749660405197889551809288880190612676565b84019151809386840190612676565b0103808452018261282a565b905b6109a5604051928284938452830190612699565b0390f35b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049182156109da5791908261094b565b610950565b956001019561090f565b9590606460029104910195610904565b9701969091049038806108f8565b600891989304920196386108eb565b601091989304920196386108dc565b8791989304920196386108ca565b6040995004925038806108b0565b505050505050604051610a538161280f565b6000815290610991565b5050600f60005284867f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802866000915b858310610aa257505061087d9350820101610871565b80919294505483858b0101520191018790868893610a8c565b60ff1916875261087d94151560051b84010191506108719050565b346102455760003660031901126102455760206040517f3b652633b3026fa70803ad50b58b0ae884cefe3497643f62c67c466f41a6e88d8152f35b503461024557608036600319011261024557610b2b6126be565b90610b346126d4565b91604435606435936001600160401b038511610245573660238601121561024557610b6e610b91948660246107fc98369301359101612866565b92610b81610b7c843361316d565b612d3a565b610b8c838383613235565b613af0565b6138bd565b503461024557604036600319011261024557610bb06126be565b60243590811515809203610245576001600160a01b031691338314610c255750336000526006602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60649060206040519162461bcd60e51b8352820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b3461024557600036600319011261024557602060405160008152f35b5034610245576020366003190112610245576001600160601b03610ca761289d565b336000908152600080516020613c608339815191526020526040902054610cd09060ff1661292b565b1690610bb88211610d1a577f8df4d6c1a5c8e6c4d7a71d760d42122503a5244aeab98f2ff8e3244be07a44e3602083806001600160601b03196015541617601555604051908152a1005b60649060206040519162461bcd60e51b8352820152601b60248201527f526f79616c74792070657263656e7461676520746f6f206869676800000000006044820152fd5b3461024557600036600319011261024557604051600254600082610d81836128b3565b9182825260209360019085600182169182600014610e0d575050600114610db0575b506109919250038361282a565b84915060026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace906000915b858310610df5575050610991935082010185610da3565b80548389018501528794508693909201918101610dde565b60ff19168582015261099195151560051b8501019250879150610da39050565b346102455760003660031901126102455760206001600160601b0360105416604051908152f35b503461024557604036600319011261024557610e6e6126d4565b9035600052600060205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b346102455760003660031901126102455760206001600160601b0360155416604051908152f35b34610245576020366003190112610245576020610eeb610ee66126be565b613031565b604051908152f35b346102455760003660031901126102455760206040517f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e8152f35b34610245576000366003190112610245576020600e54604051908152f35b503461024557602036600319011261024557610f6a6020913561300e565b6040516001600160a01b039091168152f35b503461024557602090816003193601126102455780356001600160401b03811161024557610fad90369083016126ea565b91600080516020613c80833981519152600052600084526040600020336000528452610fe060ff6040600020541661292b565b601280546000825580611218575b5060009060005b85811061111e575050612710611016816001600160601b0380941614612f5b565b84158015611055575b6040517fbb8446bab3f849e18e51a7f88d964208275772e34ae7283ced4d1850f2a6248b9080611050898983612b95565b0390a1005b6106ec5761106284612a3a565b61107c611070888701612a8d565b9384169283111561380b565b6001600160a01b03169283156110da57507fbb8446bab3f849e18e51a7f88d964208275772e34ae7283ced4d1850f2a6248b956040516110bb816127de565b848152015260a01b6001600160a01b03191617600b553880808061101f565b60405162461bcd60e51b8152908101879052601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606490fd5b6001600160a01b039261114c9061113d85610728610723868c8c612a14565b6107458961073f858b8b612a14565b92611158828888612a14565b8354600160401b81101561120357600181018086558110156111ee57916111c88a6111e89360019695886000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344401936111b182612a3a565b85546001600160a01b031916911617845501612a8d565b81546001600160a01b031660a09190911b6001600160a01b031916179055565b01610ff5565b603287634e487b7160e01b6000525260246000fd5b604187634e487b7160e01b6000525260246000fd5b816000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444908101905b81811061124f5750610fee565b60008155600101611242565b50346102455760203660031901126102455761127a6109a59135612ecb565b60405191829182612782565b503461024557602080600319360112610245576001600160401b039082358281116102455736602382011215610245576112c99036906024818701359101612866565b92600080516020613c808339815191526000526000825260406000203360005282526112fc60ff6040600020541661292b565b835192831161143b5750611311600f546128b3565b601f81116113d7575b5080601f83116001146113565750819260009261134b575b5050600019600383901b1c191660019190911b17600f55005b015190503880611332565b90601f19831693600f6000527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802926000905b8682106113bf57505083600195106113a6575b505050811b01600f55005b015160001960f88460031b161c1916905538808061139b565b80600185968294968601518155019501930190611388565b600f6000527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802601f840160051c810191838510611431575b601f0160051c01905b818110611425575061131a565b60008155600101611418565b909150819061140f565b604190634e487b7160e01b6000525260246000fd5b50346102455760203660031901126102455780359060095482101561148857602061147a83612abc565b90546040519160031b1c8152f35b60849060206040519162461bcd60e51b8352820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152fd5b50346102455760209060206003193601126102455780356001600160401b0381116102455761151390369083016126ea565b336000908152600080516020613c60833981519152602052604090205490929061153f9060ff1661292b565b6011938454600086558061164d575b5060009460005b8581106115b4577f89bf541e521f4acc4850978648c2c61d31963c71ae31181f246302f902941d7086866115a56127108b61159d6001600160601b0391826010541690612aa1565b161115612b35565b61105060405192839283612b95565b6001600160a01b03966115e2906115d389610728610723868c8c612a14565b6107458561073f858b8b612a14565b966115ee828888612a14565b8354600160401b81101561120357600181018086558110156111ee57916111c8866116479360019695886000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6801936111b182612a3a565b01611555565b856000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68908101905b818110611684575061154e565b60008155600101611677565b50346102455760203660031901126102455761127a6109a59135612e96565b50346102455760209081600319360112610245578035916116cf8361300e565b6001600160a01b0391903390831603611908576116eb8461300e565b808316908161186c57505060095484600052600a825280604060002055600160401b81101561185757846117288260016117419401600955612abc565b90919082549060031b91821b91600019901b1916179055565b600954600019908181019081116118425785600052600a835261176960406000205491612abc565b90549060031b1c61177d8161172884612abc565b600052600a83526040600020558460005260006040812055600954801561182d5791816003926000969594016117b281612abc565b83825491871b1b191690556009556117c98761300e565b938787526005835260408720946001600160601b0360a01b95868154169055169485875282526040862090815401905585855252604083209081541690557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4005b603185634e487b7160e01b6000525260246000fd5b601185634e487b7160e01b6000525260246000fd5b604184634e487b7160e01b6000525260246000fd5b61187590613031565b6000198101919082116118425785600052600883526040600020548281036118c2575b50856000526000604081205560005260078252604060002090600052815260006040812055611741565b8160005260078452604060002083600052845260406000205482600052600785526040600020826000528552806040600020556000526008845260406000205538611898565b826064916040519162461bcd60e51b8352820152600f60248201526e2737ba103a37b5b2b71037bbb732b960891b6044820152fd5b34610245576107fc61194e3661274d565b91612e70565b50346102455760603660031901126102455761196e6126be565b9061197a60243561300e565b906001600160a01b0382163303611c1257506127106119a66001600160601b03601554166044356129b3565b04916127106119c26001600160601b03601054166044356129b3565b046119d86119d08286612d2d565b604435612cff565b90611a0760443530857f00000000000000000000000000000000000000000000000000000000000000006130d4565b84611afe575b611a429293945080611a93575b50837f000000000000000000000000000000000000000000000000000000000000000061312c565b611a4f6024358284612e70565b60405160443581526001600160a01b039182169290911690602435907f3d5eb834b5d6cadc063c171c3f25f60bca8ea892ba9db25342278927d0af955690602090a4005b611ac38160105460601c7f000000000000000000000000000000000000000000000000000000000000000061312c565b60105460601c906040519081527f2a0edbc96cbdf959b1243e79c51b9bb83b7867279441dc220825d561c2fbb2c6602060243592a338611a1a565b6024356000908152601460205260409020805415611c0757611b1f90612d9c565b8051611b2c575b50611a0d565b9290939160005b8451811015611bf65780612710611b636001600160601b036020611b596001968b612d19565b510151168a6129b3565b0480611b71575b5001611b33565b611bae81848060a01b03611b85858b612d19565b5151167f000000000000000000000000000000000000000000000000000000000000000061312c565b828060a01b03611bbe8389612d19565b515116906040519081527f5afae38153b1f3a22beefc75f2c88831b35f5359c45067c73310b55352c6c225602060243592a338611b6a565b509194508493909250611a42611b26565b50611b1f6012612d9c565b60649060206040519162461bcd60e51b8352820152601960248201527f4f6e6c7920746f6b656e206f776e65722063616e2073656c6c000000000000006044820152fd5b503461024557604036600319011261024557611c706126d4565b336001600160a01b03821603611c8a576107fc9135613797565b60405162461bcd60e51b8152602081840152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b503461024557604036600319011261024557611d006126be565b60243591611d0d82613031565b831015611d41575060018060a01b031660005260076020526040600020906000526020526020604060002054604051908152f35b60849060206040519162461bcd60e51b8352820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152fd5b50346102455760403660031901126102455735611db46126d4565b816000526000602052611dce600160406000200154613461565b81600052600060205260406000209060018060a01b0316908160005260205260ff6040600020541615611dfd57005b8160005260006020526040600020816000526020526040600020600160ff1982541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4005b503461024557604036600319011261024557611e6b906024359035612de5565b604080516001600160a01b03939093168352602083019190915290f35b5034610245576020366003190112610245573560005260006020526020600160406000200154604051908152f35b34610245576107fc611ec73661274d565b91611ed5610b7c843361316d565b613235565b34610245576000366003190112610245576020600954604051908152f35b503461024557600036600319011261024557600e5490612710916001600160601b039083611f2a8360105416836129b3565b0491611f34612c4e565b92611f3f8184612cff565b90611f6d7f0000000000000000000000000000000000000000000000000000000000000000943033876130d4565b806121e3575b506000918451612169575b50611f8c9293949550612cff565b9081612125575b505050600d5460018101600d5560405190611fad8261280f565b6000825233156120e157600081815260036020526040902054611fdc906001600160a01b031615155b15613b69565b60095481600052602090600a825280604060002055600160401b8110156120cc5782916107fc9561201d610b91969561172885600160039701600955612abc565b61202633613031565b33600052600783526040600020816000528352846040600020558460005260088352604060002055612070611fd685600052600360205260018060a01b0360406000205416151590565b33600052815260406000206001815401905582600052526040600020336001600160601b0360a01b825416179055803360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4336139fe565b604185634e487b7160e01b6000525260246000fd5b60405162461bcd60e51b8152602081850181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606490fd5b8251156121535761214b926001600160a01b039061214290612d0c565b5151169061312c565b388080611f93565b612164925060105460601c9061312c565b61214b565b60005b85518110156121d45787612190836020612186858b612d19565b51015116856129b3565b04806121a0575b5060010161216c565b90936001916121cd916121c8826001600160a01b036121bf8a8d612d19565b5151168a61312c565b612d2d565b9390612197565b50949550859450611f8c611f7e565b6121f39060105460601c8561312c565b38611f73565b34610245576000366003190112610245576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102455761224c3661271a565b336000908152600080516020613c6083398151915260209081526040909120549093929061227c9060ff1661292b565b60008381526003602052604090205461229f906001600160a01b03161515612970565b826000526013806020526122b660406000206129dc565b6000946000905b848210612316575050506123076127107faaf4e53c3b98ff4419060c1d6732d9fdaf27c8d404b09e9b4049b6442b71e8b5949561159d6001600160601b0391826010541690612aa1565b6105ee60405192839283612b95565b919590919060019061234a9061233b6001600160a01b03610728610723888b8b612a14565b6107458461073f878a8a612a14565b92866000528783526123656040600020610766838989612a14565b01909591956122bd565b5034610245576040366003190112610245576123896126be565b602435916001600160a01b039081806123a18661300e565b1693169280841461249c57803314908115612477575b501561240d5750600083815260056020526040902080546001600160a01b031916831790556123e58361300e565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60849060206040519162461bcd60e51b8352820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152fd5b9050600052600660205260406000203360005260205260ff60406000205416386123b7565b60405162461bcd60e51b8152602081840152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b503461024557602036600319011261024557610f6a602091356128ed565b346102455760003660031901126102455760405160006001826001549261252e846128b3565b9283835260209485600182169182600014610e0d57505060011461255957506109919250038361282a565b84915060016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6906000915b85831061259e575050610991935082010185610da3565b80548389018501528794508693909201918101612587565b82346102455760203660031901126102455735906001600160e01b031982168083036102455760209263780e9d6360e01b82148015612640575b80928115612619575b50508115612609575b5015158152f35b61261391506130a8565b83612602565b91925063152a902d60e11b909114908115612638575b509084806125f9565b90508461262f565b506380ac58cd60e01b82148015612666575b806125f05750612661816130a8565b6125f0565b50635b5e139f60e01b8214612652565b60005b8381106126895750506000910152565b8181015183820152602001612679565b906020916126b281518092818552858086019101612676565b601f01601f1916010190565b600435906001600160a01b038216820361024557565b602435906001600160a01b038216820361024557565b9181601f84011215610245578235916001600160401b038311610245576020808501948460061b01011161024557565b9060406003198301126102455760043591602435906001600160401b03821161024557612749916004016126ea565b9091565b6060906003190112610245576001600160a01b0390600435828116810361024557916024359081168103610245579060443590565b60208082019080835283518092528060408094019401926000905b8382106127ac57505050505090565b845180516001600160a01b031687528301516001600160601b031686840152948501949382019360019091019061279d565b604081019081106001600160401b038211176127f957604052565b634e487b7160e01b600052604160045260246000fd5b602081019081106001600160401b038211176127f957604052565b90601f801991011681019081106001600160401b038211176127f957604052565b6001600160401b0381116127f957601f01601f191660200190565b9291926128728261284b565b91612880604051938461282a565b829481845281830111610245578281602093846000960137010152565b600435906001600160601b038216820361024557565b90600182811c921680156128e3575b60208310146128cd57565b634e487b7160e01b600052602260045260246000fd5b91607f16916128c2565b600081815260036020526040902054612910906001600160a01b03161515612fc2565b6000908152600560205260409020546001600160a01b031690565b1561293257565b60405162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba1030b71037bbb732b960511b6044820152606490fd5b1561297757565b60405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b6044820152606490fd5b818102929181159184041417156129c657565b634e487b7160e01b600052601160045260246000fd5b80549060009060008155826129f057505050565b6000526020600020918201915b828110612a0957505050565b8181556001016129fd565b9190811015612a245760061b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160a01b03811681036102455790565b15612a5557565b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b356001600160601b03811681036102455790565b9190916001600160601b03808094169116019182116129c657565b600954811015612a245760096000527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0190600090565b908154600160401b8110156127f95760018101808455811015612a245760206111c891612b339460005281600020019260018060a01b036111b182612a3a565b565b15612b3c57565b60405162461bcd60e51b815260206004820152602b60248201527f526f79616c74696573202b20706c6174666f726d20636f6d6d697373696f6e2060448201526a657863656564203130302560a81b6064820152608490fd5b602080825280820184905260409182019391906000905b838210612bbb57505050505090565b9091929394853560018060a01b03811680910361024557815281860135906001600160601b0382168092036102455782810191909152830194830193929160010190612bac565b906001600160401b0382116127f95760405191612c2560208260051b018461282a565b8252565b90604051612c36816127de565b91546001600160a01b038116835260a01c6020830152565b60115490612c5b82612c02565b9160208084019060116000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c686000925b848410612c9a575050505050565b6001838192612ca885612c29565b815201920193019290612c8c565b908154612cc281612c02565b9260208085019160005260206000206000925b848410612ce3575050505050565b6001838192612cf185612c29565b815201920193019290612cd5565b919082039182116129c657565b805115612a245760200190565b8051821015612a245760209160051b010190565b919082018092116129c657565b15612d4157565b60405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b908154612da881612c02565b9260208085019160005260206000206000925b848410612dc9575050505050565b6001838192612dd785612c29565b815201920193019290612dbb565b9190916127109081612e046001600160601b03958660155416906129b3565b04906000526014602052604060002080541515600014612e6557612e2790612d9c565b8051612e3a575050509050600090600090565b90612e47612e5592612d0c565b5194602086015116906129b3565b92516001600160a01b0316920490565b50612e276012612d9c565b612b3392610b919260405192612e858461280f565b60008452610b81610b7c843361316d565b60008181526013602052604090205415612ec2576000526013602052612ebf6040600020612cb6565b90565b50612ebf612c4e565b600081815260146020908152604082205415612ef6575080612ebf9260409252601460205220612cb6565b915060125490612f0582612c02565b60128252927fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444602085015b848410612f3f57505050505090565b6001838192612f4d85612c29565b815201920193019290612f30565b15612f6257565b60405162461bcd60e51b815260206004820152603260248201527f546f74616c207472616e7366657220726f79616c74792070657263656e7461676044820152716573206d75737420657175616c203130302560701b6064820152608490fd5b15612fc957565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152600360205260409020546001600160a01b0316612ebf811515612fc2565b6001600160a01b0316801561305157600052600460205260406000205490565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b63ffffffff60e01b16637965db0b60e01b81149081156130c6575090565b6301ffc9a760e01b14919050565b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815260a08101918183106001600160401b038411176127f957612b33926040526138dd565b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152612b339161316860648361282a565b6138dd565b906001600160a01b0380806131818461300e565b169316918383149384156131b4575b50831561319e575b50505090565b6131aa919293506128ed565b1614388080613198565b909350600052600660205260406000208260005260205260ff604060002054169238613190565b156131e257565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b613259916132428461300e565b6001600160a01b03938484169391851684146131db565b8382169384156134105783918261336d575090506009549085600052600a60205281604060002055600160401b8210156127f9576132bf926132a687611728856001899701600955612abc565b82860361333a575b506132b88661300e565b16146131db565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60008481526005602052604081206001600160601b0360a01b9081815416905583825260046020526040822060001981540190558482526040822060018154019055858252600360205284604083209182541617905580a4565b61334390613031565b604060008781526007602052818120838252602052888282205588815260086020522055386132ae565b85830361337f575b506132bf926132a6565b61338a919250613031565b6000198101919082116129c6576132bf92849260009088825260209060088252604091828420548281036133d9575b508a84528383812055868452600781528284209184525281205592613375565b87855260078252838520838652825283852054888652600783528486208287528352808587205585526008825283852055386133b9565b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b600090808252602090828252604092838120338252835260ff84822054161561348a5750505050565b8351916001600160401b0390336060850183811186821017613783578752602a8552858501918736843785511561376f57603083538551916001926001101561375b576078602188015360295b8381116136f157506136af579087519360808501908582109082111761369b5788526042845286840194606036873784511561368757603086538451600110156136875790607860218601536041915b818311613619575050506135d7576135d39386936135b7936135a860489461357f9a519a8b957f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008c8801525180926037880190612676565b8401917001034b99036b4b9b9b4b733903937b6329607d1b603784015251809386840190612676565b0103602881018752018561282a565b5192839262461bcd60e51b845260048401526024830190612699565b0390fd5b60648587519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f81166010811015613673576f181899199a1a9b1b9c1cb0b131b232b360811b901a6136498588613bb5565b5360041c92801561365f57600019019190613527565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b634e487b7160e01b86526041600452602486fd5b60648789519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b90600f81166010811015613747576f181899199a1a9b1b9c1cb0b131b232b360811b901a61371f838a613bb5565b5360041c90801561373357600019016134d7565b634e487b7160e01b87526011600452602487fd5b634e487b7160e01b88526032600452602488fd5b634e487b7160e01b86526032600452602486fd5b634e487b7160e01b85526032600452602485fd5b634e487b7160e01b85526041600452602485fd5b9060009180835282602052604083209160018060a01b03169182845260205260ff6040842054166137c757505050565b80835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4565b1561381257565b60405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608490fd5b60809060208152603260208201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60608201520190565b156138c457565b60405162461bcd60e51b8152806135d36004820161386a565b60018060a01b03169061393c6040516138f5816127de565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af16139366139ce565b91613bc6565b80518061394a575b50505050565b818491810103126139ca57820151908115918215036139c7575061397057808080613944565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b80fd5b5080fd5b3d156139f9573d906139df8261284b565b916139ed604051938461282a565b82523d6000602084013e565b606090565b909190803b15613ae8576020604051809281630a85bd0160e11b9687825233600483015281613a4760009889938460248501526044840152608060648401526084830190612699565b03926001600160a01b03165af190829082613a9f575b5050613a9157613a6b6139ce565b80519081613a8c5760405162461bcd60e51b8152806135d36004820161386a565b602001fd5b6001600160e01b0319161490565b909192506020813d602011613ae0575b81613abc6020938361282a565b810103126139ca5751906001600160e01b0319821682036139c75750903880613a5d565b3d9150613aaf565b505050600190565b9290803b15613b6057613b409160209160018060a01b039460405180958194829389630a85bd0160e11b9b8c86523360048701521660248501526044840152608060648401526084830190612699565b03916000968791165af190829082613a9f575050613a9157613a6b6139ce565b50505050600190565b15613b7057565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b908151811015612a24570160200190565b91929015613c285750815115613bda575090565b3b15613be35790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015613c3b5750805190602001fd5b60405162461bcd60e51b8152602060048201529081906135d390602483019061269956fed329ff8a035c3ce5df2b0dae604d660c0d8783bf7e64be00c1d10db96c0b87b4b19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214ea2646970667358221220cff2d888f4755cb28a1f61c22f83c0c6b2d8ce53bda47ec48a21b89d721c464464736f6c634300081800332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d",
  "deployedBytecode": "0x6080806040526004908136101561001557600080fd5b60003560e01c90816301ffc9a7146125b65750806306fdde0314612508578063081812fc146124ea578063095ea7b31461236f5780630a0a35151461223e57806311eac855146121f95780631249c58b14611ef857806318160ddd14611eda57806323b872dd14611eb6578063248a9ca314611e885780632a55205a14611e4b5780632f2ff15d14611d995780632f745c5914611ce657806336568abe14611c565780633e11741f1461195457806342842e0e1461193d57806342966c68146116af578063463dace014611690578063492ae5a3146114e15780634f6ccce71461145057806355f804b3146112865780635e27a7751461125b578063602481b614610f7c5780636352211e14610f4c5780636817c76c14610f2e57806370824c5c14610ef357806370a0823114610ec85780638a71bb2d14610ea157806391d1485414610e5457806392303e0614610e2d57806395d89b4114610d5e5780639f6d68b014610c85578063a217fddf14610c69578063a22cb46514610b96578063b88d4fde14610b11578063b97c9f7714610ad6578063c87b56dd146107fe578063d547741f146107bd578063dbe55e561461079c578063e58378bb14610773578063e5f2e0cc1461050c578063e985e9c5146104b6578063f249fd161461024a5763f4a0a5281461020557600080fd5b3461024557602036600319011261024557336000908152600080516020613c60833981519152602052604090205461023f9060ff1661292b565b35600e55005b600080fd5b50346102455760403660031901126102455761026461289d565b61026c6126d4565b336000908152600080516020613c60833981519152602090815260409091205490919061029b9060ff1661292b565b6001600160a01b038116928315610472576001600160601b0316936107d0851161042e577f410d007abb80c65964518a8b4f3007c4b354d36d7cfb908d3e3fa6411506e27460408686868660105460601c906001600160601b03199060601b168417601055828103610314575b508351928352820152a1005b7f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e9081600052600083528560002081600052835260ff8660002054166103c3575b5080600052600082528460002083600052825260ff8560002054166103085780600052600082528460002083600052825284600020600160ff198254161790558233917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a485610308565b81600052600083528560002081600052835260ff86600020541615610355578160005260008352856000208160005283528560002060ff1981541690553390827ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a486610355565b60405162461bcd60e51b8152908101839052601c60248201527f506c6174666f726d20636f6d6d697373696f6e20746f6f2068696768000000006044820152606490fd5b60405162461bcd60e51b8152808601849052601860248201527f496e76616c696420706c6174666f726d206164647265737300000000000000006044820152606490fd5b34610245576040366003190112610245576104cf6126be565b6104d76126d4565b9060018060a01b03809116600052600660205260406000209116600052602052602060ff604060002054166040519015158152f35b50346102455761051b3661271a565b90600080516020613c8083398151915260005260209360008552604060002033600052855261055160ff6040600020541661292b565b600084815260036020526040902054610574906001600160a01b03161515612970565b83600052601480865261058a60406000206129dc565b6000906000905b8582106107015750506127106105b2816001600160601b0380941614612f5b565b841580156105f3575b867fcacd6190ee2ad101cd34b99d8fbaf3cdcda816ef83aaa4759f111ba1c416e62087876105ee60405192839283612b95565b0390a2005b6106ec5761060084612a3a565b6106198361060f8a8801612a8d565b169283111561380b565b6001600160a01b039081169384156106a857509061069e939291600c7fcacd6190ee2ad101cd34b99d8fbaf3cdcda816ef83aaa4759f111ba1c416e620989960405195610665876127de565b865280860193845260008b815291905260409020935191516001600160a01b039190921616911660a01b6001600160a01b031916179055565b83923880806105bb565b60405162461bcd60e51b8152908101899052601b60248201527f455243323938313a20496e76616c696420706172616d657465727300000000006044820152606490fd5b603283634e487b7160e01b6000525260246000fd5b909160019061074b906107306001600160a01b03610728610723888c8c612a14565b612a3a565b161515612a4e565b6107458a61073f878b8b612a14565b01612a8d565b90612aa1565b928760005282895261076c6040600020610766838a8a612a14565b90612af3565b0190610591565b34610245576000366003190112610245576020604051600080516020613c808339815191528152f35b3461024557600036600319011261024557602060105460601c604051908152f35b5034610245576040366003190112610245576107fc90356107dc6126d4565b908060005260006020526107f7600160406000200154613461565b613797565b005b503461024557602090816003193601126102455780356000818152600360205260409020549091839161083b906001600160a01b03161515612fc2565b604051906000600f549161084e836128b3565b808552848681019360019588600182169182600014610abb575050600114610a5d575b61087d9250038561282a565b835115610a41578586916000977a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000009081811015610a33575b50506d04ee2d6d415b85acef810000000080841015610a25575b50662386f26fc1000080841015610a16575b506305f5e10080841015610a07575b50612710808410156109f9575b505060648210156109e9575b600a809210156109df575b92600187019381602161093a6109248861284b565b97610932604051998a61282a565b80895261284b565b878a019a90601f1901368c37870101905b6109a9575b505050509361098f9392916109836109749660405197889551809288880190612676565b84019151809386840190612676565b0103808452018261282a565b905b6109a5604051928284938452830190612699565b0390f35b600019019083906f181899199a1a9b1b9c1cb0b131b232b360811b8282061a8353049182156109da5791908261094b565b610950565b956001019561090f565b9590606460029104910195610904565b9701969091049038806108f8565b600891989304920196386108eb565b601091989304920196386108dc565b8791989304920196386108ca565b6040995004925038806108b0565b505050505050604051610a538161280f565b6000815290610991565b5050600f60005284867f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802866000915b858310610aa257505061087d9350820101610871565b80919294505483858b0101520191018790868893610a8c565b60ff1916875261087d94151560051b84010191506108719050565b346102455760003660031901126102455760206040517f3b652633b3026fa70803ad50b58b0ae884cefe3497643f62c67c466f41a6e88d8152f35b503461024557608036600319011261024557610b2b6126be565b90610b346126d4565b91604435606435936001600160401b038511610245573660238601121561024557610b6e610b91948660246107fc98369301359101612866565b92610b81610b7c843361316d565b612d3a565b610b8c838383613235565b613af0565b6138bd565b503461024557604036600319011261024557610bb06126be565b60243590811515809203610245576001600160a01b031691338314610c255750336000526006602052604060002082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a3005b60649060206040519162461bcd60e51b8352820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152fd5b3461024557600036600319011261024557602060405160008152f35b5034610245576020366003190112610245576001600160601b03610ca761289d565b336000908152600080516020613c608339815191526020526040902054610cd09060ff1661292b565b1690610bb88211610d1a577f8df4d6c1a5c8e6c4d7a71d760d42122503a5244aeab98f2ff8e3244be07a44e3602083806001600160601b03196015541617601555604051908152a1005b60649060206040519162461bcd60e51b8352820152601b60248201527f526f79616c74792070657263656e7461676520746f6f206869676800000000006044820152fd5b3461024557600036600319011261024557604051600254600082610d81836128b3565b9182825260209360019085600182169182600014610e0d575050600114610db0575b506109919250038361282a565b84915060026000527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace906000915b858310610df5575050610991935082010185610da3565b80548389018501528794508693909201918101610dde565b60ff19168582015261099195151560051b8501019250879150610da39050565b346102455760003660031901126102455760206001600160601b0360105416604051908152f35b503461024557604036600319011261024557610e6e6126d4565b9035600052600060205260406000209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b346102455760003660031901126102455760206001600160601b0360155416604051908152f35b34610245576020366003190112610245576020610eeb610ee66126be565b613031565b604051908152f35b346102455760003660031901126102455760206040517f797343f8d6a29aafeb3aaf0910a8973e0081c60c2f6c1f775cd9f76ea348fc1e8152f35b34610245576000366003190112610245576020600e54604051908152f35b503461024557602036600319011261024557610f6a6020913561300e565b6040516001600160a01b039091168152f35b503461024557602090816003193601126102455780356001600160401b03811161024557610fad90369083016126ea565b91600080516020613c80833981519152600052600084526040600020336000528452610fe060ff6040600020541661292b565b601280546000825580611218575b5060009060005b85811061111e575050612710611016816001600160601b0380941614612f5b565b84158015611055575b6040517fbb8446bab3f849e18e51a7f88d964208275772e34ae7283ced4d1850f2a6248b9080611050898983612b95565b0390a1005b6106ec5761106284612a3a565b61107c611070888701612a8d565b9384169283111561380b565b6001600160a01b03169283156110da57507fbb8446bab3f849e18e51a7f88d964208275772e34ae7283ced4d1850f2a6248b956040516110bb816127de565b848152015260a01b6001600160a01b03191617600b553880808061101f565b60405162461bcd60e51b8152908101879052601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606490fd5b6001600160a01b039261114c9061113d85610728610723868c8c612a14565b6107458961073f858b8b612a14565b92611158828888612a14565b8354600160401b81101561120357600181018086558110156111ee57916111c88a6111e89360019695886000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec344401936111b182612a3a565b85546001600160a01b031916911617845501612a8d565b81546001600160a01b031660a09190911b6001600160a01b031916179055565b01610ff5565b603287634e487b7160e01b6000525260246000fd5b604187634e487b7160e01b6000525260246000fd5b816000527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444908101905b81811061124f5750610fee565b60008155600101611242565b50346102455760203660031901126102455761127a6109a59135612ecb565b60405191829182612782565b503461024557602080600319360112610245576001600160401b039082358281116102455736602382011215610245576112c99036906024818701359101612866565b92600080516020613c808339815191526000526000825260406000203360005282526112fc60ff6040600020541661292b565b835192831161143b5750611311600f546128b3565b601f81116113d7575b5080601f83116001146113565750819260009261134b575b5050600019600383901b1c191660019190911b17600f55005b015190503880611332565b90601f19831693600f6000527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802926000905b8682106113bf57505083600195106113a6575b505050811b01600f55005b015160001960f88460031b161c1916905538808061139b565b80600185968294968601518155019501930190611388565b600f6000527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802601f840160051c810191838510611431575b601f0160051c01905b818110611425575061131a565b60008155600101611418565b909150819061140f565b604190634e487b7160e01b6000525260246000fd5b50346102455760203660031901126102455780359060095482101561148857602061147a83612abc565b90546040519160031b1c8152f35b60849060206040519162461bcd60e51b8352820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152fd5b50346102455760209060206003193601126102455780356001600160401b0381116102455761151390369083016126ea565b336000908152600080516020613c60833981519152602052604090205490929061153f9060ff1661292b565b6011938454600086558061164d575b5060009460005b8581106115b4577f89bf541e521f4acc4850978648c2c61d31963c71ae31181f246302f902941d7086866115a56127108b61159d6001600160601b0391826010541690612aa1565b161115612b35565b61105060405192839283612b95565b6001600160a01b03966115e2906115d389610728610723868c8c612a14565b6107458561073f858b8b612a14565b966115ee828888612a14565b8354600160401b81101561120357600181018086558110156111ee57916111c8866116479360019695886000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6801936111b182612a3a565b01611555565b856000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c68908101905b818110611684575061154e565b60008155600101611677565b50346102455760203660031901126102455761127a6109a59135612e96565b50346102455760209081600319360112610245578035916116cf8361300e565b6001600160a01b0391903390831603611908576116eb8461300e565b808316908161186c57505060095484600052600a825280604060002055600160401b81101561185757846117288260016117419401600955612abc565b90919082549060031b91821b91600019901b1916179055565b600954600019908181019081116118425785600052600a835261176960406000205491612abc565b90549060031b1c61177d8161172884612abc565b600052600a83526040600020558460005260006040812055600954801561182d5791816003926000969594016117b281612abc565b83825491871b1b191690556009556117c98761300e565b938787526005835260408720946001600160601b0360a01b95868154169055169485875282526040862090815401905585855252604083209081541690557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8280a4005b603185634e487b7160e01b6000525260246000fd5b601185634e487b7160e01b6000525260246000fd5b604184634e487b7160e01b6000525260246000fd5b61187590613031565b6000198101919082116118425785600052600883526040600020548281036118c2575b50856000526000604081205560005260078252604060002090600052815260006040812055611741565b8160005260078452604060002083600052845260406000205482600052600785526040600020826000528552806040600020556000526008845260406000205538611898565b826064916040519162461bcd60e51b8352820152600f60248201526e2737ba103a37b5b2b71037bbb732b960891b6044820152fd5b34610245576107fc61194e3661274d565b91612e70565b50346102455760603660031901126102455761196e6126be565b9061197a60243561300e565b906001600160a01b0382163303611c1257506127106119a66001600160601b03601554166044356129b3565b04916127106119c26001600160601b03601054166044356129b3565b046119d86119d08286612d2d565b604435612cff565b90611a0760443530857f00000000000000000000000000000000000000000000000000000000000000006130d4565b84611afe575b611a429293945080611a93575b50837f000000000000000000000000000000000000000000000000000000000000000061312c565b611a4f6024358284612e70565b60405160443581526001600160a01b039182169290911690602435907f3d5eb834b5d6cadc063c171c3f25f60bca8ea892ba9db25342278927d0af955690602090a4005b611ac38160105460601c7f000000000000000000000000000000000000000000000000000000000000000061312c565b60105460601c906040519081527f2a0edbc96cbdf959b1243e79c51b9bb83b7867279441dc220825d561c2fbb2c6602060243592a338611a1a565b6024356000908152601460205260409020805415611c0757611b1f90612d9c565b8051611b2c575b50611a0d565b9290939160005b8451811015611bf65780612710611b636001600160601b036020611b596001968b612d19565b510151168a6129b3565b0480611b71575b5001611b33565b611bae81848060a01b03611b85858b612d19565b5151167f000000000000000000000000000000000000000000000000000000000000000061312c565b828060a01b03611bbe8389612d19565b515116906040519081527f5afae38153b1f3a22beefc75f2c88831b35f5359c45067c73310b55352c6c225602060243592a338611b6a565b509194508493909250611a42611b26565b50611b1f6012612d9c565b60649060206040519162461bcd60e51b8352820152601960248201527f4f6e6c7920746f6b656e206f776e65722063616e2073656c6c000000000000006044820152fd5b503461024557604036600319011261024557611c706126d4565b336001600160a01b03821603611c8a576107fc9135613797565b60405162461bcd60e51b8152602081840152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608490fd5b503461024557604036600319011261024557611d006126be565b60243591611d0d82613031565b831015611d41575060018060a01b031660005260076020526040600020906000526020526020604060002054604051908152f35b60849060206040519162461bcd60e51b8352820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152fd5b50346102455760403660031901126102455735611db46126d4565b816000526000602052611dce600160406000200154613461565b81600052600060205260406000209060018060a01b0316908160005260205260ff6040600020541615611dfd57005b8160005260006020526040600020816000526020526040600020600160ff1982541617905533917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4005b503461024557604036600319011261024557611e6b906024359035612de5565b604080516001600160a01b03939093168352602083019190915290f35b5034610245576020366003190112610245573560005260006020526020600160406000200154604051908152f35b34610245576107fc611ec73661274d565b91611ed5610b7c843361316d565b613235565b34610245576000366003190112610245576020600954604051908152f35b503461024557600036600319011261024557600e5490612710916001600160601b039083611f2a8360105416836129b3565b0491611f34612c4e565b92611f3f8184612cff565b90611f6d7f0000000000000000000000000000000000000000000000000000000000000000943033876130d4565b806121e3575b506000918451612169575b50611f8c9293949550612cff565b9081612125575b505050600d5460018101600d5560405190611fad8261280f565b6000825233156120e157600081815260036020526040902054611fdc906001600160a01b031615155b15613b69565b60095481600052602090600a825280604060002055600160401b8110156120cc5782916107fc9561201d610b91969561172885600160039701600955612abc565b61202633613031565b33600052600783526040600020816000528352846040600020558460005260088352604060002055612070611fd685600052600360205260018060a01b0360406000205416151590565b33600052815260406000206001815401905582600052526040600020336001600160601b0360a01b825416179055803360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4336139fe565b604185634e487b7160e01b6000525260246000fd5b60405162461bcd60e51b8152602081850181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606490fd5b8251156121535761214b926001600160a01b039061214290612d0c565b5151169061312c565b388080611f93565b612164925060105460601c9061312c565b61214b565b60005b85518110156121d45787612190836020612186858b612d19565b51015116856129b3565b04806121a0575b5060010161216c565b90936001916121cd916121c8826001600160a01b036121bf8a8d612d19565b5151168a61312c565b612d2d565b9390612197565b50949550859450611f8c611f7e565b6121f39060105460601c8561312c565b38611f73565b34610245576000366003190112610245576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346102455761224c3661271a565b336000908152600080516020613c6083398151915260209081526040909120549093929061227c9060ff1661292b565b60008381526003602052604090205461229f906001600160a01b03161515612970565b826000526013806020526122b660406000206129dc565b6000946000905b848210612316575050506123076127107faaf4e53c3b98ff4419060c1d6732d9fdaf27c8d404b09e9b4049b6442b71e8b5949561159d6001600160601b0391826010541690612aa1565b6105ee60405192839283612b95565b919590919060019061234a9061233b6001600160a01b03610728610723888b8b612a14565b6107458461073f878a8a612a14565b92866000528783526123656040600020610766838989612a14565b01909591956122bd565b5034610245576040366003190112610245576123896126be565b602435916001600160a01b039081806123a18661300e565b1693169280841461249c57803314908115612477575b501561240d5750600083815260056020526040902080546001600160a01b031916831790556123e58361300e565b167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b60849060206040519162461bcd60e51b8352820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152fd5b9050600052600660205260406000203360005260205260ff60406000205416386123b7565b60405162461bcd60e51b8152602081840152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608490fd5b503461024557602036600319011261024557610f6a602091356128ed565b346102455760003660031901126102455760405160006001826001549261252e846128b3565b9283835260209485600182169182600014610e0d57505060011461255957506109919250038361282a565b84915060016000527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6906000915b85831061259e575050610991935082010185610da3565b80548389018501528794508693909201918101612587565b82346102455760203660031901126102455735906001600160e01b031982168083036102455760209263780e9d6360e01b82148015612640575b80928115612619575b50508115612609575b5015158152f35b61261391506130a8565b83612602565b91925063152a902d60e11b909114908115612638575b509084806125f9565b90508461262f565b506380ac58cd60e01b82148015612666575b806125f05750612661816130a8565b6125f0565b50635b5e139f60e01b8214612652565b60005b8381106126895750506000910152565b8181015183820152602001612679565b906020916126b281518092818552858086019101612676565b601f01601f1916010190565b600435906001600160a01b038216820361024557565b602435906001600160a01b038216820361024557565b9181601f84011215610245578235916001600160401b038311610245576020808501948460061b01011161024557565b9060406003198301126102455760043591602435906001600160401b03821161024557612749916004016126ea565b9091565b6060906003190112610245576001600160a01b0390600435828116810361024557916024359081168103610245579060443590565b60208082019080835283518092528060408094019401926000905b8382106127ac57505050505090565b845180516001600160a01b031687528301516001600160601b031686840152948501949382019360019091019061279d565b604081019081106001600160401b038211176127f957604052565b634e487b7160e01b600052604160045260246000fd5b602081019081106001600160401b038211176127f957604052565b90601f801991011681019081106001600160401b038211176127f957604052565b6001600160401b0381116127f957601f01601f191660200190565b9291926128728261284b565b91612880604051938461282a565b829481845281830111610245578281602093846000960137010152565b600435906001600160601b038216820361024557565b90600182811c921680156128e3575b60208310146128cd57565b634e487b7160e01b600052602260045260246000fd5b91607f16916128c2565b600081815260036020526040902054612910906001600160a01b03161515612fc2565b6000908152600560205260409020546001600160a01b031690565b1561293257565b60405162461bcd60e51b815260206004820152601660248201527521b0b63632b91034b9903737ba1030b71037bbb732b960511b6044820152606490fd5b1561297757565b60405162461bcd60e51b8152602060048201526014602482015273151bdad95b88191bd95cc81b9bdd08195e1a5cdd60621b6044820152606490fd5b818102929181159184041417156129c657565b634e487b7160e01b600052601160045260246000fd5b80549060009060008155826129f057505050565b6000526020600020918201915b828110612a0957505050565b8181556001016129fd565b9190811015612a245760061b0190565b634e487b7160e01b600052603260045260246000fd5b356001600160a01b03811681036102455790565b15612a5557565b60405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103932b1b2b4bb32b960811b6044820152606490fd5b356001600160601b03811681036102455790565b9190916001600160601b03808094169116019182116129c657565b600954811015612a245760096000527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0190600090565b908154600160401b8110156127f95760018101808455811015612a245760206111c891612b339460005281600020019260018060a01b036111b182612a3a565b565b15612b3c57565b60405162461bcd60e51b815260206004820152602b60248201527f526f79616c74696573202b20706c6174666f726d20636f6d6d697373696f6e2060448201526a657863656564203130302560a81b6064820152608490fd5b602080825280820184905260409182019391906000905b838210612bbb57505050505090565b9091929394853560018060a01b03811680910361024557815281860135906001600160601b0382168092036102455782810191909152830194830193929160010190612bac565b906001600160401b0382116127f95760405191612c2560208260051b018461282a565b8252565b90604051612c36816127de565b91546001600160a01b038116835260a01c6020830152565b60115490612c5b82612c02565b9160208084019060116000527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c686000925b848410612c9a575050505050565b6001838192612ca885612c29565b815201920193019290612c8c565b908154612cc281612c02565b9260208085019160005260206000206000925b848410612ce3575050505050565b6001838192612cf185612c29565b815201920193019290612cd5565b919082039182116129c657565b805115612a245760200190565b8051821015612a245760209160051b010190565b919082018092116129c657565b15612d4157565b60405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608490fd5b908154612da881612c02565b9260208085019160005260206000206000925b848410612dc9575050505050565b6001838192612dd785612c29565b815201920193019290612dbb565b9190916127109081612e046001600160601b03958660155416906129b3565b04906000526014602052604060002080541515600014612e6557612e2790612d9c565b8051612e3a575050509050600090600090565b90612e47612e5592612d0c565b5194602086015116906129b3565b92516001600160a01b0316920490565b50612e276012612d9c565b612b3392610b919260405192612e858461280f565b60008452610b81610b7c843361316d565b60008181526013602052604090205415612ec2576000526013602052612ebf6040600020612cb6565b90565b50612ebf612c4e565b600081815260146020908152604082205415612ef6575080612ebf9260409252601460205220612cb6565b915060125490612f0582612c02565b60128252927fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec3444602085015b848410612f3f57505050505090565b6001838192612f4d85612c29565b815201920193019290612f30565b15612f6257565b60405162461bcd60e51b815260206004820152603260248201527f546f74616c207472616e7366657220726f79616c74792070657263656e7461676044820152716573206d75737420657175616c203130302560701b6064820152608490fd5b15612fc957565b60405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606490fd5b6000908152600360205260409020546001600160a01b0316612ebf811515612fc2565b6001600160a01b0316801561305157600052600460205260406000205490565b60405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608490fd5b63ffffffff60e01b16637965db0b60e01b81149081156130c6575090565b6301ffc9a760e01b14919050565b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648083019390935291815260a08101918183106001600160401b038411176127f957612b33926040526138dd565b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152612b339161316860648361282a565b6138dd565b906001600160a01b0380806131818461300e565b169316918383149384156131b4575b50831561319e575b50505090565b6131aa919293506128ed565b1614388080613198565b909350600052600660205260406000208260005260205260ff604060002054169238613190565b156131e257565b60405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608490fd5b613259916132428461300e565b6001600160a01b03938484169391851684146131db565b8382169384156134105783918261336d575090506009549085600052600a60205281604060002055600160401b8210156127f9576132bf926132a687611728856001899701600955612abc565b82860361333a575b506132b88661300e565b16146131db565b7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60008481526005602052604081206001600160601b0360a01b9081815416905583825260046020526040822060001981540190558482526040822060018154019055858252600360205284604083209182541617905580a4565b61334390613031565b604060008781526007602052818120838252602052888282205588815260086020522055386132ae565b85830361337f575b506132bf926132a6565b61338a919250613031565b6000198101919082116129c6576132bf92849260009088825260209060088252604091828420548281036133d9575b508a84528383812055868452600781528284209184525281205592613375565b87855260078252838520838652825283852054888652600783528486208287528352808587205585526008825283852055386133b9565b60405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b600090808252602090828252604092838120338252835260ff84822054161561348a5750505050565b8351916001600160401b0390336060850183811186821017613783578752602a8552858501918736843785511561376f57603083538551916001926001101561375b576078602188015360295b8381116136f157506136af579087519360808501908582109082111761369b5788526042845286840194606036873784511561368757603086538451600110156136875790607860218601536041915b818311613619575050506135d7576135d39386936135b7936135a860489461357f9a519a8b957f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008c8801525180926037880190612676565b8401917001034b99036b4b9b9b4b733903937b6329607d1b603784015251809386840190612676565b0103602881018752018561282a565b5192839262461bcd60e51b845260048401526024830190612699565b0390fd5b60648587519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f81166010811015613673576f181899199a1a9b1b9c1cb0b131b232b360811b901a6136498588613bb5565b5360041c92801561365f57600019019190613527565b634e487b7160e01b82526011600452602482fd5b634e487b7160e01b83526032600452602483fd5b634e487b7160e01b81526032600452602490fd5b634e487b7160e01b86526041600452602486fd5b60648789519062461bcd60e51b825280600483015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b90600f81166010811015613747576f181899199a1a9b1b9c1cb0b131b232b360811b901a61371f838a613bb5565b5360041c90801561373357600019016134d7565b634e487b7160e01b87526011600452602487fd5b634e487b7160e01b88526032600452602488fd5b634e487b7160e01b86526032600452602486fd5b634e487b7160e01b85526032600452602485fd5b634e487b7160e01b85526041600452602485fd5b9060009180835282602052604083209160018060a01b03169182845260205260ff6040842054166137c757505050565b80835282602052604083208284526020526040832060ff1981541690557ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b339380a4565b1561381257565b60405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608490fd5b60809060208152603260208201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b60608201520190565b156138c457565b60405162461bcd60e51b8152806135d36004820161386a565b60018060a01b03169061393c6040516138f5816127de565b6020938482527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564858301526000808587829751910182855af16139366139ce565b91613bc6565b80518061394a575b50505050565b818491810103126139ca57820151908115918215036139c7575061397057808080613944565b6084906040519062461bcd60e51b82526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152fd5b80fd5b5080fd5b3d156139f9573d906139df8261284b565b916139ed604051938461282a565b82523d6000602084013e565b606090565b909190803b15613ae8576020604051809281630a85bd0160e11b9687825233600483015281613a4760009889938460248501526044840152608060648401526084830190612699565b03926001600160a01b03165af190829082613a9f575b5050613a9157613a6b6139ce565b80519081613a8c5760405162461bcd60e51b8152806135d36004820161386a565b602001fd5b6001600160e01b0319161490565b909192506020813d602011613ae0575b81613abc6020938361282a565b810103126139ca5751906001600160e01b0319821682036139c75750903880613a5d565b3d9150613aaf565b505050600190565b9290803b15613b6057613b409160209160018060a01b039460405180958194829389630a85bd0160e11b9b8c86523360048701521660248501526044840152608060648401526084830190612699565b03916000968791165af190829082613a9f575050613a9157613a6b6139ce565b50505050600190565b15613b7057565b60405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606490fd5b908151811015612a24570160200190565b91929015613c285750815115613bda575090565b3b15613be35790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b825190915015613c3b5750805190602001fd5b60405162461bcd60e51b8152602060048201529081906135d390602483019061269956fed329ff8a035c3ce5df2b0dae604d660c0d8783bf7e64be00c1d10db96c0b87b4b19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214ea2646970667358221220cff2d888f4755cb28a1f61c22f83c0c6b2d8ce53bda47ec48a21b89d721c464464736f6c63430008180033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
