@bigmaxwatermelon/sdk 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +22 -19
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sdk/rpc/wallet.ts","../src/abis/IsometryPlatform.json","../src/abis/StableCoinFactory.json","../src/abis/StableCoin.json","../src/abis/StableCoinBeacon.json","../src/sdk/rpc/contracts.ts","../src/sdk/rpc/platform.ts","../src/sdk/rpc/factory.ts","../src/sdk/rpc/stablecoin.ts","../src/sdk/rpc/errorMap.ts","../src/sdk/rpc/writeExecutor.ts","../src/sdk/rpc/index.ts","../src/sdk/graph/client.ts","../src/sdk/graph/queries.ts","../src/sdk/graph/tokenHistory.ts","../src/sdk/graph/platformHistory.ts","../src/sdk/graph/analytics.ts","../src/sdk/graph/index.ts","../src/sdk/client.ts","../src/sdk/index.ts","../src/cli/commands/system.ts","../src/cli/commands/platform.ts","../src/env.ts","../src/cli/commands/tokenWrite.ts","../src/cli/commands/token.ts","../src/cli/commands/factory.ts","../src/cli/index.ts"],"sourcesContent":["import { ethers } from 'ethers'\n\n// ─── IWallet ────────────────────────────────────────────────────────────────────\n\nexport type WalletMode = 'eip1193' | 'privatekey' | 'readonly'\n\n// ─── IWallet ───────────────────────────────────────────────────────────────────\n\nexport interface IWallet {\n readonly mode: WalletMode\n /** For read operations */\n readonly provider: ethers.Provider\n /** For write operations (may equal provider in read-only mode) */\n readonly signer: ethers.Signer | null\n getAddress(): Promise<string | null>\n isConnected(): boolean\n}\n\n// ─── ReadOnly ──────────────────────────────────────────────────────────────────\n\nexport class ReadOnlyWallet implements IWallet {\n readonly mode: WalletMode = 'readonly'\n readonly provider: ethers.Provider\n readonly signer = null\n\n constructor(rpcUrl: string) {\n this.provider = new ethers.JsonRpcProvider(rpcUrl)\n }\n\n getAddress(): Promise<string | null> {\n return Promise.resolve(null)\n }\n\n isConnected(): boolean {\n return false\n }\n}\n\n// ─── PrivateKey ────────────────────────────────────────────────────────────────\n\nexport class PrivateKeyWallet implements IWallet {\n readonly mode: WalletMode = 'privatekey'\n readonly provider: ethers.Provider\n readonly signer: ethers.Signer\n\n constructor(rpcUrl: string, privateKey: string) {\n this.provider = new ethers.JsonRpcProvider(rpcUrl)\n this.signer = new ethers.Wallet(privateKey, this.provider)\n }\n\n async getAddress(): Promise<string | null> {\n return this.signer.getAddress()\n }\n\n isConnected(): boolean {\n return true\n }\n}\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createWallet(\n rpcUrl: string,\n privateKey?: string\n): IWallet {\n if (privateKey) return new PrivateKeyWallet(rpcUrl, privateKey)\n return new ReadOnlyWallet(rpcUrl)\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"IsometryPlatform\",\n \"sourceName\": \"contracts/platform/IsometryPlatform.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"AccessControlBadConfirmation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"neededRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967NonPayable\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"EnforcedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExpectedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FailedCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"UUPSUnauthorizedCallContext\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"slot\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"UUPSUnsupportedProxiableUUID\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AccessUserAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AccessUserRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"ApprovedIssuerAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"ApprovedIssuerRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldFactory\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newFactory\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"FactorySet\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformAdminAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformAdminRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformPaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformUnpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"TokenRegistered\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"ACCESS_USER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"APPROVED_ISSUER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"PLATFORM_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"UPGRADE_INTERFACE_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"accessUserList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addAccessUser\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addApprovedIssuer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addPlatformAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approvedIssuerList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getAccessUser\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAccessUserCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllAccessUsers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllApprovedIssuers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllPlatformAdmins\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllTokens\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getApprovedIssuer\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getApprovedIssuerCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getPlatformAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getPlatformAdminCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getTokenCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isAccessUser\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isApprovedIssuer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isOwner\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isPlatformAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"platformAdminList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"proxiableUUID\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"registerToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"registerTokenFor\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"registeredTokens\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeAccessUser\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeApprovedIssuer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removePlatformAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"callerConfirmation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setFactory\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"tokenList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516125ab62000104600039600081816118da015281816119030152611a4701526125ab6000f3fe6080604052600436106102885760003560e01c80638129fc1c1161015a578063a217fddf116100c1578063cf3a18131161007a578063cf3a1813146107a9578063d51eb68e146107c9578063d547741f146107e9578063e79faa5814610809578063eb7d61fe14610829578063f91838541461084957600080fd5b8063a217fddf146106e1578063a75623c5146106f6578063ad3cb1cc14610716578063b018114714610754578063c45a015514610769578063c92ca21f1461078957600080fd5b806397d4eaec1161011357806397d4eaec1461061f57806398cf5ecf1461063f5780639cf9613c1461065f5780639e1138521461067f5780639ead72221461069f5780639f437c9e146106bf57600080fd5b80638129fc1c146105645780638247e0ac1461057957806383aa79d81461058e5780638a143617146105b05780638c0bd916146105d057806391d14854146105ff57600080fd5b806346ee51bb116101fe578063685d34ff116101b7578063685d34ff146104ad5780636a0af06d146104cf5780636da66355146104ef57806378a895671461050f5780637d11d546146105245780637eb74bfc1461054457600080fd5b806346ee51bb146103f35780634f1ef2861461040857806352d1902d1461041b5780635bb47808146104305780635c975abb146104505780636430c3271461047557600080fd5b8063294595d211610250578063294595d2146103545780632a5c792a146103695780632f2ff15d1461037e5780632f54bf6e1461039e57806332889cd3146103be57806336568abe146103d357600080fd5b806301ffc9a71461028d5780630c48da2d146102c257806310ae2f1a146102e457806319a6178314610306578063248a9ca314610326575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611df3565b610869565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd366004611ee5565b6108a0565b005b3480156102f057600080fd5b506102f9610938565b6040516102b99190611f7e565b34801561031257600080fd5b506102e2610321366004611fcb565b61099a565b34801561033257600080fd5b50610346610341366004612019565b610a52565b6040519081526020016102b9565b34801561036057600080fd5b50600354610346565b34801561037557600080fd5b506102f9610a74565b34801561038a57600080fd5b506102e2610399366004612032565b610ad4565b3480156103aa57600080fd5b506102ad6103b936600461205e565b610af0565b3480156103ca57600080fd5b506102f9610afc565b3480156103df57600080fd5b506102e26103ee366004612032565b610b5c565b3480156103ff57600080fd5b50600254610346565b6102e2610416366004612079565b610b94565b34801561042757600080fd5b50610346610bb3565b34801561043c57600080fd5b506102e261044b36600461205e565b610bd0565b34801561045c57600080fd5b506000805160206125368339815191525460ff166102ad565b34801561048157600080fd5b50610495610490366004612019565b610c75565b6040516001600160a01b0390911681526020016102b9565b3480156104b957600080fd5b506103466000805160206124f683398151915281565b3480156104db57600080fd5b506102e26104ea366004611fcb565b610c9f565b3480156104fb57600080fd5b506102e261050a3660046120d1565b610d4b565b34801561051b57600080fd5b50600154610346565b34801561053057600080fd5b5061049561053f366004612019565b610da3565b34801561055057600080fd5b506102ad61055f36600461205e565b610df5565b34801561057057600080fd5b506102e2610e0f565b34801561058557600080fd5b50600454610346565b34801561059a57600080fd5b5061034660008051602061255683398151915281565b3480156105bc57600080fd5b506104956105cb366004612019565b610f21565b3480156105dc57600080fd5b506105f06105eb36600461205e565b610f31565b6040516102b99392919061215e565b34801561060b57600080fd5b506102ad61061a366004612032565b61106e565b34801561062b57600080fd5b506102ad61063a36600461205e565b6110a6565b34801561064b57600080fd5b506102e261065a366004611fcb565b6110c0565b34801561066b57600080fd5b506102e261067a366004611fcb565b61116c565b34801561068b57600080fd5b5061049561069a366004612019565b611218565b3480156106ab57600080fd5b506104956106ba366004612019565b611228565b3480156106cb57600080fd5b506103466000805160206124b683398151915281565b3480156106ed57600080fd5b50610346600081565b34801561070257600080fd5b50610495610711366004612019565b611238565b34801561072257600080fd5b50610747604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102b9919061219e565b34801561076057600080fd5b506102f961126f565b34801561077557600080fd5b50600554610495906001600160a01b031681565b34801561079557600080fd5b506102e26107a4366004611fcb565b6112cf565b3480156107b557600080fd5b506104956107c4366004612019565b61134d565b3480156107d557600080fd5b506102e26107e4366004611fcb565b611384565b3480156107f557600080fd5b506102e2610804366004612032565b6113f5565b34801561081557600080fd5b506102e26108243660046120d1565b611411565b34801561083557600080fd5b506102e26108443660046121b1565b61145d565b34801561085557600080fd5b506102ad61086436600461205e565b6114e6565b60006001600160e01b03198216637965db0b60e01b148061089a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a8611500565b6005546001600160a01b03163314610926576108d26000805160206124b68339815191523361106e565b806108e357506108e360003361106e565b8061090157506109016000805160206124f68339815191523361106e565b6109265760405162461bcd60e51b815260040161091d9061225b565b60405180910390fd5b61093284848484611533565b50505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561099057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610972575b5050505050905090565b6109a560003361106e565b806109c357506109c36000805160206124f68339815191523361106e565b6109df5760405162461bcd60e51b815260040161091d9061225b565b6109f76000805160206124b6833981519152836116a2565b50610a03600383611728565b816001600160a01b0316336001600160a01b03167f741d4f16d5a79c37b8fd050639cffd4eaf417445424059c69664cbb70d2a5f6c83604051610a46919061219e565b60405180910390a35050565b6000908152600080516020612516833981519152602052604090206001015490565b60606001805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b610add82610a52565b610ae681611827565b6109328383611834565b600061089a818361106e565b60606003805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b6001600160a01b0381163314610b855760405163334bd91960e11b815260040160405180910390fd5b610b8f82826116a2565b505050565b610b9c6118cf565b610ba582611974565b610baf828261197f565b5050565b6000610bbd611a3c565b506000805160206124d683398151915290565b6000610bdb81611827565b6001600160a01b038216610c205760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161091d565b600580546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907fcc847c84c8074a8da04b48d623a4b38e263572c16fa0fc823d79bf7361dee31d90600090a4505050565b60048181548110610c8557600080fd5b6000918252602090912001546001600160a01b0316905081565b610caa60003361106e565b80610cc85750610cc86000805160206124f68339815191523361106e565b610ce45760405162461bcd60e51b815260040161091d9061225b565b610cfc60008051602061255683398151915283611834565b50610d08600483611a85565b816001600160a01b0316336001600160a01b03167fbcc7857902b063c09d0cf80588b949fa234255dfe327b962c5d1dc38fe1aba4083604051610a46919061219e565b6000610d5681611827565b610d5e611b09565b336001600160a01b03167f0633b518f7e228cea84c7b36264537a16387cd16109f97ff871f587d7238481d83604051610d97919061219e565b60405180910390a25050565b6002546000908210610dc75760405162461bcd60e51b815260040161091d90612283565b60028281548110610dda57610dda6122b0565b6000918252602090912001546001600160a01b031692915050565b600061089a6000805160206124b68339815191528361106e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610e9e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ec857845460ff60401b1916600160401b1785555b610ed3600033611834565b508315610f1a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b60038181548110610c8557600080fd5b600060208190529081526040902080546001820180546001600160a01b039092169291610f5d906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f89906122c6565b8015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b505050505090806002018054610feb906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611017906122c6565b80156110645780601f1061103957610100808354040283529160200191611064565b820191906000526020600020905b81548152906001019060200180831161104757829003601f168201915b5050505050905083565b6000918252600080516020612516833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061089a6000805160206125568339815191528361106e565b6110cb60003361106e565b806110e957506110e96000805160206124f68339815191523361106e565b6111055760405162461bcd60e51b815260040161091d9061225b565b61111d600080516020612556833981519152836116a2565b50611129600483611728565b816001600160a01b0316336001600160a01b03167f88d45a6aa07125447b55f107bd5737025ef5e3f116de4950e8e090a1023ff4a483604051610a46919061219e565b61117760003361106e565b8061119557506111956000805160206124f68339815191523361106e565b6111b15760405162461bcd60e51b815260040161091d9061225b565b6111c96000805160206124b683398151915283611834565b506111d5600383611a85565b816001600160a01b0316336001600160a01b03167fb2fc27990e77bd54811bcaa01cd65f1a5cb5af811ef16cad4f7778a4df5126a083604051610a46919061219e565b60028181548110610c8557600080fd5b60018181548110610c8557600080fd5b600454600090821061125c5760405162461bcd60e51b815260040161091d90612283565b60048281548110610dda57610dda6122b0565b60606004805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b60006112da81611827565b6112f26000805160206124f6833981519152846113f5565b6112fd600284611728565b826001600160a01b0316336001600160a01b03167fdedab8f5d11d718dc27471cc695fcea1a096dbaf743fc629e9ce0bb1a39333af84604051611340919061219e565b60405180910390a3505050565b60035460009082106113715760405162461bcd60e51b815260040161091d90612283565b60038281548110610dda57610dda6122b0565b600061138f81611827565b6113a76000805160206124f683398151915284610ad4565b6113b2600284611a85565b826001600160a01b0316336001600160a01b03167f8cc31bbe73dc10848165c847a4c370cd881743121d2eee9836ca4e607ca4819f84604051611340919061219e565b6113fe82610a52565b61140781611827565b61093283836116a2565b600061141c81611827565b611424611b6c565b336001600160a01b03167f02ac1745f320508b54f59ac6b59d2fc262da33b72598237b29a916cfb5fd519383604051610d97919061219e565b611465611500565b6005546001600160a01b031633146114da5761148f6000805160206124b68339815191523361106e565b806114a057506114a060003361106e565b806114be57506114be6000805160206124f68339815191523361106e565b6114da5760405162461bcd60e51b815260040161091d9061225b565b610f1a84848484611533565b600061089a6000805160206124f68339815191528361106e565b6000805160206125368339815191525460ff16156115315760405163d93c066560e01b815260040160405180910390fd5b565b6001600160a01b03848116600090815260208190526040902054161561159b5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015260640161091d565b604080516060810182526001600160a01b038681168083526020808401888152848601889052600092835290829052939020825181546001600160a01b0319169216919091178155915190919060018201906115f79082612350565b506040820151600282019061160c9082612350565b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03871690811790915560405190915033907fec82a4a358c202e0580890ad5ae52df93af69e508cbbd07e2766ab1e2fd4d3df9061169490879087908790612410565b60405180910390a350505050565b60006000805160206125168339815191526116bd848461106e565b1561171e576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061089a565b600091505061089a565b60005b8254811015610b8f57816001600160a01b0316838281548110611750576117506122b0565b6000918252602090912001546001600160a01b03160361181f578254839061177a90600190612449565b8154811061178a5761178a6122b0565b9060005260206000200160009054906101000a90046001600160a01b03168382815481106117ba576117ba6122b0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806117f8576117f861246a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b60010161172b565b6118318133611bb2565b50565b600060008051602061251683398151915261184f848461106e565b61171e576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118853390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061089a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061195657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661194a6000805160206124d6833981519152546001600160a01b031690565b6001600160a01b031614155b156115315760405163703e46dd60e11b815260040160405180910390fd5b6000610baf81611827565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612480565b60015b611a0157604051634c9c8ce360e01b81526001600160a01b038316600482015260240161091d565b6000805160206124d68339815191528114611a3257604051632a87526960e21b81526004810182905260240161091d565b610b8f8383611beb565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115315760405163703e46dd60e11b815260040160405180910390fd5b60005b8254811015611ad457816001600160a01b0316838281548110611aad57611aad6122b0565b6000918252602090912001546001600160a01b031603611acc57505050565b600101611a88565b5081546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b03909216919091179055565b611b11611500565b600080516020612536833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b611b74611c41565b600080516020612536833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611b4e565b611bbc828261106e565b610baf5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161091d565b611bf482611c71565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611c3957610b8f8282611cd6565b610baf611d4c565b6000805160206125368339815191525460ff1661153157604051638dfc202b60e01b815260040160405180910390fd5b806001600160a01b03163b600003611ca757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161091d565b6000805160206124d683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611cf39190612499565b600060405180830381855af49150503d8060008114611d2e576040519150601f19603f3d011682016040523d82523d6000602084013e611d33565b606091505b5091509150611d43858383611d6b565b95945050505050565b34156115315760405163b398979f60e01b815260040160405180910390fd5b606082611d8057611d7b82611dca565b611dc3565b8151158015611d9757506001600160a01b0384163b155b15611dc057604051639996b31560e01b81526001600160a01b038516600482015260240161091d565b50805b9392505050565b805115611dda5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b600060208284031215611e0557600080fd5b81356001600160e01b031981168114611dc357600080fd5b80356001600160a01b0381168114611e3457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611e6a57611e6a611e39565b604051601f8501601f19908116603f01168101908282118183101715611e9257611e92611e39565b81604052809350858152868686011115611eab57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611ed657600080fd5b611dc383833560208501611e4f565b60008060008060808587031215611efb57600080fd5b611f0485611e1d565b9350602085013567ffffffffffffffff80821115611f2157600080fd5b611f2d88838901611ec5565b94506040870135915080821115611f4357600080fd5b611f4f88838901611ec5565b93506060870135915080821115611f6557600080fd5b50611f7287828801611ec5565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015611fbf5783516001600160a01b031683529284019291840191600101611f9a565b50909695505050505050565b60008060408385031215611fde57600080fd5b611fe783611e1d565b9150602083013567ffffffffffffffff81111561200357600080fd5b61200f85828601611ec5565b9150509250929050565b60006020828403121561202b57600080fd5b5035919050565b6000806040838503121561204557600080fd5b8235915061205560208401611e1d565b90509250929050565b60006020828403121561207057600080fd5b611dc382611e1d565b6000806040838503121561208c57600080fd5b61209583611e1d565b9150602083013567ffffffffffffffff8111156120b157600080fd5b8301601f810185136120c257600080fd5b61200f85823560208401611e4f565b6000602082840312156120e357600080fd5b813567ffffffffffffffff8111156120fa57600080fd5b61210684828501611ec5565b949350505050565b60005b83811015612129578181015183820152602001612111565b50506000910152565b6000815180845261214a81602086016020860161210e565b601f01601f19169290920160200192915050565b6001600160a01b038416815260606020820181905260009061218290830185612132565b82810360408401526121948185612132565b9695505050505050565b602081526000611dc36020830184612132565b600080600080600060a086880312156121c957600080fd5b6121d286611e1d565b94506121e060208701611e1d565b9350604086013567ffffffffffffffff808211156121fd57600080fd5b61220989838a01611ec5565b9450606088013591508082111561221f57600080fd5b61222b89838a01611ec5565b9350608088013591508082111561224157600080fd5b5061224e88828901611ec5565b9150509295509295909350565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806122da57607f821691505b6020821081036122fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b8f576000816000526020600020601f850160051c810160208610156123295750805b601f850160051c820191505b8181101561234857828155600101612335565b505050505050565b815167ffffffffffffffff81111561236a5761236a611e39565b61237e8161237884546122c6565b84612300565b602080601f8311600181146123b3576000841561239b5750858301515b600019600386901b1c1916600185901b178555612348565b600085815260208120601f198616915b828110156123e2578886015182559484019460019091019084016123c3565b50858210156124005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006124236060830186612132565b82810360208401526124358186612132565b905082810360408401526121948185612132565b8181038181111561089a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561249257600080fd5b5051919050565b600082516124ab81846020870161210e565b919091019291505056fe0a865fb3417fc4a7d7373d42317aff592f595a0093d7332ffae098db733cd11b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5246556c0ab216b5b325ad7c539bfbd1a07c768773cdf810fecd3c3375c2740702dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033000364bafb595aebf30e64edfca374c8e6e68a01fdc0bab55d3d02600374a378cba264697066735822122082858869d5afb1ec8b6456b51167b4198d15ab64193c6f5be2762887c5178a1c64736f6c63430008160033\",\n \"deployedBytecode\": \"0x6080604052600436106102885760003560e01c80638129fc1c1161015a578063a217fddf116100c1578063cf3a18131161007a578063cf3a1813146107a9578063d51eb68e146107c9578063d547741f146107e9578063e79faa5814610809578063eb7d61fe14610829578063f91838541461084957600080fd5b8063a217fddf146106e1578063a75623c5146106f6578063ad3cb1cc14610716578063b018114714610754578063c45a015514610769578063c92ca21f1461078957600080fd5b806397d4eaec1161011357806397d4eaec1461061f57806398cf5ecf1461063f5780639cf9613c1461065f5780639e1138521461067f5780639ead72221461069f5780639f437c9e146106bf57600080fd5b80638129fc1c146105645780638247e0ac1461057957806383aa79d81461058e5780638a143617146105b05780638c0bd916146105d057806391d14854146105ff57600080fd5b806346ee51bb116101fe578063685d34ff116101b7578063685d34ff146104ad5780636a0af06d146104cf5780636da66355146104ef57806378a895671461050f5780637d11d546146105245780637eb74bfc1461054457600080fd5b806346ee51bb146103f35780634f1ef2861461040857806352d1902d1461041b5780635bb47808146104305780635c975abb146104505780636430c3271461047557600080fd5b8063294595d211610250578063294595d2146103545780632a5c792a146103695780632f2ff15d1461037e5780632f54bf6e1461039e57806332889cd3146103be57806336568abe146103d357600080fd5b806301ffc9a71461028d5780630c48da2d146102c257806310ae2f1a146102e457806319a6178314610306578063248a9ca314610326575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611df3565b610869565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd366004611ee5565b6108a0565b005b3480156102f057600080fd5b506102f9610938565b6040516102b99190611f7e565b34801561031257600080fd5b506102e2610321366004611fcb565b61099a565b34801561033257600080fd5b50610346610341366004612019565b610a52565b6040519081526020016102b9565b34801561036057600080fd5b50600354610346565b34801561037557600080fd5b506102f9610a74565b34801561038a57600080fd5b506102e2610399366004612032565b610ad4565b3480156103aa57600080fd5b506102ad6103b936600461205e565b610af0565b3480156103ca57600080fd5b506102f9610afc565b3480156103df57600080fd5b506102e26103ee366004612032565b610b5c565b3480156103ff57600080fd5b50600254610346565b6102e2610416366004612079565b610b94565b34801561042757600080fd5b50610346610bb3565b34801561043c57600080fd5b506102e261044b36600461205e565b610bd0565b34801561045c57600080fd5b506000805160206125368339815191525460ff166102ad565b34801561048157600080fd5b50610495610490366004612019565b610c75565b6040516001600160a01b0390911681526020016102b9565b3480156104b957600080fd5b506103466000805160206124f683398151915281565b3480156104db57600080fd5b506102e26104ea366004611fcb565b610c9f565b3480156104fb57600080fd5b506102e261050a3660046120d1565b610d4b565b34801561051b57600080fd5b50600154610346565b34801561053057600080fd5b5061049561053f366004612019565b610da3565b34801561055057600080fd5b506102ad61055f36600461205e565b610df5565b34801561057057600080fd5b506102e2610e0f565b34801561058557600080fd5b50600454610346565b34801561059a57600080fd5b5061034660008051602061255683398151915281565b3480156105bc57600080fd5b506104956105cb366004612019565b610f21565b3480156105dc57600080fd5b506105f06105eb36600461205e565b610f31565b6040516102b99392919061215e565b34801561060b57600080fd5b506102ad61061a366004612032565b61106e565b34801561062b57600080fd5b506102ad61063a36600461205e565b6110a6565b34801561064b57600080fd5b506102e261065a366004611fcb565b6110c0565b34801561066b57600080fd5b506102e261067a366004611fcb565b61116c565b34801561068b57600080fd5b5061049561069a366004612019565b611218565b3480156106ab57600080fd5b506104956106ba366004612019565b611228565b3480156106cb57600080fd5b506103466000805160206124b683398151915281565b3480156106ed57600080fd5b50610346600081565b34801561070257600080fd5b50610495610711366004612019565b611238565b34801561072257600080fd5b50610747604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102b9919061219e565b34801561076057600080fd5b506102f961126f565b34801561077557600080fd5b50600554610495906001600160a01b031681565b34801561079557600080fd5b506102e26107a4366004611fcb565b6112cf565b3480156107b557600080fd5b506104956107c4366004612019565b61134d565b3480156107d557600080fd5b506102e26107e4366004611fcb565b611384565b3480156107f557600080fd5b506102e2610804366004612032565b6113f5565b34801561081557600080fd5b506102e26108243660046120d1565b611411565b34801561083557600080fd5b506102e26108443660046121b1565b61145d565b34801561085557600080fd5b506102ad61086436600461205e565b6114e6565b60006001600160e01b03198216637965db0b60e01b148061089a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a8611500565b6005546001600160a01b03163314610926576108d26000805160206124b68339815191523361106e565b806108e357506108e360003361106e565b8061090157506109016000805160206124f68339815191523361106e565b6109265760405162461bcd60e51b815260040161091d9061225b565b60405180910390fd5b61093284848484611533565b50505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561099057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610972575b5050505050905090565b6109a560003361106e565b806109c357506109c36000805160206124f68339815191523361106e565b6109df5760405162461bcd60e51b815260040161091d9061225b565b6109f76000805160206124b6833981519152836116a2565b50610a03600383611728565b816001600160a01b0316336001600160a01b03167f741d4f16d5a79c37b8fd050639cffd4eaf417445424059c69664cbb70d2a5f6c83604051610a46919061219e565b60405180910390a35050565b6000908152600080516020612516833981519152602052604090206001015490565b60606001805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b610add82610a52565b610ae681611827565b6109328383611834565b600061089a818361106e565b60606003805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b6001600160a01b0381163314610b855760405163334bd91960e11b815260040160405180910390fd5b610b8f82826116a2565b505050565b610b9c6118cf565b610ba582611974565b610baf828261197f565b5050565b6000610bbd611a3c565b506000805160206124d683398151915290565b6000610bdb81611827565b6001600160a01b038216610c205760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161091d565b600580546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907fcc847c84c8074a8da04b48d623a4b38e263572c16fa0fc823d79bf7361dee31d90600090a4505050565b60048181548110610c8557600080fd5b6000918252602090912001546001600160a01b0316905081565b610caa60003361106e565b80610cc85750610cc86000805160206124f68339815191523361106e565b610ce45760405162461bcd60e51b815260040161091d9061225b565b610cfc60008051602061255683398151915283611834565b50610d08600483611a85565b816001600160a01b0316336001600160a01b03167fbcc7857902b063c09d0cf80588b949fa234255dfe327b962c5d1dc38fe1aba4083604051610a46919061219e565b6000610d5681611827565b610d5e611b09565b336001600160a01b03167f0633b518f7e228cea84c7b36264537a16387cd16109f97ff871f587d7238481d83604051610d97919061219e565b60405180910390a25050565b6002546000908210610dc75760405162461bcd60e51b815260040161091d90612283565b60028281548110610dda57610dda6122b0565b6000918252602090912001546001600160a01b031692915050565b600061089a6000805160206124b68339815191528361106e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610e9e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ec857845460ff60401b1916600160401b1785555b610ed3600033611834565b508315610f1a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b60038181548110610c8557600080fd5b600060208190529081526040902080546001820180546001600160a01b039092169291610f5d906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f89906122c6565b8015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b505050505090806002018054610feb906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611017906122c6565b80156110645780601f1061103957610100808354040283529160200191611064565b820191906000526020600020905b81548152906001019060200180831161104757829003601f168201915b5050505050905083565b6000918252600080516020612516833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061089a6000805160206125568339815191528361106e565b6110cb60003361106e565b806110e957506110e96000805160206124f68339815191523361106e565b6111055760405162461bcd60e51b815260040161091d9061225b565b61111d600080516020612556833981519152836116a2565b50611129600483611728565b816001600160a01b0316336001600160a01b03167f88d45a6aa07125447b55f107bd5737025ef5e3f116de4950e8e090a1023ff4a483604051610a46919061219e565b61117760003361106e565b8061119557506111956000805160206124f68339815191523361106e565b6111b15760405162461bcd60e51b815260040161091d9061225b565b6111c96000805160206124b683398151915283611834565b506111d5600383611a85565b816001600160a01b0316336001600160a01b03167fb2fc27990e77bd54811bcaa01cd65f1a5cb5af811ef16cad4f7778a4df5126a083604051610a46919061219e565b60028181548110610c8557600080fd5b60018181548110610c8557600080fd5b600454600090821061125c5760405162461bcd60e51b815260040161091d90612283565b60048281548110610dda57610dda6122b0565b60606004805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b60006112da81611827565b6112f26000805160206124f6833981519152846113f5565b6112fd600284611728565b826001600160a01b0316336001600160a01b03167fdedab8f5d11d718dc27471cc695fcea1a096dbaf743fc629e9ce0bb1a39333af84604051611340919061219e565b60405180910390a3505050565b60035460009082106113715760405162461bcd60e51b815260040161091d90612283565b60038281548110610dda57610dda6122b0565b600061138f81611827565b6113a76000805160206124f683398151915284610ad4565b6113b2600284611a85565b826001600160a01b0316336001600160a01b03167f8cc31bbe73dc10848165c847a4c370cd881743121d2eee9836ca4e607ca4819f84604051611340919061219e565b6113fe82610a52565b61140781611827565b61093283836116a2565b600061141c81611827565b611424611b6c565b336001600160a01b03167f02ac1745f320508b54f59ac6b59d2fc262da33b72598237b29a916cfb5fd519383604051610d97919061219e565b611465611500565b6005546001600160a01b031633146114da5761148f6000805160206124b68339815191523361106e565b806114a057506114a060003361106e565b806114be57506114be6000805160206124f68339815191523361106e565b6114da5760405162461bcd60e51b815260040161091d9061225b565b610f1a84848484611533565b600061089a6000805160206124f68339815191528361106e565b6000805160206125368339815191525460ff16156115315760405163d93c066560e01b815260040160405180910390fd5b565b6001600160a01b03848116600090815260208190526040902054161561159b5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015260640161091d565b604080516060810182526001600160a01b038681168083526020808401888152848601889052600092835290829052939020825181546001600160a01b0319169216919091178155915190919060018201906115f79082612350565b506040820151600282019061160c9082612350565b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03871690811790915560405190915033907fec82a4a358c202e0580890ad5ae52df93af69e508cbbd07e2766ab1e2fd4d3df9061169490879087908790612410565b60405180910390a350505050565b60006000805160206125168339815191526116bd848461106e565b1561171e576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061089a565b600091505061089a565b60005b8254811015610b8f57816001600160a01b0316838281548110611750576117506122b0565b6000918252602090912001546001600160a01b03160361181f578254839061177a90600190612449565b8154811061178a5761178a6122b0565b9060005260206000200160009054906101000a90046001600160a01b03168382815481106117ba576117ba6122b0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806117f8576117f861246a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b60010161172b565b6118318133611bb2565b50565b600060008051602061251683398151915261184f848461106e565b61171e576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118853390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061089a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061195657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661194a6000805160206124d6833981519152546001600160a01b031690565b6001600160a01b031614155b156115315760405163703e46dd60e11b815260040160405180910390fd5b6000610baf81611827565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612480565b60015b611a0157604051634c9c8ce360e01b81526001600160a01b038316600482015260240161091d565b6000805160206124d68339815191528114611a3257604051632a87526960e21b81526004810182905260240161091d565b610b8f8383611beb565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115315760405163703e46dd60e11b815260040160405180910390fd5b60005b8254811015611ad457816001600160a01b0316838281548110611aad57611aad6122b0565b6000918252602090912001546001600160a01b031603611acc57505050565b600101611a88565b5081546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b03909216919091179055565b611b11611500565b600080516020612536833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b611b74611c41565b600080516020612536833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611b4e565b611bbc828261106e565b610baf5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161091d565b611bf482611c71565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611c3957610b8f8282611cd6565b610baf611d4c565b6000805160206125368339815191525460ff1661153157604051638dfc202b60e01b815260040160405180910390fd5b806001600160a01b03163b600003611ca757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161091d565b6000805160206124d683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611cf39190612499565b600060405180830381855af49150503d8060008114611d2e576040519150601f19603f3d011682016040523d82523d6000602084013e611d33565b606091505b5091509150611d43858383611d6b565b95945050505050565b34156115315760405163b398979f60e01b815260040160405180910390fd5b606082611d8057611d7b82611dca565b611dc3565b8151158015611d9757506001600160a01b0384163b155b15611dc057604051639996b31560e01b81526001600160a01b038516600482015260240161091d565b50805b9392505050565b805115611dda5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b600060208284031215611e0557600080fd5b81356001600160e01b031981168114611dc357600080fd5b80356001600160a01b0381168114611e3457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611e6a57611e6a611e39565b604051601f8501601f19908116603f01168101908282118183101715611e9257611e92611e39565b81604052809350858152868686011115611eab57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611ed657600080fd5b611dc383833560208501611e4f565b60008060008060808587031215611efb57600080fd5b611f0485611e1d565b9350602085013567ffffffffffffffff80821115611f2157600080fd5b611f2d88838901611ec5565b94506040870135915080821115611f4357600080fd5b611f4f88838901611ec5565b93506060870135915080821115611f6557600080fd5b50611f7287828801611ec5565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015611fbf5783516001600160a01b031683529284019291840191600101611f9a565b50909695505050505050565b60008060408385031215611fde57600080fd5b611fe783611e1d565b9150602083013567ffffffffffffffff81111561200357600080fd5b61200f85828601611ec5565b9150509250929050565b60006020828403121561202b57600080fd5b5035919050565b6000806040838503121561204557600080fd5b8235915061205560208401611e1d565b90509250929050565b60006020828403121561207057600080fd5b611dc382611e1d565b6000806040838503121561208c57600080fd5b61209583611e1d565b9150602083013567ffffffffffffffff8111156120b157600080fd5b8301601f810185136120c257600080fd5b61200f85823560208401611e4f565b6000602082840312156120e357600080fd5b813567ffffffffffffffff8111156120fa57600080fd5b61210684828501611ec5565b949350505050565b60005b83811015612129578181015183820152602001612111565b50506000910152565b6000815180845261214a81602086016020860161210e565b601f01601f19169290920160200192915050565b6001600160a01b038416815260606020820181905260009061218290830185612132565b82810360408401526121948185612132565b9695505050505050565b602081526000611dc36020830184612132565b600080600080600060a086880312156121c957600080fd5b6121d286611e1d565b94506121e060208701611e1d565b9350604086013567ffffffffffffffff808211156121fd57600080fd5b61220989838a01611ec5565b9450606088013591508082111561221f57600080fd5b61222b89838a01611ec5565b9350608088013591508082111561224157600080fd5b5061224e88828901611ec5565b9150509295509295909350565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806122da57607f821691505b6020821081036122fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b8f576000816000526020600020601f850160051c810160208610156123295750805b601f850160051c820191505b8181101561234857828155600101612335565b505050505050565b815167ffffffffffffffff81111561236a5761236a611e39565b61237e8161237884546122c6565b84612300565b602080601f8311600181146123b3576000841561239b5750858301515b600019600386901b1c1916600185901b178555612348565b600085815260208120601f198616915b828110156123e2578886015182559484019460019091019084016123c3565b50858210156124005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006124236060830186612132565b82810360208401526124358186612132565b905082810360408401526121948185612132565b8181038181111561089a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561249257600080fd5b5051919050565b600082516124ab81846020870161210e565b919091019291505056fe0a865fb3417fc4a7d7373d42317aff592f595a0093d7332ffae098db733cd11b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5246556c0ab216b5b325ad7c539bfbd1a07c768773cdf810fecd3c3375c2740702dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033000364bafb595aebf30e64edfca374c8e6e68a01fdc0bab55d3d02600374a378cba264697066735822122082858869d5afb1ec8b6456b51167b4198d15ab64193c6f5be2762887c5178a1c64736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoinFactory\",\n \"sourceName\": \"contracts/platform/StableCoinFactory.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldBeacon\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newBeacon\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BeaconSet\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"StableCoinCreated\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"beacon\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"createStableCoin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_platform\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_beacon\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"platform\",\n \"outputs\": [\n {\n \"internalType\": \"contract IsometryPlatform\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_beacon\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"setBeacon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610fb8806100df6000396000f3fe60806040523480156200001157600080fd5b50600436106200005e5760003560e01c8063098536c914620000635780631b0132fc1462000096578063485cc95514620000af5780634bde38c814620000c657806359659e9014620000da575b600080fd5b6200007a62000074366004620006ec565b620000ee565b6040516001600160a01b03909116815260200160405180910390f35b620000ad620000a73660046200079b565b62000309565b005b620000ad620000c0366004620007ef565b62000468565b6000546200007a906001600160a01b031681565b6001546200007a906001600160a01b031681565b60008054604051631fadd2ff60e21b81523360048201526001600160a01b0390911690637eb74bfc90602401602060405180830381865afa15801562000138573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015e919062000827565b620001a65760405162461bcd60e51b81526020600482015260136024820152722737ba1030b8383937bb32b21034b9b9bab2b960691b60448201526064015b60405180910390fd5b6000848433604051602401620001bf939291906200089a565b60408051601f198184030181529181526020820180516001600160e01b03166303bf912560e11b17905260015490519192506000916001600160a01b039091169083906200020d9062000633565b6200021a929190620008dc565b604051809103906000f08015801562000237573d6000803e3d6000fd5b50600054604051630c48da2d60e01b81529192506001600160a01b031690630c48da2d90620002719084908a908a908a906004016200090a565b600060405180830381600087803b1580156200028c57600080fd5b505af1158015620002a1573d6000803e3d6000fd5b50505050336001600160a01b0316816001600160a01b0316336001600160a01b03167ffa647b50a7cf0b005f2303f5f0ddbbecba9894502a17ee7c6dd37e8d229e303f898989604051620002f89392919062000965565b60405180910390a495945050505050565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6000546040516317aa5fb760e11b81523360048201526001600160a01b0390911690632f54bf6e90602401602060405180830381865afa15801562000399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bf919062000827565b620004025760405162461bcd60e51b81526020600482015260126024820152712737ba10383630ba3337b9369037bbb732b960711b60448201526064016200019d565b600180546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907ffa7c8f8714320b76f47d87fecf2bccb6d900fa65371f92772adb217b8bbb6f8c906200045b908790620009ae565b60405180910390a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015620004af5750825b905060008267ffffffffffffffff166001148015620004cd5750303b155b905081158015620004dc575080155b15620004fb5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156200052657845460ff60401b1916600160401b1785555b6001600160a01b0387166200056d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6001600160a01b038616620005b35760405162461bcd60e51b815260206004820152600b60248201526a2d32b937903132b0b1b7b760a91b60448201526064016200019d565b600080546001600160a01b03808a166001600160a01b031992831617909255600180549289169290911691909117905583156200062a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6105bf80620009c483390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200066957600080fd5b813567ffffffffffffffff8082111562000687576200068762000641565b604051601f8301601f19908116603f01168101908282118183101715620006b257620006b262000641565b81604052838152866020858801011115620006cc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200070257600080fd5b833567ffffffffffffffff808211156200071b57600080fd5b620007298783880162000657565b945060208601359150808211156200074057600080fd5b6200074e8783880162000657565b935060408601359150808211156200076557600080fd5b50620007748682870162000657565b9150509250925092565b80356001600160a01b03811681146200079657600080fd5b919050565b60008060408385031215620007af57600080fd5b620007ba836200077e565b9150602083013567ffffffffffffffff811115620007d757600080fd5b620007e58582860162000657565b9150509250929050565b600080604083850312156200080357600080fd5b6200080e836200077e565b91506200081e602084016200077e565b90509250929050565b6000602082840312156200083a57600080fd5b815180151581146200084b57600080fd5b9392505050565b6000815180845260005b818110156200087a576020818501810151868301820152016200085c565b506000602082860101526020601f19601f83011685010191505092915050565b606081526000620008af606083018662000852565b8281036020840152620008c3818662000852565b91505060018060a01b0383166040830152949350505050565b6001600160a01b0383168152604060208201819052600090620009029083018462000852565b949350505050565b6001600160a01b0385168152608060208201819052600090620009309083018662000852565b828103604084015262000944818662000852565b905082810360608401526200095a818562000852565b979650505050505050565b6060815260006200097a606083018662000852565b82810360208401526200098e818662000852565b90508281036040840152620009a4818562000852565b9695505050505050565b6020815260006200084b60208301846200085256fe60a06040526040516105bf3803806105bf83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101276104986000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220f10d2777754d2e8a1a5e045964e727ef3eaeecc804aad22a40233e60583a84a764736f6c63430008160033a2646970667358221220df9c6e53a6ab93efece86685164d82a115df8eb46cd1c91c9c6a4203ec774a6864736f6c63430008160033\",\n \"deployedBytecode\": \"0x60806040523480156200001157600080fd5b50600436106200005e5760003560e01c8063098536c914620000635780631b0132fc1462000096578063485cc95514620000af5780634bde38c814620000c657806359659e9014620000da575b600080fd5b6200007a62000074366004620006ec565b620000ee565b6040516001600160a01b03909116815260200160405180910390f35b620000ad620000a73660046200079b565b62000309565b005b620000ad620000c0366004620007ef565b62000468565b6000546200007a906001600160a01b031681565b6001546200007a906001600160a01b031681565b60008054604051631fadd2ff60e21b81523360048201526001600160a01b0390911690637eb74bfc90602401602060405180830381865afa15801562000138573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015e919062000827565b620001a65760405162461bcd60e51b81526020600482015260136024820152722737ba1030b8383937bb32b21034b9b9bab2b960691b60448201526064015b60405180910390fd5b6000848433604051602401620001bf939291906200089a565b60408051601f198184030181529181526020820180516001600160e01b03166303bf912560e11b17905260015490519192506000916001600160a01b039091169083906200020d9062000633565b6200021a929190620008dc565b604051809103906000f08015801562000237573d6000803e3d6000fd5b50600054604051630c48da2d60e01b81529192506001600160a01b031690630c48da2d90620002719084908a908a908a906004016200090a565b600060405180830381600087803b1580156200028c57600080fd5b505af1158015620002a1573d6000803e3d6000fd5b50505050336001600160a01b0316816001600160a01b0316336001600160a01b03167ffa647b50a7cf0b005f2303f5f0ddbbecba9894502a17ee7c6dd37e8d229e303f898989604051620002f89392919062000965565b60405180910390a495945050505050565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6000546040516317aa5fb760e11b81523360048201526001600160a01b0390911690632f54bf6e90602401602060405180830381865afa15801562000399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bf919062000827565b620004025760405162461bcd60e51b81526020600482015260126024820152712737ba10383630ba3337b9369037bbb732b960711b60448201526064016200019d565b600180546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907ffa7c8f8714320b76f47d87fecf2bccb6d900fa65371f92772adb217b8bbb6f8c906200045b908790620009ae565b60405180910390a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015620004af5750825b905060008267ffffffffffffffff166001148015620004cd5750303b155b905081158015620004dc575080155b15620004fb5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156200052657845460ff60401b1916600160401b1785555b6001600160a01b0387166200056d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6001600160a01b038616620005b35760405162461bcd60e51b815260206004820152600b60248201526a2d32b937903132b0b1b7b760a91b60448201526064016200019d565b600080546001600160a01b03808a166001600160a01b031992831617909255600180549289169290911691909117905583156200062a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6105bf80620009c483390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200066957600080fd5b813567ffffffffffffffff8082111562000687576200068762000641565b604051601f8301601f19908116603f01168101908282118183101715620006b257620006b262000641565b81604052838152866020858801011115620006cc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200070257600080fd5b833567ffffffffffffffff808211156200071b57600080fd5b620007298783880162000657565b945060208601359150808211156200074057600080fd5b6200074e8783880162000657565b935060408601359150808211156200076557600080fd5b50620007748682870162000657565b9150509250925092565b80356001600160a01b03811681146200079657600080fd5b919050565b60008060408385031215620007af57600080fd5b620007ba836200077e565b9150602083013567ffffffffffffffff811115620007d757600080fd5b620007e58582860162000657565b9150509250929050565b600080604083850312156200080357600080fd5b6200080e836200077e565b91506200081e602084016200077e565b90509250929050565b6000602082840312156200083a57600080fd5b815180151581146200084b57600080fd5b9392505050565b6000815180845260005b818110156200087a576020818501810151868301820152016200085c565b506000602082860101526020601f19601f83011685010191505092915050565b606081526000620008af606083018662000852565b8281036020840152620008c3818662000852565b91505060018060a01b0383166040830152949350505050565b6001600160a01b0383168152604060208201819052600090620009029083018462000852565b949350505050565b6001600160a01b0385168152608060208201819052600090620009309083018662000852565b828103604084015262000944818662000852565b905082810360608401526200095a818562000852565b979650505050505050565b6060815260006200097a606083018662000852565b82810360208401526200098e818662000852565b90508281036040840152620009a4818562000852565b9695505050505050565b6020815260006200084b60208301846200085256fe60a06040526040516105bf3803806105bf83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101276104986000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220f10d2777754d2e8a1a5e045964e727ef3eaeecc804aad22a40233e60583a84a764736f6c63430008160033a2646970667358221220df9c6e53a6ab93efece86685164d82a115df8eb46cd1c91c9c6a4203ec774a6864736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoin\",\n \"sourceName\": \"contracts/token/StableCoin.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"AccessControlBadConfirmation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"neededRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967NonPayable\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientAllowance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientBalance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"approver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidApprover\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidReceiver\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSpender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"EnforcedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExpectedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FailedCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"UUPSUnauthorizedCallContext\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"slot\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"UUPSUnsupportedProxiableUUID\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"newAllowance\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AllowanceUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BlacklistManagerAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BlacklistManagerRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Blacklisted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Burn\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterMinterAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterMinterRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterStatusAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterStatusRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Mint\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MinterAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MinterRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PausedByOwner\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"UnBlacklisted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"UnpausedByOwner\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"BLACKLIST_MANAGER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MASTER_MINTER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MASTER_STATUS_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MINTER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TOKEN_OWNER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"UPGRADE_INTERFACE_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addBlacklistManager\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMasterMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMasterStatus\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"blacklist\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"blacklistList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"blacklistManagerList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"blacklisted\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"burn\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllBlacklist\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllBlacklistManagers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMasterMinters\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMasterStatus\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMinterItems\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"minted\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"remaining\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct StableCoin.MinterItem[]\",\n \"name\": \"\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMinters\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getBlacklistCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBlacklistManager\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getBlacklistManagerCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBlacklistUser\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMasterMinter\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMasterMinterCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMasterStatus\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMasterStatusCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMinter\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMinterCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getMinterInfo\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"minted\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"remaining\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"holdersTotal\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"_name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isBlacklistManager\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isBlacklisted\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"masterMinterList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"masterStatusList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"minterAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"minterList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"minterMinted\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"proxiableUUID\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeBlacklistManager\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMasterMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMasterStatus\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"callerConfirmation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"newAllowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"setMinterAllowance\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalBurned\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalMinted\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unBlacklist\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161402c62000104600039600081816129b8015281816129e10152612c78015261402c6000f3fe60806040526004361061041a5760003560e01c80638a1851131161021e578063c847056911610123578063ddf579ff116100ab578063f1c5faae1161007a578063f1c5faae14610c89578063f5f167e514610ca9578063f864aa4714610cbe578063fe17fbd114610cde578063fe575a8714610cfe57600080fd5b8063ddf579ff14610bf9578063e79faa5814610c19578063e860cb8f14610c39578063f09b220314610c4e57600080fd5b8063d5391393116100f2578063d539139314610b51578063d547741f14610b73578063d89135cd14610b93578063dbac26e914610ba9578063dd62ed3e14610bd957600080fd5b8063c847056914610ada578063cb52a88b14610afc578063cc821f0d14610b11578063d3fc986414610b3157600080fd5b8063a217fddf116101a6578063a9059cbb11610175578063a9059cbb14610a34578063ad3cb1cc14610a54578063b135824a14610a85578063ba6256a814610a9a578063c780f66314610aba57600080fd5b8063a217fddf146109bc578063a2309ff8146109d1578063a40fa11b146109e7578063a6d55d0814610a1457600080fd5b806391a64e5f116101ed57806391a64e5f1461093a57806391d148541461095c57806395d89b411461097c578063a045442c14610991578063a15ea064146109a657600080fd5b80638a185113146108b65780638a6db9c3146108d85780638cd9317d146109055780638dbb94eb1461092557600080fd5b8063313ce567116103245780635407a7cb116102ac578063650e448a1161027b578063650e448a146108215780636da663551461083657806370a08231146108565780637641e6f3146108765780638090a6e01461089657600080fd5b80635407a7cb1461079c578063582f3eba146107bc5780635b7121f8146107dc5780635c975abb146107fc57600080fd5b8063410b2424116102f3578063410b2424146107125780634f1ef2861461073457806350ee165714610747578063523681861461076757806352d1902d1461078757600080fd5b8063313ce5671461069657806336568abe146106b257806339c5fe5b146106d25780633ac722eb146106f257600080fd5b806319fac5f9116103a757806326e3208d1161037657806326e3208d1461060b578063279ad7ab146106215780632b543ccc146106415780632ba5981f146106565780632f2ff15d1461067657600080fd5b806319fac5f9146105945780631a59a995146105b657806323b872dd146105cb578063248a9ca3146105eb57600080fd5b8063077f224a116103ee578063077f224a146104c8578063095ea7b3146104e85780630b71051114610508578063104e087f1461054057806318160ddd1461056057600080fd5b8062e04c841461041f57806301ffc9a71461044157806302f3cdb91461047657806306fdde03146104a6575b600080fd5b34801561042b57600080fd5b5061043f61043a366004613820565b610d37565b005b34801561044d57600080fd5b5061046161045c36600461386e565b610e0f565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b50610498600080516020613f9783398151915281565b60405190815260200161046d565b3480156104b257600080fd5b506104bb610e46565b60405161046d91906138e8565b3480156104d457600080fd5b5061043f6104e33660046138fb565b610f09565b3480156104f457600080fd5b5061046161050336600461396f565b611190565b34801561051457600080fd5b50610528610523366004613999565b6111ab565b6040516001600160a01b03909116815260200161046d565b34801561054c57600080fd5b5061052861055b366004613999565b611206565b34801561056c57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610498565b3480156105a057600080fd5b506105a961123d565b60405161046d91906139b2565b3480156105c257600080fd5b50600454610498565b3480156105d757600080fd5b506104616105e63660046139ff565b61129f565b3480156105f757600080fd5b50610498610606366004613999565b61131a565b34801561061757600080fd5b5061049860025481565b34801561062d57600080fd5b5061052861063c366004613999565b61133c565b34801561064d57600080fd5b506105a9611366565b34801561066257600080fd5b50610528610671366004613999565b6113c6565b34801561068257600080fd5b5061043f610691366004613a3b565b6113d6565b3480156106a257600080fd5b506040516012815260200161046d565b3480156106be57600080fd5b5061043f6106cd366004613a3b565b6113f8565b3480156106de57600080fd5b506104616106ed366004613a67565b611430565b3480156106fe57600080fd5b5061043f61070d366004613820565b61144a565b34801561071e57600080fd5b50610498600080516020613ef783398151915281565b61043f610742366004613a82565b61152e565b34801561075357600080fd5b5061043f610762366004613ada565b61154d565b34801561077357600080fd5b5061043f610782366004613820565b6116b2565b34801561079357600080fd5b506104986117b2565b3480156107a857600080fd5b506105286107b7366004613999565b6117cf565b3480156107c857600080fd5b506105286107d7366004613999565b6117df565b3480156107e857600080fd5b506105286107f7366004613999565b6117ef565b34801561080857600080fd5b50600080516020613fd78339815191525460ff16610461565b34801561082d57600080fd5b50600554610498565b34801561084257600080fd5b5061043f610851366004613b31565b611826565b34801561086257600080fd5b50610498610871366004613a67565b61188b565b34801561088257600080fd5b5061043f610891366004613b66565b6118b3565b3480156108a257600080fd5b5061043f6108b1366004613820565b611996565b3480156108c257600080fd5b50610498600080516020613f1783398151915281565b3480156108e457600080fd5b506104986108f3366004613a67565b60006020819052908152604090205481565b34801561091157600080fd5b5061043f610920366004613820565b611a39565b34801561093157600080fd5b50600354610498565b34801561094657600080fd5b50610498600080516020613f3783398151915281565b34801561096857600080fd5b50610461610977366004613a3b565b611b39565b34801561098857600080fd5b506104bb611b71565b34801561099d57600080fd5b506105a9611bb0565b3480156109b257600080fd5b5061049860095481565b3480156109c857600080fd5b50610498600081565b3480156109dd57600080fd5b50610498600a5481565b3480156109f357600080fd5b50610498610a02366004613a67565b60016020526000908152604090205481565b348015610a2057600080fd5b50610528610a2f366004613999565b611c10565b348015610a4057600080fd5b50610461610a4f36600461396f565b611c20565b348015610a6057600080fd5b506104bb604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610a9157600080fd5b506105a9611c89565b348015610aa657600080fd5b5061043f610ab5366004613ada565b611ce9565b348015610ac657600080fd5b5061043f610ad5366004613820565b611ddf565b348015610ae657600080fd5b50610aef611eb6565b60405161046d9190613b97565b348015610b0857600080fd5b506105a9611fe6565b348015610b1d57600080fd5b50610528610b2c366004613999565b612046565b348015610b3d57600080fd5b5061043f610b4c366004613ada565b61207d565b348015610b5d57600080fd5b50610498600080516020613f7783398151915281565b348015610b7f57600080fd5b5061043f610b8e366004613a3b565b61221c565b348015610b9f57600080fd5b50610498600b5481565b348015610bb557600080fd5b50610461610bc4366004613a67565b60066020526000908152604090205460ff1681565b348015610be557600080fd5b50610498610bf4366004613c04565b612238565b348015610c0557600080fd5b5061043f610c14366004613820565b612282565b348015610c2557600080fd5b5061043f610c34366004613b31565b6123b6565b348015610c4557600080fd5b50600754610498565b348015610c5a57600080fd5b50610c6e610c69366004613a67565b61240f565b6040805193845260208401929092529082015260600161046d565b348015610c9557600080fd5b5061043f610ca4366004613820565b612445565b348015610cb557600080fd5b50600854610498565b348015610cca57600080fd5b50610528610cd9366004613999565b612576565b348015610cea57600080fd5b5061043f610cf9366004613820565b6125ad565b348015610d0a57600080fd5b50610461610d19366004613a67565b6001600160a01b031660009081526006602052604090205460ff1690565b600080516020613f37833981519152610d4f8161262a565b6001600160a01b0383166000908152602081905260409020548015610d78576002805482900390555b6001600160a01b0384166000908152602081815260408083208390556001909152812055610db4600080516020613f7783398151915285612637565b50610dbe846126bd565b836001600160a01b0316336001600160a01b03167f46a3bcda1dc0aaf87b1ae498a00c06de1741168a4756a49b3371b9f5bfffbfff85604051610e0191906138e8565b60405180910390a350505050565b60006001600160e01b03198216637965db0b60e01b1480610e4057506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020613ed783398151915291610e8590613c2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb190613c2e565b8015610efe5780601f10610ed357610100808354040283529160200191610efe565b820191906000526020600020905b815481529060010190602001808311610ee157829003601f168201915b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f4f5750825b905060008267ffffffffffffffff166001148015610f6c5750303b155b905081158015610f7a575080155b15610f985760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610fc257845460ff60401b1916600160401b1785555b610fcc88886127ba565b610fd76000876127cc565b50610ff0600080516020613f17833981519152876127cc565b50611009600080516020613f37833981519152876127cc565b50611022600080516020613f77833981519152876127cc565b5061103b600080516020613ef7833981519152876127cc565b50611054600080516020613f97833981519152876127cc565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0389166001600160a01b03199182168117909255600480548085019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054821683179055600580548085019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180548216831790556008805493840181556000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39092018054909216179055831561118657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b600061119a612867565b6111a4838361289a565b9392505050565b60085460009082106111d85760405162461bcd60e51b81526004016111cf90613c68565b60405180910390fd5b600882815481106111eb576111eb613c95565b6000918252602090912001546001600160a01b031692915050565b600554600090821061122a5760405162461bcd60e51b81526004016111cf90613c68565b600582815481106111eb576111eb613c95565b6060600580548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611277575b5050505050905090565b60006112a9612867565b6001600160a01b03841660009081526006602052604090205460ff161580156112eb57506001600160a01b03831660009081526006602052604090205460ff16155b6113075760405162461bcd60e51b81526004016111cf90613cab565b6113128484846128b2565b949350505050565b6000908152600080516020613fb7833981519152602052604090206001015490565b6003818154811061134c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60606004805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6007818154811061134c57600080fd5b6113df8261131a565b6113e88161262a565b6113f283836127cc565b50505050565b6001600160a01b03811633146114215760405163334bd91960e11b815260040160405180910390fd5b61142b8282612637565b505050565b6000610e40600080516020613ef783398151915283611b39565b600080516020613f178339815191526114628161262a565b61147a600080516020613f9783398151915284611b39565b6114bc5760405162461bcd60e51b81526020600482015260136024820152724e6f742061206d61737465722073746174757360681b60448201526064016111cf565b6114d4600080516020613f9783398151915284612637565b506114de836128d6565b826001600160a01b0316336001600160a01b03167f51141af7edd82b81899f3a893000cb2e1c6f47358ca77dae02f1de844db3f0b68460405161152191906138e8565b60405180910390a3505050565b6115366129ad565b61153f82612a52565b6115498282612a6a565b5050565b600080516020613f378339815191526115658161262a565b6001600160a01b03841661158b5760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156115c45760405162461bcd60e51b81526004016111cf90613cab565b60006115de600080516020613f7783398151915286611b39565b1590508015611616576115ff600080516020613f77833981519152866127cc565b5061160985612b27565b6002805485019055611654565b6001600160a01b038516600090815260208190526040902054808511156116465760028054828703019055611652565b60028054868303900390555b505b6001600160a01b038516600081815260208190526040908190208690555133907f127e8015e3ed084165ebcfb6636e0347c3b088218d00989d964c69e434105e5f906116a39088908890613cf6565b60405180910390a35050505050565b600080516020613f178339815191526116ca8161262a565b6001600160a01b0383166116f05760405162461bcd60e51b81526004016111cf90613cd0565b611708600080516020613f9783398151915284611b39565b1561174d5760405162461bcd60e51b8152602060048201526015602482015274416c7265616479206d61737465722073746174757360581b60448201526064016111cf565b611765600080516020613f97833981519152846127cc565b5061176f83612bca565b826001600160a01b0316336001600160a01b03167fd4fd8a370d3fbfae728fd173b1afaeda261c2f6b541ea3a5ec62fa787ab8c7468460405161152191906138e8565b60006117bc612c6d565b50600080516020613f5783398151915290565b6004818154811061134c57600080fd5b6008818154811061134c57600080fd5b60035460009082106118135760405162461bcd60e51b81526004016111cf90613c68565b600382815481106111eb576111eb613c95565b600080516020613f9783398151915261183e8161262a565b611846612cb6565b336001600160a01b03167fa0e83b3d54befde8bdbd53ba97df1aca1fd54ffe2cf64e134912105cfffcaed08360405161187f91906138e8565b60405180910390a25050565b6001600160a01b03166000908152600080516020613ed7833981519152602052604090205490565b600080516020613f778339815191526118cb8161262a565b6118d3612867565b33301461190a573360009081526006602052604090205460ff161561190a5760405162461bcd60e51b81526004016111cf90613cab565b60006119153361188b565b905083600b60008282546119299190613d25565b9091555061193990503385612d19565b6119438482613d38565b600003611960576009805490600061195a83613d4b565b91905055505b604051339081907feab88a0b2198f2928ade5fb787115a9a6ffbbf3705277143953a7c26769157ff90610e019088908890613cf6565b600080516020613f178339815191526119ae8161262a565b6001600160a01b0383166119d45760405162461bcd60e51b81526004016111cf90613cd0565b6119ec600080516020613ef7833981519152846127cc565b506119f683612d4f565b826001600160a01b0316336001600160a01b03167fa9d7450555f9f903f431808251e9b529e0e5dfcc06f78669e335aa3247bed7868460405161152191906138e8565b600080516020613f17833981519152611a518161262a565b6001600160a01b038316611a775760405162461bcd60e51b81526004016111cf90613cd0565b611a8f600080516020613f3783398151915284611b39565b15611ad45760405162461bcd60e51b815260206004820152601560248201527420b63932b0b23c9036b0b9ba32b91036b4b73a32b960591b60448201526064016111cf565b611aec600080516020613f37833981519152846127cc565b50611af683612df2565b826001600160a01b0316336001600160a01b03167f3ab206680c8c27d75c62054a01ac77c5873e81ffe65c180fdb58d971b96d34388460405161152191906138e8565b6000918252600080516020613fb7833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020613ed783398151915291610e8590613c2e565b60606003805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6005818154811061134c57600080fd5b6000611c2a612867565b3360009081526006602052604090205460ff16158015611c6357506001600160a01b03831660009081526006602052604090205460ff16155b611c7f5760405162461bcd60e51b81526004016111cf90613cab565b6111a48383612e95565b60606008805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600080516020613f37833981519152611d018161262a565b611d19600080516020613f7783398151915285611b39565b611d545760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064016111cf565b6001600160a01b03841660009081526020819052604090205480841115611d845760028054828603019055611d90565b60028054858303900390555b6001600160a01b038516600081815260208190526040908190208690555133907f2780d98c888fdc59ac7c8628a0bf62a14752d79fbeb234e1f0c76c9b6ce6f542906116a39088908890613cf6565b600080516020613f17833981519152611df78161262a565b611e0f600080516020613f3783398151915284611b39565b611e515760405162461bcd60e51b81526020600482015260136024820152722737ba10309036b0b9ba32b91036b4b73a32b960691b60448201526064016111cf565b611e69600080516020613f3783398151915284612637565b50611e7383612ea3565b826001600160a01b0316336001600160a01b03167f60763ff2f9b370bde86d1d96810ad6ab33c839c6e79c45227314714a3f2686298460405161152191906138e8565b60035460609060008167ffffffffffffffff811115611ed757611ed7613774565b604051908082528060200260200182016040528015611f3c57816020015b611f29604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b815260200190600190039081611ef55790505b50905060005b82811015611fdf57600060038281548110611f5f57611f5f613c95565b60009182526020808320909101546001600160a01b031680835282825260408084205460018452938190205481516080810183528381529384018590529083018190529093509060608101611fb48385613d38565b815250858581518110611fc957611fc9613c95565b6020908102919091010152505050600101611f42565b5092915050565b60606007805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600754600090821061206a5760405162461bcd60e51b81526004016111cf90613c68565b600782815481106111eb576111eb613c95565b600080516020613f778339815191526120958161262a565b61209d612867565b6001600160a01b0384166120c35760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156120fc5760405162461bcd60e51b81526004016111cf90613cab565b3360009081526020818152604080832054600190925290912054612121908590613d25565b11156121645760405162461bcd60e51b8152602060048201526012602482015271105b1b1bddd85b98d948195e18d95959195960721b60448201526064016111cf565b3360009081526001602052604081208054859290612183908490613d25565b9250508190555082600a600082825461219c9190613d25565b90915550600090506121ad8561188b565b90506121b98585612f7a565b806000036121d757600980549060006121d183613d62565b91905055505b846001600160a01b0316336001600160a01b03167f0a379200ca4d32ac7f1351005f51ef6d49dae15616e15e868f304fc5469e6d0a86866040516116a3929190613cf6565b6122258261131a565b61222e8161262a565b6113f28383612637565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b600080516020613ef783398151915261229a8161262a565b6001600160a01b0383166122c05760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03831660009081526006602052604090205460ff161561231f5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48189b1858dadb1a5cdd1959606a1b60448201526064016111cf565b6001600160a01b038316600081815260066020526040808220805460ff191660019081179091556007805491820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916831790555133907f41758605cde3a25b22ccad82f1492c23842cbf7039dc5984bbe579d1b8293556906115219086906138e8565b600080516020613f978339815191526123ce8161262a565b6123d6612fb0565b336001600160a01b03167f85b554d52672b7715dcfb02957fc048d23758df2ff9f9946236523fffd0d2e8f8360405161187f91906138e8565b6001600160a01b038116600090815260208181526040808320546001909252822054909161243d8284613d38565b929491935050565b6001600160a01b03821660009081526006602052604090205460ff1661249f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08189b1858dadb1a5cdd1959608a1b60448201526064016111cf565b6124b7600080516020613ef783398151915233611b39565b806124c157503033145b6124fe5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016111cf565b6001600160a01b0382166000908152600660205260409020805460ff1916905561252782612ff6565b816001600160a01b0316336001600160a01b03167fc58878141048f74383ecb83bd329e1a7329a1270e6e1edcaf6d3f8cfa893049c8360405161256a91906138e8565b60405180910390a35050565b600454600090821061259a5760405162461bcd60e51b81526004016111cf90613c68565b600482815481106111eb576111eb613c95565b600080516020613f178339815191526125c58161262a565b6125dd600080516020613ef783398151915284612637565b506125e7836130cd565b826001600160a01b0316336001600160a01b03167fddb0e0cb0c3574277c61848220221fdba7fec4d9a9677e8de5f605412ec11b8c8460405161152191906138e8565b61263481336131a4565b50565b6000600080516020613fb78339815191526126528484611b39565b156126b3576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610e40565b6000915050610e40565b60005b60035481101561154957816001600160a01b0316600382815481106126e7576126e7613c95565b6000918252602090912001546001600160a01b0316036127b2576003805461271190600190613d38565b8154811061272157612721613c95565b600091825260209091200154600380546001600160a01b03909216918390811061274d5761274d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600380548061278c5761278c613d7b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b6001016126c0565b6127c26131dd565b6115498282613226565b6000600080516020613fb78339815191526127e78484611b39565b6126b3576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561281d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610e40565b600080516020613fd78339815191525460ff16156128985760405163d93c066560e01b815260040160405180910390fd5b565b6000336128a8818585613277565b5060019392505050565b6000336128c0858285613284565b6128cb8585856132e5565b506001949350505050565b60005b60055481101561154957816001600160a01b03166005828154811061290057612900613c95565b6000918252602090912001546001600160a01b0316036129a5576005805461292a90600190613d38565b8154811061293a5761293a613c95565b600091825260209091200154600580546001600160a01b03909216918390811061296657612966613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061278c5761278c613d7b565b6001016128d9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612a3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612a28600080516020613f57833981519152546001600160a01b031690565b6001600160a01b031614155b156128985760405163703e46dd60e11b815260040160405180910390fd5b600080516020613f178339815191526115498161262a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ac4575060408051601f3d908101601f19168201909252612ac191810190613d91565b60015b612aec57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111cf565b600080516020613f578339815191528114612b1d57604051632a87526960e21b8152600481018290526024016111cf565b61142b8383613344565b60005b600354811015612b7757816001600160a01b031660038281548110612b5157612b51613c95565b6000918252602090912001546001600160a01b031603612b6f575050565b600101612b2a565b50600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600554811015612c1a57816001600160a01b031660058281548110612bf457612bf4613c95565b6000918252602090912001546001600160a01b031603612c12575050565b600101612bcd565b50600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0392909216919091179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146128985760405163703e46dd60e11b815260040160405180910390fd5b612cbe612867565b600080516020613fd7833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b038216612d4357604051634b637e8f60e11b8152600060048201526024016111cf565b6115498260008361339a565b60005b600854811015612d9f57816001600160a01b031660088281548110612d7957612d79613c95565b6000918252602090912001546001600160a01b031603612d97575050565b600101612d52565b50600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600454811015612e4257816001600160a01b031660048281548110612e1c57612e1c613c95565b6000918252602090912001546001600160a01b031603612e3a575050565b600101612df5565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336128a88185856132e5565b60005b60045481101561154957816001600160a01b031660048281548110612ecd57612ecd613c95565b6000918252602090912001546001600160a01b031603612f725760048054612ef790600190613d38565b81548110612f0757612f07613c95565b600091825260209091200154600480546001600160a01b039092169183908110612f3357612f33613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600480548061278c5761278c613d7b565b600101612ea6565b6001600160a01b038216612fa45760405163ec442f0560e01b8152600060048201526024016111cf565b6115496000838361339a565b612fb86134ca565b600080516020613fd7833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612cfb565b60005b60075481101561154957816001600160a01b03166007828154811061302057613020613c95565b6000918252602090912001546001600160a01b0316036130c5576007805461304a90600190613d38565b8154811061305a5761305a613c95565b600091825260209091200154600780546001600160a01b03909216918390811061308657613086613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600780548061278c5761278c613d7b565b600101612ff9565b60005b60085481101561154957816001600160a01b0316600882815481106130f7576130f7613c95565b6000918252602090912001546001600160a01b03160361319c576008805461312190600190613d38565b8154811061313157613131613c95565b600091825260209091200154600880546001600160a01b03909216918390811061315d5761315d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600880548061278c5761278c613d7b565b6001016130d0565b6131ae8282611b39565b6115495760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661289857604051631afcd79f60e31b815260040160405180910390fd5b61322e6131dd565b600080516020613ed78339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036132688482613dfa565b50600481016113f28382613dfa565b61142b83838360016134fa565b60006132908484612238565b90506000198110156113f257818110156132d657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016111cf565b6113f2848484840360006134fa565b6001600160a01b03831661330f57604051634b637e8f60e11b8152600060048201526024016111cf565b6001600160a01b0382166133395760405163ec442f0560e01b8152600060048201526024016111cf565b61142b83838361339a565b61334d826135d9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156133925761142b828261363e565b6115496136b4565b600080516020613ed78339815191526001600160a01b0384166133d657818160020160008282546133cb9190613d25565b909155506134489050565b6001600160a01b038416600090815260208290526040902054828110156134295760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016111cf565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316613466576002810180548390039055613485565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0191815260200190565b600080516020613fd78339815191525460ff1661289857604051638dfc202b60e01b815260040160405180910390fd5b600080516020613ed78339815191526001600160a01b0385166135335760405163e602df0560e01b8152600060048201526024016111cf565b6001600160a01b03841661355d57604051634a1406b160e11b8152600060048201526024016111cf565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156135d257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516116a391815260200190565b5050505050565b806001600160a01b03163b60000361360f57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111cf565b600080516020613f5783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161365b9190613eba565b600060405180830381855af49150503d8060008114613696576040519150601f19603f3d011682016040523d82523d6000602084013e61369b565b606091505b50915091506136ab8583836136d3565b95945050505050565b34156128985760405163b398979f60e01b815260040160405180910390fd5b6060826136e8576136e38261372f565b6111a4565b81511580156136ff57506001600160a01b0384163b155b1561372857604051639996b31560e01b81526001600160a01b03851660048201526024016111cf565b50806111a4565b80511561373f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b038116811461376f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156137a5576137a5613774565b604051601f8501601f19908116603f011681019082821181831017156137cd576137cd613774565b816040528093508581528686860111156137e657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261381157600080fd5b6111a48383356020850161378a565b6000806040838503121561383357600080fd5b61383c83613758565b9150602083013567ffffffffffffffff81111561385857600080fd5b61386485828601613800565b9150509250929050565b60006020828403121561388057600080fd5b81356001600160e01b0319811681146111a457600080fd5b60005b838110156138b357818101518382015260200161389b565b50506000910152565b600081518084526138d4816020860160208601613898565b601f01601f19169290920160200192915050565b6020815260006111a460208301846138bc565b60008060006060848603121561391057600080fd5b833567ffffffffffffffff8082111561392857600080fd5b61393487838801613800565b9450602086013591508082111561394a57600080fd5b5061395786828701613800565b92505061396660408501613758565b90509250925092565b6000806040838503121561398257600080fd5b61398b83613758565b946020939093013593505050565b6000602082840312156139ab57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156139f35783516001600160a01b0316835292840192918401916001016139ce565b50909695505050505050565b600080600060608486031215613a1457600080fd5b613a1d84613758565b9250613a2b60208501613758565b9150604084013590509250925092565b60008060408385031215613a4e57600080fd5b82359150613a5e60208401613758565b90509250929050565b600060208284031215613a7957600080fd5b6111a482613758565b60008060408385031215613a9557600080fd5b613a9e83613758565b9150602083013567ffffffffffffffff811115613aba57600080fd5b8301601f81018513613acb57600080fd5b6138648582356020840161378a565b600080600060608486031215613aef57600080fd5b613af884613758565b925060208401359150604084013567ffffffffffffffff811115613b1b57600080fd5b613b2786828701613800565b9150509250925092565b600060208284031215613b4357600080fd5b813567ffffffffffffffff811115613b5a57600080fd5b61131284828501613800565b60008060408385031215613b7957600080fd5b82359150602083013567ffffffffffffffff81111561385857600080fd5b602080825282518282018190526000919060409081850190868401855b82811015613bf757815180516001600160a01b03168552868101518786015285810151868601526060908101519085015260809093019290850190600101613bb4565b5091979650505050505050565b60008060408385031215613c1757600080fd5b613c2083613758565b9150613a5e60208401613758565b600181811c90821680613c4257607f821691505b602082108103613c6257634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252600b908201526a109b1858dadb1a5cdd195960aa1b604082015260600190565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b82815260406020820152600061131260408301846138bc565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e4057610e40613d0f565b81810381811115610e4057610e40613d0f565b600081613d5a57613d5a613d0f565b506000190190565b600060018201613d7457613d74613d0f565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613da357600080fd5b5051919050565b601f82111561142b576000816000526020600020601f850160051c81016020861015613dd35750805b601f850160051c820191505b81811015613df257828155600101613ddf565b505050505050565b815167ffffffffffffffff811115613e1457613e14613774565b613e2881613e228454613c2e565b84613daa565b602080601f831160018114613e5d5760008415613e455750858301515b600019600386901b1c1916600185901b178555613df2565b600085815260208120601f198616915b82811015613e8c57888601518255948401946001909101908401613e6d565b5085821015613eaa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613ecc818460208701613898565b919091019291505056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00f988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee35369b3a7bb98c90641a907c2fd643ea781341eba72ccffd47cb018c128c48c34d722a319ebda03eb1179096607e87f360b089b3919a0d764a65ea950521a6c9360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a625e2241f7c713e379444aaa3c5b4960dee82d8c1d72b62fa8c250e46c60358b902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a26469706673582212208a6d1ae7c0d53df043a3876944cd272d6e303dee6ba36c39744d2d45b6f572f564736f6c63430008160033\",\n \"deployedBytecode\": \"0x60806040526004361061041a5760003560e01c80638a1851131161021e578063c847056911610123578063ddf579ff116100ab578063f1c5faae1161007a578063f1c5faae14610c89578063f5f167e514610ca9578063f864aa4714610cbe578063fe17fbd114610cde578063fe575a8714610cfe57600080fd5b8063ddf579ff14610bf9578063e79faa5814610c19578063e860cb8f14610c39578063f09b220314610c4e57600080fd5b8063d5391393116100f2578063d539139314610b51578063d547741f14610b73578063d89135cd14610b93578063dbac26e914610ba9578063dd62ed3e14610bd957600080fd5b8063c847056914610ada578063cb52a88b14610afc578063cc821f0d14610b11578063d3fc986414610b3157600080fd5b8063a217fddf116101a6578063a9059cbb11610175578063a9059cbb14610a34578063ad3cb1cc14610a54578063b135824a14610a85578063ba6256a814610a9a578063c780f66314610aba57600080fd5b8063a217fddf146109bc578063a2309ff8146109d1578063a40fa11b146109e7578063a6d55d0814610a1457600080fd5b806391a64e5f116101ed57806391a64e5f1461093a57806391d148541461095c57806395d89b411461097c578063a045442c14610991578063a15ea064146109a657600080fd5b80638a185113146108b65780638a6db9c3146108d85780638cd9317d146109055780638dbb94eb1461092557600080fd5b8063313ce567116103245780635407a7cb116102ac578063650e448a1161027b578063650e448a146108215780636da663551461083657806370a08231146108565780637641e6f3146108765780638090a6e01461089657600080fd5b80635407a7cb1461079c578063582f3eba146107bc5780635b7121f8146107dc5780635c975abb146107fc57600080fd5b8063410b2424116102f3578063410b2424146107125780634f1ef2861461073457806350ee165714610747578063523681861461076757806352d1902d1461078757600080fd5b8063313ce5671461069657806336568abe146106b257806339c5fe5b146106d25780633ac722eb146106f257600080fd5b806319fac5f9116103a757806326e3208d1161037657806326e3208d1461060b578063279ad7ab146106215780632b543ccc146106415780632ba5981f146106565780632f2ff15d1461067657600080fd5b806319fac5f9146105945780631a59a995146105b657806323b872dd146105cb578063248a9ca3146105eb57600080fd5b8063077f224a116103ee578063077f224a146104c8578063095ea7b3146104e85780630b71051114610508578063104e087f1461054057806318160ddd1461056057600080fd5b8062e04c841461041f57806301ffc9a71461044157806302f3cdb91461047657806306fdde03146104a6575b600080fd5b34801561042b57600080fd5b5061043f61043a366004613820565b610d37565b005b34801561044d57600080fd5b5061046161045c36600461386e565b610e0f565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b50610498600080516020613f9783398151915281565b60405190815260200161046d565b3480156104b257600080fd5b506104bb610e46565b60405161046d91906138e8565b3480156104d457600080fd5b5061043f6104e33660046138fb565b610f09565b3480156104f457600080fd5b5061046161050336600461396f565b611190565b34801561051457600080fd5b50610528610523366004613999565b6111ab565b6040516001600160a01b03909116815260200161046d565b34801561054c57600080fd5b5061052861055b366004613999565b611206565b34801561056c57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610498565b3480156105a057600080fd5b506105a961123d565b60405161046d91906139b2565b3480156105c257600080fd5b50600454610498565b3480156105d757600080fd5b506104616105e63660046139ff565b61129f565b3480156105f757600080fd5b50610498610606366004613999565b61131a565b34801561061757600080fd5b5061049860025481565b34801561062d57600080fd5b5061052861063c366004613999565b61133c565b34801561064d57600080fd5b506105a9611366565b34801561066257600080fd5b50610528610671366004613999565b6113c6565b34801561068257600080fd5b5061043f610691366004613a3b565b6113d6565b3480156106a257600080fd5b506040516012815260200161046d565b3480156106be57600080fd5b5061043f6106cd366004613a3b565b6113f8565b3480156106de57600080fd5b506104616106ed366004613a67565b611430565b3480156106fe57600080fd5b5061043f61070d366004613820565b61144a565b34801561071e57600080fd5b50610498600080516020613ef783398151915281565b61043f610742366004613a82565b61152e565b34801561075357600080fd5b5061043f610762366004613ada565b61154d565b34801561077357600080fd5b5061043f610782366004613820565b6116b2565b34801561079357600080fd5b506104986117b2565b3480156107a857600080fd5b506105286107b7366004613999565b6117cf565b3480156107c857600080fd5b506105286107d7366004613999565b6117df565b3480156107e857600080fd5b506105286107f7366004613999565b6117ef565b34801561080857600080fd5b50600080516020613fd78339815191525460ff16610461565b34801561082d57600080fd5b50600554610498565b34801561084257600080fd5b5061043f610851366004613b31565b611826565b34801561086257600080fd5b50610498610871366004613a67565b61188b565b34801561088257600080fd5b5061043f610891366004613b66565b6118b3565b3480156108a257600080fd5b5061043f6108b1366004613820565b611996565b3480156108c257600080fd5b50610498600080516020613f1783398151915281565b3480156108e457600080fd5b506104986108f3366004613a67565b60006020819052908152604090205481565b34801561091157600080fd5b5061043f610920366004613820565b611a39565b34801561093157600080fd5b50600354610498565b34801561094657600080fd5b50610498600080516020613f3783398151915281565b34801561096857600080fd5b50610461610977366004613a3b565b611b39565b34801561098857600080fd5b506104bb611b71565b34801561099d57600080fd5b506105a9611bb0565b3480156109b257600080fd5b5061049860095481565b3480156109c857600080fd5b50610498600081565b3480156109dd57600080fd5b50610498600a5481565b3480156109f357600080fd5b50610498610a02366004613a67565b60016020526000908152604090205481565b348015610a2057600080fd5b50610528610a2f366004613999565b611c10565b348015610a4057600080fd5b50610461610a4f36600461396f565b611c20565b348015610a6057600080fd5b506104bb604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610a9157600080fd5b506105a9611c89565b348015610aa657600080fd5b5061043f610ab5366004613ada565b611ce9565b348015610ac657600080fd5b5061043f610ad5366004613820565b611ddf565b348015610ae657600080fd5b50610aef611eb6565b60405161046d9190613b97565b348015610b0857600080fd5b506105a9611fe6565b348015610b1d57600080fd5b50610528610b2c366004613999565b612046565b348015610b3d57600080fd5b5061043f610b4c366004613ada565b61207d565b348015610b5d57600080fd5b50610498600080516020613f7783398151915281565b348015610b7f57600080fd5b5061043f610b8e366004613a3b565b61221c565b348015610b9f57600080fd5b50610498600b5481565b348015610bb557600080fd5b50610461610bc4366004613a67565b60066020526000908152604090205460ff1681565b348015610be557600080fd5b50610498610bf4366004613c04565b612238565b348015610c0557600080fd5b5061043f610c14366004613820565b612282565b348015610c2557600080fd5b5061043f610c34366004613b31565b6123b6565b348015610c4557600080fd5b50600754610498565b348015610c5a57600080fd5b50610c6e610c69366004613a67565b61240f565b6040805193845260208401929092529082015260600161046d565b348015610c9557600080fd5b5061043f610ca4366004613820565b612445565b348015610cb557600080fd5b50600854610498565b348015610cca57600080fd5b50610528610cd9366004613999565b612576565b348015610cea57600080fd5b5061043f610cf9366004613820565b6125ad565b348015610d0a57600080fd5b50610461610d19366004613a67565b6001600160a01b031660009081526006602052604090205460ff1690565b600080516020613f37833981519152610d4f8161262a565b6001600160a01b0383166000908152602081905260409020548015610d78576002805482900390555b6001600160a01b0384166000908152602081815260408083208390556001909152812055610db4600080516020613f7783398151915285612637565b50610dbe846126bd565b836001600160a01b0316336001600160a01b03167f46a3bcda1dc0aaf87b1ae498a00c06de1741168a4756a49b3371b9f5bfffbfff85604051610e0191906138e8565b60405180910390a350505050565b60006001600160e01b03198216637965db0b60e01b1480610e4057506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020613ed783398151915291610e8590613c2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb190613c2e565b8015610efe5780601f10610ed357610100808354040283529160200191610efe565b820191906000526020600020905b815481529060010190602001808311610ee157829003601f168201915b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f4f5750825b905060008267ffffffffffffffff166001148015610f6c5750303b155b905081158015610f7a575080155b15610f985760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610fc257845460ff60401b1916600160401b1785555b610fcc88886127ba565b610fd76000876127cc565b50610ff0600080516020613f17833981519152876127cc565b50611009600080516020613f37833981519152876127cc565b50611022600080516020613f77833981519152876127cc565b5061103b600080516020613ef7833981519152876127cc565b50611054600080516020613f97833981519152876127cc565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0389166001600160a01b03199182168117909255600480548085019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054821683179055600580548085019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180548216831790556008805493840181556000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39092018054909216179055831561118657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b600061119a612867565b6111a4838361289a565b9392505050565b60085460009082106111d85760405162461bcd60e51b81526004016111cf90613c68565b60405180910390fd5b600882815481106111eb576111eb613c95565b6000918252602090912001546001600160a01b031692915050565b600554600090821061122a5760405162461bcd60e51b81526004016111cf90613c68565b600582815481106111eb576111eb613c95565b6060600580548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611277575b5050505050905090565b60006112a9612867565b6001600160a01b03841660009081526006602052604090205460ff161580156112eb57506001600160a01b03831660009081526006602052604090205460ff16155b6113075760405162461bcd60e51b81526004016111cf90613cab565b6113128484846128b2565b949350505050565b6000908152600080516020613fb7833981519152602052604090206001015490565b6003818154811061134c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60606004805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6007818154811061134c57600080fd5b6113df8261131a565b6113e88161262a565b6113f283836127cc565b50505050565b6001600160a01b03811633146114215760405163334bd91960e11b815260040160405180910390fd5b61142b8282612637565b505050565b6000610e40600080516020613ef783398151915283611b39565b600080516020613f178339815191526114628161262a565b61147a600080516020613f9783398151915284611b39565b6114bc5760405162461bcd60e51b81526020600482015260136024820152724e6f742061206d61737465722073746174757360681b60448201526064016111cf565b6114d4600080516020613f9783398151915284612637565b506114de836128d6565b826001600160a01b0316336001600160a01b03167f51141af7edd82b81899f3a893000cb2e1c6f47358ca77dae02f1de844db3f0b68460405161152191906138e8565b60405180910390a3505050565b6115366129ad565b61153f82612a52565b6115498282612a6a565b5050565b600080516020613f378339815191526115658161262a565b6001600160a01b03841661158b5760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156115c45760405162461bcd60e51b81526004016111cf90613cab565b60006115de600080516020613f7783398151915286611b39565b1590508015611616576115ff600080516020613f77833981519152866127cc565b5061160985612b27565b6002805485019055611654565b6001600160a01b038516600090815260208190526040902054808511156116465760028054828703019055611652565b60028054868303900390555b505b6001600160a01b038516600081815260208190526040908190208690555133907f127e8015e3ed084165ebcfb6636e0347c3b088218d00989d964c69e434105e5f906116a39088908890613cf6565b60405180910390a35050505050565b600080516020613f178339815191526116ca8161262a565b6001600160a01b0383166116f05760405162461bcd60e51b81526004016111cf90613cd0565b611708600080516020613f9783398151915284611b39565b1561174d5760405162461bcd60e51b8152602060048201526015602482015274416c7265616479206d61737465722073746174757360581b60448201526064016111cf565b611765600080516020613f97833981519152846127cc565b5061176f83612bca565b826001600160a01b0316336001600160a01b03167fd4fd8a370d3fbfae728fd173b1afaeda261c2f6b541ea3a5ec62fa787ab8c7468460405161152191906138e8565b60006117bc612c6d565b50600080516020613f5783398151915290565b6004818154811061134c57600080fd5b6008818154811061134c57600080fd5b60035460009082106118135760405162461bcd60e51b81526004016111cf90613c68565b600382815481106111eb576111eb613c95565b600080516020613f9783398151915261183e8161262a565b611846612cb6565b336001600160a01b03167fa0e83b3d54befde8bdbd53ba97df1aca1fd54ffe2cf64e134912105cfffcaed08360405161187f91906138e8565b60405180910390a25050565b6001600160a01b03166000908152600080516020613ed7833981519152602052604090205490565b600080516020613f778339815191526118cb8161262a565b6118d3612867565b33301461190a573360009081526006602052604090205460ff161561190a5760405162461bcd60e51b81526004016111cf90613cab565b60006119153361188b565b905083600b60008282546119299190613d25565b9091555061193990503385612d19565b6119438482613d38565b600003611960576009805490600061195a83613d4b565b91905055505b604051339081907feab88a0b2198f2928ade5fb787115a9a6ffbbf3705277143953a7c26769157ff90610e019088908890613cf6565b600080516020613f178339815191526119ae8161262a565b6001600160a01b0383166119d45760405162461bcd60e51b81526004016111cf90613cd0565b6119ec600080516020613ef7833981519152846127cc565b506119f683612d4f565b826001600160a01b0316336001600160a01b03167fa9d7450555f9f903f431808251e9b529e0e5dfcc06f78669e335aa3247bed7868460405161152191906138e8565b600080516020613f17833981519152611a518161262a565b6001600160a01b038316611a775760405162461bcd60e51b81526004016111cf90613cd0565b611a8f600080516020613f3783398151915284611b39565b15611ad45760405162461bcd60e51b815260206004820152601560248201527420b63932b0b23c9036b0b9ba32b91036b4b73a32b960591b60448201526064016111cf565b611aec600080516020613f37833981519152846127cc565b50611af683612df2565b826001600160a01b0316336001600160a01b03167f3ab206680c8c27d75c62054a01ac77c5873e81ffe65c180fdb58d971b96d34388460405161152191906138e8565b6000918252600080516020613fb7833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020613ed783398151915291610e8590613c2e565b60606003805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6005818154811061134c57600080fd5b6000611c2a612867565b3360009081526006602052604090205460ff16158015611c6357506001600160a01b03831660009081526006602052604090205460ff16155b611c7f5760405162461bcd60e51b81526004016111cf90613cab565b6111a48383612e95565b60606008805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600080516020613f37833981519152611d018161262a565b611d19600080516020613f7783398151915285611b39565b611d545760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064016111cf565b6001600160a01b03841660009081526020819052604090205480841115611d845760028054828603019055611d90565b60028054858303900390555b6001600160a01b038516600081815260208190526040908190208690555133907f2780d98c888fdc59ac7c8628a0bf62a14752d79fbeb234e1f0c76c9b6ce6f542906116a39088908890613cf6565b600080516020613f17833981519152611df78161262a565b611e0f600080516020613f3783398151915284611b39565b611e515760405162461bcd60e51b81526020600482015260136024820152722737ba10309036b0b9ba32b91036b4b73a32b960691b60448201526064016111cf565b611e69600080516020613f3783398151915284612637565b50611e7383612ea3565b826001600160a01b0316336001600160a01b03167f60763ff2f9b370bde86d1d96810ad6ab33c839c6e79c45227314714a3f2686298460405161152191906138e8565b60035460609060008167ffffffffffffffff811115611ed757611ed7613774565b604051908082528060200260200182016040528015611f3c57816020015b611f29604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b815260200190600190039081611ef55790505b50905060005b82811015611fdf57600060038281548110611f5f57611f5f613c95565b60009182526020808320909101546001600160a01b031680835282825260408084205460018452938190205481516080810183528381529384018590529083018190529093509060608101611fb48385613d38565b815250858581518110611fc957611fc9613c95565b6020908102919091010152505050600101611f42565b5092915050565b60606007805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600754600090821061206a5760405162461bcd60e51b81526004016111cf90613c68565b600782815481106111eb576111eb613c95565b600080516020613f778339815191526120958161262a565b61209d612867565b6001600160a01b0384166120c35760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156120fc5760405162461bcd60e51b81526004016111cf90613cab565b3360009081526020818152604080832054600190925290912054612121908590613d25565b11156121645760405162461bcd60e51b8152602060048201526012602482015271105b1b1bddd85b98d948195e18d95959195960721b60448201526064016111cf565b3360009081526001602052604081208054859290612183908490613d25565b9250508190555082600a600082825461219c9190613d25565b90915550600090506121ad8561188b565b90506121b98585612f7a565b806000036121d757600980549060006121d183613d62565b91905055505b846001600160a01b0316336001600160a01b03167f0a379200ca4d32ac7f1351005f51ef6d49dae15616e15e868f304fc5469e6d0a86866040516116a3929190613cf6565b6122258261131a565b61222e8161262a565b6113f28383612637565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b600080516020613ef783398151915261229a8161262a565b6001600160a01b0383166122c05760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03831660009081526006602052604090205460ff161561231f5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48189b1858dadb1a5cdd1959606a1b60448201526064016111cf565b6001600160a01b038316600081815260066020526040808220805460ff191660019081179091556007805491820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916831790555133907f41758605cde3a25b22ccad82f1492c23842cbf7039dc5984bbe579d1b8293556906115219086906138e8565b600080516020613f978339815191526123ce8161262a565b6123d6612fb0565b336001600160a01b03167f85b554d52672b7715dcfb02957fc048d23758df2ff9f9946236523fffd0d2e8f8360405161187f91906138e8565b6001600160a01b038116600090815260208181526040808320546001909252822054909161243d8284613d38565b929491935050565b6001600160a01b03821660009081526006602052604090205460ff1661249f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08189b1858dadb1a5cdd1959608a1b60448201526064016111cf565b6124b7600080516020613ef783398151915233611b39565b806124c157503033145b6124fe5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016111cf565b6001600160a01b0382166000908152600660205260409020805460ff1916905561252782612ff6565b816001600160a01b0316336001600160a01b03167fc58878141048f74383ecb83bd329e1a7329a1270e6e1edcaf6d3f8cfa893049c8360405161256a91906138e8565b60405180910390a35050565b600454600090821061259a5760405162461bcd60e51b81526004016111cf90613c68565b600482815481106111eb576111eb613c95565b600080516020613f178339815191526125c58161262a565b6125dd600080516020613ef783398151915284612637565b506125e7836130cd565b826001600160a01b0316336001600160a01b03167fddb0e0cb0c3574277c61848220221fdba7fec4d9a9677e8de5f605412ec11b8c8460405161152191906138e8565b61263481336131a4565b50565b6000600080516020613fb78339815191526126528484611b39565b156126b3576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610e40565b6000915050610e40565b60005b60035481101561154957816001600160a01b0316600382815481106126e7576126e7613c95565b6000918252602090912001546001600160a01b0316036127b2576003805461271190600190613d38565b8154811061272157612721613c95565b600091825260209091200154600380546001600160a01b03909216918390811061274d5761274d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600380548061278c5761278c613d7b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b6001016126c0565b6127c26131dd565b6115498282613226565b6000600080516020613fb78339815191526127e78484611b39565b6126b3576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561281d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610e40565b600080516020613fd78339815191525460ff16156128985760405163d93c066560e01b815260040160405180910390fd5b565b6000336128a8818585613277565b5060019392505050565b6000336128c0858285613284565b6128cb8585856132e5565b506001949350505050565b60005b60055481101561154957816001600160a01b03166005828154811061290057612900613c95565b6000918252602090912001546001600160a01b0316036129a5576005805461292a90600190613d38565b8154811061293a5761293a613c95565b600091825260209091200154600580546001600160a01b03909216918390811061296657612966613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061278c5761278c613d7b565b6001016128d9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612a3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612a28600080516020613f57833981519152546001600160a01b031690565b6001600160a01b031614155b156128985760405163703e46dd60e11b815260040160405180910390fd5b600080516020613f178339815191526115498161262a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ac4575060408051601f3d908101601f19168201909252612ac191810190613d91565b60015b612aec57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111cf565b600080516020613f578339815191528114612b1d57604051632a87526960e21b8152600481018290526024016111cf565b61142b8383613344565b60005b600354811015612b7757816001600160a01b031660038281548110612b5157612b51613c95565b6000918252602090912001546001600160a01b031603612b6f575050565b600101612b2a565b50600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600554811015612c1a57816001600160a01b031660058281548110612bf457612bf4613c95565b6000918252602090912001546001600160a01b031603612c12575050565b600101612bcd565b50600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0392909216919091179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146128985760405163703e46dd60e11b815260040160405180910390fd5b612cbe612867565b600080516020613fd7833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b038216612d4357604051634b637e8f60e11b8152600060048201526024016111cf565b6115498260008361339a565b60005b600854811015612d9f57816001600160a01b031660088281548110612d7957612d79613c95565b6000918252602090912001546001600160a01b031603612d97575050565b600101612d52565b50600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600454811015612e4257816001600160a01b031660048281548110612e1c57612e1c613c95565b6000918252602090912001546001600160a01b031603612e3a575050565b600101612df5565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336128a88185856132e5565b60005b60045481101561154957816001600160a01b031660048281548110612ecd57612ecd613c95565b6000918252602090912001546001600160a01b031603612f725760048054612ef790600190613d38565b81548110612f0757612f07613c95565b600091825260209091200154600480546001600160a01b039092169183908110612f3357612f33613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600480548061278c5761278c613d7b565b600101612ea6565b6001600160a01b038216612fa45760405163ec442f0560e01b8152600060048201526024016111cf565b6115496000838361339a565b612fb86134ca565b600080516020613fd7833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612cfb565b60005b60075481101561154957816001600160a01b03166007828154811061302057613020613c95565b6000918252602090912001546001600160a01b0316036130c5576007805461304a90600190613d38565b8154811061305a5761305a613c95565b600091825260209091200154600780546001600160a01b03909216918390811061308657613086613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600780548061278c5761278c613d7b565b600101612ff9565b60005b60085481101561154957816001600160a01b0316600882815481106130f7576130f7613c95565b6000918252602090912001546001600160a01b03160361319c576008805461312190600190613d38565b8154811061313157613131613c95565b600091825260209091200154600880546001600160a01b03909216918390811061315d5761315d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600880548061278c5761278c613d7b565b6001016130d0565b6131ae8282611b39565b6115495760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661289857604051631afcd79f60e31b815260040160405180910390fd5b61322e6131dd565b600080516020613ed78339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036132688482613dfa565b50600481016113f28382613dfa565b61142b83838360016134fa565b60006132908484612238565b90506000198110156113f257818110156132d657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016111cf565b6113f2848484840360006134fa565b6001600160a01b03831661330f57604051634b637e8f60e11b8152600060048201526024016111cf565b6001600160a01b0382166133395760405163ec442f0560e01b8152600060048201526024016111cf565b61142b83838361339a565b61334d826135d9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156133925761142b828261363e565b6115496136b4565b600080516020613ed78339815191526001600160a01b0384166133d657818160020160008282546133cb9190613d25565b909155506134489050565b6001600160a01b038416600090815260208290526040902054828110156134295760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016111cf565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316613466576002810180548390039055613485565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0191815260200190565b600080516020613fd78339815191525460ff1661289857604051638dfc202b60e01b815260040160405180910390fd5b600080516020613ed78339815191526001600160a01b0385166135335760405163e602df0560e01b8152600060048201526024016111cf565b6001600160a01b03841661355d57604051634a1406b160e11b8152600060048201526024016111cf565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156135d257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516116a391815260200190565b5050505050565b806001600160a01b03163b60000361360f57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111cf565b600080516020613f5783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161365b9190613eba565b600060405180830381855af49150503d8060008114613696576040519150601f19603f3d011682016040523d82523d6000602084013e61369b565b606091505b50915091506136ab8583836136d3565b95945050505050565b34156128985760405163b398979f60e01b815260040160405180910390fd5b6060826136e8576136e38261372f565b6111a4565b81511580156136ff57506001600160a01b0384163b155b1561372857604051639996b31560e01b81526001600160a01b03851660048201526024016111cf565b50806111a4565b80511561373f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b038116811461376f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156137a5576137a5613774565b604051601f8501601f19908116603f011681019082821181831017156137cd576137cd613774565b816040528093508581528686860111156137e657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261381157600080fd5b6111a48383356020850161378a565b6000806040838503121561383357600080fd5b61383c83613758565b9150602083013567ffffffffffffffff81111561385857600080fd5b61386485828601613800565b9150509250929050565b60006020828403121561388057600080fd5b81356001600160e01b0319811681146111a457600080fd5b60005b838110156138b357818101518382015260200161389b565b50506000910152565b600081518084526138d4816020860160208601613898565b601f01601f19169290920160200192915050565b6020815260006111a460208301846138bc565b60008060006060848603121561391057600080fd5b833567ffffffffffffffff8082111561392857600080fd5b61393487838801613800565b9450602086013591508082111561394a57600080fd5b5061395786828701613800565b92505061396660408501613758565b90509250925092565b6000806040838503121561398257600080fd5b61398b83613758565b946020939093013593505050565b6000602082840312156139ab57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156139f35783516001600160a01b0316835292840192918401916001016139ce565b50909695505050505050565b600080600060608486031215613a1457600080fd5b613a1d84613758565b9250613a2b60208501613758565b9150604084013590509250925092565b60008060408385031215613a4e57600080fd5b82359150613a5e60208401613758565b90509250929050565b600060208284031215613a7957600080fd5b6111a482613758565b60008060408385031215613a9557600080fd5b613a9e83613758565b9150602083013567ffffffffffffffff811115613aba57600080fd5b8301601f81018513613acb57600080fd5b6138648582356020840161378a565b600080600060608486031215613aef57600080fd5b613af884613758565b925060208401359150604084013567ffffffffffffffff811115613b1b57600080fd5b613b2786828701613800565b9150509250925092565b600060208284031215613b4357600080fd5b813567ffffffffffffffff811115613b5a57600080fd5b61131284828501613800565b60008060408385031215613b7957600080fd5b82359150602083013567ffffffffffffffff81111561385857600080fd5b602080825282518282018190526000919060409081850190868401855b82811015613bf757815180516001600160a01b03168552868101518786015285810151868601526060908101519085015260809093019290850190600101613bb4565b5091979650505050505050565b60008060408385031215613c1757600080fd5b613c2083613758565b9150613a5e60208401613758565b600181811c90821680613c4257607f821691505b602082108103613c6257634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252600b908201526a109b1858dadb1a5cdd195960aa1b604082015260600190565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b82815260406020820152600061131260408301846138bc565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e4057610e40613d0f565b81810381811115610e4057610e40613d0f565b600081613d5a57613d5a613d0f565b506000190190565b600060018201613d7457613d74613d0f565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613da357600080fd5b5051919050565b601f82111561142b576000816000526020600020601f850160051c81016020861015613dd35750805b601f850160051c820191505b81811015613df257828155600101613ddf565b505050505050565b815167ffffffffffffffff811115613e1457613e14613774565b613e2881613e228454613c2e565b84613daa565b602080601f831160018114613e5d5760008415613e455750858301515b600019600386901b1c1916600185901b178555613df2565b600085815260208120601f198616915b82811015613e8c57888601518255948401946001909101908401613e6d565b5085821015613eaa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613ecc818460208701613898565b919091019291505056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00f988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee35369b3a7bb98c90641a907c2fd643ea781341eba72ccffd47cb018c128c48c34d722a319ebda03eb1179096607e87f360b089b3919a0d764a65ea950521a6c9360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a625e2241f7c713e379444aaa3c5b4960dee82d8c1d72b62fa8c250e46c60358b902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a26469706673582212208a6d1ae7c0d53df043a3876944cd272d6e303dee6ba36c39744d2d45b6f572f564736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoinBeacon\",\n \"sourceName\": \"contracts/token/StableCoinBeacon.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_implementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BeaconInvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"implementation\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"upgradeTo\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b5060405161043c38038061043c83398101604081905261002f91610169565b8181806001600160a01b03811661006157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61006a8161007d565b50610074826100cd565b5050505061019c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b6000036101035760405163211eb15960e21b81526001600160a01b0382166004820152602401610058565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b80516001600160a01b038116811461016457600080fd5b919050565b6000806040838503121561017c57600080fd5b6101858361014d565b91506101936020840161014d565b90509250929050565b610291806101ab6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212201352204bbfcbadbe2a7bb1704ec5756601d167017301b1dfeee3e33bd1f8fa3164736f6c63430008160033\",\n \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212201352204bbfcbadbe2a7bb1704ec5756601d167017301b1dfeee3e33bd1f8fa3164736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","import { Contract, InterfaceAbi } from 'ethers'\nimport type { ContractRunner } from 'ethers'\nimport platformAbi from '../../abis/IsometryPlatform.json' with { type: 'json' }\nimport factoryAbi from '../../abis/StableCoinFactory.json' with { type: 'json' }\nimport stablecoinAbi from '../../abis/StableCoin.json' with { type: 'json' }\nimport beaconAbi from '../../abis/StableCoinBeacon.json' with { type: 'json' }\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface ContractAddresses {\n platform?: string\n factory?: string\n beacon?: string\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Extract and cast ABI from Hardhat artifact format */\nfunction abiOf(artifact: { abi: unknown[] }): InterfaceAbi {\n return artifact.abi as InterfaceAbi\n}\n\n// ─── Contracts ────────────────────────────────────────────────────────────────\n\nexport function getContracts(addresses: ContractAddresses, runner: ContractRunner) {\n if (!addresses.platform) throw new Error('ISOMETRY_PLATFORM_ADDRESS is required')\n if (!addresses.factory) throw new Error('ISOMETRY_FACTORY_ADDRESS is required')\n if (!addresses.beacon) throw new Error('ISOMETRY_BEACON_ADDRESS is required')\n\n return {\n platform: new Contract(addresses.platform, abiOf(platformAbi as { abi: unknown[] }), runner),\n factory: new Contract(addresses.factory, abiOf(factoryAbi as { abi: unknown[] }), runner),\n beacon: new Contract(addresses.beacon, abiOf(beaconAbi as { abi: unknown[] }), runner),\n }\n}\n\nexport function getStableCoin(address: string, runner: ContractRunner): Contract {\n return new Contract(address, abiOf(stablecoinAbi as { abi: unknown[] }), runner)\n}\n\nexport function getPlatform(runner: ContractRunner, addresses: ContractAddresses): Contract {\n if (!addresses.platform) throw new Error('ISOMETRY_PLATFORM_ADDRESS is required')\n return new Contract(addresses.platform, abiOf(platformAbi as { abi: unknown[] }), runner)\n}\n","import type { Contract, ContractRunner } from 'ethers'\nimport { getContracts, type ContractAddresses } from './contracts.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface PlatformInfo {\n address: string\n paused: boolean\n tokenCount: bigint\n platformAdminCount: bigint\n approvedIssuerCount: bigint\n accessUserCount: bigint\n}\n\nexport interface PlatformRoles {\n address: string\n isOwner: boolean\n isPlatformAdmin: boolean\n isApprovedIssuer: boolean\n isAccessUser: boolean\n}\n\n// ─── PlatformRpcService ────────────────────────────────────────────────────────\n\nexport class PlatformRpcService {\n private contracts: ReturnType<typeof getContracts>\n private platform: Contract\n\n constructor(addresses: ContractAddresses, runner: ContractRunner) {\n this.contracts = getContracts(addresses, runner)\n this.platform = this.contracts.platform\n }\n\n async getPlatformInfo(): Promise<PlatformInfo> {\n const [paused, tokenCount, adminCount, issuerCount, accessCount] =\n await Promise.all([\n this.platform.paused(),\n this.platform.getTokenCount(),\n this.platform.getPlatformAdminCount(),\n this.platform.getApprovedIssuerCount(),\n this.platform.getAccessUserCount(),\n ])\n\n return {\n address: this.platform.target as string,\n paused,\n tokenCount,\n platformAdminCount: adminCount,\n approvedIssuerCount: issuerCount,\n accessUserCount: accessCount,\n }\n }\n\n async getAllTokens(): Promise<string[]> {\n return this.platform.getAllTokens()\n }\n\n async getAccountRoles(account: string): Promise<PlatformRoles> {\n const [isOwner, isPlatformAdmin, isApprovedIssuer, isAccessUser] =\n await Promise.all([\n this.platform.isOwner(account),\n this.platform.isPlatformAdmin(account),\n this.platform.isApprovedIssuer(account),\n this.platform.isAccessUser(account),\n ])\n\n return {\n address: account,\n isOwner,\n isPlatformAdmin,\n isApprovedIssuer,\n isAccessUser,\n }\n }\n\n async isPaused(): Promise<boolean> {\n return this.platform.paused()\n }\n}\n","import type { ContractRunner } from 'ethers'\nimport { getContracts, type ContractAddresses } from './contracts.js'\n\nexport class FactoryRpcService {\n private addresses: ContractAddresses\n private runner: ContractRunner\n\n constructor(addresses: ContractAddresses, runner: ContractRunner) {\n this.addresses = addresses\n this.runner = runner\n }\n\n async getBeaconAddress(): Promise<string> {\n const { factory } = getContracts(this.addresses, this.runner)\n return factory.beacon()\n }\n\n async getPlatformAddress(): Promise<string> {\n const { factory } = getContracts(this.addresses, this.runner)\n return factory.platform()\n }\n}\n","import type { ContractRunner } from 'ethers'\nimport { getStableCoin, type ContractAddresses } from './contracts.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface TokenInfo {\n address: string\n name: string\n symbol: string\n decimals: number\n totalSupply: bigint\n paused: boolean\n}\n\nexport interface TokenStats {\n address: string\n holdersTotal: bigint\n totalMinted: bigint\n totalBurned: bigint\n totalAllowance: bigint\n mintersCount: bigint\n blacklistCount: bigint\n}\n\nexport interface MinterInfo {\n minter: string\n allowance: bigint\n}\n\nexport interface TokenRoles {\n address: string\n account: string\n isTokenOwner: boolean\n isMasterMinter: boolean\n isMinter: boolean\n isBlacklistManager: boolean\n isMasterStatus: boolean\n}\n\n// ─── StableCoinRpcService ─────────────────────────────────────────────────────\n\nexport class StableCoinRpcService {\n private runner: ContractRunner\n\n constructor(_addresses: ContractAddresses, runner: ContractRunner) {\n this.runner = runner\n }\n\n async getTokenInfo(address: string): Promise<TokenInfo> {\n const token = getStableCoin(address, this.runner)\n\n const [name, symbol, decimals, totalSupply, paused] = await Promise.all([\n token.name(),\n token.symbol(),\n token.decimals(),\n token.totalSupply(),\n token.paused(),\n ])\n\n return { address, name, symbol, decimals, totalSupply, paused }\n }\n\n async getTokenStats(address: string): Promise<TokenStats> {\n const token = getStableCoin(address, this.runner)\n\n const [holdersTotal, totalMinted, totalBurned, totalAllowance, minterCount, blacklistCount] =\n await Promise.all([\n token.holdersTotal(),\n token.totalMinted(),\n token.totalBurned(),\n token.totalAllowance(),\n token.getMinterCount(),\n token.getBlacklistCount(),\n ])\n\n return {\n address,\n holdersTotal,\n totalMinted,\n totalBurned,\n totalAllowance,\n mintersCount: minterCount,\n blacklistCount,\n }\n }\n\n async getUserRoles(address: string, account: string): Promise<TokenRoles> {\n const token = getStableCoin(address, this.runner)\n\n const TOKEN_OWNER_ROLE = await token.TOKEN_OWNER_ROLE()\n const MASTER_MINTER_ROLE = await token.MASTER_MINTER_ROLE()\n const MINTER_ROLE = await token.MINTER_ROLE()\n const BLACKLIST_MANAGER_ROLE = await token.BLACKLIST_MANAGER_ROLE()\n const MASTER_STATUS_ROLE = await token.MASTER_STATUS_ROLE()\n\n const [isTokenOwner, isMasterMinter, isMinter, isBlacklistManager, isMasterStatus] =\n await Promise.all([\n token.hasRole(TOKEN_OWNER_ROLE, account),\n token.hasRole(MASTER_MINTER_ROLE, account),\n token.hasRole(MINTER_ROLE, account),\n token.hasRole(BLACKLIST_MANAGER_ROLE, account),\n token.hasRole(MASTER_STATUS_ROLE, account),\n ])\n\n return {\n address,\n account,\n isTokenOwner,\n isMasterMinter,\n isMinter,\n isBlacklistManager,\n isMasterStatus,\n }\n }\n\n async isPaused(address: string): Promise<boolean> {\n const token = getStableCoin(address, this.runner)\n return token.paused()\n }\n\n async isBlacklisted(address: string, user: string): Promise<boolean> {\n const token = getStableCoin(address, this.runner)\n return token.blacklisted(user)\n }\n}\n","/**\n * Error selector → human-readable code mapping\n *\n * Observed on Sepolia (from live testing):\n * - 0xe2517d3f = OpenZeppelin AccessControlUnauthorizedAccount\n * - 0x08c379a0 = Error(string) — \"Not authorized\", \"Not approved issuer\"\n *\n * Extend this map as new selectors are observed on-chain.\n */\n\nexport interface DecodedError {\n code: string\n message: string\n}\n\n/**\n * Maps 4-byte error selector (0x...) to { code, message }.\n * Code is a SCREAMING_SNAKE_CASE identifier suitable for JSON output.\n */\nexport const ERROR_SELECTOR_MAP: Record<string, DecodedError> = {\n // OpenZeppelin AccessControlUnauthorizedAccount(address account, bytes32 role)\n // keccak256(\"AccessControlUnauthorizedAccount(address,bytes32)\") = 0x761f22a3\n // ethers v6 surfaces this as 0xe2517d3f in CALL_EXCEPTION details\n '0xe2517d3f': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: missing required role',\n },\n '0x761f22a3': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: missing required role',\n },\n\n // OpenZeppelin AccessControl: account is missing role\n '0x4e6f6c52': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: account is missing role',\n },\n\n // ERC20: insufficient balance\n '0x13be252b': {\n code: 'INSUFFICIENT_BALANCE',\n message: 'ERC20: transfer amount exceeds balance',\n },\n\n // ERC20: insufficient allowance\n '0xf4d708f0': {\n code: 'INSUFFICIENT_ALLOWANCE',\n message: 'ERC20: insufficient allowance',\n },\n\n // Pausable: paused\n '0x8d1c0a00': {\n code: 'PAUSED',\n message: 'Pausable: paused',\n },\n\n // ERC20: invalid sender\n '0xdf24fd05': {\n code: 'INVALID_SENDER',\n message: 'ERC20: invalid sender',\n },\n\n // ERC20: blacklisted\n '0x12d1b5d1': {\n code: 'BLACKLISTED',\n message: 'ERC20: sender is blacklisted',\n },\n\n // Isometry platform / factory custom errors (observed)\n '0x1e55aece': {\n code: 'NOT_APPROVED_ISSUER',\n message: 'Not an approved issuer',\n },\n\n '0xf2d4620b': {\n code: 'FACTORY_SYMBOL_EXISTS',\n message: 'Factory: symbol already exists',\n },\n\n '0x3b800a46': {\n code: 'ZERO_ADDRESS',\n message: 'Address cannot be zero',\n },\n}\n\n/**\n * Decode an ethers CALL_EXCEPTION error details object.\n * Returns a DecodedError if the selector is known, otherwise null.\n */\nexport function decodeError(details: {\n data?: string\n revert?: { signature?: string; name?: string; args?: unknown[] }\n reason?: string | null\n}): DecodedError | null {\n // Try custom error selector from data\n if (details.data && details.data !== '0x') {\n const selector = details.data.slice(0, 10).toLowerCase()\n const mapped = ERROR_SELECTOR_MAP[selector]\n if (mapped) return mapped\n }\n\n // Try known revert reason string\n if (details.reason) {\n const reason = details.reason\n if (reason === 'Not authorized' || reason === 'Not approved issuer') {\n return { code: 'ACCESS_DENIED', message: reason }\n }\n return { code: 'REVERT', message: reason }\n }\n\n // Try ethers revert with args\n if (details.revert?.args) {\n const name = details.revert.name ?? details.revert.signature ?? ''\n if (name.includes('AccessControl')) {\n const [account, role] = details.revert.args\n return {\n code: 'ACCESS_DENIED',\n message: `AccessControl: account ${account} missing role ${role}`,\n }\n }\n }\n\n return null\n}\n","/**\n * WriteExecutor — unified write transaction executor\n *\n * Consistent interface for all write operations:\n * - simulate: dry-run via estimateGas only\n * - execute: real transaction with receipt\n * - unified error model with human-readable codes\n * - CLI output helpers with --json / --simulate support\n */\n\nimport { Contract, type Log } from 'ethers'\nimport type { IWallet } from './wallet.js'\nimport { decodeError } from './errorMap.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface SimulateResult {\n ok: true\n estimatedGas: bigint\n functionFragment: string\n params: Record<string, unknown>\n}\n\nexport interface TxReceipt {\n txHash: string\n blockNumber: number | null\n blockHash: string | null\n status: number | null\n gasUsed: bigint\n effectiveGasPrice: bigint\n from: string\n to: string | null\n nonce: number\n logs: Array<{\n address: string\n topics: string[]\n data: string\n blockNumber: number | null\n }>\n}\n\nexport interface ExecuteResult {\n ok: true\n receipt: TxReceipt\n}\n\nexport type WriteErrorCode =\n | 'NO_SIGNER'\n | 'INVALID_KEY'\n | 'INVALID_ARGUMENT'\n | 'SIMULATION_FAILED'\n | 'REVERT'\n | 'ACCESS_DENIED'\n | 'INSUFFICIENT_BALANCE'\n | 'INSUFFICIENT_ALLOWANCE'\n | 'PAUSED'\n | 'BLACKLISTED'\n | 'NOT_APPROVED_ISSUER'\n | 'FACTORY_SYMBOL_EXISTS'\n | 'ZERO_ADDRESS'\n | 'RPC_ERROR'\n | 'UNKNOWN'\n\nexport interface WriteError {\n ok: false\n code: WriteErrorCode\n message: string\n details?: unknown\n /** Raw 4-byte selector from the revert data, present when code is UNKNOWN or REVERT */\n selector?: string\n}\n\nexport type WriteResult = SimulateResult | ExecuteResult | WriteError\n\nexport interface WriteCall {\n method: string\n args: unknown[]\n overrides?: Record<string, unknown>\n}\n\nexport interface WriteExecutorConfig {\n wallet: IWallet\n contract: Contract\n}\n\n// ─── WriteExecutor ────────────────────────────────────────────────────────────\n\nexport class WriteExecutor {\n constructor(private config: WriteExecutorConfig) {}\n\n /** Dry-run: estimate gas without signing. Returns gas estimate or decoded error. */\n async simulate(call: WriteCall): Promise<SimulateResult | WriteError> {\n if (this.config.wallet.mode === 'readonly') {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: `Cannot simulate: wallet is read-only. Set ISOMETRY_PRIVATE_KEY to enable write operations.`,\n }\n }\n\n try {\n const fn = this.config.contract.getFunction(call.method)\n const gasEstimate = await fn.estimateGas(...call.args, call.overrides ?? {})\n\n const params: Record<string, unknown> = {}\n fn.fragment.inputs.forEach((input, i) => {\n params[input.name || `arg${i}`] = call.args[i]\n })\n\n return {\n ok: true,\n estimatedGas: gasEstimate,\n functionFragment: `${call.method}(${fn.fragment.inputs.map((i) => i.type).join(',')})`,\n params,\n }\n } catch (err: unknown) {\n // Always tag simulation failures as SIMULATION_FAILED; message is decoded\n const decoded = this.parseRevertError(err)\n return {\n ok: false,\n code: 'SIMULATION_FAILED',\n message: `[simulate] ${decoded.message}`,\n details: err,\n ...(decoded.selector ? { selector: decoded.selector } : {}),\n }\n }\n }\n\n /** Execute: sign and broadcast, wait for receipt. */\n async execute(call: WriteCall, confirmations = 1): Promise<ExecuteResult | WriteError> {\n if (this.config.wallet.mode === 'readonly') {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: `Cannot execute: wallet is read-only. Set ISOMETRY_PRIVATE_KEY to enable write operations.`,\n }\n }\n\n if (!this.config.wallet.signer) {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: 'Wallet has no signer.',\n }\n }\n\n try {\n const contract = this.config.contract.connect(this.config.wallet.signer)\n const fn = contract.getFunction(call.method)\n const tx = await fn.populateTransaction(...call.args, call.overrides ?? {})\n const signedTx = await this.config.wallet.signer!.sendTransaction(tx)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _receipt: any = await signedTx.wait(confirmations)\n if (!_receipt) {\n return { ok: false, code: 'RPC_ERROR', message: 'Transaction receipt is null' }\n }\n\n return {\n ok: true,\n receipt: {\n txHash: _receipt.hash,\n blockNumber: _receipt.blockNumber,\n blockHash: _receipt.blockHash ?? null,\n status: _receipt.status ?? null,\n gasUsed: _receipt.gasUsed,\n effectiveGasPrice: _receipt.effectiveGasPrice ?? 0n,\n from: _receipt.from,\n to: _receipt.to ?? null,\n nonce: _receipt.nonce,\n logs: _receipt.logs.map((log: Log) => ({\n address: log.address,\n topics: [...log.topics],\n data: log.data,\n blockNumber: log.blockNumber,\n })),\n },\n }\n } catch (err: unknown) {\n const decoded = this.parseRevertError(err)\n return {\n ok: false,\n code: decoded.code as WriteErrorCode,\n message: decoded.message,\n details: err,\n ...(decoded.selector ? { selector: decoded.selector } : {}),\n }\n }\n }\n\n /**\n * Parse a revert error and extract { code, message, selector }.\n * selector is always included for unknown errors so users can report it.\n */\n private parseRevertError(err: unknown): { code: string; message: string; selector?: string } {\n // Extract raw selector from ethers error object (present in CALL_EXCEPTION)\n let rawSelector: string | undefined\n if (err && typeof err === 'object') {\n const errObj = err as Record<string, unknown>\n // ethers v6 surfaces custom error selector in error.data (4-byte hex)\n const data = (errObj as { data?: string }).data\n if (data && data !== '0x' && data.length >= 10) {\n rawSelector = data.slice(0, 10).toLowerCase()\n }\n }\n\n // Try known error mapping\n if (err && typeof err === 'object') {\n const decoded = decodeError(err as Record<string, unknown>)\n if (decoded) {\n return { code: decoded.code, message: decoded.message, selector: rawSelector }\n }\n }\n\n if (!(err instanceof Error)) {\n return { code: 'UNKNOWN', message: String(err), selector: rawSelector }\n }\n\n const msg = err.message\n if (msg.includes('insufficient funds')) return { code: 'INSUFFICIENT_BALANCE', message: 'insufficient funds for gas', selector: rawSelector }\n if (msg.includes('nonce')) return { code: 'RPC_ERROR', message: 'nonce error (tx may already be mined)', selector: rawSelector }\n if (msg.includes('read-only')) return { code: 'NO_SIGNER', message: 'wallet is read-only', selector: rawSelector }\n\n return { code: 'REVERT', message: msg.slice(0, 200), selector: rawSelector }\n }\n}\n\n// ─── CLI Output Helpers ───────────────────────────────────────────────────────\n\nexport interface WriteOpts {\n simulate: boolean\n json: boolean\n}\n\nexport interface WriteMeta {\n chainId: number\n source: 'rpc'\n timestamp: number\n command?: string\n}\n\nexport function makeWriteMeta(command?: string): WriteMeta {\n return {\n chainId: 11155111,\n source: 'rpc',\n timestamp: Math.floor(Date.now() / 1000),\n ...(command ? { command } : {}),\n }\n}\n\nexport function formatWriteResult(\n result: WriteResult,\n opts: WriteOpts,\n meta?: WriteMeta\n): string {\n if (opts.json) {\n const out: Record<string, unknown> = { ok: result.ok }\n if (result.ok) {\n if (opts.simulate) {\n const r = result as SimulateResult\n Object.assign(out, { estimatedGas: r.estimatedGas, functionFragment: r.functionFragment, params: r.params })\n } else {\n const r = result as ExecuteResult\n Object.assign(out, { receipt: r.receipt })\n }\n } else {\n const r = result as WriteError\n Object.assign(out, { code: r.code, message: r.message })\n if (r.selector) Object.assign(out, { selector: r.selector })\n }\n if (meta) Object.assign(out, { meta })\n return JSON.stringify(out, (_key, value) =>\n typeof value === 'bigint' ? value.toString() : value\n , 2)\n }\n\n if (!result.ok) {\n return `❌ [${result.code}] ${result.message}`\n }\n\n if (opts.simulate) {\n const sim = result as SimulateResult\n return `✅ Simulation passed\\n Estimated gas: ${sim.estimatedGas.toLocaleString()}`\n }\n\n const exec = result as ExecuteResult\n const r = exec.receipt\n const ok = r.status === 1\n return [\n `${ok ? '✅' : '❌'} Transaction ${ok ? 'confirmed' : 'FAILED'}`,\n ` Tx Hash ${r.txHash}`,\n ` Block ${r.blockNumber ?? 'pending'}`,\n ` From ${r.from}`,\n ` To ${r.to ?? 'N/A'}`,\n ` Gas Used ${r.gasUsed.toLocaleString()}`,\n ` Status ${ok ? 'success' : 'reverted'}`,\n ].join('\\n')\n}\n","// ─── RPC Layer ───────────────────────────────────────────────────────────────\n\nexport { PlatformRpcService } from './platform.js'\nexport type { PlatformInfo, PlatformRoles } from './platform.js'\n\nexport { FactoryRpcService } from './factory.js'\n\nexport { StableCoinRpcService } from './stablecoin.js'\nexport type { TokenInfo, TokenStats, TokenRoles, MinterInfo } from './stablecoin.js'\n\nexport { getContracts, getStableCoin } from './contracts.js'\nexport type { ContractAddresses } from './contracts.js'\n\nexport { ReadOnlyWallet, PrivateKeyWallet, createWallet } from './wallet.js'\nexport type { IWallet } from './wallet.js'\n\nexport { WriteExecutor } from './writeExecutor.js'\nexport type {\n WriteResult,\n SimulateResult,\n ExecuteResult,\n WriteError,\n WriteCall,\n WriteOpts,\n TxReceipt,\n} from './writeExecutor.js'\nexport { formatWriteResult } from './writeExecutor.js'\n","import { GraphQLClient } from 'graphql-request'\n\n// ─── Errors ───────────────────────────────────────────────────────────────────\n\nexport class GraphError extends Error {\n constructor(\n message: string,\n public readonly code: 'NETWORK_ERROR' | 'SUBGRAPH_ERROR' | 'PARSE_ERROR' | 'UNKNOWN',\n public readonly details?: unknown\n ) {\n super(message)\n this.name = 'GraphError'\n }\n}\n\n// ─── GraphClient ───────────────────────────────────────────────────────────────\n\nexport interface GraphClientConfig {\n endpoint: string\n /** Optional headers (e.g. authorization) */\n headers?: Record<string, string>\n}\n\nexport class GraphClient {\n private client: GraphQLClient\n\n constructor(config: GraphClientConfig) {\n this.client = new GraphQLClient(config.endpoint, {\n headers: config.headers,\n })\n }\n\n /**\n * Execute a raw GraphQL query.\n * @param query - GraphQL query string\n * @param variables - Optional query variables\n */\n async query<T>(\n query: string,\n variables?: Record<string, unknown>\n ): Promise<T> {\n try {\n return await this.client.request<T>(query, variables)\n } catch (err: unknown) {\n throw this.normalizeError(err)\n }\n }\n\n /**\n * Ping the subgraph — useful for health checks.\n * Returns current block number or throws.\n */\n async ping(): Promise<{ number: number; hash: string; deployment: string }> {\n const data = await this.query<{\n _meta: { block: { number: number; hash: string }; deployment: string }\n }>(`query { _meta { block { number hash } deployment } }`)\n\n if (!data._meta) throw new GraphError('No _meta', 'PARSE_ERROR')\n\n return {\n number: data._meta.block.number,\n hash: data._meta.block.hash,\n deployment: data._meta.deployment,\n }\n }\n\n // ─── Private ────────────────────────────────────────────────────────────────\n\n private normalizeError(err: unknown): GraphError {\n if (err instanceof GraphError) return err\n\n if (err instanceof Error) {\n // graphql-request throws { response: { errors: [...] } }\n const graphErr = (err as unknown as Record<string, unknown>).response as\n | { errors?: unknown[] }\n | undefined\n\n if (graphErr?.errors) {\n return new GraphError(\n `Subgraph error: ${JSON.stringify(graphErr.errors)}`,\n 'SUBGRAPH_ERROR',\n graphErr.errors\n )\n }\n\n // Network-level errors\n if (\n err.message.includes('fetch') ||\n err.message.includes('ECONNREFUSED') ||\n err.message.includes('timeout')\n ) {\n return new GraphError(`Network error: ${err.message}`, 'NETWORK_ERROR', err)\n }\n\n return new GraphError(err.message, 'UNKNOWN', err)\n }\n\n return new GraphError('Unknown error', 'UNKNOWN', err)\n }\n}\n","// ─── Token Queries ────────────────────────────────────────────────────────────\n\nexport const TOKENS_QUERY = `\n query Tokens($first: Int!, $skip: Int!) {\n tokens(first: $first, skip: $skip, orderBy: createdAt, orderDirection: desc) {\n id\n address\n name\n symbol\n decimals\n creator\n createdAt\n status\n activeHolderCount\n totalMintCount\n totalMintAmount\n totalBurnCount\n totalBurnAmount\n lastUpdatedAt\n }\n }\n`\n\nexport const TOKEN_BY_ID_QUERY = `\n query TokenById($id: ID!) {\n token(id: $id) {\n id\n address\n name\n symbol\n decimals\n creator\n createdAt\n status\n activeHolderCount\n totalMintCount\n totalMintAmount\n totalBurnCount\n totalBurnAmount\n lastUpdatedAt\n }\n }\n`\n\n// ─── Token Registered ─────────────────────────────────────────────────────────\n\nexport const TOKEN_REGISTERED_EVENTS_QUERY = `\n query TokenRegisteredEvents($first: Int!, $skip: Int!) {\n tokenRegisteredEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n operator\n token\n name\n symbol\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Mint History ─────────────────────────────────────────────────────────────\n\nexport const MINT_EVENTS_QUERY = `\n query MintEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n mintEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n to\n amount\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Burn History ─────────────────────────────────────────────────────────────\n\nexport const BURN_EVENTS_QUERY = `\n query BurnEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n burnEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n from\n amount\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Pause History ────────────────────────────────────────────────────────────\n\nexport const PAUSE_EVENTS_QUERY = `\n query PauseEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n pauseEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n action\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const PAUSED_BY_OWNER_EVENTS_QUERY = `\n query PausedByOwnerEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n pausedByOwnerEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const UNPAUSED_BY_OWNER_EVENTS_QUERY = `\n query UnpausedByOwnerEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n unpausedByOwnerEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Blacklist ────────────────────────────────────────────────────────────────\n\nexport const BLACKLIST_EVENTS_QUERY = `\n query BlacklistEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n blacklistEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n user\n action\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Transfer ─────────────────────────────────────────────────────────────────\n\nexport const TRANSFER_EVENTS_QUERY = `\n query TransferEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n transferEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n from\n to\n amount\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Token Holders ────────────────────────────────────────────────────────────\n\nexport const TOKEN_HOLDERS_QUERY = `\n query TokenHolders($token: Bytes!, $first: Int!, $skip: Int!) {\n tokenHolders(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: balance\n orderDirection: desc\n ) {\n id\n token\n address\n balance\n firstSeenAt\n hasMinted\n hasBurned\n }\n }\n`\n\n// ─── 24h Snapshot ─────────────────────────────────────────────────────────────\n\nexport const TOKEN_24H_SNAPSHOT_QUERY = `\n query Token24hSnapshot($token: Bytes!) {\n token24hSnapshot(id: $token) {\n id\n token\n mintAmount24h\n burnAmount24h\n mintCount24h\n burnCount24h\n lastUpdatedAt\n }\n }\n`\n\n// ─── Platform ─────────────────────────────────────────────────────────────────\n\nexport const PLATFORM_ADMINS_QUERY = `\n query PlatformAdmins($first: Int!, $skip: Int!) {\n platformAdmins(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\nexport const APPROVED_ISSUERS_QUERY = `\n query ApprovedIssuers($first: Int!, $skip: Int!) {\n approvedIssuers(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\nexport const ACCESS_USERS_QUERY = `\n query AccessUsers($first: Int!, $skip: Int!) {\n accessUsers(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\n// ─── Factory ─────────────────────────────────────────────────────────────────\n\nexport const FACTORY_INITIALIZED_EVENTS_QUERY = `\n query FactoryInitializedEvents($first: Int!, $skip: Int!) {\n factoryInitializedEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n version\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const FACTORY_SET_EVENTS_QUERY = `\n query FactorySetEvents($first: Int!, $skip: Int!) {\n factorySetEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n operator\n oldFactory\n newFactory\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Minter ──────────────────────────────────────────────────────────────────\n\nexport const MINTER_ADDED_EVENTS_QUERY = `\n query MinterAddedEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n minterAddedEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n minter\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const MINTER_REMOVED_EVENTS_QUERY = `\n query MinterRemovedEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n minterRemovedEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n minter\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n","import type { GraphClient } from './client.js'\nimport type {\n MintEvent,\n BurnEvent,\n TransferEvent,\n PauseEvent,\n PausedByOwnerEvent,\n UnpausedByOwnerEvent,\n BlacklistEvent,\n TokenHolder,\n Token24hSnapshot,\n Token,\n MinterAddedEvent,\n MinterRemovedEvent,\n TokenRegisteredEvent,\n} from './types.js'\nimport {\n MINT_EVENTS_QUERY,\n BURN_EVENTS_QUERY,\n TRANSFER_EVENTS_QUERY,\n PAUSE_EVENTS_QUERY,\n PAUSED_BY_OWNER_EVENTS_QUERY,\n UNPAUSED_BY_OWNER_EVENTS_QUERY,\n BLACKLIST_EVENTS_QUERY,\n TOKEN_HOLDERS_QUERY,\n TOKEN_24H_SNAPSHOT_QUERY,\n TOKEN_BY_ID_QUERY,\n TOKENS_QUERY,\n TOKEN_REGISTERED_EVENTS_QUERY,\n MINTER_ADDED_EVENTS_QUERY,\n MINTER_REMOVED_EVENTS_QUERY,\n} from './queries.js'\n\n// ─── Default pagination ───────────────────────────────────────────────────────\n\nconst DEFAULT_FIRST = 100\nconst DEFAULT_SKIP = 0\n\n// ─── TokenHistoryService ──────────────────────────────────────────────────────\n\nexport class TokenHistoryService {\n constructor(private client: GraphClient) {}\n\n // ─── Token ─────────────────────────────────────────────────────────────────\n\n async getToken(address: string): Promise<Token | null> {\n const data = await this.client.query<{ token: Token | null }>(\n TOKEN_BY_ID_QUERY,\n { id: address }\n )\n return data.token\n }\n\n async getTokens(first = DEFAULT_FIRST, skip = DEFAULT_SKIP): Promise<Token[]> {\n const data = await this.client.query<{ tokens: Token[] }>(TOKENS_QUERY, {\n first,\n skip,\n })\n return data.tokens\n }\n\n // ─── Creation ──────────────────────────────────────────────────────────────\n\n async getTokenCreatedEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TokenRegisteredEvent[]> {\n const data = await this.client.query<{\n tokenRegisteredEvents: TokenRegisteredEvent[]\n }>(TOKEN_REGISTERED_EVENTS_QUERY, { first, skip })\n return data.tokenRegisteredEvents\n }\n\n // ─── Mint / Burn ──────────────────────────────────────────────────────────\n\n async getMintHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MintEvent[]> {\n const data = await this.client.query<{ mintEvents: MintEvent[] }>(\n MINT_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.mintEvents\n }\n\n async getBurnHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<BurnEvent[]> {\n const data = await this.client.query<{ burnEvents: BurnEvent[] }>(\n BURN_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.burnEvents\n }\n\n // ─── Transfer ─────────────────────────────────────────────────────────────\n\n async getTransferHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TransferEvent[]> {\n const data = await this.client.query<{ transferEvents: TransferEvent[] }>(\n TRANSFER_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.transferEvents\n }\n\n // ─── Pause ────────────────────────────────────────────────────────────────\n\n async getPauseHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PauseEvent[]> {\n const data = await this.client.query<{ pauseEvents: PauseEvent[] }>(\n PAUSE_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.pauseEvents\n }\n\n async getPausedByOwnerHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PausedByOwnerEvent[]> {\n const data = await this.client.query<{\n pausedByOwnerEvents: PausedByOwnerEvent[]\n }>(PAUSED_BY_OWNER_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.pausedByOwnerEvents\n }\n\n async getUnpausedByOwnerHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<UnpausedByOwnerEvent[]> {\n const data = await this.client.query<{\n unpausedByOwnerEvents: UnpausedByOwnerEvent[]\n }>(UNPAUSED_BY_OWNER_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.unpausedByOwnerEvents\n }\n\n // ─── Blacklist ────────────────────────────────────────────────────────────\n\n async getBlacklistHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<BlacklistEvent[]> {\n const data = await this.client.query<{ blacklistEvents: BlacklistEvent[] }>(\n BLACKLIST_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.blacklistEvents\n }\n\n // ─── Holders ──────────────────────────────────────────────────────────────\n\n async getHolders(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TokenHolder[]> {\n const data = await this.client.query<{ tokenHolders: TokenHolder[] }>(\n TOKEN_HOLDERS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.tokenHolders\n }\n\n // ─── 24h Snapshot ────────────────────────────────────────────────────────\n\n async get24hSnapshot(\n tokenAddress: string\n ): Promise<Token24hSnapshot | null> {\n const data = await this.client.query<{\n token24hSnapshot: Token24hSnapshot | null\n }>(TOKEN_24H_SNAPSHOT_QUERY, { token: tokenAddress })\n return data.token24hSnapshot\n }\n\n // ─── Minters ───────────────────────────────────────────────────────────────\n\n async getMinterAddedHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MinterAddedEvent[]> {\n const data = await this.client.query<{\n minterAddedEvents: MinterAddedEvent[]\n }>(MINTER_ADDED_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.minterAddedEvents\n }\n\n async getMinterRemovedHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MinterRemovedEvent[]> {\n const data = await this.client.query<{\n minterRemovedEvents: MinterRemovedEvent[]\n }>(MINTER_REMOVED_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.minterRemovedEvents\n }\n}\n","import type { GraphClient } from './client.js'\nimport type {\n PlatformAdmin,\n ApprovedIssuer,\n AccessUser,\n FactoryInitializedEvent,\n FactorySetEvent,\n} from './types.js'\nimport {\n PLATFORM_ADMINS_QUERY,\n APPROVED_ISSUERS_QUERY,\n ACCESS_USERS_QUERY,\n FACTORY_INITIALIZED_EVENTS_QUERY,\n FACTORY_SET_EVENTS_QUERY,\n} from './queries.js'\n\n// ─── Default pagination ───────────────────────────────────────────────────────\n\nconst DEFAULT_FIRST = 100\nconst DEFAULT_SKIP = 0\n\n// ─── PlatformHistoryService ───────────────────────────────────────────────────\n\nexport class PlatformHistoryService {\n constructor(private client: GraphClient) {}\n\n // ─── Platform Admins ──────────────────────────────────────────────────────\n\n async getPlatformAdmins(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PlatformAdmin[]> {\n const data = await this.client.query<{ platformAdmins: PlatformAdmin[] }>(\n PLATFORM_ADMINS_QUERY,\n { first, skip }\n )\n return data.platformAdmins\n }\n\n async getActivePlatformAdins(): Promise<PlatformAdmin[]> {\n const all = await this.getPlatformAdmins(1000, 0)\n return all.filter((a) => a.isActive)\n }\n\n // ─── Approved Issuers ────────────────────────────────────────────────────\n\n async getApprovedIssuers(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<ApprovedIssuer[]> {\n const data = await this.client.query<{ approvedIssuers: ApprovedIssuer[] }>(\n APPROVED_ISSUERS_QUERY,\n { first, skip }\n )\n return data.approvedIssuers\n }\n\n async getActiveApprovedIssuers(): Promise<ApprovedIssuer[]> {\n const all = await this.getApprovedIssuers(1000, 0)\n return all.filter((i) => i.isActive)\n }\n\n // ─── Access Users ────────────────────────────────────────────────────────\n\n async getAccessUsers(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<AccessUser[]> {\n const data = await this.client.query<{ accessUsers: AccessUser[] }>(\n ACCESS_USERS_QUERY,\n { first, skip }\n )\n return data.accessUsers\n }\n\n async getActiveAccessUsers(): Promise<AccessUser[]> {\n const all = await this.getAccessUsers(1000, 0)\n return all.filter((u) => u.isActive)\n }\n\n // ─── Factory Events ─────────────────────────────────────────────────────\n\n async getFactoryInitializedEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<FactoryInitializedEvent[]> {\n const data = await this.client.query<{\n factoryInitializedEvents: FactoryInitializedEvent[]\n }>(FACTORY_INITIALIZED_EVENTS_QUERY, { first, skip })\n return data.factoryInitializedEvents\n }\n\n async getFactorySetEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<FactorySetEvent[]> {\n const data = await this.client.query<{\n factorySetEvents: FactorySetEvent[]\n }>(FACTORY_SET_EVENTS_QUERY, { first, skip })\n return data.factorySetEvents\n }\n}\n","import { TokenHistoryService } from './tokenHistory.js'\nimport { PlatformHistoryService } from './platformHistory.js'\nimport { GraphClient } from './client.js'\nimport type {\n MintEvent,\n BurnEvent,\n} from './types.js'\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Convert subgraph BigInt decimal string to bigint */\nexport function parseBigInt(value: string): bigint {\n return BigInt(value)\n}\n\n/** Convert subgraph BigInt to number (may lose precision for huge values) */\nexport function parseBigIntToNumber(value: string): number {\n return Number(BigInt(value))\n}\n\n// ─── AnalyticsService ─────────────────────────────────────────────────────────\n\nexport class AnalyticsService {\n readonly token: TokenHistoryService\n readonly platform: PlatformHistoryService\n\n constructor(graph: GraphClient) {\n this.token = new TokenHistoryService(graph)\n this.platform = new PlatformHistoryService(graph)\n }\n\n // ─── Token analytics ──────────────────────────────────────────────────────\n\n /**\n * Get a quick supply summary for a token.\n * Combines live token stats (from GQL) with 24h snapshot.\n */\n async getTokenSupplySummary(tokenAddress: string) {\n const [token, snapshot] = await Promise.all([\n this.token.getToken(tokenAddress),\n this.token.get24hSnapshot(tokenAddress),\n ])\n\n if (!token) return null\n\n return {\n tokenAddress,\n name: token.name,\n symbol: token.symbol,\n status: token.status,\n totalMintAmount: parseBigInt(token.totalMintAmount),\n totalBurnAmount: parseBigInt(token.totalBurnAmount),\n netSupply:\n parseBigInt(token.totalMintAmount) -\n parseBigInt(token.totalBurnAmount),\n activeHolderCount: parseBigIntToNumber(token.activeHolderCount),\n snapshot: snapshot\n ? {\n mintAmount24h: parseBigInt(snapshot.mintAmount24h),\n burnAmount24h: parseBigInt(snapshot.burnAmount24h),\n mintCount24h: parseBigIntToNumber(snapshot.mintCount24h),\n burnCount24h: parseBigIntToNumber(snapshot.burnCount24h),\n }\n : null,\n }\n }\n\n /**\n * Get top N holders for a token.\n * Returns address + balance sorted by balance descending.\n */\n async getTopHolders(tokenAddress: string, limit = 10) {\n const holders = await this.token.getHolders(tokenAddress, limit, 0)\n const mapped = holders.map((h) => ({\n address: h.address,\n balance: parseBigInt(h.balance),\n }))\n return mapped.sort((a, b) => (a.balance > b.balance ? -1 : 1))\n }\n\n /**\n * Get recent activity (mint + burn events) for a token.\n * Useful for a quick activity feed.\n */\n async getRecentActivity(tokenAddress: string, limit = 20) {\n const [mints, burns] = await Promise.all([\n this.token.getMintHistory(tokenAddress, limit, 0),\n this.token.getBurnHistory(tokenAddress, limit, 0),\n ])\n\n type ActivityItem = {\n type: 'mint' | 'burn'\n txHash: string\n blockNumber: bigint\n timestamp: bigint\n amount: bigint\n actor: string\n }\n\n const events: ActivityItem[] = [\n ...mints.map((e: MintEvent): ActivityItem => ({\n type: 'mint',\n txHash: e.transactionHash,\n blockNumber: parseBigInt(e.blockNumber),\n timestamp: parseBigInt(e.timestamp),\n amount: parseBigInt(e.amount),\n actor: e.operator,\n })),\n ...burns.map((e: BurnEvent): ActivityItem => ({\n type: 'burn',\n txHash: e.transactionHash,\n blockNumber: parseBigInt(e.blockNumber),\n timestamp: parseBigInt(e.timestamp),\n amount: parseBigInt(e.amount),\n actor: e.operator,\n })),\n ]\n\n // Sort by block desc\n events.sort((a, b) =>\n a.blockNumber > b.blockNumber ? -1 : 1\n )\n\n return events.slice(0, limit)\n }\n\n /**\n * Get a holder balance across all their holdings.\n * Useful for an address summary view.\n */\n async getAccountPortfolio(ethAddress: string): Promise<\n Array<{\n token: string\n balance: bigint\n }>\n > {\n // NOTE: subgraph doesn't expose a direct \"account\" entity,\n // so we scan all token holders and filter client-side.\n // For large scale, add a dedicated `account(address: Bytes)` query to the subgraph.\n const tokens = await this.token.getTokens(100, 0)\n const results = await Promise.all(\n tokens.map(async (t) => {\n const holders = await this.token.getHolders(t.address, 1000, 0)\n const found = holders.find(\n (h: { address: string }) => h.address.toLowerCase() === ethAddress.toLowerCase()\n )\n return found\n ? { token: t.address, balance: parseBigInt(found.balance) }\n : null\n })\n )\n return results.filter(Boolean) as Array<{ token: string; balance: bigint }>\n }\n}\n","// ─── Graph Client ─────────────────────────────────────────────────────────────\n\nexport { GraphClient, GraphError } from './client.js'\nexport type { GraphClientConfig } from './client.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type {\n Token,\n TokenHolder,\n Token24hSnapshot,\n TokenStatus,\n MintEvent,\n BurnEvent,\n TransferEvent,\n PauseEvent,\n PausedByOwnerEvent,\n UnpausedByOwnerEvent,\n BlacklistEvent,\n TokenBlacklist,\n PlatformAdmin,\n ApprovedIssuer,\n AccessUser,\n FactoryInitializedEvent,\n FactorySetEvent,\n MinterAddedEvent,\n MinterRemovedEvent,\n TokenRegisteredEvent,\n Bytes,\n BigInt,\n PaginatedResult,\n PageInfo,\n} from './types.js'\n\n// ─── Services ─────────────────────────────────────────────────────────────────\n\nexport { TokenHistoryService } from './tokenHistory.js'\nexport { PlatformHistoryService } from './platformHistory.js'\nexport { AnalyticsService, parseBigInt, parseBigIntToNumber } from './analytics.js'\n\n// ─── Convenience factory ──────────────────────────────────────────────────────\n\nimport { GraphClient } from './client.js'\nimport { TokenHistoryService } from './tokenHistory.js'\nimport { PlatformHistoryService } from './platformHistory.js'\nimport { AnalyticsService } from './analytics.js'\n\nexport interface IsometryGraphConfig {\n endpoint: string\n headers?: Record<string, string>\n}\n\n/**\n * Create all graph services from a single config.\n * Convenience wrapper — individual services are also importable directly.\n */\nexport function createGraphClient(config: IsometryGraphConfig) {\n const client = new GraphClient(config)\n return {\n client,\n token: new TokenHistoryService(client),\n platform: new PlatformHistoryService(client),\n analytics: new AnalyticsService(client),\n }\n}\n","/**\n * IsometryClient — RPC + Graph 双通道聚合\n */\n\nimport { createWallet, type IWallet } from './rpc/wallet.js'\nimport { PlatformRpcService, FactoryRpcService, StableCoinRpcService } from './rpc/index.js'\nimport { createGraphClient } from './graph/index.js'\nimport { TokenHistoryService } from './graph/tokenHistory.js'\nimport { PlatformHistoryService } from './graph/platformHistory.js'\nimport { AnalyticsService } from './graph/analytics.js'\nimport type { ContractAddresses } from './rpc/contracts.js'\nimport type { IsometryGraphConfig } from './graph/index.js'\n\n// ─── Config ───────────────────────────────────────────────────────────────────\n\nexport interface IsometryConfig {\n chainId?: number\n rpcUrl?: string\n graphUrl?: string\n addresses?: ContractAddresses\n privateKey?: string\n}\n\nconst DEFAULT_ADDRESSES: ContractAddresses = {\n platform: '0x062B11C5Ed0F2b1f9B7dFaa7B95737dD221863F7',\n factory: '0x73D6BC64f4f54F9dF05851216F70F42135d56864',\n beacon: '0x99d6512B5483DFA003F73F737f87e7DAE9482F89',\n}\n\nfunction resolveAddresses(env: typeof process.env): ContractAddresses {\n return {\n platform: env.ISOMETRY_PLATFORM_ADDRESS ?? DEFAULT_ADDRESSES.platform,\n factory: env.ISOMETRY_FACTORY_ADDRESS ?? DEFAULT_ADDRESSES.factory,\n beacon: env.ISOMETRY_BEACON_ADDRESS ?? DEFAULT_ADDRESSES.beacon,\n }\n}\n\n// ─── SDK version ─────────────────────────────────────────────────────────────\n\nexport const SDK_VERSION = '0.4.2'\n\n// ─── IsometryClient ────────────────────────────────────────────────────────────\n\nexport class IsometryClient {\n readonly rpc: {\n platform: PlatformRpcService\n factory: FactoryRpcService\n token: StableCoinRpcService\n }\n\n readonly graph: ReturnType<typeof createGraphClient>\n\n readonly config: {\n chainId: number\n rpcUrl: string\n graphUrl: string\n addresses: ContractAddresses\n privateKey: string | undefined\n walletMode: string\n }\n\n private _wallet: IWallet\n private _addresses: ContractAddresses\n private _chainId: number\n\n constructor(config: IsometryConfig = {}) {\n const rpcUrl = config.rpcUrl ?? process.env.ISOMETRY_RPC_URL ?? 'https://ethereum-sepolia.publicnode.com'\n const graphUrl =\n config.graphUrl ?? process.env.ISOMETRY_GRAPH_URL ??\n 'https://console.isometry.network/graph/subgraphs/name/isometry'\n const privateKey = config.privateKey ?? process.env.ISOMETRY_PRIVATE_KEY\n this._chainId = config.chainId ?? parseInt(process.env.ISOMETRY_CHAIN_ID ?? '11155111')\n\n this._wallet = createWallet(rpcUrl, privateKey)\n this._addresses = config.addresses ?? resolveAddresses(process.env)\n\n this.config = {\n chainId: this._chainId,\n rpcUrl,\n graphUrl,\n addresses: this._addresses,\n privateKey,\n walletMode: this._wallet.mode as string,\n }\n\n // Read runner — always use provider\n const runner = this._wallet.provider as unknown as import('ethers').ContractRunner\n\n this.rpc = {\n platform: new PlatformRpcService(this._addresses, runner),\n factory: new FactoryRpcService(this._addresses, runner),\n token: new StableCoinRpcService(this._addresses, runner),\n }\n\n const graphConfig: IsometryGraphConfig = { endpoint: graphUrl }\n const graphResult = createGraphClient(graphConfig)\n this.graph = graphResult\n\n // Pass the actual GraphClient (not the wrapper) to services\n this.graph.token = new TokenHistoryService(graphResult.client)\n this.graph.platform = new PlatformHistoryService(graphResult.client)\n this.graph.analytics = new AnalyticsService(graphResult.client)\n }\n\n /** Validate chain ID matches configured value */\n async validateChain(): Promise<void> {\n const network = await this._wallet.provider.getNetwork()\n if (Number(network.chainId) !== this._chainId) {\n throw new Error(\n `Chain ID mismatch: expected ${this._chainId}, got ${network.chainId}`\n )\n }\n }\n\n /** Get connected address (null if read-only) */\n async getAddress(): Promise<string | null> {\n return this._wallet.getAddress()\n }\n\n async destroy(): Promise<void> {\n // No-op for now\n }\n}\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createClient(config?: IsometryConfig): IsometryClient {\n return new IsometryClient(config)\n}\n","// ─── Client ───────────────────────────────────────────────────────────────────\n\nexport { IsometryClient, createClient, SDK_VERSION } from './client.js'\nexport type { IsometryConfig } from './client.js'\n\n// ─── RPC ─────────────────────────────────────────────────────────────────────\n\nexport { PlatformRpcService, FactoryRpcService, StableCoinRpcService } from './rpc/index.js'\nexport type {\n PlatformInfo,\n PlatformRoles,\n TokenInfo,\n TokenStats,\n TokenRoles,\n} from './rpc/index.js'\nexport { getContracts, getStableCoin } from './rpc/contracts.js'\nexport type { ContractAddresses } from './rpc/contracts.js'\nexport { createWallet, ReadOnlyWallet, PrivateKeyWallet } from './rpc/wallet.js'\nexport type { IWallet, WalletMode } from './rpc/wallet.js'\n\n// ─── Graph ──────────────────────────────────────────────────────────────────\n\nexport { createGraphClient, GraphClient, GraphError } from './graph/index.js'\nexport type { IsometryGraphConfig } from './graph/index.js'\nexport { TokenHistoryService, PlatformHistoryService, AnalyticsService } from './graph/index.js'\n","import { Command } from 'commander'\n\n/** JSON replacer that converts BigInt to string */\nfunction jsonReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value\n}\n\n\nloadEnv()\n\n// ─── system version ───────────────────────────────────────────────────────────\n\nasync function version(json: boolean): Promise<void> {\n const data = {\n cli: SDK_VERSION,\n sdk: SDK_VERSION,\n graphUrl:\n process.env.ISOMETRY_GRAPH_URL ??\n 'https://console.isometry.network/graph/subgraphs/name/isometry',\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`isometry CLI v${SDK_VERSION}`)\n console.log(`SDK v${SDK_VERSION}`)\n console.log(`Graph URL ${data.graphUrl}`)\n }\n}\n\n// ─── system status ────────────────────────────────────────────────────────────\n\nasync function status(json: boolean): Promise<void> {\n const { GraphClient } = await import('../../sdk/index.js')\n\n const graphUrl =\n process.env.ISOMETRY_GRAPH_URL ??\n 'https://console.isometry.network/graph/subgraphs/name/isometry'\n\n const graph = new GraphClient({ endpoint: graphUrl })\n\n let meta = null\n let metaError = null\n\n try {\n meta = await graph.ping()\n } catch (err) {\n metaError = err instanceof Error ? err.message : String(err)\n }\n\n const data = { subgraph: meta ? 'connected' : 'unreachable', meta, metaError }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n if (meta) {\n console.log(`Subgraph ✅ connected`)\n console.log(`Block ${meta.number}`)\n console.log(`Deployment ${meta.deployment}`)\n } else {\n console.log(`Subgraph ❌ unreachable — ${metaError}`)\n }\n }\n}\n\n// ─── Register ─────────────────────────────────────────────────────────────────\n\nexport function registerSystem(parent: Command): void {\n const system = parent.command('system').description('System & diagnostics')\n\n system\n .command('version')\n .description('Show CLI and SDK version')\n .option('--json', 'Output as JSON')\n .action((opts) => version(opts.json ?? false))\n\n system\n .command('status')\n .description('Check subgraph connectivity')\n .option('--json', 'Output as JSON')\n .action((opts) => status(opts.json ?? false))\n}\n","import { Command } from 'commander'\n\n/** JSON replacer that converts BigInt to string */\nfunction jsonReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value\n}\n\n\n\n\nloadEnv()\n\n// ─── platform info ────────────────────────────────────────────────────────────\n\nasync function info(json: boolean): Promise<void> {\n const client = createClient()\n\n const [platformInfo, graphAdmins, graphIssuers, graphAccessUsers] = await Promise.all([\n client.rpc.platform.getPlatformInfo(),\n client.graph.platform.getActivePlatformAdins(),\n client.graph.platform.getActiveApprovedIssuers(),\n client.graph.platform.getActiveAccessUsers(),\n ])\n\n const data = {\n // RPC state\n paused: platformInfo.paused,\n tokenCount: platformInfo.tokenCount.toString(),\n platformAdminCount: platformInfo.platformAdminCount.toString(),\n approvedIssuerCount: platformInfo.approvedIssuerCount.toString(),\n accessUserCount: platformInfo.accessUserCount.toString(),\n // Graph historical\n activeAdmins: (graphAdmins as PlatformAdmin[]).map((a) => ({\n address: a.account,\n addedAt: a.addedAt,\n })),\n activeIssuers: (graphIssuers as ApprovedIssuer[]).map((i) => ({\n address: i.account,\n addedAt: i.addedAt,\n })),\n activeAccessUsers: (graphAccessUsers as AccessUser[]).map((u) => ({\n address: u.account,\n addedAt: u.addedAt,\n })),\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`Platform Paused ${data.paused ? 'YES ❌' : 'No ✅'}`)\n console.log(`Token Count ${data.tokenCount}`)\n console.log(`Platform Admins ${data.platformAdminCount}`)\n console.log(`Approved Issuers ${data.approvedIssuerCount}`)\n console.log(`Access Users ${data.accessUserCount}`)\n if (data.activeAdmins.length > 0) {\n console.log('')\n data.activeAdmins.forEach((a) => console.log(` Admin ${a.address}`))\n }\n }\n}\n\n// ─── platform tokens ────────────────────────────────────────────────────────\n\nasync function tokens(json: boolean): Promise<void> {\n const client = createClient()\n const tokenAddrs = await client.rpc.platform.getAllTokens()\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data: { tokens: tokenAddrs } }, jsonReplacer, 2))\n } else {\n console.log(`Registered tokens: ${tokenAddrs.length}`)\n tokenAddrs.forEach((a) => console.log(` ${a}`))\n }\n}\n\n// ─── Register ─────────────────────────────────────────────────────────────────\n\nexport function registerPlatform(parent: Command): void {\n const platform = parent.command('platform').description('Platform read operations')\n\n platform\n .command('info')\n .description('Get platform state (paused, counts, roles from Graph)')\n .option('--json', 'Output as JSON')\n .action((opts) => info(opts.json ?? false))\n\n platform\n .command('tokens')\n .description('List all registered token addresses (RPC)')\n .option('--json', 'Output as JSON')\n .action((opts) => tokens(opts.json ?? false))\n\n // Write commands (admin, issuer, access management)\n registerPlatformWrite(platform)\n}\n","import { config } from 'dotenv'\nimport { resolve, dirname } from 'path'\nimport { fileURLToPath } from 'url'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\n/** Load .env from project root (one level above src/, i.e. dist/ -> ../) */\nexport function loadEnv(): void {\n config({ path: resolve(__dirname, '../.env') })\n}\n","/**\n * Token write commands: mint, burn, pause, unpause, blacklist\n *\n * Architecture:\n * - Each command uses WriteExecutor for a consistent interface\n * - --simulate → dry-run (estimateGas only)\n * - --json → structured output\n * - No privateKey → clear error with code NO_SIGNER\n */\n\nimport { Command } from 'commander'\n\n/** JSON replacer that converts BigInt to string */\nfunction jsonReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value\n}\n\n\n\n\nloadEnv()\n\n// ─── Shared executor factory ───────────────────────────────────────────────────\n\nasync function getTokenExecutor(\n tokenAddress: string\n): Promise<{ executor: WriteExecutor } | { error: string; code: string }> {\n if (!tokenAddress) {\n return { error: 'Token address is required', code: 'INVALID_ARGUMENT' }\n }\n\n const client = createClient()\n\n if (!client.config.privateKey) {\n return {\n error: 'ISOMETRY_PRIVATE_KEY is not set — cannot sign transactions',\n code: 'NO_SIGNER',\n }\n }\n\n // Validate private key format before creating wallet to avoid ethers throwing\n const pk = client.config.privateKey\n if (!/^0x[0-9a-fA-F]{64}$/.test(pk)) {\n return { error: 'ISOMETRY_PRIVATE_KEY format invalid — must be 0x-prefixed 64-char hex', code: 'INVALID_KEY' }\n }\n\n const wallet = createWallet(client.config.rpcUrl, pk)\n if (!wallet.signer) {\n return { error: 'Wallet has no signer', code: 'NO_SIGNER' }\n }\n\n const { getStableCoin } = await import('../../sdk/rpc/contracts.js')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tokenContract = getStableCoin(tokenAddress, wallet.signer as any)\n\n const executor = new WriteExecutor({ wallet, contract: tokenContract })\n return { executor }\n}\n\n// ─── Shared output helper ─────────────────────────────────────────────────────\n\nfunction outputError(code: string, message: string, json: boolean): void {\n if (json) {\n console.log(JSON.stringify({ ok: false, code, message }, jsonReplacer, 2))\n } else {\n console.log(`❌ [${code}] ${message}`)\n }\n}\n\n// ─── token mint ─────────────────────────────────────────────────────────────\n\ninterface MintOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function tokenMint(\n tokenAddress: string,\n to: string,\n amount: string,\n opts: MintOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Mint via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'mint', args: [to, BigInt(amount), memo] })\n : await executor.execute({ method: 'mint', args: [to, BigInt(amount), memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── token burn ─────────────────────────────────────────────────────────────\n\ninterface BurnOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function tokenBurn(\n tokenAddress: string,\n amount: string,\n opts: BurnOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Burn via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'burn', args: [BigInt(amount), memo] })\n : await executor.execute({ method: 'burn', args: [BigInt(amount), memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── token pause / unpause ──────────────────────────────────────────────────\n\ninterface PauseOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function tokenPause(tokenAddress: string, opts: PauseOpts): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Pause via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'pause', args: [memo] })\n : await executor.execute({ method: 'pause', args: [memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\nasync function tokenUnpause(tokenAddress: string, opts: PauseOpts): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Unpause via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'unpause', args: [memo] })\n : await executor.execute({ method: 'unpause', args: [memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── token blacklist ───────────────────────────────────────────────────────\n\ninterface BlacklistOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function blacklistAdd(\n tokenAddress: string,\n user: string,\n opts: BlacklistOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Blacklist add via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'blacklist', args: [user, memo] })\n : await executor.execute({ method: 'blacklist', args: [user, memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\nasync function blacklistRemove(\n tokenAddress: string,\n user: string,\n opts: BlacklistOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Blacklist remove via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'unBlacklist', args: [user, memo] })\n : await executor.execute({ method: 'unBlacklist', args: [user, memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── token blacklist manager ────────────────────────────────────────────────\n\nasync function addBlacklistManager(\n tokenAddress: string,\n account: string,\n opts: BlacklistOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Add blacklist manager via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'addBlacklistManager', args: [account, memo] })\n : await executor.execute({ method: 'addBlacklistManager', args: [account, memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\nasync function removeBlacklistManager(\n tokenAddress: string,\n account: string,\n opts: BlacklistOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Remove blacklist manager via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'removeBlacklistManager', args: [account, memo] })\n : await executor.execute({ method: 'removeBlacklistManager', args: [account, memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── token minter management ──────────────────────────────────────────────────\n\ninterface MinterOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function addMinter(\n tokenAddress: string,\n minter: string,\n allowance: string,\n opts: MinterOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Add minter via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'addMinter', args: [minter, BigInt(allowance), memo] })\n : await executor.execute({ method: 'addMinter', args: [minter, BigInt(allowance), memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\nasync function removeMinter(\n tokenAddress: string,\n minter: string,\n opts: MinterOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Remove minter via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'removeMinter', args: [minter, memo] })\n : await executor.execute({ method: 'removeMinter', args: [minter, memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── Register ─────────────────────────────────────────────────────────────────\n\nexport function registerTokenWrite(token: Command): void {\n // Write commands are registered on the existing 'token' command\n\n // ─── mint ────────────────────────────────────────────────────────────────\n\n token\n .command('mint <token-address> <to> <amount>')\n .description('Mint new tokens (requires MASTER_MINTER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, to, amount, opts) =>\n tokenMint(tokenAddress, to, amount, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── burn ───────────────────────────────────────────────────────────────\n\n token\n .command('burn <token-address> <amount>')\n .description('Burn tokens from caller balance')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, amount, opts) =>\n tokenBurn(tokenAddress, amount, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── pause ───────────────────────────────────────────────────────────────\n\n token\n .command('pause <token-address>')\n .description('Pause all transfers (requires PAUSER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, opts) =>\n tokenPause(tokenAddress, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── unpause ────────────────────────────────────────────────────────────\n\n token\n .command('unpause <token-address>')\n .description('Unpause all transfers (requires PAUSER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, opts) =>\n tokenUnpause(tokenAddress, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── blacklist ─────────────────────────────────────────────────────────\n\n const blacklist = token.command('blacklist').description('Blacklist management')\n\n blacklist\n .command('add <token-address> <user>')\n .description('Add user to token blacklist')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, user, opts) =>\n blacklistAdd(tokenAddress, user, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n blacklist\n .command('remove <token-address> <user>')\n .description('Remove user from token blacklist')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, user, opts) =>\n blacklistRemove(tokenAddress, user, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── Minter management ─────────────────────────────────────────────────────\n\n const minter = token.command('minter').description('Minter management')\n\n minter\n .command('add <token-address> <minter> <allowance>')\n .description('Add minter with allowance (requires MASTER_MINTER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, minterAddr, allowance, opts) =>\n addMinter(tokenAddress, minterAddr, allowance, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n minter\n .command('remove <token-address> <minter>')\n .description('Remove minter (requires MASTER_MINTER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, minterAddr, opts) =>\n removeMinter(tokenAddress, minterAddr, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── Blacklist manager management ───────────────────────────────────────────\n\n const blMgr = token.command('bl-manager').description('Blacklist manager management')\n\n blMgr\n .command('add <token-address> <account>')\n .description('Add blacklist manager (requires TOKEN_OWNER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, account, opts) =>\n addBlacklistManager(tokenAddress, account, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n blMgr\n .command('remove <token-address> <account>')\n .description('Remove blacklist manager (requires TOKEN_OWNER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, account, opts) =>\n removeBlacklistManager(tokenAddress, account, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n}\n","import { Command } from 'commander'\nimport { loadEnv } from '../../env.js'\nimport { createClient } from '../../sdk/index.js'\nimport { parseBigIntToNumber } from '../../sdk/graph/analytics.js'\nimport { registerTokenWrite } from './tokenWrite.js'\n\n// Load env before any SDK code runs\nloadEnv()\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction formatBigInt(v: bigint): string {\n return v.toString()\n}\n\n/** JSON replacer that converts BigInt to string — use as 3rd arg to JSON.stringify */\nfunction jsonReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value\n}\n\n// ─── token info ─────────────────────────────────────────────────────────────\n\nasync function tokenInfo(addr: string, json: boolean): Promise<void> {\n const client = createClient()\n\n const [info, stats] = await Promise.all([\n client.rpc.token.getTokenInfo(addr),\n client.rpc.token.getTokenStats(addr),\n ])\n\n const data = {\n address: info.address,\n name: info.name,\n symbol: info.symbol,\n decimals: info.decimals,\n totalSupply: formatBigInt(info.totalSupply),\n paused: info.paused,\n holdersTotal: parseBigIntToNumber(stats.holdersTotal.toString()),\n totalMinted: formatBigInt(stats.totalMinted),\n totalBurned: formatBigInt(stats.totalBurned),\n totalAllowance: formatBigInt(stats.totalAllowance),\n mintersCount: parseBigIntToNumber(stats.mintersCount.toString()),\n blacklistCount: parseBigIntToNumber(stats.blacklistCount.toString()),\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`Address ${data.address}`)\n console.log(`Name ${data.name}`)\n console.log(`Symbol ${data.symbol}`)\n console.log(`Decimals ${data.decimals}`)\n console.log(`Total Supply ${data.totalSupply}`)\n console.log(`Paused ${data.paused ? 'YES ❌' : 'No ✅'}`)\n console.log(`Holders ${data.holdersTotal}`)\n console.log(`Total Minted ${data.totalMinted}`)\n console.log(`Total Burned ${data.totalBurned}`)\n console.log(`Minters ${data.mintersCount}`)\n console.log(`Blacklist Count ${data.blacklistCount}`)\n }\n}\n\n// ─── token stats ─────────────────────────────────────────────────────────────\n\nasync function tokenStats(addr: string, json: boolean): Promise<void> {\n const client = createClient()\n const stats = await client.rpc.token.getTokenStats(addr)\n\n const net = BigInt(stats.totalMinted) - BigInt(stats.totalBurned)\n\n const data = {\n address: stats.address,\n holdersTotal: parseBigIntToNumber(stats.holdersTotal.toString()),\n totalMinted: formatBigInt(stats.totalMinted),\n totalBurned: formatBigInt(stats.totalBurned),\n netSupply: formatBigInt(net),\n totalAllowance: formatBigInt(stats.totalAllowance),\n mintersCount: parseBigIntToNumber(stats.mintersCount.toString()),\n blacklistCount: parseBigIntToNumber(stats.blacklistCount.toString()),\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`Address ${data.address}`)\n console.log(`Holders ${data.holdersTotal}`)\n console.log(`Total Minted ${data.totalMinted}`)\n console.log(`Total Burned ${data.totalBurned}`)\n console.log(`Net Supply ${data.netSupply}`)\n console.log(`Total Allowance ${data.totalAllowance}`)\n console.log(`Minters ${data.mintersCount}`)\n console.log(`Blacklist ${data.blacklistCount}`)\n }\n}\n\n// ─── token roles ─────────────────────────────────────────────────────────────\n\nasync function tokenRoles(addr: string, account: string, json: boolean): Promise<void> {\n const client = createClient()\n const roles = await client.rpc.token.getUserRoles(addr, account)\n\n const data = {\n token: roles.address,\n account: roles.account,\n isTokenOwner: roles.isTokenOwner,\n isMasterMinter: roles.isMasterMinter,\n isMinter: roles.isMinter,\n isBlacklistManager: roles.isBlacklistManager,\n isMasterStatus: roles.isMasterStatus,\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`Token ${data.token}`)\n console.log(`Account ${data.account}`)\n console.log(`Token Owner ${data.isTokenOwner ? '✅' : '❌'}`)\n console.log(`Master Minter ${data.isMasterMinter ? '✅' : '❌'}`)\n console.log(`Minter ${data.isMinter ? '✅' : '❌'}`)\n console.log(`Blacklist Manager ${data.isBlacklistManager ? '✅' : '❌'}`)\n console.log(`Master Status ${data.isMasterStatus ? '✅' : '❌'}`)\n }\n}\n\n// ─── token history (combined mint + burn) ──────────────────────────────────\n\nasync function tokenHistory(addr: string, first: number, json: boolean): Promise<void> {\n const client = createClient()\n\n const [mints, burns] = await Promise.all([\n client.graph.token.getMintHistory(addr, first, 0),\n client.graph.token.getBurnHistory(addr, first, 0),\n ])\n\n type HistoryItem = {\n type: 'mint' | 'burn'\n amount: string\n actor: string\n block: string\n txHash: string\n }\n\n const events: HistoryItem[] = [\n ...mints.map((e) => ({\n type: 'mint' as const,\n amount: e.amount,\n actor: e.operator,\n block: e.blockNumber,\n txHash: e.transactionHash,\n })),\n ...burns.map((e) => ({\n type: 'burn' as const,\n amount: e.amount,\n actor: e.operator,\n block: e.blockNumber,\n txHash: e.transactionHash,\n })),\n ]\n\n events.sort((a, b) => (BigInt(a.block) > BigInt(b.block) ? -1 : 1))\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data: { events } }, jsonReplacer, 2))\n } else {\n console.log(`Token ${addr}`)\n console.log(`Mint events ${mints.length} Burn events ${burns.length}`)\n events.slice(0, 10).forEach((e) => {\n console.log(` [${e.type.padEnd(4)}] ${e.amount} block ${e.block}`)\n })\n }\n}\n\n// ─── token mint-history ────────────────────────────────────────────────────\n\nasync function tokenMintHistory(addr: string, first: number, json: boolean): Promise<void> {\n const client = createClient()\n const events = await client.graph.token.getMintHistory(addr, first, 0)\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data: { events } }, jsonReplacer, 2))\n } else {\n console.log(`Token ${addr} — Mint History (${events.length} events)`)\n events.slice(0, 10).forEach((e) => {\n console.log(` [mint] to:${e.to} amount:${e.amount} op:${e.operator} block:${e.blockNumber}`)\n })\n }\n}\n\n// ─── token burn-history ────────────────────────────────────────────────────\n\nasync function tokenBurnHistory(addr: string, first: number, json: boolean): Promise<void> {\n const client = createClient()\n const events = await client.graph.token.getBurnHistory(addr, first, 0)\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data: { events } }, jsonReplacer, 2))\n } else {\n console.log(`Token ${addr} — Burn History (${events.length} events)`)\n events.slice(0, 10).forEach((e) => {\n console.log(` [burn] from:${e.from} amount:${e.amount} op:${e.operator} block:${e.blockNumber}`)\n })\n }\n}\n\n// ─── token pause-history ───────────────────────────────────────────────────\n\nasync function tokenPauseHistory(addr: string, first: number, json: boolean): Promise<void> {\n const client = createClient()\n\n const [pauseEvts, pausedEvts, unpausedEvts] = await Promise.all([\n client.graph.token.getPauseHistory(addr, first, 0),\n client.graph.token.getPausedByOwnerHistory(addr, first, 0),\n client.graph.token.getUnpausedByOwnerHistory(addr, first, 0),\n ])\n\n if (json) {\n console.log(JSON.stringify({\n ok: true,\n data: { pauseEvents: pauseEvts, pausedByOwnerEvents: pausedEvts, unpausedByOwnerEvents: unpausedEvts }\n }, null, 2))\n } else {\n console.log(`Token ${addr} — Pause History`)\n console.log(`Pause events ${pauseEvts.length}`)\n console.log(`PausedByOwner ${pausedEvts.length}`)\n console.log(`UnpausedByOwner ${unpausedEvts.length}`)\n }\n}\n\n// ─── Register ─────────────────────────────────────────────────────────────────\n//\n// Commander v12 action signature: action(options, ...positionalArgs)\n// positional args come AFTER the options object\n//\n\nexport function registerToken(parent: Command): void {\n const token = parent.command('token').description('Token read operations')\n\n // Phase A — RPC\n token\n .command('info <address>')\n .description('Get token info and stats (RPC)')\n .option('--json', 'Output as JSON')\n .action((addr, opts) => tokenInfo(addr, opts.json ?? false))\n\n token\n .command('stats <address>')\n .description('Get token supply stats (RPC)')\n .option('--json', 'Output as JSON')\n .action((addr, opts) => tokenStats(addr, opts.json ?? false))\n\n token\n .command('roles <address> <account>')\n .description('Get account roles on a token (RPC)')\n .option('--json', 'Output as JSON')\n .action((addr, account, opts) => tokenRoles(addr, account, opts.json ?? false))\n\n // Phase B — Graph\n token\n .command('history <address>')\n .description('Get combined mint+burn history (GraphQL)')\n .option('--first <number>', 'Number of events', '100')\n .option('--json', 'Output as JSON')\n .action((addr, opts) =>\n tokenHistory(addr, parseInt(opts.first ?? '100', 10), opts.json ?? false)\n )\n\n token\n .command('mint-history <address>')\n .description('Get mint history (GraphQL)')\n .option('--first <number>', 'Number of events', '100')\n .option('--json', 'Output as JSON')\n .action((addr, opts) =>\n tokenMintHistory(addr, parseInt(opts.first ?? '100', 10), opts.json ?? false)\n )\n\n token\n .command('burn-history <address>')\n .description('Get burn history (GraphQL)')\n .option('--first <number>', 'Number of events', '100')\n .option('--json', 'Output as JSON')\n .action((addr, opts) =>\n tokenBurnHistory(addr, parseInt(opts.first ?? '100', 10), opts.json ?? false)\n )\n\n token\n .command('pause-history <address>')\n .description('Get pause/unpause history (GraphQL)')\n .option('--first <number>', 'Number of events', '100')\n .option('--json', 'Output as JSON')\n .action((addr, opts) =>\n tokenPauseHistory(addr, parseInt(opts.first ?? '100', 10), opts.json ?? false)\n )\n\n // Write commands (mint, burn, pause, unpause, blacklist)\n registerTokenWrite(token)\n}\n","import { Command } from 'commander'\n\n/** JSON replacer that converts BigInt to string */\nfunction jsonReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value\n}\n\n\n\nloadEnv()\n\n// ─── factory info ─────────────────────────────────────────────────────────────\n\nasync function factoryInfo(json: boolean): Promise<void> {\n const client = createClient()\n\n const [beacon, platformAddr] = await Promise.all([\n client.rpc.factory.getBeaconAddress(),\n client.rpc.factory.getPlatformAddress(),\n ])\n\n const data = {\n beacon,\n platform: platformAddr,\n addresses: client.config.addresses,\n chainId: client.config.chainId,\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`Beacon ${data.beacon}`)\n console.log(`Platform ${data.platform}`)\n console.log(`Chain ID ${data.chainId}`)\n console.log(`Config Factory ${data.addresses.factory ?? '(not set)'}`)\n console.log(`Config Beacon ${data.addresses.beacon ?? '(not set)'}`)\n }\n}\n\n// ─── factory create ──────────────────────────────────────────────────────────\n\ninterface CreateOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function factoryCreate(name: string, symbol: string, opts: CreateOpts): Promise<void> {\n const client = createClient()\n\n if (!client.config.addresses.factory) {\n const msg = 'ISOMETRY_FACTORY_ADDRESS is not configured'\n console.log(opts.json\n ? JSON.stringify({ ok: false, code: 'NOT_CONFIGURED', message: msg }, jsonReplacer, 2)\n : `❌ ${msg}`)\n return\n }\n\n if (!client.config.privateKey) {\n const msg = 'ISOMETRY_PRIVATE_KEY is not set — cannot sign transactions'\n console.log(opts.json\n ? JSON.stringify({ ok: false, code: 'NO_SIGNER', message: msg }, jsonReplacer, 2)\n : `❌ ${msg}`)\n return\n }\n\n // Create a wallet with signer for write operations\n const wallet = createWallet(client.config.rpcUrl, client.config.privateKey)\n\n if (!wallet.signer) {\n const msg = 'Wallet has no signer — check ISOMETRY_PRIVATE_KEY'\n console.log(opts.json\n ? JSON.stringify({ ok: false, code: 'NO_SIGNER', message: msg }, jsonReplacer, 2)\n : `❌ ${msg}`)\n return\n }\n\n // Get factory contract with signer\n const contracts = getContracts(client.config.addresses, wallet.signer)\n\n const memo = opts.memo || `Created via isometry CLI at ${new Date().toISOString()}`\n\n const executor = new WriteExecutor({\n wallet,\n contract: contracts.factory,\n })\n\n const call = {\n method: 'createStableCoin',\n args: [name, symbol, memo],\n }\n\n const result: WriteResult = opts.simulate\n ? await executor.simulate(call)\n : await executor.execute(call)\n\n console.log(formatWriteResult(result, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n}\n\n// ─── Register ─────────────────────────────────────────────────────────────────\n\nexport function registerFactory(parent: Command): void {\n const factory = parent.command('factory').description('Factory operations')\n\n factory\n .command('info')\n .description('Get factory addresses (RPC)')\n .option('--json', 'Output as JSON')\n .action((opts) => factoryInfo(opts.json ?? false))\n\n factory\n .command('create <name> <symbol>')\n .description('Create a new stablecoin via factory')\n .option('--simulate', 'Simulate the transaction without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Memo for the transaction', '')\n .action((name, symbol, opts) =>\n factoryCreate(name, symbol, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n}\n","#!/usr/bin/env node\n\nimport { Command } from 'commander'\nimport { readFileSync } from 'fs'\nimport { resolve } from 'path'\nimport { fileURLToPath } from 'url'\n\nconst __dirname = fileURLToPath(new URL('.', import.meta.url))\n\n// Load package.json for version\nconst pkg = JSON.parse(\n readFileSync(resolve(__dirname, '../package.json'), 'utf-8')\n)\n\nconst program = new Command()\n\nprogram.name('isometry').description('Agent-friendly CLI for Isometry').version(pkg.version)\n\n// Register command groups\nconst { registerSystem } = await import('./commands/system.js')\nconst { registerPlatform } = await import('./commands/platform.js')\nconst { registerToken } = await import('./commands/token.js')\nconst { registerFactory } = await import('./commands/factory.js')\n\nregisterSystem(program)\nregisterPlatform(program)\nregisterToken(program)\nregisterFactory(program)\n\nprogram.parse(process.argv)\n"],"mappings":"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","names":["createWallet","getContracts","getContracts","getContracts","config","DEFAULT_FIRST","DEFAULT_SKIP","tokens","config","createClient","config","SDK_VERSION","init_client","createWallet","SDK_VERSION","createClient","createWallet","getContracts","init_client","GraphClient","jsonReplacer","init_platform","loadEnv","jsonReplacer","getStableCoin","jsonReplacer","createClient","info","loadEnv","jsonReplacer","init_factory","resolve","fileURLToPath","__dirname","registerSystem","registerPlatform","registerToken","registerFactory"]}
|
|
1
|
+
{"version":3,"sources":["../src/env.ts","../src/sdk/rpc/wallet.ts","../src/abis/IsometryPlatform.json","../src/abis/StableCoinFactory.json","../src/abis/StableCoin.json","../src/abis/StableCoinBeacon.json","../src/sdk/rpc/contracts.ts","../src/sdk/rpc/platform.ts","../src/sdk/rpc/factory.ts","../src/sdk/rpc/stablecoin.ts","../src/sdk/rpc/errorMap.ts","../src/sdk/rpc/writeExecutor.ts","../src/sdk/rpc/index.ts","../src/sdk/graph/client.ts","../src/sdk/graph/queries.ts","../src/sdk/graph/tokenHistory.ts","../src/sdk/graph/platformHistory.ts","../src/sdk/graph/analytics.ts","../src/sdk/graph/index.ts","../src/sdk/client.ts","../src/sdk/index.ts","../src/cli/commands/system.ts","../src/cli/commands/platform.ts","../src/cli/commands/tokenWrite.ts","../src/cli/commands/token.ts","../src/cli/commands/factory.ts","../src/cli/index.ts"],"sourcesContent":["import { config } from 'dotenv'\nimport { resolve, dirname } from 'path'\nimport { fileURLToPath } from 'url'\n\nconst __dirname = dirname(fileURLToPath(import.meta.url))\n\n/** Load .env from project root (one level above src/, i.e. dist/ -> ../) */\nexport function loadEnv(): void {\n config({ path: resolve(__dirname, '../.env') })\n}\n","import { ethers } from 'ethers'\n\n// ─── IWallet ────────────────────────────────────────────────────────────────────\n\nexport type WalletMode = 'eip1193' | 'privatekey' | 'readonly'\n\n// ─── IWallet ───────────────────────────────────────────────────────────────────\n\nexport interface IWallet {\n readonly mode: WalletMode\n /** For read operations */\n readonly provider: ethers.Provider\n /** For write operations (may equal provider in read-only mode) */\n readonly signer: ethers.Signer | null\n getAddress(): Promise<string | null>\n isConnected(): boolean\n}\n\n// ─── ReadOnly ──────────────────────────────────────────────────────────────────\n\nexport class ReadOnlyWallet implements IWallet {\n readonly mode: WalletMode = 'readonly'\n readonly provider: ethers.Provider\n readonly signer = null\n\n constructor(rpcUrl: string) {\n this.provider = new ethers.JsonRpcProvider(rpcUrl)\n }\n\n getAddress(): Promise<string | null> {\n return Promise.resolve(null)\n }\n\n isConnected(): boolean {\n return false\n }\n}\n\n// ─── PrivateKey ────────────────────────────────────────────────────────────────\n\nexport class PrivateKeyWallet implements IWallet {\n readonly mode: WalletMode = 'privatekey'\n readonly provider: ethers.Provider\n readonly signer: ethers.Signer\n\n constructor(rpcUrl: string, privateKey: string) {\n this.provider = new ethers.JsonRpcProvider(rpcUrl)\n this.signer = new ethers.Wallet(privateKey, this.provider)\n }\n\n async getAddress(): Promise<string | null> {\n return this.signer.getAddress()\n }\n\n isConnected(): boolean {\n return true\n }\n}\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createWallet(\n rpcUrl: string,\n privateKey?: string\n): IWallet {\n if (privateKey) return new PrivateKeyWallet(rpcUrl, privateKey)\n return new ReadOnlyWallet(rpcUrl)\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"IsometryPlatform\",\n \"sourceName\": \"contracts/platform/IsometryPlatform.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"AccessControlBadConfirmation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"neededRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967NonPayable\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"EnforcedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExpectedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FailedCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"UUPSUnauthorizedCallContext\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"slot\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"UUPSUnsupportedProxiableUUID\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AccessUserAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AccessUserRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"ApprovedIssuerAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"ApprovedIssuerRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldFactory\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newFactory\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"FactorySet\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformAdminAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformAdminRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformPaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PlatformUnpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"TokenRegistered\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"ACCESS_USER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"APPROVED_ISSUER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"PLATFORM_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"UPGRADE_INTERFACE_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"accessUserList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addAccessUser\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addApprovedIssuer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addPlatformAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approvedIssuerList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"factory\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getAccessUser\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAccessUserCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllAccessUsers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllApprovedIssuers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllPlatformAdmins\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllTokens\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getApprovedIssuer\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getApprovedIssuerCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getPlatformAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getPlatformAdminCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getTokenCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isAccessUser\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isApprovedIssuer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isOwner\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isPlatformAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"platformAdminList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"proxiableUUID\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"registerToken\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"registerTokenFor\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"registeredTokens\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"tokenAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeAccessUser\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeApprovedIssuer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removePlatformAdmin\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"callerConfirmation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_factory\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"setFactory\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"tokenList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516125ab62000104600039600081816118da015281816119030152611a4701526125ab6000f3fe6080604052600436106102885760003560e01c80638129fc1c1161015a578063a217fddf116100c1578063cf3a18131161007a578063cf3a1813146107a9578063d51eb68e146107c9578063d547741f146107e9578063e79faa5814610809578063eb7d61fe14610829578063f91838541461084957600080fd5b8063a217fddf146106e1578063a75623c5146106f6578063ad3cb1cc14610716578063b018114714610754578063c45a015514610769578063c92ca21f1461078957600080fd5b806397d4eaec1161011357806397d4eaec1461061f57806398cf5ecf1461063f5780639cf9613c1461065f5780639e1138521461067f5780639ead72221461069f5780639f437c9e146106bf57600080fd5b80638129fc1c146105645780638247e0ac1461057957806383aa79d81461058e5780638a143617146105b05780638c0bd916146105d057806391d14854146105ff57600080fd5b806346ee51bb116101fe578063685d34ff116101b7578063685d34ff146104ad5780636a0af06d146104cf5780636da66355146104ef57806378a895671461050f5780637d11d546146105245780637eb74bfc1461054457600080fd5b806346ee51bb146103f35780634f1ef2861461040857806352d1902d1461041b5780635bb47808146104305780635c975abb146104505780636430c3271461047557600080fd5b8063294595d211610250578063294595d2146103545780632a5c792a146103695780632f2ff15d1461037e5780632f54bf6e1461039e57806332889cd3146103be57806336568abe146103d357600080fd5b806301ffc9a71461028d5780630c48da2d146102c257806310ae2f1a146102e457806319a6178314610306578063248a9ca314610326575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611df3565b610869565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd366004611ee5565b6108a0565b005b3480156102f057600080fd5b506102f9610938565b6040516102b99190611f7e565b34801561031257600080fd5b506102e2610321366004611fcb565b61099a565b34801561033257600080fd5b50610346610341366004612019565b610a52565b6040519081526020016102b9565b34801561036057600080fd5b50600354610346565b34801561037557600080fd5b506102f9610a74565b34801561038a57600080fd5b506102e2610399366004612032565b610ad4565b3480156103aa57600080fd5b506102ad6103b936600461205e565b610af0565b3480156103ca57600080fd5b506102f9610afc565b3480156103df57600080fd5b506102e26103ee366004612032565b610b5c565b3480156103ff57600080fd5b50600254610346565b6102e2610416366004612079565b610b94565b34801561042757600080fd5b50610346610bb3565b34801561043c57600080fd5b506102e261044b36600461205e565b610bd0565b34801561045c57600080fd5b506000805160206125368339815191525460ff166102ad565b34801561048157600080fd5b50610495610490366004612019565b610c75565b6040516001600160a01b0390911681526020016102b9565b3480156104b957600080fd5b506103466000805160206124f683398151915281565b3480156104db57600080fd5b506102e26104ea366004611fcb565b610c9f565b3480156104fb57600080fd5b506102e261050a3660046120d1565b610d4b565b34801561051b57600080fd5b50600154610346565b34801561053057600080fd5b5061049561053f366004612019565b610da3565b34801561055057600080fd5b506102ad61055f36600461205e565b610df5565b34801561057057600080fd5b506102e2610e0f565b34801561058557600080fd5b50600454610346565b34801561059a57600080fd5b5061034660008051602061255683398151915281565b3480156105bc57600080fd5b506104956105cb366004612019565b610f21565b3480156105dc57600080fd5b506105f06105eb36600461205e565b610f31565b6040516102b99392919061215e565b34801561060b57600080fd5b506102ad61061a366004612032565b61106e565b34801561062b57600080fd5b506102ad61063a36600461205e565b6110a6565b34801561064b57600080fd5b506102e261065a366004611fcb565b6110c0565b34801561066b57600080fd5b506102e261067a366004611fcb565b61116c565b34801561068b57600080fd5b5061049561069a366004612019565b611218565b3480156106ab57600080fd5b506104956106ba366004612019565b611228565b3480156106cb57600080fd5b506103466000805160206124b683398151915281565b3480156106ed57600080fd5b50610346600081565b34801561070257600080fd5b50610495610711366004612019565b611238565b34801561072257600080fd5b50610747604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102b9919061219e565b34801561076057600080fd5b506102f961126f565b34801561077557600080fd5b50600554610495906001600160a01b031681565b34801561079557600080fd5b506102e26107a4366004611fcb565b6112cf565b3480156107b557600080fd5b506104956107c4366004612019565b61134d565b3480156107d557600080fd5b506102e26107e4366004611fcb565b611384565b3480156107f557600080fd5b506102e2610804366004612032565b6113f5565b34801561081557600080fd5b506102e26108243660046120d1565b611411565b34801561083557600080fd5b506102e26108443660046121b1565b61145d565b34801561085557600080fd5b506102ad61086436600461205e565b6114e6565b60006001600160e01b03198216637965db0b60e01b148061089a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a8611500565b6005546001600160a01b03163314610926576108d26000805160206124b68339815191523361106e565b806108e357506108e360003361106e565b8061090157506109016000805160206124f68339815191523361106e565b6109265760405162461bcd60e51b815260040161091d9061225b565b60405180910390fd5b61093284848484611533565b50505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561099057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610972575b5050505050905090565b6109a560003361106e565b806109c357506109c36000805160206124f68339815191523361106e565b6109df5760405162461bcd60e51b815260040161091d9061225b565b6109f76000805160206124b6833981519152836116a2565b50610a03600383611728565b816001600160a01b0316336001600160a01b03167f741d4f16d5a79c37b8fd050639cffd4eaf417445424059c69664cbb70d2a5f6c83604051610a46919061219e565b60405180910390a35050565b6000908152600080516020612516833981519152602052604090206001015490565b60606001805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b610add82610a52565b610ae681611827565b6109328383611834565b600061089a818361106e565b60606003805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b6001600160a01b0381163314610b855760405163334bd91960e11b815260040160405180910390fd5b610b8f82826116a2565b505050565b610b9c6118cf565b610ba582611974565b610baf828261197f565b5050565b6000610bbd611a3c565b506000805160206124d683398151915290565b6000610bdb81611827565b6001600160a01b038216610c205760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161091d565b600580546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907fcc847c84c8074a8da04b48d623a4b38e263572c16fa0fc823d79bf7361dee31d90600090a4505050565b60048181548110610c8557600080fd5b6000918252602090912001546001600160a01b0316905081565b610caa60003361106e565b80610cc85750610cc86000805160206124f68339815191523361106e565b610ce45760405162461bcd60e51b815260040161091d9061225b565b610cfc60008051602061255683398151915283611834565b50610d08600483611a85565b816001600160a01b0316336001600160a01b03167fbcc7857902b063c09d0cf80588b949fa234255dfe327b962c5d1dc38fe1aba4083604051610a46919061219e565b6000610d5681611827565b610d5e611b09565b336001600160a01b03167f0633b518f7e228cea84c7b36264537a16387cd16109f97ff871f587d7238481d83604051610d97919061219e565b60405180910390a25050565b6002546000908210610dc75760405162461bcd60e51b815260040161091d90612283565b60028281548110610dda57610dda6122b0565b6000918252602090912001546001600160a01b031692915050565b600061089a6000805160206124b68339815191528361106e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610e9e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ec857845460ff60401b1916600160401b1785555b610ed3600033611834565b508315610f1a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b60038181548110610c8557600080fd5b600060208190529081526040902080546001820180546001600160a01b039092169291610f5d906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f89906122c6565b8015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b505050505090806002018054610feb906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611017906122c6565b80156110645780601f1061103957610100808354040283529160200191611064565b820191906000526020600020905b81548152906001019060200180831161104757829003601f168201915b5050505050905083565b6000918252600080516020612516833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061089a6000805160206125568339815191528361106e565b6110cb60003361106e565b806110e957506110e96000805160206124f68339815191523361106e565b6111055760405162461bcd60e51b815260040161091d9061225b565b61111d600080516020612556833981519152836116a2565b50611129600483611728565b816001600160a01b0316336001600160a01b03167f88d45a6aa07125447b55f107bd5737025ef5e3f116de4950e8e090a1023ff4a483604051610a46919061219e565b61117760003361106e565b8061119557506111956000805160206124f68339815191523361106e565b6111b15760405162461bcd60e51b815260040161091d9061225b565b6111c96000805160206124b683398151915283611834565b506111d5600383611a85565b816001600160a01b0316336001600160a01b03167fb2fc27990e77bd54811bcaa01cd65f1a5cb5af811ef16cad4f7778a4df5126a083604051610a46919061219e565b60028181548110610c8557600080fd5b60018181548110610c8557600080fd5b600454600090821061125c5760405162461bcd60e51b815260040161091d90612283565b60048281548110610dda57610dda6122b0565b60606004805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b60006112da81611827565b6112f26000805160206124f6833981519152846113f5565b6112fd600284611728565b826001600160a01b0316336001600160a01b03167fdedab8f5d11d718dc27471cc695fcea1a096dbaf743fc629e9ce0bb1a39333af84604051611340919061219e565b60405180910390a3505050565b60035460009082106113715760405162461bcd60e51b815260040161091d90612283565b60038281548110610dda57610dda6122b0565b600061138f81611827565b6113a76000805160206124f683398151915284610ad4565b6113b2600284611a85565b826001600160a01b0316336001600160a01b03167f8cc31bbe73dc10848165c847a4c370cd881743121d2eee9836ca4e607ca4819f84604051611340919061219e565b6113fe82610a52565b61140781611827565b61093283836116a2565b600061141c81611827565b611424611b6c565b336001600160a01b03167f02ac1745f320508b54f59ac6b59d2fc262da33b72598237b29a916cfb5fd519383604051610d97919061219e565b611465611500565b6005546001600160a01b031633146114da5761148f6000805160206124b68339815191523361106e565b806114a057506114a060003361106e565b806114be57506114be6000805160206124f68339815191523361106e565b6114da5760405162461bcd60e51b815260040161091d9061225b565b610f1a84848484611533565b600061089a6000805160206124f68339815191528361106e565b6000805160206125368339815191525460ff16156115315760405163d93c066560e01b815260040160405180910390fd5b565b6001600160a01b03848116600090815260208190526040902054161561159b5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015260640161091d565b604080516060810182526001600160a01b038681168083526020808401888152848601889052600092835290829052939020825181546001600160a01b0319169216919091178155915190919060018201906115f79082612350565b506040820151600282019061160c9082612350565b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03871690811790915560405190915033907fec82a4a358c202e0580890ad5ae52df93af69e508cbbd07e2766ab1e2fd4d3df9061169490879087908790612410565b60405180910390a350505050565b60006000805160206125168339815191526116bd848461106e565b1561171e576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061089a565b600091505061089a565b60005b8254811015610b8f57816001600160a01b0316838281548110611750576117506122b0565b6000918252602090912001546001600160a01b03160361181f578254839061177a90600190612449565b8154811061178a5761178a6122b0565b9060005260206000200160009054906101000a90046001600160a01b03168382815481106117ba576117ba6122b0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806117f8576117f861246a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b60010161172b565b6118318133611bb2565b50565b600060008051602061251683398151915261184f848461106e565b61171e576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118853390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061089a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061195657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661194a6000805160206124d6833981519152546001600160a01b031690565b6001600160a01b031614155b156115315760405163703e46dd60e11b815260040160405180910390fd5b6000610baf81611827565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612480565b60015b611a0157604051634c9c8ce360e01b81526001600160a01b038316600482015260240161091d565b6000805160206124d68339815191528114611a3257604051632a87526960e21b81526004810182905260240161091d565b610b8f8383611beb565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115315760405163703e46dd60e11b815260040160405180910390fd5b60005b8254811015611ad457816001600160a01b0316838281548110611aad57611aad6122b0565b6000918252602090912001546001600160a01b031603611acc57505050565b600101611a88565b5081546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b03909216919091179055565b611b11611500565b600080516020612536833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b611b74611c41565b600080516020612536833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611b4e565b611bbc828261106e565b610baf5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161091d565b611bf482611c71565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611c3957610b8f8282611cd6565b610baf611d4c565b6000805160206125368339815191525460ff1661153157604051638dfc202b60e01b815260040160405180910390fd5b806001600160a01b03163b600003611ca757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161091d565b6000805160206124d683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611cf39190612499565b600060405180830381855af49150503d8060008114611d2e576040519150601f19603f3d011682016040523d82523d6000602084013e611d33565b606091505b5091509150611d43858383611d6b565b95945050505050565b34156115315760405163b398979f60e01b815260040160405180910390fd5b606082611d8057611d7b82611dca565b611dc3565b8151158015611d9757506001600160a01b0384163b155b15611dc057604051639996b31560e01b81526001600160a01b038516600482015260240161091d565b50805b9392505050565b805115611dda5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b600060208284031215611e0557600080fd5b81356001600160e01b031981168114611dc357600080fd5b80356001600160a01b0381168114611e3457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611e6a57611e6a611e39565b604051601f8501601f19908116603f01168101908282118183101715611e9257611e92611e39565b81604052809350858152868686011115611eab57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611ed657600080fd5b611dc383833560208501611e4f565b60008060008060808587031215611efb57600080fd5b611f0485611e1d565b9350602085013567ffffffffffffffff80821115611f2157600080fd5b611f2d88838901611ec5565b94506040870135915080821115611f4357600080fd5b611f4f88838901611ec5565b93506060870135915080821115611f6557600080fd5b50611f7287828801611ec5565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015611fbf5783516001600160a01b031683529284019291840191600101611f9a565b50909695505050505050565b60008060408385031215611fde57600080fd5b611fe783611e1d565b9150602083013567ffffffffffffffff81111561200357600080fd5b61200f85828601611ec5565b9150509250929050565b60006020828403121561202b57600080fd5b5035919050565b6000806040838503121561204557600080fd5b8235915061205560208401611e1d565b90509250929050565b60006020828403121561207057600080fd5b611dc382611e1d565b6000806040838503121561208c57600080fd5b61209583611e1d565b9150602083013567ffffffffffffffff8111156120b157600080fd5b8301601f810185136120c257600080fd5b61200f85823560208401611e4f565b6000602082840312156120e357600080fd5b813567ffffffffffffffff8111156120fa57600080fd5b61210684828501611ec5565b949350505050565b60005b83811015612129578181015183820152602001612111565b50506000910152565b6000815180845261214a81602086016020860161210e565b601f01601f19169290920160200192915050565b6001600160a01b038416815260606020820181905260009061218290830185612132565b82810360408401526121948185612132565b9695505050505050565b602081526000611dc36020830184612132565b600080600080600060a086880312156121c957600080fd5b6121d286611e1d565b94506121e060208701611e1d565b9350604086013567ffffffffffffffff808211156121fd57600080fd5b61220989838a01611ec5565b9450606088013591508082111561221f57600080fd5b61222b89838a01611ec5565b9350608088013591508082111561224157600080fd5b5061224e88828901611ec5565b9150509295509295909350565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806122da57607f821691505b6020821081036122fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b8f576000816000526020600020601f850160051c810160208610156123295750805b601f850160051c820191505b8181101561234857828155600101612335565b505050505050565b815167ffffffffffffffff81111561236a5761236a611e39565b61237e8161237884546122c6565b84612300565b602080601f8311600181146123b3576000841561239b5750858301515b600019600386901b1c1916600185901b178555612348565b600085815260208120601f198616915b828110156123e2578886015182559484019460019091019084016123c3565b50858210156124005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006124236060830186612132565b82810360208401526124358186612132565b905082810360408401526121948185612132565b8181038181111561089a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561249257600080fd5b5051919050565b600082516124ab81846020870161210e565b919091019291505056fe0a865fb3417fc4a7d7373d42317aff592f595a0093d7332ffae098db733cd11b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5246556c0ab216b5b325ad7c539bfbd1a07c768773cdf810fecd3c3375c2740702dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033000364bafb595aebf30e64edfca374c8e6e68a01fdc0bab55d3d02600374a378cba264697066735822122082858869d5afb1ec8b6456b51167b4198d15ab64193c6f5be2762887c5178a1c64736f6c63430008160033\",\n \"deployedBytecode\": \"0x6080604052600436106102885760003560e01c80638129fc1c1161015a578063a217fddf116100c1578063cf3a18131161007a578063cf3a1813146107a9578063d51eb68e146107c9578063d547741f146107e9578063e79faa5814610809578063eb7d61fe14610829578063f91838541461084957600080fd5b8063a217fddf146106e1578063a75623c5146106f6578063ad3cb1cc14610716578063b018114714610754578063c45a015514610769578063c92ca21f1461078957600080fd5b806397d4eaec1161011357806397d4eaec1461061f57806398cf5ecf1461063f5780639cf9613c1461065f5780639e1138521461067f5780639ead72221461069f5780639f437c9e146106bf57600080fd5b80638129fc1c146105645780638247e0ac1461057957806383aa79d81461058e5780638a143617146105b05780638c0bd916146105d057806391d14854146105ff57600080fd5b806346ee51bb116101fe578063685d34ff116101b7578063685d34ff146104ad5780636a0af06d146104cf5780636da66355146104ef57806378a895671461050f5780637d11d546146105245780637eb74bfc1461054457600080fd5b806346ee51bb146103f35780634f1ef2861461040857806352d1902d1461041b5780635bb47808146104305780635c975abb146104505780636430c3271461047557600080fd5b8063294595d211610250578063294595d2146103545780632a5c792a146103695780632f2ff15d1461037e5780632f54bf6e1461039e57806332889cd3146103be57806336568abe146103d357600080fd5b806301ffc9a71461028d5780630c48da2d146102c257806310ae2f1a146102e457806319a6178314610306578063248a9ca314610326575b600080fd5b34801561029957600080fd5b506102ad6102a8366004611df3565b610869565b60405190151581526020015b60405180910390f35b3480156102ce57600080fd5b506102e26102dd366004611ee5565b6108a0565b005b3480156102f057600080fd5b506102f9610938565b6040516102b99190611f7e565b34801561031257600080fd5b506102e2610321366004611fcb565b61099a565b34801561033257600080fd5b50610346610341366004612019565b610a52565b6040519081526020016102b9565b34801561036057600080fd5b50600354610346565b34801561037557600080fd5b506102f9610a74565b34801561038a57600080fd5b506102e2610399366004612032565b610ad4565b3480156103aa57600080fd5b506102ad6103b936600461205e565b610af0565b3480156103ca57600080fd5b506102f9610afc565b3480156103df57600080fd5b506102e26103ee366004612032565b610b5c565b3480156103ff57600080fd5b50600254610346565b6102e2610416366004612079565b610b94565b34801561042757600080fd5b50610346610bb3565b34801561043c57600080fd5b506102e261044b36600461205e565b610bd0565b34801561045c57600080fd5b506000805160206125368339815191525460ff166102ad565b34801561048157600080fd5b50610495610490366004612019565b610c75565b6040516001600160a01b0390911681526020016102b9565b3480156104b957600080fd5b506103466000805160206124f683398151915281565b3480156104db57600080fd5b506102e26104ea366004611fcb565b610c9f565b3480156104fb57600080fd5b506102e261050a3660046120d1565b610d4b565b34801561051b57600080fd5b50600154610346565b34801561053057600080fd5b5061049561053f366004612019565b610da3565b34801561055057600080fd5b506102ad61055f36600461205e565b610df5565b34801561057057600080fd5b506102e2610e0f565b34801561058557600080fd5b50600454610346565b34801561059a57600080fd5b5061034660008051602061255683398151915281565b3480156105bc57600080fd5b506104956105cb366004612019565b610f21565b3480156105dc57600080fd5b506105f06105eb36600461205e565b610f31565b6040516102b99392919061215e565b34801561060b57600080fd5b506102ad61061a366004612032565b61106e565b34801561062b57600080fd5b506102ad61063a36600461205e565b6110a6565b34801561064b57600080fd5b506102e261065a366004611fcb565b6110c0565b34801561066b57600080fd5b506102e261067a366004611fcb565b61116c565b34801561068b57600080fd5b5061049561069a366004612019565b611218565b3480156106ab57600080fd5b506104956106ba366004612019565b611228565b3480156106cb57600080fd5b506103466000805160206124b683398151915281565b3480156106ed57600080fd5b50610346600081565b34801561070257600080fd5b50610495610711366004612019565b611238565b34801561072257600080fd5b50610747604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102b9919061219e565b34801561076057600080fd5b506102f961126f565b34801561077557600080fd5b50600554610495906001600160a01b031681565b34801561079557600080fd5b506102e26107a4366004611fcb565b6112cf565b3480156107b557600080fd5b506104956107c4366004612019565b61134d565b3480156107d557600080fd5b506102e26107e4366004611fcb565b611384565b3480156107f557600080fd5b506102e2610804366004612032565b6113f5565b34801561081557600080fd5b506102e26108243660046120d1565b611411565b34801561083557600080fd5b506102e26108443660046121b1565b61145d565b34801561085557600080fd5b506102ad61086436600461205e565b6114e6565b60006001600160e01b03198216637965db0b60e01b148061089a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6108a8611500565b6005546001600160a01b03163314610926576108d26000805160206124b68339815191523361106e565b806108e357506108e360003361106e565b8061090157506109016000805160206124f68339815191523361106e565b6109265760405162461bcd60e51b815260040161091d9061225b565b60405180910390fd5b61093284848484611533565b50505050565b6060600280548060200260200160405190810160405280929190818152602001828054801561099057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610972575b5050505050905090565b6109a560003361106e565b806109c357506109c36000805160206124f68339815191523361106e565b6109df5760405162461bcd60e51b815260040161091d9061225b565b6109f76000805160206124b6833981519152836116a2565b50610a03600383611728565b816001600160a01b0316336001600160a01b03167f741d4f16d5a79c37b8fd050639cffd4eaf417445424059c69664cbb70d2a5f6c83604051610a46919061219e565b60405180910390a35050565b6000908152600080516020612516833981519152602052604090206001015490565b60606001805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b610add82610a52565b610ae681611827565b6109328383611834565b600061089a818361106e565b60606003805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b6001600160a01b0381163314610b855760405163334bd91960e11b815260040160405180910390fd5b610b8f82826116a2565b505050565b610b9c6118cf565b610ba582611974565b610baf828261197f565b5050565b6000610bbd611a3c565b506000805160206124d683398151915290565b6000610bdb81611827565b6001600160a01b038216610c205760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640161091d565b600580546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907fcc847c84c8074a8da04b48d623a4b38e263572c16fa0fc823d79bf7361dee31d90600090a4505050565b60048181548110610c8557600080fd5b6000918252602090912001546001600160a01b0316905081565b610caa60003361106e565b80610cc85750610cc86000805160206124f68339815191523361106e565b610ce45760405162461bcd60e51b815260040161091d9061225b565b610cfc60008051602061255683398151915283611834565b50610d08600483611a85565b816001600160a01b0316336001600160a01b03167fbcc7857902b063c09d0cf80588b949fa234255dfe327b962c5d1dc38fe1aba4083604051610a46919061219e565b6000610d5681611827565b610d5e611b09565b336001600160a01b03167f0633b518f7e228cea84c7b36264537a16387cd16109f97ff871f587d7238481d83604051610d97919061219e565b60405180910390a25050565b6002546000908210610dc75760405162461bcd60e51b815260040161091d90612283565b60028281548110610dda57610dda6122b0565b6000918252602090912001546001600160a01b031692915050565b600061089a6000805160206124b68339815191528361106e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610e555750825b905060008267ffffffffffffffff166001148015610e725750303b155b905081158015610e80575080155b15610e9e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ec857845460ff60401b1916600160401b1785555b610ed3600033611834565b508315610f1a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b60038181548110610c8557600080fd5b600060208190529081526040902080546001820180546001600160a01b039092169291610f5d906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610f89906122c6565b8015610fd65780601f10610fab57610100808354040283529160200191610fd6565b820191906000526020600020905b815481529060010190602001808311610fb957829003601f168201915b505050505090806002018054610feb906122c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611017906122c6565b80156110645780601f1061103957610100808354040283529160200191611064565b820191906000526020600020905b81548152906001019060200180831161104757829003601f168201915b5050505050905083565b6000918252600080516020612516833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b600061089a6000805160206125568339815191528361106e565b6110cb60003361106e565b806110e957506110e96000805160206124f68339815191523361106e565b6111055760405162461bcd60e51b815260040161091d9061225b565b61111d600080516020612556833981519152836116a2565b50611129600483611728565b816001600160a01b0316336001600160a01b03167f88d45a6aa07125447b55f107bd5737025ef5e3f116de4950e8e090a1023ff4a483604051610a46919061219e565b61117760003361106e565b8061119557506111956000805160206124f68339815191523361106e565b6111b15760405162461bcd60e51b815260040161091d9061225b565b6111c96000805160206124b683398151915283611834565b506111d5600383611a85565b816001600160a01b0316336001600160a01b03167fb2fc27990e77bd54811bcaa01cd65f1a5cb5af811ef16cad4f7778a4df5126a083604051610a46919061219e565b60028181548110610c8557600080fd5b60018181548110610c8557600080fd5b600454600090821061125c5760405162461bcd60e51b815260040161091d90612283565b60048281548110610dda57610dda6122b0565b60606004805480602002602001604051908101604052809291908181526020018280548015610990576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610972575050505050905090565b60006112da81611827565b6112f26000805160206124f6833981519152846113f5565b6112fd600284611728565b826001600160a01b0316336001600160a01b03167fdedab8f5d11d718dc27471cc695fcea1a096dbaf743fc629e9ce0bb1a39333af84604051611340919061219e565b60405180910390a3505050565b60035460009082106113715760405162461bcd60e51b815260040161091d90612283565b60038281548110610dda57610dda6122b0565b600061138f81611827565b6113a76000805160206124f683398151915284610ad4565b6113b2600284611a85565b826001600160a01b0316336001600160a01b03167f8cc31bbe73dc10848165c847a4c370cd881743121d2eee9836ca4e607ca4819f84604051611340919061219e565b6113fe82610a52565b61140781611827565b61093283836116a2565b600061141c81611827565b611424611b6c565b336001600160a01b03167f02ac1745f320508b54f59ac6b59d2fc262da33b72598237b29a916cfb5fd519383604051610d97919061219e565b611465611500565b6005546001600160a01b031633146114da5761148f6000805160206124b68339815191523361106e565b806114a057506114a060003361106e565b806114be57506114be6000805160206124f68339815191523361106e565b6114da5760405162461bcd60e51b815260040161091d9061225b565b610f1a84848484611533565b600061089a6000805160206124f68339815191528361106e565b6000805160206125368339815191525460ff16156115315760405163d93c066560e01b815260040160405180910390fd5b565b6001600160a01b03848116600090815260208190526040902054161561159b5760405162461bcd60e51b815260206004820152601860248201527f546f6b656e20616c726561647920726567697374657265640000000000000000604482015260640161091d565b604080516060810182526001600160a01b038681168083526020808401888152848601889052600092835290829052939020825181546001600160a01b0319169216919091178155915190919060018201906115f79082612350565b506040820151600282019061160c9082612350565b50506001805480820182556000919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b03871690811790915560405190915033907fec82a4a358c202e0580890ad5ae52df93af69e508cbbd07e2766ab1e2fd4d3df9061169490879087908790612410565b60405180910390a350505050565b60006000805160206125168339815191526116bd848461106e565b1561171e576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061089a565b600091505061089a565b60005b8254811015610b8f57816001600160a01b0316838281548110611750576117506122b0565b6000918252602090912001546001600160a01b03160361181f578254839061177a90600190612449565b8154811061178a5761178a6122b0565b9060005260206000200160009054906101000a90046001600160a01b03168382815481106117ba576117ba6122b0565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550828054806117f8576117f861246a565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b60010161172b565b6118318133611bb2565b50565b600060008051602061251683398151915261184f848461106e565b61171e576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118853390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061089a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061195657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661194a6000805160206124d6833981519152546001600160a01b031690565b6001600160a01b031614155b156115315760405163703e46dd60e11b815260040160405180910390fd5b6000610baf81611827565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119d9575060408051601f3d908101601f191682019092526119d691810190612480565b60015b611a0157604051634c9c8ce360e01b81526001600160a01b038316600482015260240161091d565b6000805160206124d68339815191528114611a3257604051632a87526960e21b81526004810182905260240161091d565b610b8f8383611beb565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115315760405163703e46dd60e11b815260040160405180910390fd5b60005b8254811015611ad457816001600160a01b0316838281548110611aad57611aad6122b0565b6000918252602090912001546001600160a01b031603611acc57505050565b600101611a88565b5081546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b03909216919091179055565b611b11611500565b600080516020612536833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b611b74611c41565b600080516020612536833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33611b4e565b611bbc828261106e565b610baf5760405163e2517d3f60e01b81526001600160a01b03821660048201526024810183905260440161091d565b611bf482611c71565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611c3957610b8f8282611cd6565b610baf611d4c565b6000805160206125368339815191525460ff1661153157604051638dfc202b60e01b815260040160405180910390fd5b806001600160a01b03163b600003611ca757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161091d565b6000805160206124d683398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611cf39190612499565b600060405180830381855af49150503d8060008114611d2e576040519150601f19603f3d011682016040523d82523d6000602084013e611d33565b606091505b5091509150611d43858383611d6b565b95945050505050565b34156115315760405163b398979f60e01b815260040160405180910390fd5b606082611d8057611d7b82611dca565b611dc3565b8151158015611d9757506001600160a01b0384163b155b15611dc057604051639996b31560e01b81526001600160a01b038516600482015260240161091d565b50805b9392505050565b805115611dda5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b600060208284031215611e0557600080fd5b81356001600160e01b031981168114611dc357600080fd5b80356001600160a01b0381168114611e3457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115611e6a57611e6a611e39565b604051601f8501601f19908116603f01168101908282118183101715611e9257611e92611e39565b81604052809350858152868686011115611eab57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112611ed657600080fd5b611dc383833560208501611e4f565b60008060008060808587031215611efb57600080fd5b611f0485611e1d565b9350602085013567ffffffffffffffff80821115611f2157600080fd5b611f2d88838901611ec5565b94506040870135915080821115611f4357600080fd5b611f4f88838901611ec5565b93506060870135915080821115611f6557600080fd5b50611f7287828801611ec5565b91505092959194509250565b6020808252825182820181905260009190848201906040850190845b81811015611fbf5783516001600160a01b031683529284019291840191600101611f9a565b50909695505050505050565b60008060408385031215611fde57600080fd5b611fe783611e1d565b9150602083013567ffffffffffffffff81111561200357600080fd5b61200f85828601611ec5565b9150509250929050565b60006020828403121561202b57600080fd5b5035919050565b6000806040838503121561204557600080fd5b8235915061205560208401611e1d565b90509250929050565b60006020828403121561207057600080fd5b611dc382611e1d565b6000806040838503121561208c57600080fd5b61209583611e1d565b9150602083013567ffffffffffffffff8111156120b157600080fd5b8301601f810185136120c257600080fd5b61200f85823560208401611e4f565b6000602082840312156120e357600080fd5b813567ffffffffffffffff8111156120fa57600080fd5b61210684828501611ec5565b949350505050565b60005b83811015612129578181015183820152602001612111565b50506000910152565b6000815180845261214a81602086016020860161210e565b601f01601f19169290920160200192915050565b6001600160a01b038416815260606020820181905260009061218290830185612132565b82810360408401526121948185612132565b9695505050505050565b602081526000611dc36020830184612132565b600080600080600060a086880312156121c957600080fd5b6121d286611e1d565b94506121e060208701611e1d565b9350604086013567ffffffffffffffff808211156121fd57600080fd5b61220989838a01611ec5565b9450606088013591508082111561221f57600080fd5b61222b89838a01611ec5565b9350608088013591508082111561224157600080fd5b5061224e88828901611ec5565b9150509295509295909350565b6020808252600e908201526d139bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600181811c908216806122da57607f821691505b6020821081036122fa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115610b8f576000816000526020600020601f850160051c810160208610156123295750805b601f850160051c820191505b8181101561234857828155600101612335565b505050505050565b815167ffffffffffffffff81111561236a5761236a611e39565b61237e8161237884546122c6565b84612300565b602080601f8311600181146123b3576000841561239b5750858301515b600019600386901b1c1916600185901b178555612348565b600085815260208120601f198616915b828110156123e2578886015182559484019460019091019084016123c3565b50858210156124005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6060815260006124236060830186612132565b82810360208401526124358186612132565b905082810360408401526121948185612132565b8181038181111561089a57634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60006020828403121561249257600080fd5b5051919050565b600082516124ab81846020870161210e565b919091019291505056fe0a865fb3417fc4a7d7373d42317aff592f595a0093d7332ffae098db733cd11b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5246556c0ab216b5b325ad7c539bfbd1a07c768773cdf810fecd3c3375c2740702dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033000364bafb595aebf30e64edfca374c8e6e68a01fdc0bab55d3d02600374a378cba264697066735822122082858869d5afb1ec8b6456b51167b4198d15ab64193c6f5be2762887c5178a1c64736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoinFactory\",\n \"sourceName\": \"contracts/platform/StableCoinFactory.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"oldBeacon\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newBeacon\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BeaconSet\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"token\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"StableCoinCreated\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"beacon\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"createStableCoin\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_platform\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_beacon\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"platform\",\n \"outputs\": [\n {\n \"internalType\": \"contract IsometryPlatform\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_beacon\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"setBeacon\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b5061001961001e565b6100d0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561006e5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100cd5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b610fb8806100df6000396000f3fe60806040523480156200001157600080fd5b50600436106200005e5760003560e01c8063098536c914620000635780631b0132fc1462000096578063485cc95514620000af5780634bde38c814620000c657806359659e9014620000da575b600080fd5b6200007a62000074366004620006ec565b620000ee565b6040516001600160a01b03909116815260200160405180910390f35b620000ad620000a73660046200079b565b62000309565b005b620000ad620000c0366004620007ef565b62000468565b6000546200007a906001600160a01b031681565b6001546200007a906001600160a01b031681565b60008054604051631fadd2ff60e21b81523360048201526001600160a01b0390911690637eb74bfc90602401602060405180830381865afa15801562000138573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015e919062000827565b620001a65760405162461bcd60e51b81526020600482015260136024820152722737ba1030b8383937bb32b21034b9b9bab2b960691b60448201526064015b60405180910390fd5b6000848433604051602401620001bf939291906200089a565b60408051601f198184030181529181526020820180516001600160e01b03166303bf912560e11b17905260015490519192506000916001600160a01b039091169083906200020d9062000633565b6200021a929190620008dc565b604051809103906000f08015801562000237573d6000803e3d6000fd5b50600054604051630c48da2d60e01b81529192506001600160a01b031690630c48da2d90620002719084908a908a908a906004016200090a565b600060405180830381600087803b1580156200028c57600080fd5b505af1158015620002a1573d6000803e3d6000fd5b50505050336001600160a01b0316816001600160a01b0316336001600160a01b03167ffa647b50a7cf0b005f2303f5f0ddbbecba9894502a17ee7c6dd37e8d229e303f898989604051620002f89392919062000965565b60405180910390a495945050505050565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6000546040516317aa5fb760e11b81523360048201526001600160a01b0390911690632f54bf6e90602401602060405180830381865afa15801562000399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bf919062000827565b620004025760405162461bcd60e51b81526020600482015260126024820152712737ba10383630ba3337b9369037bbb732b960711b60448201526064016200019d565b600180546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907ffa7c8f8714320b76f47d87fecf2bccb6d900fa65371f92772adb217b8bbb6f8c906200045b908790620009ae565b60405180910390a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015620004af5750825b905060008267ffffffffffffffff166001148015620004cd5750303b155b905081158015620004dc575080155b15620004fb5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156200052657845460ff60401b1916600160401b1785555b6001600160a01b0387166200056d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6001600160a01b038616620005b35760405162461bcd60e51b815260206004820152600b60248201526a2d32b937903132b0b1b7b760a91b60448201526064016200019d565b600080546001600160a01b03808a166001600160a01b031992831617909255600180549289169290911691909117905583156200062a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6105bf80620009c483390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200066957600080fd5b813567ffffffffffffffff8082111562000687576200068762000641565b604051601f8301601f19908116603f01168101908282118183101715620006b257620006b262000641565b81604052838152866020858801011115620006cc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200070257600080fd5b833567ffffffffffffffff808211156200071b57600080fd5b620007298783880162000657565b945060208601359150808211156200074057600080fd5b6200074e8783880162000657565b935060408601359150808211156200076557600080fd5b50620007748682870162000657565b9150509250925092565b80356001600160a01b03811681146200079657600080fd5b919050565b60008060408385031215620007af57600080fd5b620007ba836200077e565b9150602083013567ffffffffffffffff811115620007d757600080fd5b620007e58582860162000657565b9150509250929050565b600080604083850312156200080357600080fd5b6200080e836200077e565b91506200081e602084016200077e565b90509250929050565b6000602082840312156200083a57600080fd5b815180151581146200084b57600080fd5b9392505050565b6000815180845260005b818110156200087a576020818501810151868301820152016200085c565b506000602082860101526020601f19601f83011685010191505092915050565b606081526000620008af606083018662000852565b8281036020840152620008c3818662000852565b91505060018060a01b0383166040830152949350505050565b6001600160a01b0383168152604060208201819052600090620009029083018462000852565b949350505050565b6001600160a01b0385168152608060208201819052600090620009309083018662000852565b828103604084015262000944818662000852565b905082810360608401526200095a818562000852565b979650505050505050565b6060815260006200097a606083018662000852565b82810360208401526200098e818662000852565b90508281036040840152620009a4818562000852565b9695505050505050565b6020815260006200084b60208301846200085256fe60a06040526040516105bf3803806105bf83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101276104986000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220f10d2777754d2e8a1a5e045964e727ef3eaeecc804aad22a40233e60583a84a764736f6c63430008160033a2646970667358221220df9c6e53a6ab93efece86685164d82a115df8eb46cd1c91c9c6a4203ec774a6864736f6c63430008160033\",\n \"deployedBytecode\": \"0x60806040523480156200001157600080fd5b50600436106200005e5760003560e01c8063098536c914620000635780631b0132fc1462000096578063485cc95514620000af5780634bde38c814620000c657806359659e9014620000da575b600080fd5b6200007a62000074366004620006ec565b620000ee565b6040516001600160a01b03909116815260200160405180910390f35b620000ad620000a73660046200079b565b62000309565b005b620000ad620000c0366004620007ef565b62000468565b6000546200007a906001600160a01b031681565b6001546200007a906001600160a01b031681565b60008054604051631fadd2ff60e21b81523360048201526001600160a01b0390911690637eb74bfc90602401602060405180830381865afa15801562000138573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015e919062000827565b620001a65760405162461bcd60e51b81526020600482015260136024820152722737ba1030b8383937bb32b21034b9b9bab2b960691b60448201526064015b60405180910390fd5b6000848433604051602401620001bf939291906200089a565b60408051601f198184030181529181526020820180516001600160e01b03166303bf912560e11b17905260015490519192506000916001600160a01b039091169083906200020d9062000633565b6200021a929190620008dc565b604051809103906000f08015801562000237573d6000803e3d6000fd5b50600054604051630c48da2d60e01b81529192506001600160a01b031690630c48da2d90620002719084908a908a908a906004016200090a565b600060405180830381600087803b1580156200028c57600080fd5b505af1158015620002a1573d6000803e3d6000fd5b50505050336001600160a01b0316816001600160a01b0316336001600160a01b03167ffa647b50a7cf0b005f2303f5f0ddbbecba9894502a17ee7c6dd37e8d229e303f898989604051620002f89392919062000965565b60405180910390a495945050505050565b6001600160a01b038216620003505760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6000546040516317aa5fb760e11b81523360048201526001600160a01b0390911690632f54bf6e90602401602060405180830381865afa15801562000399573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003bf919062000827565b620004025760405162461bcd60e51b81526020600482015260126024820152712737ba10383630ba3337b9369037bbb732b960711b60448201526064016200019d565b600180546001600160a01b038481166001600160a01b03198316811790935560405191169190829033907ffa7c8f8714320b76f47d87fecf2bccb6d900fa65371f92772adb217b8bbb6f8c906200045b908790620009ae565b60405180910390a4505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015620004af5750825b905060008267ffffffffffffffff166001148015620004cd5750303b155b905081158015620004dc575080155b15620004fb5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156200052657845460ff60401b1916600160401b1785555b6001600160a01b0387166200056d5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b60448201526064016200019d565b6001600160a01b038616620005b35760405162461bcd60e51b815260206004820152600b60248201526a2d32b937903132b0b1b7b760a91b60448201526064016200019d565b600080546001600160a01b03808a166001600160a01b031992831617909255600180549289169290911691909117905583156200062a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b6105bf80620009c483390190565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200066957600080fd5b813567ffffffffffffffff8082111562000687576200068762000641565b604051601f8301601f19908116603f01168101908282118183101715620006b257620006b262000641565b81604052838152866020858801011115620006cc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000606084860312156200070257600080fd5b833567ffffffffffffffff808211156200071b57600080fd5b620007298783880162000657565b945060208601359150808211156200074057600080fd5b6200074e8783880162000657565b935060408601359150808211156200076557600080fd5b50620007748682870162000657565b9150509250925092565b80356001600160a01b03811681146200079657600080fd5b919050565b60008060408385031215620007af57600080fd5b620007ba836200077e565b9150602083013567ffffffffffffffff811115620007d757600080fd5b620007e58582860162000657565b9150509250929050565b600080604083850312156200080357600080fd5b6200080e836200077e565b91506200081e602084016200077e565b90509250929050565b6000602082840312156200083a57600080fd5b815180151581146200084b57600080fd5b9392505050565b6000815180845260005b818110156200087a576020818501810151868301820152016200085c565b506000602082860101526020601f19601f83011685010191505092915050565b606081526000620008af606083018662000852565b8281036020840152620008c3818662000852565b91505060018060a01b0383166040830152949350505050565b6001600160a01b0383168152604060208201819052600090620009029083018462000852565b949350505050565b6001600160a01b0385168152608060208201819052600090620009309083018662000852565b828103604084015262000944818662000852565b905082810360608401526200095a818562000852565b979650505050505050565b6060815260006200097a606083018662000852565b82810360208401526200098e818662000852565b90508281036040840152620009a4818562000852565b9695505050505050565b6020815260006200084b60208301846200085256fe60a06040526040516105bf3803806105bf83398101604081905261002291610387565b61002c828261003e565b506001600160a01b031660805261047e565b610047826100fe565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a28051156100f2576100ed826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e79190610447565b82610211565b505050565b6100fa610288565b5050565b806001600160a01b03163b60000361013957604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b81529051600092841691635c60da1b9160048083019260209291908290030181865afa1580156101b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d99190610447565b9050806001600160a01b03163b6000036100fa57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610130565b6060600080846001600160a01b03168460405161022e9190610462565b600060405180830381855af49150503d8060008114610269576040519150601f19603f3d011682016040523d82523d6000602084013e61026e565b606091505b50909250905061027f8583836102a9565b95945050505050565b34156102a75760405163b398979f60e01b815260040160405180910390fd5b565b6060826102be576102b982610308565b610301565b81511580156102d557506001600160a01b0384163b155b156102fe57604051639996b31560e01b81526001600160a01b0385166004820152602401610130565b50805b9392505050565b8051156103185780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461034857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561037e578181015183820152602001610366565b50506000910152565b6000806040838503121561039a57600080fd5b6103a383610331565b60208401519092506001600160401b03808211156103c057600080fd5b818501915085601f8301126103d457600080fd5b8151818111156103e6576103e661034d565b604051601f8201601f19908116603f0116810190838211818310171561040e5761040e61034d565b8160405282815288602084870101111561042757600080fd5b610438836020830160208801610363565b80955050505050509250929050565b60006020828403121561045957600080fd5b61030182610331565b60008251610474818460208701610363565b9190910192915050565b6080516101276104986000396000601e01526101276000f3fe6080604052600a600c565b005b60186014601a565b60a0565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156079573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190609b919060c3565b905090565b3660008037600080366000845af43d6000803e80801560be573d6000f35b3d6000fd5b60006020828403121560d457600080fd5b81516001600160a01b038116811460ea57600080fd5b939250505056fea2646970667358221220f10d2777754d2e8a1a5e045964e727ef3eaeecc804aad22a40233e60583a84a764736f6c63430008160033a2646970667358221220df9c6e53a6ab93efece86685164d82a115df8eb46cd1c91c9c6a4203ec774a6864736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoin\",\n \"sourceName\": \"contracts/token/StableCoin.sol\",\n \"abi\": [\n {\n \"inputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"AccessControlBadConfirmation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes32\",\n \"name\": \"neededRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"AccessControlUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"target\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"AddressEmptyCode\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC1967InvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ERC1967NonPayable\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientAllowance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"balance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"needed\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"ERC20InsufficientBalance\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"approver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidApprover\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"receiver\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidReceiver\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"ERC20InvalidSpender\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"EnforcedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ExpectedPause\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FailedCall\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"InvalidInitialization\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"NotInitializing\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"UUPSUnauthorizedCallContext\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"slot\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"UUPSUnsupportedProxiableUUID\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"newAllowance\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"AllowanceUpdated\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BlacklistManagerAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"BlacklistManagerRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Blacklisted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Burn\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"uint64\",\n \"name\": \"version\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"Initialized\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterMinterAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterMinterRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterStatusAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MasterStatusRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"Mint\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MinterAdded\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"MinterRemoved\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Paused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"PausedByOwner\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"previousAdminRole\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"newAdminRole\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"RoleAdminChanged\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleGranted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"sender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"RoleRevoked\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"uint256\",\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"operator\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"UnBlacklisted\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": false,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Unpaused\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"UnpausedByOwner\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"BLACKLIST_MANAGER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"DEFAULT_ADMIN_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MASTER_MINTER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MASTER_STATUS_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"MINTER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"TOKEN_OWNER_ROLE\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"UPGRADE_INTERFACE_VERSION\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addBlacklistManager\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMasterMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMasterStatus\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"addMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"blacklist\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"blacklistList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"blacklistManagerList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"blacklisted\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"burn\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllBlacklist\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllBlacklistManagers\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMasterMinters\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMasterStatus\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMinterItems\",\n \"outputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"minted\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"remaining\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct StableCoin.MinterItem[]\",\n \"name\": \"\",\n \"type\": \"tuple[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getAllMinters\",\n \"outputs\": [\n {\n \"internalType\": \"address[]\",\n \"name\": \"\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getBlacklistCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBlacklistManager\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getBlacklistManagerCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getBlacklistUser\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMasterMinter\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMasterMinterCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMasterStatus\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMasterStatusCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"index\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"getMinter\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"getMinterCount\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"getMinterInfo\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"allowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"minted\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"remaining\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n }\n ],\n \"name\": \"getRoleAdmin\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"grantRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"hasRole\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"holdersTotal\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"_name\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"_symbol\",\n \"type\": \"string\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"initialize\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isBlacklistManager\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"isBlacklisted\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"masterMinterList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"masterStatusList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"mint\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"minterAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"minterList\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"minterMinted\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"pause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"paused\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"proxiableUUID\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeBlacklistManager\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMasterMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMasterStatus\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"removeMinter\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"callerConfirmation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"renounceRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"role\",\n \"type\": \"bytes32\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeRole\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"minter\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"newAllowance\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"setMinterAllowance\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes4\",\n \"name\": \"interfaceId\",\n \"type\": \"bytes4\"\n }\n ],\n \"name\": \"supportsInterface\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalAllowance\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalBurned\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalMinted\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"user\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unBlacklist\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"string\",\n \"name\": \"memo\",\n \"type\": \"string\"\n }\n ],\n \"name\": \"unpause\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"data\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"upgradeToAndCall\",\n \"outputs\": [],\n \"stateMutability\": \"payable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b60805161402c62000104600039600081816129b8015281816129e10152612c78015261402c6000f3fe60806040526004361061041a5760003560e01c80638a1851131161021e578063c847056911610123578063ddf579ff116100ab578063f1c5faae1161007a578063f1c5faae14610c89578063f5f167e514610ca9578063f864aa4714610cbe578063fe17fbd114610cde578063fe575a8714610cfe57600080fd5b8063ddf579ff14610bf9578063e79faa5814610c19578063e860cb8f14610c39578063f09b220314610c4e57600080fd5b8063d5391393116100f2578063d539139314610b51578063d547741f14610b73578063d89135cd14610b93578063dbac26e914610ba9578063dd62ed3e14610bd957600080fd5b8063c847056914610ada578063cb52a88b14610afc578063cc821f0d14610b11578063d3fc986414610b3157600080fd5b8063a217fddf116101a6578063a9059cbb11610175578063a9059cbb14610a34578063ad3cb1cc14610a54578063b135824a14610a85578063ba6256a814610a9a578063c780f66314610aba57600080fd5b8063a217fddf146109bc578063a2309ff8146109d1578063a40fa11b146109e7578063a6d55d0814610a1457600080fd5b806391a64e5f116101ed57806391a64e5f1461093a57806391d148541461095c57806395d89b411461097c578063a045442c14610991578063a15ea064146109a657600080fd5b80638a185113146108b65780638a6db9c3146108d85780638cd9317d146109055780638dbb94eb1461092557600080fd5b8063313ce567116103245780635407a7cb116102ac578063650e448a1161027b578063650e448a146108215780636da663551461083657806370a08231146108565780637641e6f3146108765780638090a6e01461089657600080fd5b80635407a7cb1461079c578063582f3eba146107bc5780635b7121f8146107dc5780635c975abb146107fc57600080fd5b8063410b2424116102f3578063410b2424146107125780634f1ef2861461073457806350ee165714610747578063523681861461076757806352d1902d1461078757600080fd5b8063313ce5671461069657806336568abe146106b257806339c5fe5b146106d25780633ac722eb146106f257600080fd5b806319fac5f9116103a757806326e3208d1161037657806326e3208d1461060b578063279ad7ab146106215780632b543ccc146106415780632ba5981f146106565780632f2ff15d1461067657600080fd5b806319fac5f9146105945780631a59a995146105b657806323b872dd146105cb578063248a9ca3146105eb57600080fd5b8063077f224a116103ee578063077f224a146104c8578063095ea7b3146104e85780630b71051114610508578063104e087f1461054057806318160ddd1461056057600080fd5b8062e04c841461041f57806301ffc9a71461044157806302f3cdb91461047657806306fdde03146104a6575b600080fd5b34801561042b57600080fd5b5061043f61043a366004613820565b610d37565b005b34801561044d57600080fd5b5061046161045c36600461386e565b610e0f565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b50610498600080516020613f9783398151915281565b60405190815260200161046d565b3480156104b257600080fd5b506104bb610e46565b60405161046d91906138e8565b3480156104d457600080fd5b5061043f6104e33660046138fb565b610f09565b3480156104f457600080fd5b5061046161050336600461396f565b611190565b34801561051457600080fd5b50610528610523366004613999565b6111ab565b6040516001600160a01b03909116815260200161046d565b34801561054c57600080fd5b5061052861055b366004613999565b611206565b34801561056c57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610498565b3480156105a057600080fd5b506105a961123d565b60405161046d91906139b2565b3480156105c257600080fd5b50600454610498565b3480156105d757600080fd5b506104616105e63660046139ff565b61129f565b3480156105f757600080fd5b50610498610606366004613999565b61131a565b34801561061757600080fd5b5061049860025481565b34801561062d57600080fd5b5061052861063c366004613999565b61133c565b34801561064d57600080fd5b506105a9611366565b34801561066257600080fd5b50610528610671366004613999565b6113c6565b34801561068257600080fd5b5061043f610691366004613a3b565b6113d6565b3480156106a257600080fd5b506040516012815260200161046d565b3480156106be57600080fd5b5061043f6106cd366004613a3b565b6113f8565b3480156106de57600080fd5b506104616106ed366004613a67565b611430565b3480156106fe57600080fd5b5061043f61070d366004613820565b61144a565b34801561071e57600080fd5b50610498600080516020613ef783398151915281565b61043f610742366004613a82565b61152e565b34801561075357600080fd5b5061043f610762366004613ada565b61154d565b34801561077357600080fd5b5061043f610782366004613820565b6116b2565b34801561079357600080fd5b506104986117b2565b3480156107a857600080fd5b506105286107b7366004613999565b6117cf565b3480156107c857600080fd5b506105286107d7366004613999565b6117df565b3480156107e857600080fd5b506105286107f7366004613999565b6117ef565b34801561080857600080fd5b50600080516020613fd78339815191525460ff16610461565b34801561082d57600080fd5b50600554610498565b34801561084257600080fd5b5061043f610851366004613b31565b611826565b34801561086257600080fd5b50610498610871366004613a67565b61188b565b34801561088257600080fd5b5061043f610891366004613b66565b6118b3565b3480156108a257600080fd5b5061043f6108b1366004613820565b611996565b3480156108c257600080fd5b50610498600080516020613f1783398151915281565b3480156108e457600080fd5b506104986108f3366004613a67565b60006020819052908152604090205481565b34801561091157600080fd5b5061043f610920366004613820565b611a39565b34801561093157600080fd5b50600354610498565b34801561094657600080fd5b50610498600080516020613f3783398151915281565b34801561096857600080fd5b50610461610977366004613a3b565b611b39565b34801561098857600080fd5b506104bb611b71565b34801561099d57600080fd5b506105a9611bb0565b3480156109b257600080fd5b5061049860095481565b3480156109c857600080fd5b50610498600081565b3480156109dd57600080fd5b50610498600a5481565b3480156109f357600080fd5b50610498610a02366004613a67565b60016020526000908152604090205481565b348015610a2057600080fd5b50610528610a2f366004613999565b611c10565b348015610a4057600080fd5b50610461610a4f36600461396f565b611c20565b348015610a6057600080fd5b506104bb604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610a9157600080fd5b506105a9611c89565b348015610aa657600080fd5b5061043f610ab5366004613ada565b611ce9565b348015610ac657600080fd5b5061043f610ad5366004613820565b611ddf565b348015610ae657600080fd5b50610aef611eb6565b60405161046d9190613b97565b348015610b0857600080fd5b506105a9611fe6565b348015610b1d57600080fd5b50610528610b2c366004613999565b612046565b348015610b3d57600080fd5b5061043f610b4c366004613ada565b61207d565b348015610b5d57600080fd5b50610498600080516020613f7783398151915281565b348015610b7f57600080fd5b5061043f610b8e366004613a3b565b61221c565b348015610b9f57600080fd5b50610498600b5481565b348015610bb557600080fd5b50610461610bc4366004613a67565b60066020526000908152604090205460ff1681565b348015610be557600080fd5b50610498610bf4366004613c04565b612238565b348015610c0557600080fd5b5061043f610c14366004613820565b612282565b348015610c2557600080fd5b5061043f610c34366004613b31565b6123b6565b348015610c4557600080fd5b50600754610498565b348015610c5a57600080fd5b50610c6e610c69366004613a67565b61240f565b6040805193845260208401929092529082015260600161046d565b348015610c9557600080fd5b5061043f610ca4366004613820565b612445565b348015610cb557600080fd5b50600854610498565b348015610cca57600080fd5b50610528610cd9366004613999565b612576565b348015610cea57600080fd5b5061043f610cf9366004613820565b6125ad565b348015610d0a57600080fd5b50610461610d19366004613a67565b6001600160a01b031660009081526006602052604090205460ff1690565b600080516020613f37833981519152610d4f8161262a565b6001600160a01b0383166000908152602081905260409020548015610d78576002805482900390555b6001600160a01b0384166000908152602081815260408083208390556001909152812055610db4600080516020613f7783398151915285612637565b50610dbe846126bd565b836001600160a01b0316336001600160a01b03167f46a3bcda1dc0aaf87b1ae498a00c06de1741168a4756a49b3371b9f5bfffbfff85604051610e0191906138e8565b60405180910390a350505050565b60006001600160e01b03198216637965db0b60e01b1480610e4057506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020613ed783398151915291610e8590613c2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb190613c2e565b8015610efe5780601f10610ed357610100808354040283529160200191610efe565b820191906000526020600020905b815481529060010190602001808311610ee157829003601f168201915b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f4f5750825b905060008267ffffffffffffffff166001148015610f6c5750303b155b905081158015610f7a575080155b15610f985760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610fc257845460ff60401b1916600160401b1785555b610fcc88886127ba565b610fd76000876127cc565b50610ff0600080516020613f17833981519152876127cc565b50611009600080516020613f37833981519152876127cc565b50611022600080516020613f77833981519152876127cc565b5061103b600080516020613ef7833981519152876127cc565b50611054600080516020613f97833981519152876127cc565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0389166001600160a01b03199182168117909255600480548085019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054821683179055600580548085019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180548216831790556008805493840181556000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39092018054909216179055831561118657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b600061119a612867565b6111a4838361289a565b9392505050565b60085460009082106111d85760405162461bcd60e51b81526004016111cf90613c68565b60405180910390fd5b600882815481106111eb576111eb613c95565b6000918252602090912001546001600160a01b031692915050565b600554600090821061122a5760405162461bcd60e51b81526004016111cf90613c68565b600582815481106111eb576111eb613c95565b6060600580548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611277575b5050505050905090565b60006112a9612867565b6001600160a01b03841660009081526006602052604090205460ff161580156112eb57506001600160a01b03831660009081526006602052604090205460ff16155b6113075760405162461bcd60e51b81526004016111cf90613cab565b6113128484846128b2565b949350505050565b6000908152600080516020613fb7833981519152602052604090206001015490565b6003818154811061134c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60606004805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6007818154811061134c57600080fd5b6113df8261131a565b6113e88161262a565b6113f283836127cc565b50505050565b6001600160a01b03811633146114215760405163334bd91960e11b815260040160405180910390fd5b61142b8282612637565b505050565b6000610e40600080516020613ef783398151915283611b39565b600080516020613f178339815191526114628161262a565b61147a600080516020613f9783398151915284611b39565b6114bc5760405162461bcd60e51b81526020600482015260136024820152724e6f742061206d61737465722073746174757360681b60448201526064016111cf565b6114d4600080516020613f9783398151915284612637565b506114de836128d6565b826001600160a01b0316336001600160a01b03167f51141af7edd82b81899f3a893000cb2e1c6f47358ca77dae02f1de844db3f0b68460405161152191906138e8565b60405180910390a3505050565b6115366129ad565b61153f82612a52565b6115498282612a6a565b5050565b600080516020613f378339815191526115658161262a565b6001600160a01b03841661158b5760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156115c45760405162461bcd60e51b81526004016111cf90613cab565b60006115de600080516020613f7783398151915286611b39565b1590508015611616576115ff600080516020613f77833981519152866127cc565b5061160985612b27565b6002805485019055611654565b6001600160a01b038516600090815260208190526040902054808511156116465760028054828703019055611652565b60028054868303900390555b505b6001600160a01b038516600081815260208190526040908190208690555133907f127e8015e3ed084165ebcfb6636e0347c3b088218d00989d964c69e434105e5f906116a39088908890613cf6565b60405180910390a35050505050565b600080516020613f178339815191526116ca8161262a565b6001600160a01b0383166116f05760405162461bcd60e51b81526004016111cf90613cd0565b611708600080516020613f9783398151915284611b39565b1561174d5760405162461bcd60e51b8152602060048201526015602482015274416c7265616479206d61737465722073746174757360581b60448201526064016111cf565b611765600080516020613f97833981519152846127cc565b5061176f83612bca565b826001600160a01b0316336001600160a01b03167fd4fd8a370d3fbfae728fd173b1afaeda261c2f6b541ea3a5ec62fa787ab8c7468460405161152191906138e8565b60006117bc612c6d565b50600080516020613f5783398151915290565b6004818154811061134c57600080fd5b6008818154811061134c57600080fd5b60035460009082106118135760405162461bcd60e51b81526004016111cf90613c68565b600382815481106111eb576111eb613c95565b600080516020613f9783398151915261183e8161262a565b611846612cb6565b336001600160a01b03167fa0e83b3d54befde8bdbd53ba97df1aca1fd54ffe2cf64e134912105cfffcaed08360405161187f91906138e8565b60405180910390a25050565b6001600160a01b03166000908152600080516020613ed7833981519152602052604090205490565b600080516020613f778339815191526118cb8161262a565b6118d3612867565b33301461190a573360009081526006602052604090205460ff161561190a5760405162461bcd60e51b81526004016111cf90613cab565b60006119153361188b565b905083600b60008282546119299190613d25565b9091555061193990503385612d19565b6119438482613d38565b600003611960576009805490600061195a83613d4b565b91905055505b604051339081907feab88a0b2198f2928ade5fb787115a9a6ffbbf3705277143953a7c26769157ff90610e019088908890613cf6565b600080516020613f178339815191526119ae8161262a565b6001600160a01b0383166119d45760405162461bcd60e51b81526004016111cf90613cd0565b6119ec600080516020613ef7833981519152846127cc565b506119f683612d4f565b826001600160a01b0316336001600160a01b03167fa9d7450555f9f903f431808251e9b529e0e5dfcc06f78669e335aa3247bed7868460405161152191906138e8565b600080516020613f17833981519152611a518161262a565b6001600160a01b038316611a775760405162461bcd60e51b81526004016111cf90613cd0565b611a8f600080516020613f3783398151915284611b39565b15611ad45760405162461bcd60e51b815260206004820152601560248201527420b63932b0b23c9036b0b9ba32b91036b4b73a32b960591b60448201526064016111cf565b611aec600080516020613f37833981519152846127cc565b50611af683612df2565b826001600160a01b0316336001600160a01b03167f3ab206680c8c27d75c62054a01ac77c5873e81ffe65c180fdb58d971b96d34388460405161152191906138e8565b6000918252600080516020613fb7833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020613ed783398151915291610e8590613c2e565b60606003805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6005818154811061134c57600080fd5b6000611c2a612867565b3360009081526006602052604090205460ff16158015611c6357506001600160a01b03831660009081526006602052604090205460ff16155b611c7f5760405162461bcd60e51b81526004016111cf90613cab565b6111a48383612e95565b60606008805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600080516020613f37833981519152611d018161262a565b611d19600080516020613f7783398151915285611b39565b611d545760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064016111cf565b6001600160a01b03841660009081526020819052604090205480841115611d845760028054828603019055611d90565b60028054858303900390555b6001600160a01b038516600081815260208190526040908190208690555133907f2780d98c888fdc59ac7c8628a0bf62a14752d79fbeb234e1f0c76c9b6ce6f542906116a39088908890613cf6565b600080516020613f17833981519152611df78161262a565b611e0f600080516020613f3783398151915284611b39565b611e515760405162461bcd60e51b81526020600482015260136024820152722737ba10309036b0b9ba32b91036b4b73a32b960691b60448201526064016111cf565b611e69600080516020613f3783398151915284612637565b50611e7383612ea3565b826001600160a01b0316336001600160a01b03167f60763ff2f9b370bde86d1d96810ad6ab33c839c6e79c45227314714a3f2686298460405161152191906138e8565b60035460609060008167ffffffffffffffff811115611ed757611ed7613774565b604051908082528060200260200182016040528015611f3c57816020015b611f29604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b815260200190600190039081611ef55790505b50905060005b82811015611fdf57600060038281548110611f5f57611f5f613c95565b60009182526020808320909101546001600160a01b031680835282825260408084205460018452938190205481516080810183528381529384018590529083018190529093509060608101611fb48385613d38565b815250858581518110611fc957611fc9613c95565b6020908102919091010152505050600101611f42565b5092915050565b60606007805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600754600090821061206a5760405162461bcd60e51b81526004016111cf90613c68565b600782815481106111eb576111eb613c95565b600080516020613f778339815191526120958161262a565b61209d612867565b6001600160a01b0384166120c35760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156120fc5760405162461bcd60e51b81526004016111cf90613cab565b3360009081526020818152604080832054600190925290912054612121908590613d25565b11156121645760405162461bcd60e51b8152602060048201526012602482015271105b1b1bddd85b98d948195e18d95959195960721b60448201526064016111cf565b3360009081526001602052604081208054859290612183908490613d25565b9250508190555082600a600082825461219c9190613d25565b90915550600090506121ad8561188b565b90506121b98585612f7a565b806000036121d757600980549060006121d183613d62565b91905055505b846001600160a01b0316336001600160a01b03167f0a379200ca4d32ac7f1351005f51ef6d49dae15616e15e868f304fc5469e6d0a86866040516116a3929190613cf6565b6122258261131a565b61222e8161262a565b6113f28383612637565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b600080516020613ef783398151915261229a8161262a565b6001600160a01b0383166122c05760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03831660009081526006602052604090205460ff161561231f5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48189b1858dadb1a5cdd1959606a1b60448201526064016111cf565b6001600160a01b038316600081815260066020526040808220805460ff191660019081179091556007805491820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916831790555133907f41758605cde3a25b22ccad82f1492c23842cbf7039dc5984bbe579d1b8293556906115219086906138e8565b600080516020613f978339815191526123ce8161262a565b6123d6612fb0565b336001600160a01b03167f85b554d52672b7715dcfb02957fc048d23758df2ff9f9946236523fffd0d2e8f8360405161187f91906138e8565b6001600160a01b038116600090815260208181526040808320546001909252822054909161243d8284613d38565b929491935050565b6001600160a01b03821660009081526006602052604090205460ff1661249f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08189b1858dadb1a5cdd1959608a1b60448201526064016111cf565b6124b7600080516020613ef783398151915233611b39565b806124c157503033145b6124fe5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016111cf565b6001600160a01b0382166000908152600660205260409020805460ff1916905561252782612ff6565b816001600160a01b0316336001600160a01b03167fc58878141048f74383ecb83bd329e1a7329a1270e6e1edcaf6d3f8cfa893049c8360405161256a91906138e8565b60405180910390a35050565b600454600090821061259a5760405162461bcd60e51b81526004016111cf90613c68565b600482815481106111eb576111eb613c95565b600080516020613f178339815191526125c58161262a565b6125dd600080516020613ef783398151915284612637565b506125e7836130cd565b826001600160a01b0316336001600160a01b03167fddb0e0cb0c3574277c61848220221fdba7fec4d9a9677e8de5f605412ec11b8c8460405161152191906138e8565b61263481336131a4565b50565b6000600080516020613fb78339815191526126528484611b39565b156126b3576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610e40565b6000915050610e40565b60005b60035481101561154957816001600160a01b0316600382815481106126e7576126e7613c95565b6000918252602090912001546001600160a01b0316036127b2576003805461271190600190613d38565b8154811061272157612721613c95565b600091825260209091200154600380546001600160a01b03909216918390811061274d5761274d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600380548061278c5761278c613d7b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b6001016126c0565b6127c26131dd565b6115498282613226565b6000600080516020613fb78339815191526127e78484611b39565b6126b3576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561281d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610e40565b600080516020613fd78339815191525460ff16156128985760405163d93c066560e01b815260040160405180910390fd5b565b6000336128a8818585613277565b5060019392505050565b6000336128c0858285613284565b6128cb8585856132e5565b506001949350505050565b60005b60055481101561154957816001600160a01b03166005828154811061290057612900613c95565b6000918252602090912001546001600160a01b0316036129a5576005805461292a90600190613d38565b8154811061293a5761293a613c95565b600091825260209091200154600580546001600160a01b03909216918390811061296657612966613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061278c5761278c613d7b565b6001016128d9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612a3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612a28600080516020613f57833981519152546001600160a01b031690565b6001600160a01b031614155b156128985760405163703e46dd60e11b815260040160405180910390fd5b600080516020613f178339815191526115498161262a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ac4575060408051601f3d908101601f19168201909252612ac191810190613d91565b60015b612aec57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111cf565b600080516020613f578339815191528114612b1d57604051632a87526960e21b8152600481018290526024016111cf565b61142b8383613344565b60005b600354811015612b7757816001600160a01b031660038281548110612b5157612b51613c95565b6000918252602090912001546001600160a01b031603612b6f575050565b600101612b2a565b50600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600554811015612c1a57816001600160a01b031660058281548110612bf457612bf4613c95565b6000918252602090912001546001600160a01b031603612c12575050565b600101612bcd565b50600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0392909216919091179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146128985760405163703e46dd60e11b815260040160405180910390fd5b612cbe612867565b600080516020613fd7833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b038216612d4357604051634b637e8f60e11b8152600060048201526024016111cf565b6115498260008361339a565b60005b600854811015612d9f57816001600160a01b031660088281548110612d7957612d79613c95565b6000918252602090912001546001600160a01b031603612d97575050565b600101612d52565b50600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600454811015612e4257816001600160a01b031660048281548110612e1c57612e1c613c95565b6000918252602090912001546001600160a01b031603612e3a575050565b600101612df5565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336128a88185856132e5565b60005b60045481101561154957816001600160a01b031660048281548110612ecd57612ecd613c95565b6000918252602090912001546001600160a01b031603612f725760048054612ef790600190613d38565b81548110612f0757612f07613c95565b600091825260209091200154600480546001600160a01b039092169183908110612f3357612f33613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600480548061278c5761278c613d7b565b600101612ea6565b6001600160a01b038216612fa45760405163ec442f0560e01b8152600060048201526024016111cf565b6115496000838361339a565b612fb86134ca565b600080516020613fd7833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612cfb565b60005b60075481101561154957816001600160a01b03166007828154811061302057613020613c95565b6000918252602090912001546001600160a01b0316036130c5576007805461304a90600190613d38565b8154811061305a5761305a613c95565b600091825260209091200154600780546001600160a01b03909216918390811061308657613086613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600780548061278c5761278c613d7b565b600101612ff9565b60005b60085481101561154957816001600160a01b0316600882815481106130f7576130f7613c95565b6000918252602090912001546001600160a01b03160361319c576008805461312190600190613d38565b8154811061313157613131613c95565b600091825260209091200154600880546001600160a01b03909216918390811061315d5761315d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600880548061278c5761278c613d7b565b6001016130d0565b6131ae8282611b39565b6115495760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661289857604051631afcd79f60e31b815260040160405180910390fd5b61322e6131dd565b600080516020613ed78339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036132688482613dfa565b50600481016113f28382613dfa565b61142b83838360016134fa565b60006132908484612238565b90506000198110156113f257818110156132d657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016111cf565b6113f2848484840360006134fa565b6001600160a01b03831661330f57604051634b637e8f60e11b8152600060048201526024016111cf565b6001600160a01b0382166133395760405163ec442f0560e01b8152600060048201526024016111cf565b61142b83838361339a565b61334d826135d9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156133925761142b828261363e565b6115496136b4565b600080516020613ed78339815191526001600160a01b0384166133d657818160020160008282546133cb9190613d25565b909155506134489050565b6001600160a01b038416600090815260208290526040902054828110156134295760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016111cf565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316613466576002810180548390039055613485565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0191815260200190565b600080516020613fd78339815191525460ff1661289857604051638dfc202b60e01b815260040160405180910390fd5b600080516020613ed78339815191526001600160a01b0385166135335760405163e602df0560e01b8152600060048201526024016111cf565b6001600160a01b03841661355d57604051634a1406b160e11b8152600060048201526024016111cf565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156135d257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516116a391815260200190565b5050505050565b806001600160a01b03163b60000361360f57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111cf565b600080516020613f5783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161365b9190613eba565b600060405180830381855af49150503d8060008114613696576040519150601f19603f3d011682016040523d82523d6000602084013e61369b565b606091505b50915091506136ab8583836136d3565b95945050505050565b34156128985760405163b398979f60e01b815260040160405180910390fd5b6060826136e8576136e38261372f565b6111a4565b81511580156136ff57506001600160a01b0384163b155b1561372857604051639996b31560e01b81526001600160a01b03851660048201526024016111cf565b50806111a4565b80511561373f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b038116811461376f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156137a5576137a5613774565b604051601f8501601f19908116603f011681019082821181831017156137cd576137cd613774565b816040528093508581528686860111156137e657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261381157600080fd5b6111a48383356020850161378a565b6000806040838503121561383357600080fd5b61383c83613758565b9150602083013567ffffffffffffffff81111561385857600080fd5b61386485828601613800565b9150509250929050565b60006020828403121561388057600080fd5b81356001600160e01b0319811681146111a457600080fd5b60005b838110156138b357818101518382015260200161389b565b50506000910152565b600081518084526138d4816020860160208601613898565b601f01601f19169290920160200192915050565b6020815260006111a460208301846138bc565b60008060006060848603121561391057600080fd5b833567ffffffffffffffff8082111561392857600080fd5b61393487838801613800565b9450602086013591508082111561394a57600080fd5b5061395786828701613800565b92505061396660408501613758565b90509250925092565b6000806040838503121561398257600080fd5b61398b83613758565b946020939093013593505050565b6000602082840312156139ab57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156139f35783516001600160a01b0316835292840192918401916001016139ce565b50909695505050505050565b600080600060608486031215613a1457600080fd5b613a1d84613758565b9250613a2b60208501613758565b9150604084013590509250925092565b60008060408385031215613a4e57600080fd5b82359150613a5e60208401613758565b90509250929050565b600060208284031215613a7957600080fd5b6111a482613758565b60008060408385031215613a9557600080fd5b613a9e83613758565b9150602083013567ffffffffffffffff811115613aba57600080fd5b8301601f81018513613acb57600080fd5b6138648582356020840161378a565b600080600060608486031215613aef57600080fd5b613af884613758565b925060208401359150604084013567ffffffffffffffff811115613b1b57600080fd5b613b2786828701613800565b9150509250925092565b600060208284031215613b4357600080fd5b813567ffffffffffffffff811115613b5a57600080fd5b61131284828501613800565b60008060408385031215613b7957600080fd5b82359150602083013567ffffffffffffffff81111561385857600080fd5b602080825282518282018190526000919060409081850190868401855b82811015613bf757815180516001600160a01b03168552868101518786015285810151868601526060908101519085015260809093019290850190600101613bb4565b5091979650505050505050565b60008060408385031215613c1757600080fd5b613c2083613758565b9150613a5e60208401613758565b600181811c90821680613c4257607f821691505b602082108103613c6257634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252600b908201526a109b1858dadb1a5cdd195960aa1b604082015260600190565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b82815260406020820152600061131260408301846138bc565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e4057610e40613d0f565b81810381811115610e4057610e40613d0f565b600081613d5a57613d5a613d0f565b506000190190565b600060018201613d7457613d74613d0f565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613da357600080fd5b5051919050565b601f82111561142b576000816000526020600020601f850160051c81016020861015613dd35750805b601f850160051c820191505b81811015613df257828155600101613ddf565b505050505050565b815167ffffffffffffffff811115613e1457613e14613774565b613e2881613e228454613c2e565b84613daa565b602080601f831160018114613e5d5760008415613e455750858301515b600019600386901b1c1916600185901b178555613df2565b600085815260208120601f198616915b82811015613e8c57888601518255948401946001909101908401613e6d565b5085821015613eaa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613ecc818460208701613898565b919091019291505056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00f988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee35369b3a7bb98c90641a907c2fd643ea781341eba72ccffd47cb018c128c48c34d722a319ebda03eb1179096607e87f360b089b3919a0d764a65ea950521a6c9360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a625e2241f7c713e379444aaa3c5b4960dee82d8c1d72b62fa8c250e46c60358b902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a26469706673582212208a6d1ae7c0d53df043a3876944cd272d6e303dee6ba36c39744d2d45b6f572f564736f6c63430008160033\",\n \"deployedBytecode\": \"0x60806040526004361061041a5760003560e01c80638a1851131161021e578063c847056911610123578063ddf579ff116100ab578063f1c5faae1161007a578063f1c5faae14610c89578063f5f167e514610ca9578063f864aa4714610cbe578063fe17fbd114610cde578063fe575a8714610cfe57600080fd5b8063ddf579ff14610bf9578063e79faa5814610c19578063e860cb8f14610c39578063f09b220314610c4e57600080fd5b8063d5391393116100f2578063d539139314610b51578063d547741f14610b73578063d89135cd14610b93578063dbac26e914610ba9578063dd62ed3e14610bd957600080fd5b8063c847056914610ada578063cb52a88b14610afc578063cc821f0d14610b11578063d3fc986414610b3157600080fd5b8063a217fddf116101a6578063a9059cbb11610175578063a9059cbb14610a34578063ad3cb1cc14610a54578063b135824a14610a85578063ba6256a814610a9a578063c780f66314610aba57600080fd5b8063a217fddf146109bc578063a2309ff8146109d1578063a40fa11b146109e7578063a6d55d0814610a1457600080fd5b806391a64e5f116101ed57806391a64e5f1461093a57806391d148541461095c57806395d89b411461097c578063a045442c14610991578063a15ea064146109a657600080fd5b80638a185113146108b65780638a6db9c3146108d85780638cd9317d146109055780638dbb94eb1461092557600080fd5b8063313ce567116103245780635407a7cb116102ac578063650e448a1161027b578063650e448a146108215780636da663551461083657806370a08231146108565780637641e6f3146108765780638090a6e01461089657600080fd5b80635407a7cb1461079c578063582f3eba146107bc5780635b7121f8146107dc5780635c975abb146107fc57600080fd5b8063410b2424116102f3578063410b2424146107125780634f1ef2861461073457806350ee165714610747578063523681861461076757806352d1902d1461078757600080fd5b8063313ce5671461069657806336568abe146106b257806339c5fe5b146106d25780633ac722eb146106f257600080fd5b806319fac5f9116103a757806326e3208d1161037657806326e3208d1461060b578063279ad7ab146106215780632b543ccc146106415780632ba5981f146106565780632f2ff15d1461067657600080fd5b806319fac5f9146105945780631a59a995146105b657806323b872dd146105cb578063248a9ca3146105eb57600080fd5b8063077f224a116103ee578063077f224a146104c8578063095ea7b3146104e85780630b71051114610508578063104e087f1461054057806318160ddd1461056057600080fd5b8062e04c841461041f57806301ffc9a71461044157806302f3cdb91461047657806306fdde03146104a6575b600080fd5b34801561042b57600080fd5b5061043f61043a366004613820565b610d37565b005b34801561044d57600080fd5b5061046161045c36600461386e565b610e0f565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b50610498600080516020613f9783398151915281565b60405190815260200161046d565b3480156104b257600080fd5b506104bb610e46565b60405161046d91906138e8565b3480156104d457600080fd5b5061043f6104e33660046138fb565b610f09565b3480156104f457600080fd5b5061046161050336600461396f565b611190565b34801561051457600080fd5b50610528610523366004613999565b6111ab565b6040516001600160a01b03909116815260200161046d565b34801561054c57600080fd5b5061052861055b366004613999565b611206565b34801561056c57600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0254610498565b3480156105a057600080fd5b506105a961123d565b60405161046d91906139b2565b3480156105c257600080fd5b50600454610498565b3480156105d757600080fd5b506104616105e63660046139ff565b61129f565b3480156105f757600080fd5b50610498610606366004613999565b61131a565b34801561061757600080fd5b5061049860025481565b34801561062d57600080fd5b5061052861063c366004613999565b61133c565b34801561064d57600080fd5b506105a9611366565b34801561066257600080fd5b50610528610671366004613999565b6113c6565b34801561068257600080fd5b5061043f610691366004613a3b565b6113d6565b3480156106a257600080fd5b506040516012815260200161046d565b3480156106be57600080fd5b5061043f6106cd366004613a3b565b6113f8565b3480156106de57600080fd5b506104616106ed366004613a67565b611430565b3480156106fe57600080fd5b5061043f61070d366004613820565b61144a565b34801561071e57600080fd5b50610498600080516020613ef783398151915281565b61043f610742366004613a82565b61152e565b34801561075357600080fd5b5061043f610762366004613ada565b61154d565b34801561077357600080fd5b5061043f610782366004613820565b6116b2565b34801561079357600080fd5b506104986117b2565b3480156107a857600080fd5b506105286107b7366004613999565b6117cf565b3480156107c857600080fd5b506105286107d7366004613999565b6117df565b3480156107e857600080fd5b506105286107f7366004613999565b6117ef565b34801561080857600080fd5b50600080516020613fd78339815191525460ff16610461565b34801561082d57600080fd5b50600554610498565b34801561084257600080fd5b5061043f610851366004613b31565b611826565b34801561086257600080fd5b50610498610871366004613a67565b61188b565b34801561088257600080fd5b5061043f610891366004613b66565b6118b3565b3480156108a257600080fd5b5061043f6108b1366004613820565b611996565b3480156108c257600080fd5b50610498600080516020613f1783398151915281565b3480156108e457600080fd5b506104986108f3366004613a67565b60006020819052908152604090205481565b34801561091157600080fd5b5061043f610920366004613820565b611a39565b34801561093157600080fd5b50600354610498565b34801561094657600080fd5b50610498600080516020613f3783398151915281565b34801561096857600080fd5b50610461610977366004613a3b565b611b39565b34801561098857600080fd5b506104bb611b71565b34801561099d57600080fd5b506105a9611bb0565b3480156109b257600080fd5b5061049860095481565b3480156109c857600080fd5b50610498600081565b3480156109dd57600080fd5b50610498600a5481565b3480156109f357600080fd5b50610498610a02366004613a67565b60016020526000908152604090205481565b348015610a2057600080fd5b50610528610a2f366004613999565b611c10565b348015610a4057600080fd5b50610461610a4f36600461396f565b611c20565b348015610a6057600080fd5b506104bb604051806040016040528060058152602001640352e302e360dc1b81525081565b348015610a9157600080fd5b506105a9611c89565b348015610aa657600080fd5b5061043f610ab5366004613ada565b611ce9565b348015610ac657600080fd5b5061043f610ad5366004613820565b611ddf565b348015610ae657600080fd5b50610aef611eb6565b60405161046d9190613b97565b348015610b0857600080fd5b506105a9611fe6565b348015610b1d57600080fd5b50610528610b2c366004613999565b612046565b348015610b3d57600080fd5b5061043f610b4c366004613ada565b61207d565b348015610b5d57600080fd5b50610498600080516020613f7783398151915281565b348015610b7f57600080fd5b5061043f610b8e366004613a3b565b61221c565b348015610b9f57600080fd5b50610498600b5481565b348015610bb557600080fd5b50610461610bc4366004613a67565b60066020526000908152604090205460ff1681565b348015610be557600080fd5b50610498610bf4366004613c04565b612238565b348015610c0557600080fd5b5061043f610c14366004613820565b612282565b348015610c2557600080fd5b5061043f610c34366004613b31565b6123b6565b348015610c4557600080fd5b50600754610498565b348015610c5a57600080fd5b50610c6e610c69366004613a67565b61240f565b6040805193845260208401929092529082015260600161046d565b348015610c9557600080fd5b5061043f610ca4366004613820565b612445565b348015610cb557600080fd5b50600854610498565b348015610cca57600080fd5b50610528610cd9366004613999565b612576565b348015610cea57600080fd5b5061043f610cf9366004613820565b6125ad565b348015610d0a57600080fd5b50610461610d19366004613a67565b6001600160a01b031660009081526006602052604090205460ff1690565b600080516020613f37833981519152610d4f8161262a565b6001600160a01b0383166000908152602081905260409020548015610d78576002805482900390555b6001600160a01b0384166000908152602081815260408083208390556001909152812055610db4600080516020613f7783398151915285612637565b50610dbe846126bd565b836001600160a01b0316336001600160a01b03167f46a3bcda1dc0aaf87b1ae498a00c06de1741168a4756a49b3371b9f5bfffbfff85604051610e0191906138e8565b60405180910390a350505050565b60006001600160e01b03198216637965db0b60e01b1480610e4057506301ffc9a760e01b6001600160e01b03198316145b92915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace038054606091600080516020613ed783398151915291610e8590613c2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb190613c2e565b8015610efe5780601f10610ed357610100808354040283529160200191610efe565b820191906000526020600020905b815481529060010190602001808311610ee157829003601f168201915b505050505091505090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f4f5750825b905060008267ffffffffffffffff166001148015610f6c5750303b155b905081158015610f7a575080155b15610f985760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610fc257845460ff60401b1916600160401b1785555b610fcc88886127ba565b610fd76000876127cc565b50610ff0600080516020613f17833981519152876127cc565b50611009600080516020613f37833981519152876127cc565b50611022600080516020613f77833981519152876127cc565b5061103b600080516020613ef7833981519152876127cc565b50611054600080516020613f97833981519152876127cc565b506003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0389166001600160a01b03199182168117909255600480548085019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b018054821683179055600580548085019091557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180548216831790556008805493840181556000527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39092018054909216179055831561118657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050565b600061119a612867565b6111a4838361289a565b9392505050565b60085460009082106111d85760405162461bcd60e51b81526004016111cf90613c68565b60405180910390fd5b600882815481106111eb576111eb613c95565b6000918252602090912001546001600160a01b031692915050565b600554600090821061122a5760405162461bcd60e51b81526004016111cf90613c68565b600582815481106111eb576111eb613c95565b6060600580548060200260200160405190810160405280929190818152602001828054801561129557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611277575b5050505050905090565b60006112a9612867565b6001600160a01b03841660009081526006602052604090205460ff161580156112eb57506001600160a01b03831660009081526006602052604090205460ff16155b6113075760405162461bcd60e51b81526004016111cf90613cab565b6113128484846128b2565b949350505050565b6000908152600080516020613fb7833981519152602052604090206001015490565b6003818154811061134c57600080fd5b6000918252602090912001546001600160a01b0316905081565b60606004805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6007818154811061134c57600080fd5b6113df8261131a565b6113e88161262a565b6113f283836127cc565b50505050565b6001600160a01b03811633146114215760405163334bd91960e11b815260040160405180910390fd5b61142b8282612637565b505050565b6000610e40600080516020613ef783398151915283611b39565b600080516020613f178339815191526114628161262a565b61147a600080516020613f9783398151915284611b39565b6114bc5760405162461bcd60e51b81526020600482015260136024820152724e6f742061206d61737465722073746174757360681b60448201526064016111cf565b6114d4600080516020613f9783398151915284612637565b506114de836128d6565b826001600160a01b0316336001600160a01b03167f51141af7edd82b81899f3a893000cb2e1c6f47358ca77dae02f1de844db3f0b68460405161152191906138e8565b60405180910390a3505050565b6115366129ad565b61153f82612a52565b6115498282612a6a565b5050565b600080516020613f378339815191526115658161262a565b6001600160a01b03841661158b5760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156115c45760405162461bcd60e51b81526004016111cf90613cab565b60006115de600080516020613f7783398151915286611b39565b1590508015611616576115ff600080516020613f77833981519152866127cc565b5061160985612b27565b6002805485019055611654565b6001600160a01b038516600090815260208190526040902054808511156116465760028054828703019055611652565b60028054868303900390555b505b6001600160a01b038516600081815260208190526040908190208690555133907f127e8015e3ed084165ebcfb6636e0347c3b088218d00989d964c69e434105e5f906116a39088908890613cf6565b60405180910390a35050505050565b600080516020613f178339815191526116ca8161262a565b6001600160a01b0383166116f05760405162461bcd60e51b81526004016111cf90613cd0565b611708600080516020613f9783398151915284611b39565b1561174d5760405162461bcd60e51b8152602060048201526015602482015274416c7265616479206d61737465722073746174757360581b60448201526064016111cf565b611765600080516020613f97833981519152846127cc565b5061176f83612bca565b826001600160a01b0316336001600160a01b03167fd4fd8a370d3fbfae728fd173b1afaeda261c2f6b541ea3a5ec62fa787ab8c7468460405161152191906138e8565b60006117bc612c6d565b50600080516020613f5783398151915290565b6004818154811061134c57600080fd5b6008818154811061134c57600080fd5b60035460009082106118135760405162461bcd60e51b81526004016111cf90613c68565b600382815481106111eb576111eb613c95565b600080516020613f9783398151915261183e8161262a565b611846612cb6565b336001600160a01b03167fa0e83b3d54befde8bdbd53ba97df1aca1fd54ffe2cf64e134912105cfffcaed08360405161187f91906138e8565b60405180910390a25050565b6001600160a01b03166000908152600080516020613ed7833981519152602052604090205490565b600080516020613f778339815191526118cb8161262a565b6118d3612867565b33301461190a573360009081526006602052604090205460ff161561190a5760405162461bcd60e51b81526004016111cf90613cab565b60006119153361188b565b905083600b60008282546119299190613d25565b9091555061193990503385612d19565b6119438482613d38565b600003611960576009805490600061195a83613d4b565b91905055505b604051339081907feab88a0b2198f2928ade5fb787115a9a6ffbbf3705277143953a7c26769157ff90610e019088908890613cf6565b600080516020613f178339815191526119ae8161262a565b6001600160a01b0383166119d45760405162461bcd60e51b81526004016111cf90613cd0565b6119ec600080516020613ef7833981519152846127cc565b506119f683612d4f565b826001600160a01b0316336001600160a01b03167fa9d7450555f9f903f431808251e9b529e0e5dfcc06f78669e335aa3247bed7868460405161152191906138e8565b600080516020613f17833981519152611a518161262a565b6001600160a01b038316611a775760405162461bcd60e51b81526004016111cf90613cd0565b611a8f600080516020613f3783398151915284611b39565b15611ad45760405162461bcd60e51b815260206004820152601560248201527420b63932b0b23c9036b0b9ba32b91036b4b73a32b960591b60448201526064016111cf565b611aec600080516020613f37833981519152846127cc565b50611af683612df2565b826001600160a01b0316336001600160a01b03167f3ab206680c8c27d75c62054a01ac77c5873e81ffe65c180fdb58d971b96d34388460405161152191906138e8565b6000918252600080516020613fb7833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020613ed783398151915291610e8590613c2e565b60606003805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b6005818154811061134c57600080fd5b6000611c2a612867565b3360009081526006602052604090205460ff16158015611c6357506001600160a01b03831660009081526006602052604090205460ff16155b611c7f5760405162461bcd60e51b81526004016111cf90613cab565b6111a48383612e95565b60606008805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600080516020613f37833981519152611d018161262a565b611d19600080516020613f7783398151915285611b39565b611d545760405162461bcd60e51b815260206004820152600c60248201526b2737ba10309036b4b73a32b960a11b60448201526064016111cf565b6001600160a01b03841660009081526020819052604090205480841115611d845760028054828603019055611d90565b60028054858303900390555b6001600160a01b038516600081815260208190526040908190208690555133907f2780d98c888fdc59ac7c8628a0bf62a14752d79fbeb234e1f0c76c9b6ce6f542906116a39088908890613cf6565b600080516020613f17833981519152611df78161262a565b611e0f600080516020613f3783398151915284611b39565b611e515760405162461bcd60e51b81526020600482015260136024820152722737ba10309036b0b9ba32b91036b4b73a32b960691b60448201526064016111cf565b611e69600080516020613f3783398151915284612637565b50611e7383612ea3565b826001600160a01b0316336001600160a01b03167f60763ff2f9b370bde86d1d96810ad6ab33c839c6e79c45227314714a3f2686298460405161152191906138e8565b60035460609060008167ffffffffffffffff811115611ed757611ed7613774565b604051908082528060200260200182016040528015611f3c57816020015b611f29604051806080016040528060006001600160a01b031681526020016000815260200160008152602001600081525090565b815260200190600190039081611ef55790505b50905060005b82811015611fdf57600060038281548110611f5f57611f5f613c95565b60009182526020808320909101546001600160a01b031680835282825260408084205460018452938190205481516080810183528381529384018590529083018190529093509060608101611fb48385613d38565b815250858581518110611fc957611fc9613c95565b6020908102919091010152505050600101611f42565b5092915050565b60606007805480602002602001604051908101604052809291908181526020018280548015611295576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311611277575050505050905090565b600754600090821061206a5760405162461bcd60e51b81526004016111cf90613c68565b600782815481106111eb576111eb613c95565b600080516020613f778339815191526120958161262a565b61209d612867565b6001600160a01b0384166120c35760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03841660009081526006602052604090205460ff16156120fc5760405162461bcd60e51b81526004016111cf90613cab565b3360009081526020818152604080832054600190925290912054612121908590613d25565b11156121645760405162461bcd60e51b8152602060048201526012602482015271105b1b1bddd85b98d948195e18d95959195960721b60448201526064016111cf565b3360009081526001602052604081208054859290612183908490613d25565b9250508190555082600a600082825461219c9190613d25565b90915550600090506121ad8561188b565b90506121b98585612f7a565b806000036121d757600980549060006121d183613d62565b91905055505b846001600160a01b0316336001600160a01b03167f0a379200ca4d32ac7f1351005f51ef6d49dae15616e15e868f304fc5469e6d0a86866040516116a3929190613cf6565b6122258261131a565b61222e8161262a565b6113f28383612637565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b600080516020613ef783398151915261229a8161262a565b6001600160a01b0383166122c05760405162461bcd60e51b81526004016111cf90613cd0565b6001600160a01b03831660009081526006602052604090205460ff161561231f5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e48189b1858dadb1a5cdd1959606a1b60448201526064016111cf565b6001600160a01b038316600081815260066020526040808220805460ff191660019081179091556007805491820181559092527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c68890910180546001600160a01b031916831790555133907f41758605cde3a25b22ccad82f1492c23842cbf7039dc5984bbe579d1b8293556906115219086906138e8565b600080516020613f978339815191526123ce8161262a565b6123d6612fb0565b336001600160a01b03167f85b554d52672b7715dcfb02957fc048d23758df2ff9f9946236523fffd0d2e8f8360405161187f91906138e8565b6001600160a01b038116600090815260208181526040808320546001909252822054909161243d8284613d38565b929491935050565b6001600160a01b03821660009081526006602052604090205460ff1661249f5760405162461bcd60e51b815260206004820152600f60248201526e139bdd08189b1858dadb1a5cdd1959608a1b60448201526064016111cf565b6124b7600080516020613ef783398151915233611b39565b806124c157503033145b6124fe5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b60448201526064016111cf565b6001600160a01b0382166000908152600660205260409020805460ff1916905561252782612ff6565b816001600160a01b0316336001600160a01b03167fc58878141048f74383ecb83bd329e1a7329a1270e6e1edcaf6d3f8cfa893049c8360405161256a91906138e8565b60405180910390a35050565b600454600090821061259a5760405162461bcd60e51b81526004016111cf90613c68565b600482815481106111eb576111eb613c95565b600080516020613f178339815191526125c58161262a565b6125dd600080516020613ef783398151915284612637565b506125e7836130cd565b826001600160a01b0316336001600160a01b03167fddb0e0cb0c3574277c61848220221fdba7fec4d9a9677e8de5f605412ec11b8c8460405161152191906138e8565b61263481336131a4565b50565b6000600080516020613fb78339815191526126528484611b39565b156126b3576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610e40565b6000915050610e40565b60005b60035481101561154957816001600160a01b0316600382815481106126e7576126e7613c95565b6000918252602090912001546001600160a01b0316036127b2576003805461271190600190613d38565b8154811061272157612721613c95565b600091825260209091200154600380546001600160a01b03909216918390811061274d5761274d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600380548061278c5761278c613d7b565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b6001016126c0565b6127c26131dd565b6115498282613226565b6000600080516020613fb78339815191526127e78484611b39565b6126b3576000848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561281d3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610e40565b600080516020613fd78339815191525460ff16156128985760405163d93c066560e01b815260040160405180910390fd5b565b6000336128a8818585613277565b5060019392505050565b6000336128c0858285613284565b6128cb8585856132e5565b506001949350505050565b60005b60055481101561154957816001600160a01b03166005828154811061290057612900613c95565b6000918252602090912001546001600160a01b0316036129a5576005805461292a90600190613d38565b8154811061293a5761293a613c95565b600091825260209091200154600580546001600160a01b03909216918390811061296657612966613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600580548061278c5761278c613d7b565b6001016128d9565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612a3457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612a28600080516020613f57833981519152546001600160a01b031690565b6001600160a01b031614155b156128985760405163703e46dd60e11b815260040160405180910390fd5b600080516020613f178339815191526115498161262a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612ac4575060408051601f3d908101601f19168201909252612ac191810190613d91565b60015b612aec57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111cf565b600080516020613f578339815191528114612b1d57604051632a87526960e21b8152600481018290526024016111cf565b61142b8383613344565b60005b600354811015612b7757816001600160a01b031660038281548110612b5157612b51613c95565b6000918252602090912001546001600160a01b031603612b6f575050565b600101612b2a565b50600380546001810182556000919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600554811015612c1a57816001600160a01b031660058281548110612bf457612bf4613c95565b6000918252602090912001546001600160a01b031603612c12575050565b600101612bcd565b50600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0392909216919091179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146128985760405163703e46dd60e11b815260040160405180910390fd5b612cbe612867565b600080516020613fd7833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b038216612d4357604051634b637e8f60e11b8152600060048201526024016111cf565b6115498260008361339a565b60005b600854811015612d9f57816001600160a01b031660088281548110612d7957612d79613c95565b6000918252602090912001546001600160a01b031603612d97575050565b600101612d52565b50600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b600454811015612e4257816001600160a01b031660048281548110612e1c57612e1c613c95565b6000918252602090912001546001600160a01b031603612e3a575050565b600101612df5565b50600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0392909216919091179055565b6000336128a88185856132e5565b60005b60045481101561154957816001600160a01b031660048281548110612ecd57612ecd613c95565b6000918252602090912001546001600160a01b031603612f725760048054612ef790600190613d38565b81548110612f0757612f07613c95565b600091825260209091200154600480546001600160a01b039092169183908110612f3357612f33613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600480548061278c5761278c613d7b565b600101612ea6565b6001600160a01b038216612fa45760405163ec442f0560e01b8152600060048201526024016111cf565b6115496000838361339a565b612fb86134ca565b600080516020613fd7833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612cfb565b60005b60075481101561154957816001600160a01b03166007828154811061302057613020613c95565b6000918252602090912001546001600160a01b0316036130c5576007805461304a90600190613d38565b8154811061305a5761305a613c95565b600091825260209091200154600780546001600160a01b03909216918390811061308657613086613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600780548061278c5761278c613d7b565b600101612ff9565b60005b60085481101561154957816001600160a01b0316600882815481106130f7576130f7613c95565b6000918252602090912001546001600160a01b03160361319c576008805461312190600190613d38565b8154811061313157613131613c95565b600091825260209091200154600880546001600160a01b03909216918390811061315d5761315d613c95565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600880548061278c5761278c613d7b565b6001016130d0565b6131ae8282611b39565b6115495760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111cf565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661289857604051631afcd79f60e31b815260040160405180910390fd5b61322e6131dd565b600080516020613ed78339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036132688482613dfa565b50600481016113f28382613dfa565b61142b83838360016134fa565b60006132908484612238565b90506000198110156113f257818110156132d657604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016111cf565b6113f2848484840360006134fa565b6001600160a01b03831661330f57604051634b637e8f60e11b8152600060048201526024016111cf565b6001600160a01b0382166133395760405163ec442f0560e01b8152600060048201526024016111cf565b61142b83838361339a565b61334d826135d9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156133925761142b828261363e565b6115496136b4565b600080516020613ed78339815191526001600160a01b0384166133d657818160020160008282546133cb9190613d25565b909155506134489050565b6001600160a01b038416600090815260208290526040902054828110156134295760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016111cf565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b038316613466576002810180548390039055613485565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610e0191815260200190565b600080516020613fd78339815191525460ff1661289857604051638dfc202b60e01b815260040160405180910390fd5b600080516020613ed78339815191526001600160a01b0385166135335760405163e602df0560e01b8152600060048201526024016111cf565b6001600160a01b03841661355d57604051634a1406b160e11b8152600060048201526024016111cf565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156135d257836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516116a391815260200190565b5050505050565b806001600160a01b03163b60000361360f57604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111cf565b600080516020613f5783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161365b9190613eba565b600060405180830381855af49150503d8060008114613696576040519150601f19603f3d011682016040523d82523d6000602084013e61369b565b606091505b50915091506136ab8583836136d3565b95945050505050565b34156128985760405163b398979f60e01b815260040160405180910390fd5b6060826136e8576136e38261372f565b6111a4565b81511580156136ff57506001600160a01b0384163b155b1561372857604051639996b31560e01b81526001600160a01b03851660048201526024016111cf565b50806111a4565b80511561373f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80356001600160a01b038116811461376f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156137a5576137a5613774565b604051601f8501601f19908116603f011681019082821181831017156137cd576137cd613774565b816040528093508581528686860111156137e657600080fd5b858560208301376000602087830101525050509392505050565b600082601f83011261381157600080fd5b6111a48383356020850161378a565b6000806040838503121561383357600080fd5b61383c83613758565b9150602083013567ffffffffffffffff81111561385857600080fd5b61386485828601613800565b9150509250929050565b60006020828403121561388057600080fd5b81356001600160e01b0319811681146111a457600080fd5b60005b838110156138b357818101518382015260200161389b565b50506000910152565b600081518084526138d4816020860160208601613898565b601f01601f19169290920160200192915050565b6020815260006111a460208301846138bc565b60008060006060848603121561391057600080fd5b833567ffffffffffffffff8082111561392857600080fd5b61393487838801613800565b9450602086013591508082111561394a57600080fd5b5061395786828701613800565b92505061396660408501613758565b90509250925092565b6000806040838503121561398257600080fd5b61398b83613758565b946020939093013593505050565b6000602082840312156139ab57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156139f35783516001600160a01b0316835292840192918401916001016139ce565b50909695505050505050565b600080600060608486031215613a1457600080fd5b613a1d84613758565b9250613a2b60208501613758565b9150604084013590509250925092565b60008060408385031215613a4e57600080fd5b82359150613a5e60208401613758565b90509250929050565b600060208284031215613a7957600080fd5b6111a482613758565b60008060408385031215613a9557600080fd5b613a9e83613758565b9150602083013567ffffffffffffffff811115613aba57600080fd5b8301601f81018513613acb57600080fd5b6138648582356020840161378a565b600080600060608486031215613aef57600080fd5b613af884613758565b925060208401359150604084013567ffffffffffffffff811115613b1b57600080fd5b613b2786828701613800565b9150509250925092565b600060208284031215613b4357600080fd5b813567ffffffffffffffff811115613b5a57600080fd5b61131284828501613800565b60008060408385031215613b7957600080fd5b82359150602083013567ffffffffffffffff81111561385857600080fd5b602080825282518282018190526000919060409081850190868401855b82811015613bf757815180516001600160a01b03168552868101518786015285810151868601526060908101519085015260809093019290850190600101613bb4565b5091979650505050505050565b60008060408385031215613c1757600080fd5b613c2083613758565b9150613a5e60208401613758565b600181811c90821680613c4257607f821691505b602082108103613c6257634e487b7160e01b600052602260045260246000fd5b50919050565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252600b908201526a109b1858dadb1a5cdd195960aa1b604082015260600190565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b82815260406020820152600061131260408301846138bc565b634e487b7160e01b600052601160045260246000fd5b80820180821115610e4057610e40613d0f565b81810381811115610e4057610e40613d0f565b600081613d5a57613d5a613d0f565b506000190190565b600060018201613d7457613d74613d0f565b5060010190565b634e487b7160e01b600052603160045260246000fd5b600060208284031215613da357600080fd5b5051919050565b601f82111561142b576000816000526020600020601f850160051c81016020861015613dd35750805b601f850160051c820191505b81811015613df257828155600101613ddf565b505050505050565b815167ffffffffffffffff811115613e1457613e14613774565b613e2881613e228454613c2e565b84613daa565b602080601f831160018114613e5d5760008415613e455750858301515b600019600386901b1c1916600185901b178555613df2565b600085815260208120601f198616915b82811015613e8c57888601518255948401946001909101908401613e6d565b5085821015613eaa5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251613ecc818460208701613898565b919091019291505056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00f988e4fb62b8e14f4820fed03192306ddf4d7dbfa215595ba1c6ba4b76b369ee35369b3a7bb98c90641a907c2fd643ea781341eba72ccffd47cb018c128c48c34d722a319ebda03eb1179096607e87f360b089b3919a0d764a65ea950521a6c9360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a625e2241f7c713e379444aaa3c5b4960dee82d8c1d72b62fa8c250e46c60358b902dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a26469706673582212208a6d1ae7c0d53df043a3876944cd272d6e303dee6ba36c39744d2d45b6f572f564736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","{\n \"_format\": \"hh-sol-artifact-1\",\n \"contractName\": \"StableCoinBeacon\",\n \"sourceName\": \"contracts/token/StableCoinBeacon.sol\",\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_implementation\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BeaconInvalidImplementation\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableInvalidOwner\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"account\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnableUnauthorizedAccount\",\n \"type\": \"error\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"previousOwner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"OwnershipTransferred\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"internalType\": \"address\",\n \"name\": \"implementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"Upgraded\",\n \"type\": \"event\"\n },\n {\n \"inputs\": [],\n \"name\": \"implementation\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"owner\",\n \"outputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"renounceOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newOwner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"transferOwnership\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"newImplementation\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"upgradeTo\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": \"0x608060405234801561001057600080fd5b5060405161043c38038061043c83398101604081905261002f91610169565b8181806001600160a01b03811661006157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b61006a8161007d565b50610074826100cd565b5050505061019c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b6000036101035760405163211eb15960e21b81526001600160a01b0382166004820152602401610058565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b80516001600160a01b038116811461016457600080fd5b919050565b6000806040838503121561017c57600080fd5b6101858361014d565b91506101936020840161014d565b90509250929050565b610291806101ab6000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212201352204bbfcbadbe2a7bb1704ec5756601d167017301b1dfeee3e33bd1f8fa3164736f6c63430008160033\",\n \"deployedBytecode\": \"0x608060405234801561001057600080fd5b50600436106100575760003560e01c80633659cfe61461005c5780635c60da1b14610071578063715018a61461009a5780638da5cb5b146100a2578063f2fde38b146100b3575b600080fd5b61006f61006a36600461022b565b6100c6565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006f6100da565b6000546001600160a01b031661007e565b61006f6100c136600461022b565b6100ee565b6100ce61012e565b6100d78161015b565b50565b6100e261012e565b6100ec60006101db565b565b6100f661012e565b6001600160a01b03811661012557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100d7816101db565b6000546001600160a01b031633146100ec5760405163118cdaa760e01b815233600482015260240161011c565b806001600160a01b03163b6000036101915760405163211eb15960e21b81526001600160a01b038216600482015260240161011c565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561023d57600080fd5b81356001600160a01b038116811461025457600080fd5b939250505056fea26469706673582212201352204bbfcbadbe2a7bb1704ec5756601d167017301b1dfeee3e33bd1f8fa3164736f6c63430008160033\",\n \"linkReferences\": {},\n \"deployedLinkReferences\": {}\n}\n","import { Contract, InterfaceAbi } from 'ethers'\nimport type { ContractRunner } from 'ethers'\nimport platformAbi from '../../abis/IsometryPlatform.json' with { type: 'json' }\nimport factoryAbi from '../../abis/StableCoinFactory.json' with { type: 'json' }\nimport stablecoinAbi from '../../abis/StableCoin.json' with { type: 'json' }\nimport beaconAbi from '../../abis/StableCoinBeacon.json' with { type: 'json' }\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface ContractAddresses {\n platform?: string\n factory?: string\n beacon?: string\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Extract and cast ABI from Hardhat artifact format */\nfunction abiOf(artifact: { abi: unknown[] }): InterfaceAbi {\n return artifact.abi as InterfaceAbi\n}\n\n// ─── Contracts ────────────────────────────────────────────────────────────────\n\nexport function getContracts(addresses: ContractAddresses, runner: ContractRunner) {\n if (!addresses.platform) throw new Error('ISOMETRY_PLATFORM_ADDRESS is required')\n if (!addresses.factory) throw new Error('ISOMETRY_FACTORY_ADDRESS is required')\n if (!addresses.beacon) throw new Error('ISOMETRY_BEACON_ADDRESS is required')\n\n return {\n platform: new Contract(addresses.platform, abiOf(platformAbi as { abi: unknown[] }), runner),\n factory: new Contract(addresses.factory, abiOf(factoryAbi as { abi: unknown[] }), runner),\n beacon: new Contract(addresses.beacon, abiOf(beaconAbi as { abi: unknown[] }), runner),\n }\n}\n\nexport function getStableCoin(address: string, runner: ContractRunner): Contract {\n return new Contract(address, abiOf(stablecoinAbi as { abi: unknown[] }), runner)\n}\n\nexport function getPlatform(runner: ContractRunner, addresses: ContractAddresses): Contract {\n if (!addresses.platform) throw new Error('ISOMETRY_PLATFORM_ADDRESS is required')\n return new Contract(addresses.platform, abiOf(platformAbi as { abi: unknown[] }), runner)\n}\n","import type { Contract, ContractRunner } from 'ethers'\nimport { getContracts, type ContractAddresses } from './contracts.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface PlatformInfo {\n address: string\n paused: boolean\n tokenCount: bigint\n platformAdminCount: bigint\n approvedIssuerCount: bigint\n accessUserCount: bigint\n}\n\nexport interface PlatformRoles {\n address: string\n isOwner: boolean\n isPlatformAdmin: boolean\n isApprovedIssuer: boolean\n isAccessUser: boolean\n}\n\n// ─── PlatformRpcService ────────────────────────────────────────────────────────\n\nexport class PlatformRpcService {\n private contracts: ReturnType<typeof getContracts>\n private platform: Contract\n\n constructor(addresses: ContractAddresses, runner: ContractRunner) {\n this.contracts = getContracts(addresses, runner)\n this.platform = this.contracts.platform\n }\n\n async getPlatformInfo(): Promise<PlatformInfo> {\n const [paused, tokenCount, adminCount, issuerCount, accessCount] =\n await Promise.all([\n this.platform.paused(),\n this.platform.getTokenCount(),\n this.platform.getPlatformAdminCount(),\n this.platform.getApprovedIssuerCount(),\n this.platform.getAccessUserCount(),\n ])\n\n return {\n address: this.platform.target as string,\n paused,\n tokenCount,\n platformAdminCount: adminCount,\n approvedIssuerCount: issuerCount,\n accessUserCount: accessCount,\n }\n }\n\n async getAllTokens(): Promise<string[]> {\n return this.platform.getAllTokens()\n }\n\n async getAccountRoles(account: string): Promise<PlatformRoles> {\n const [isOwner, isPlatformAdmin, isApprovedIssuer, isAccessUser] =\n await Promise.all([\n this.platform.isOwner(account),\n this.platform.isPlatformAdmin(account),\n this.platform.isApprovedIssuer(account),\n this.platform.isAccessUser(account),\n ])\n\n return {\n address: account,\n isOwner,\n isPlatformAdmin,\n isApprovedIssuer,\n isAccessUser,\n }\n }\n\n async isPaused(): Promise<boolean> {\n return this.platform.paused()\n }\n}\n","import type { ContractRunner } from 'ethers'\nimport { getContracts, type ContractAddresses } from './contracts.js'\n\nexport class FactoryRpcService {\n private addresses: ContractAddresses\n private runner: ContractRunner\n\n constructor(addresses: ContractAddresses, runner: ContractRunner) {\n this.addresses = addresses\n this.runner = runner\n }\n\n async getBeaconAddress(): Promise<string> {\n const { factory } = getContracts(this.addresses, this.runner)\n return factory.beacon()\n }\n\n async getPlatformAddress(): Promise<string> {\n const { factory } = getContracts(this.addresses, this.runner)\n return factory.platform()\n }\n}\n","import type { ContractRunner } from 'ethers'\nimport { getStableCoin, type ContractAddresses } from './contracts.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface TokenInfo {\n address: string\n name: string\n symbol: string\n decimals: number\n totalSupply: bigint\n paused: boolean\n}\n\nexport interface TokenStats {\n address: string\n holdersTotal: bigint\n totalMinted: bigint\n totalBurned: bigint\n totalAllowance: bigint\n mintersCount: bigint\n blacklistCount: bigint\n}\n\nexport interface MinterInfo {\n minter: string\n allowance: bigint\n}\n\nexport interface TokenRoles {\n address: string\n account: string\n isTokenOwner: boolean\n isMasterMinter: boolean\n isMinter: boolean\n isBlacklistManager: boolean\n isMasterStatus: boolean\n}\n\n// ─── StableCoinRpcService ─────────────────────────────────────────────────────\n\nexport class StableCoinRpcService {\n private runner: ContractRunner\n\n constructor(_addresses: ContractAddresses, runner: ContractRunner) {\n this.runner = runner\n }\n\n async getTokenInfo(address: string): Promise<TokenInfo> {\n const token = getStableCoin(address, this.runner)\n\n const [name, symbol, decimals, totalSupply, paused] = await Promise.all([\n token.name(),\n token.symbol(),\n token.decimals(),\n token.totalSupply(),\n token.paused(),\n ])\n\n return { address, name, symbol, decimals, totalSupply, paused }\n }\n\n async getTokenStats(address: string): Promise<TokenStats> {\n const token = getStableCoin(address, this.runner)\n\n const [holdersTotal, totalMinted, totalBurned, totalAllowance, minterCount, blacklistCount] =\n await Promise.all([\n token.holdersTotal(),\n token.totalMinted(),\n token.totalBurned(),\n token.totalAllowance(),\n token.getMinterCount(),\n token.getBlacklistCount(),\n ])\n\n return {\n address,\n holdersTotal,\n totalMinted,\n totalBurned,\n totalAllowance,\n mintersCount: minterCount,\n blacklistCount,\n }\n }\n\n async getUserRoles(address: string, account: string): Promise<TokenRoles> {\n const token = getStableCoin(address, this.runner)\n\n const TOKEN_OWNER_ROLE = await token.TOKEN_OWNER_ROLE()\n const MASTER_MINTER_ROLE = await token.MASTER_MINTER_ROLE()\n const MINTER_ROLE = await token.MINTER_ROLE()\n const BLACKLIST_MANAGER_ROLE = await token.BLACKLIST_MANAGER_ROLE()\n const MASTER_STATUS_ROLE = await token.MASTER_STATUS_ROLE()\n\n const [isTokenOwner, isMasterMinter, isMinter, isBlacklistManager, isMasterStatus] =\n await Promise.all([\n token.hasRole(TOKEN_OWNER_ROLE, account),\n token.hasRole(MASTER_MINTER_ROLE, account),\n token.hasRole(MINTER_ROLE, account),\n token.hasRole(BLACKLIST_MANAGER_ROLE, account),\n token.hasRole(MASTER_STATUS_ROLE, account),\n ])\n\n return {\n address,\n account,\n isTokenOwner,\n isMasterMinter,\n isMinter,\n isBlacklistManager,\n isMasterStatus,\n }\n }\n\n async isPaused(address: string): Promise<boolean> {\n const token = getStableCoin(address, this.runner)\n return token.paused()\n }\n\n async isBlacklisted(address: string, user: string): Promise<boolean> {\n const token = getStableCoin(address, this.runner)\n return token.blacklisted(user)\n }\n}\n","/**\n * Error selector → human-readable code mapping\n *\n * Observed on Sepolia (from live testing):\n * - 0xe2517d3f = OpenZeppelin AccessControlUnauthorizedAccount\n * - 0x08c379a0 = Error(string) — \"Not authorized\", \"Not approved issuer\"\n *\n * Extend this map as new selectors are observed on-chain.\n */\n\nexport interface DecodedError {\n code: string\n message: string\n}\n\n/**\n * Maps 4-byte error selector (0x...) to { code, message }.\n * Code is a SCREAMING_SNAKE_CASE identifier suitable for JSON output.\n */\nexport const ERROR_SELECTOR_MAP: Record<string, DecodedError> = {\n // OpenZeppelin AccessControlUnauthorizedAccount(address account, bytes32 role)\n // keccak256(\"AccessControlUnauthorizedAccount(address,bytes32)\") = 0x761f22a3\n // ethers v6 surfaces this as 0xe2517d3f in CALL_EXCEPTION details\n '0xe2517d3f': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: missing required role',\n },\n '0x761f22a3': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: missing required role',\n },\n\n // OpenZeppelin AccessControl: account is missing role\n '0x4e6f6c52': {\n code: 'ACCESS_DENIED',\n message: 'AccessControl: account is missing role',\n },\n\n // ERC20: insufficient balance\n '0x13be252b': {\n code: 'INSUFFICIENT_BALANCE',\n message: 'ERC20: transfer amount exceeds balance',\n },\n\n // ERC20: insufficient allowance\n '0xf4d708f0': {\n code: 'INSUFFICIENT_ALLOWANCE',\n message: 'ERC20: insufficient allowance',\n },\n\n // Pausable: paused\n '0x8d1c0a00': {\n code: 'PAUSED',\n message: 'Pausable: paused',\n },\n\n // ERC20: invalid sender\n '0xdf24fd05': {\n code: 'INVALID_SENDER',\n message: 'ERC20: invalid sender',\n },\n\n // ERC20: blacklisted\n '0x12d1b5d1': {\n code: 'BLACKLISTED',\n message: 'ERC20: sender is blacklisted',\n },\n\n // Isometry platform / factory custom errors (observed)\n '0x1e55aece': {\n code: 'NOT_APPROVED_ISSUER',\n message: 'Not an approved issuer',\n },\n\n '0xf2d4620b': {\n code: 'FACTORY_SYMBOL_EXISTS',\n message: 'Factory: symbol already exists',\n },\n\n '0x3b800a46': {\n code: 'ZERO_ADDRESS',\n message: 'Address cannot be zero',\n },\n}\n\n/**\n * Decode an ethers CALL_EXCEPTION error details object.\n * Returns a DecodedError if the selector is known, otherwise null.\n */\nexport function decodeError(details: {\n data?: string\n revert?: { signature?: string; name?: string; args?: unknown[] }\n reason?: string | null\n}): DecodedError | null {\n // Try custom error selector from data\n if (details.data && details.data !== '0x') {\n const selector = details.data.slice(0, 10).toLowerCase()\n const mapped = ERROR_SELECTOR_MAP[selector]\n if (mapped) return mapped\n }\n\n // Try known revert reason string\n if (details.reason) {\n const reason = details.reason\n if (reason === 'Not authorized' || reason === 'Not approved issuer') {\n return { code: 'ACCESS_DENIED', message: reason }\n }\n return { code: 'REVERT', message: reason }\n }\n\n // Try ethers revert with args\n if (details.revert?.args) {\n const name = details.revert.name ?? details.revert.signature ?? ''\n if (name.includes('AccessControl')) {\n const [account, role] = details.revert.args\n return {\n code: 'ACCESS_DENIED',\n message: `AccessControl: account ${account} missing role ${role}`,\n }\n }\n }\n\n return null\n}\n","/**\n * WriteExecutor — unified write transaction executor\n *\n * Consistent interface for all write operations:\n * - simulate: dry-run via estimateGas only\n * - execute: real transaction with receipt\n * - unified error model with human-readable codes\n * - CLI output helpers with --json / --simulate support\n */\n\nimport { Contract, type Log } from 'ethers'\nimport type { IWallet } from './wallet.js'\nimport { decodeError } from './errorMap.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface SimulateResult {\n ok: true\n estimatedGas: bigint\n functionFragment: string\n params: Record<string, unknown>\n}\n\nexport interface TxReceipt {\n txHash: string\n blockNumber: number | null\n blockHash: string | null\n status: number | null\n gasUsed: bigint\n effectiveGasPrice: bigint\n from: string\n to: string | null\n nonce: number\n logs: Array<{\n address: string\n topics: string[]\n data: string\n blockNumber: number | null\n }>\n}\n\nexport interface ExecuteResult {\n ok: true\n receipt: TxReceipt\n}\n\nexport type WriteErrorCode =\n | 'NO_SIGNER'\n | 'INVALID_KEY'\n | 'INVALID_ARGUMENT'\n | 'SIMULATION_FAILED'\n | 'REVERT'\n | 'ACCESS_DENIED'\n | 'INSUFFICIENT_BALANCE'\n | 'INSUFFICIENT_ALLOWANCE'\n | 'PAUSED'\n | 'BLACKLISTED'\n | 'NOT_APPROVED_ISSUER'\n | 'FACTORY_SYMBOL_EXISTS'\n | 'ZERO_ADDRESS'\n | 'RPC_ERROR'\n | 'UNKNOWN'\n\nexport interface WriteError {\n ok: false\n code: WriteErrorCode\n message: string\n details?: unknown\n /** Raw 4-byte selector from the revert data, present when code is UNKNOWN or REVERT */\n selector?: string\n}\n\nexport type WriteResult = SimulateResult | ExecuteResult | WriteError\n\nexport interface WriteCall {\n method: string\n args: unknown[]\n overrides?: Record<string, unknown>\n}\n\nexport interface WriteExecutorConfig {\n wallet: IWallet\n contract: Contract\n}\n\n// ─── WriteExecutor ────────────────────────────────────────────────────────────\n\nexport class WriteExecutor {\n constructor(private config: WriteExecutorConfig) {}\n\n /** Dry-run: estimate gas without signing. Returns gas estimate or decoded error. */\n async simulate(call: WriteCall): Promise<SimulateResult | WriteError> {\n if (this.config.wallet.mode === 'readonly') {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: `Cannot simulate: wallet is read-only. Set ISOMETRY_PRIVATE_KEY to enable write operations.`,\n }\n }\n\n try {\n const fn = this.config.contract.getFunction(call.method)\n const gasEstimate = await fn.estimateGas(...call.args, call.overrides ?? {})\n\n const params: Record<string, unknown> = {}\n fn.fragment.inputs.forEach((input, i) => {\n params[input.name || `arg${i}`] = call.args[i]\n })\n\n return {\n ok: true,\n estimatedGas: gasEstimate,\n functionFragment: `${call.method}(${fn.fragment.inputs.map((i) => i.type).join(',')})`,\n params,\n }\n } catch (err: unknown) {\n // Always tag simulation failures as SIMULATION_FAILED; message is decoded\n const decoded = this.parseRevertError(err)\n return {\n ok: false,\n code: 'SIMULATION_FAILED',\n message: `[simulate] ${decoded.message}`,\n details: err,\n ...(decoded.selector ? { selector: decoded.selector } : {}),\n }\n }\n }\n\n /** Execute: sign and broadcast, wait for receipt. */\n async execute(call: WriteCall, confirmations = 1): Promise<ExecuteResult | WriteError> {\n if (this.config.wallet.mode === 'readonly') {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: `Cannot execute: wallet is read-only. Set ISOMETRY_PRIVATE_KEY to enable write operations.`,\n }\n }\n\n if (!this.config.wallet.signer) {\n return {\n ok: false,\n code: 'NO_SIGNER',\n message: 'Wallet has no signer.',\n }\n }\n\n try {\n const contract = this.config.contract.connect(this.config.wallet.signer)\n const fn = contract.getFunction(call.method)\n const tx = await fn.populateTransaction(...call.args, call.overrides ?? {})\n const signedTx = await this.config.wallet.signer!.sendTransaction(tx)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const _receipt: any = await signedTx.wait(confirmations)\n if (!_receipt) {\n return { ok: false, code: 'RPC_ERROR', message: 'Transaction receipt is null' }\n }\n\n return {\n ok: true,\n receipt: {\n txHash: _receipt.hash,\n blockNumber: _receipt.blockNumber,\n blockHash: _receipt.blockHash ?? null,\n status: _receipt.status ?? null,\n gasUsed: _receipt.gasUsed,\n effectiveGasPrice: _receipt.effectiveGasPrice ?? 0n,\n from: _receipt.from,\n to: _receipt.to ?? null,\n nonce: _receipt.nonce,\n logs: _receipt.logs.map((log: Log) => ({\n address: log.address,\n topics: [...log.topics],\n data: log.data,\n blockNumber: log.blockNumber,\n })),\n },\n }\n } catch (err: unknown) {\n const decoded = this.parseRevertError(err)\n return {\n ok: false,\n code: decoded.code as WriteErrorCode,\n message: decoded.message,\n details: err,\n ...(decoded.selector ? { selector: decoded.selector } : {}),\n }\n }\n }\n\n /**\n * Parse a revert error and extract { code, message, selector }.\n * selector is always included for unknown errors so users can report it.\n */\n private parseRevertError(err: unknown): { code: string; message: string; selector?: string } {\n // Extract raw selector from ethers error object (present in CALL_EXCEPTION)\n let rawSelector: string | undefined\n if (err && typeof err === 'object') {\n const errObj = err as Record<string, unknown>\n // ethers v6 surfaces custom error selector in error.data (4-byte hex)\n const data = (errObj as { data?: string }).data\n if (data && data !== '0x' && data.length >= 10) {\n rawSelector = data.slice(0, 10).toLowerCase()\n }\n }\n\n // Try known error mapping\n if (err && typeof err === 'object') {\n const decoded = decodeError(err as Record<string, unknown>)\n if (decoded) {\n return { code: decoded.code, message: decoded.message, selector: rawSelector }\n }\n }\n\n if (!(err instanceof Error)) {\n return { code: 'UNKNOWN', message: String(err), selector: rawSelector }\n }\n\n const msg = err.message\n if (msg.includes('insufficient funds')) return { code: 'INSUFFICIENT_BALANCE', message: 'insufficient funds for gas', selector: rawSelector }\n if (msg.includes('nonce')) return { code: 'RPC_ERROR', message: 'nonce error (tx may already be mined)', selector: rawSelector }\n if (msg.includes('read-only')) return { code: 'NO_SIGNER', message: 'wallet is read-only', selector: rawSelector }\n\n return { code: 'REVERT', message: msg.slice(0, 200), selector: rawSelector }\n }\n}\n\n// ─── CLI Output Helpers ───────────────────────────────────────────────────────\n\nexport interface WriteOpts {\n simulate: boolean\n json: boolean\n}\n\nexport interface WriteMeta {\n chainId: number\n source: 'rpc'\n timestamp: number\n command?: string\n}\n\nexport function makeWriteMeta(command?: string): WriteMeta {\n return {\n chainId: 11155111,\n source: 'rpc',\n timestamp: Math.floor(Date.now() / 1000),\n ...(command ? { command } : {}),\n }\n}\n\nexport function formatWriteResult(\n result: WriteResult,\n opts: WriteOpts,\n meta?: WriteMeta\n): string {\n if (opts.json) {\n const out: Record<string, unknown> = { ok: result.ok }\n if (result.ok) {\n if (opts.simulate) {\n const r = result as SimulateResult\n Object.assign(out, { estimatedGas: r.estimatedGas, functionFragment: r.functionFragment, params: r.params })\n } else {\n const r = result as ExecuteResult\n Object.assign(out, { receipt: r.receipt })\n }\n } else {\n const r = result as WriteError\n Object.assign(out, { code: r.code, message: r.message })\n if (r.selector) Object.assign(out, { selector: r.selector })\n }\n if (meta) Object.assign(out, { meta })\n return JSON.stringify(out, (_key, value) =>\n typeof value === 'bigint' ? value.toString() : value\n , 2)\n }\n\n if (!result.ok) {\n return `❌ [${result.code}] ${result.message}`\n }\n\n if (opts.simulate) {\n const sim = result as SimulateResult\n return `✅ Simulation passed\\n Estimated gas: ${sim.estimatedGas.toLocaleString()}`\n }\n\n const exec = result as ExecuteResult\n const r = exec.receipt\n const ok = r.status === 1\n return [\n `${ok ? '✅' : '❌'} Transaction ${ok ? 'confirmed' : 'FAILED'}`,\n ` Tx Hash ${r.txHash}`,\n ` Block ${r.blockNumber ?? 'pending'}`,\n ` From ${r.from}`,\n ` To ${r.to ?? 'N/A'}`,\n ` Gas Used ${r.gasUsed.toLocaleString()}`,\n ` Status ${ok ? 'success' : 'reverted'}`,\n ].join('\\n')\n}\n","// ─── RPC Layer ───────────────────────────────────────────────────────────────\n\nexport { PlatformRpcService } from './platform.js'\nexport type { PlatformInfo, PlatformRoles } from './platform.js'\n\nexport { FactoryRpcService } from './factory.js'\n\nexport { StableCoinRpcService } from './stablecoin.js'\nexport type { TokenInfo, TokenStats, TokenRoles, MinterInfo } from './stablecoin.js'\n\nexport { getContracts, getStableCoin } from './contracts.js'\nexport type { ContractAddresses } from './contracts.js'\n\nexport { ReadOnlyWallet, PrivateKeyWallet, createWallet } from './wallet.js'\nexport type { IWallet } from './wallet.js'\n\nexport { WriteExecutor } from './writeExecutor.js'\nexport type {\n WriteResult,\n SimulateResult,\n ExecuteResult,\n WriteError,\n WriteCall,\n WriteOpts,\n TxReceipt,\n} from './writeExecutor.js'\nexport { formatWriteResult } from './writeExecutor.js'\n","import { GraphQLClient } from 'graphql-request'\n\n// ─── Errors ───────────────────────────────────────────────────────────────────\n\nexport class GraphError extends Error {\n constructor(\n message: string,\n public readonly code: 'NETWORK_ERROR' | 'SUBGRAPH_ERROR' | 'PARSE_ERROR' | 'UNKNOWN',\n public readonly details?: unknown\n ) {\n super(message)\n this.name = 'GraphError'\n }\n}\n\n// ─── GraphClient ───────────────────────────────────────────────────────────────\n\nexport interface GraphClientConfig {\n endpoint: string\n /** Optional headers (e.g. authorization) */\n headers?: Record<string, string>\n}\n\nexport class GraphClient {\n private client: GraphQLClient\n\n constructor(config: GraphClientConfig) {\n this.client = new GraphQLClient(config.endpoint, {\n headers: config.headers,\n })\n }\n\n /**\n * Execute a raw GraphQL query.\n * @param query - GraphQL query string\n * @param variables - Optional query variables\n */\n async query<T>(\n query: string,\n variables?: Record<string, unknown>\n ): Promise<T> {\n try {\n return await this.client.request<T>(query, variables)\n } catch (err: unknown) {\n throw this.normalizeError(err)\n }\n }\n\n /**\n * Ping the subgraph — useful for health checks.\n * Returns current block number or throws.\n */\n async ping(): Promise<{ number: number; hash: string; deployment: string }> {\n const data = await this.query<{\n _meta: { block: { number: number; hash: string }; deployment: string }\n }>(`query { _meta { block { number hash } deployment } }`)\n\n if (!data._meta) throw new GraphError('No _meta', 'PARSE_ERROR')\n\n return {\n number: data._meta.block.number,\n hash: data._meta.block.hash,\n deployment: data._meta.deployment,\n }\n }\n\n // ─── Private ────────────────────────────────────────────────────────────────\n\n private normalizeError(err: unknown): GraphError {\n if (err instanceof GraphError) return err\n\n if (err instanceof Error) {\n // graphql-request throws { response: { errors: [...] } }\n const graphErr = (err as unknown as Record<string, unknown>).response as\n | { errors?: unknown[] }\n | undefined\n\n if (graphErr?.errors) {\n return new GraphError(\n `Subgraph error: ${JSON.stringify(graphErr.errors)}`,\n 'SUBGRAPH_ERROR',\n graphErr.errors\n )\n }\n\n // Network-level errors\n if (\n err.message.includes('fetch') ||\n err.message.includes('ECONNREFUSED') ||\n err.message.includes('timeout')\n ) {\n return new GraphError(`Network error: ${err.message}`, 'NETWORK_ERROR', err)\n }\n\n return new GraphError(err.message, 'UNKNOWN', err)\n }\n\n return new GraphError('Unknown error', 'UNKNOWN', err)\n }\n}\n","// ─── Token Queries ────────────────────────────────────────────────────────────\n\nexport const TOKENS_QUERY = `\n query Tokens($first: Int!, $skip: Int!) {\n tokens(first: $first, skip: $skip, orderBy: createdAt, orderDirection: desc) {\n id\n address\n name\n symbol\n decimals\n creator\n createdAt\n status\n activeHolderCount\n totalMintCount\n totalMintAmount\n totalBurnCount\n totalBurnAmount\n lastUpdatedAt\n }\n }\n`\n\nexport const TOKEN_BY_ID_QUERY = `\n query TokenById($id: ID!) {\n token(id: $id) {\n id\n address\n name\n symbol\n decimals\n creator\n createdAt\n status\n activeHolderCount\n totalMintCount\n totalMintAmount\n totalBurnCount\n totalBurnAmount\n lastUpdatedAt\n }\n }\n`\n\n// ─── Token Registered ─────────────────────────────────────────────────────────\n\nexport const TOKEN_REGISTERED_EVENTS_QUERY = `\n query TokenRegisteredEvents($first: Int!, $skip: Int!) {\n tokenRegisteredEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n operator\n token\n name\n symbol\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Mint History ─────────────────────────────────────────────────────────────\n\nexport const MINT_EVENTS_QUERY = `\n query MintEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n mintEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n to\n amount\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Burn History ─────────────────────────────────────────────────────────────\n\nexport const BURN_EVENTS_QUERY = `\n query BurnEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n burnEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n from\n amount\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Pause History ────────────────────────────────────────────────────────────\n\nexport const PAUSE_EVENTS_QUERY = `\n query PauseEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n pauseEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n action\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const PAUSED_BY_OWNER_EVENTS_QUERY = `\n query PausedByOwnerEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n pausedByOwnerEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const UNPAUSED_BY_OWNER_EVENTS_QUERY = `\n query UnpausedByOwnerEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n unpausedByOwnerEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n account\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Blacklist ────────────────────────────────────────────────────────────────\n\nexport const BLACKLIST_EVENTS_QUERY = `\n query BlacklistEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n blacklistEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n user\n action\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Transfer ─────────────────────────────────────────────────────────────────\n\nexport const TRANSFER_EVENTS_QUERY = `\n query TransferEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n transferEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n from\n to\n amount\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Token Holders ────────────────────────────────────────────────────────────\n\nexport const TOKEN_HOLDERS_QUERY = `\n query TokenHolders($token: Bytes!, $first: Int!, $skip: Int!) {\n tokenHolders(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: balance\n orderDirection: desc\n ) {\n id\n token\n address\n balance\n firstSeenAt\n hasMinted\n hasBurned\n }\n }\n`\n\n// ─── 24h Snapshot ─────────────────────────────────────────────────────────────\n\nexport const TOKEN_24H_SNAPSHOT_QUERY = `\n query Token24hSnapshot($token: Bytes!) {\n token24hSnapshot(id: $token) {\n id\n token\n mintAmount24h\n burnAmount24h\n mintCount24h\n burnCount24h\n lastUpdatedAt\n }\n }\n`\n\n// ─── Platform ─────────────────────────────────────────────────────────────────\n\nexport const PLATFORM_ADMINS_QUERY = `\n query PlatformAdmins($first: Int!, $skip: Int!) {\n platformAdmins(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\nexport const APPROVED_ISSUERS_QUERY = `\n query ApprovedIssuers($first: Int!, $skip: Int!) {\n approvedIssuers(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\nexport const ACCESS_USERS_QUERY = `\n query AccessUsers($first: Int!, $skip: Int!) {\n accessUsers(first: $first, skip: $skip, orderBy: addedAt, orderDirection: desc) {\n id\n account\n isActive\n lastOperator\n addedAt\n removedAt\n addedCount\n removedCount\n lastUpdatedAt\n }\n }\n`\n\n// ─── Factory ─────────────────────────────────────────────────────────────────\n\nexport const FACTORY_INITIALIZED_EVENTS_QUERY = `\n query FactoryInitializedEvents($first: Int!, $skip: Int!) {\n factoryInitializedEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n version\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const FACTORY_SET_EVENTS_QUERY = `\n query FactorySetEvents($first: Int!, $skip: Int!) {\n factorySetEvents(first: $first, skip: $skip, orderBy: blockNumber, orderDirection: desc) {\n id\n operator\n oldFactory\n newFactory\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\n// ─── Minter ──────────────────────────────────────────────────────────────────\n\nexport const MINTER_ADDED_EVENTS_QUERY = `\n query MinterAddedEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n minterAddedEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n minter\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n\nexport const MINTER_REMOVED_EVENTS_QUERY = `\n query MinterRemovedEvents($token: Bytes!, $first: Int!, $skip: Int!) {\n minterRemovedEvents(\n first: $first\n skip: $skip\n where: { token: $token }\n orderBy: blockNumber\n orderDirection: desc\n ) {\n id\n token\n operator\n minter\n memo\n blockNumber\n timestamp\n transactionHash\n }\n }\n`\n","import type { GraphClient } from './client.js'\nimport type {\n MintEvent,\n BurnEvent,\n TransferEvent,\n PauseEvent,\n PausedByOwnerEvent,\n UnpausedByOwnerEvent,\n BlacklistEvent,\n TokenHolder,\n Token24hSnapshot,\n Token,\n MinterAddedEvent,\n MinterRemovedEvent,\n TokenRegisteredEvent,\n} from './types.js'\nimport {\n MINT_EVENTS_QUERY,\n BURN_EVENTS_QUERY,\n TRANSFER_EVENTS_QUERY,\n PAUSE_EVENTS_QUERY,\n PAUSED_BY_OWNER_EVENTS_QUERY,\n UNPAUSED_BY_OWNER_EVENTS_QUERY,\n BLACKLIST_EVENTS_QUERY,\n TOKEN_HOLDERS_QUERY,\n TOKEN_24H_SNAPSHOT_QUERY,\n TOKEN_BY_ID_QUERY,\n TOKENS_QUERY,\n TOKEN_REGISTERED_EVENTS_QUERY,\n MINTER_ADDED_EVENTS_QUERY,\n MINTER_REMOVED_EVENTS_QUERY,\n} from './queries.js'\n\n// ─── Default pagination ───────────────────────────────────────────────────────\n\nconst DEFAULT_FIRST = 100\nconst DEFAULT_SKIP = 0\n\n// ─── TokenHistoryService ──────────────────────────────────────────────────────\n\nexport class TokenHistoryService {\n constructor(private client: GraphClient) {}\n\n // ─── Token ─────────────────────────────────────────────────────────────────\n\n async getToken(address: string): Promise<Token | null> {\n const data = await this.client.query<{ token: Token | null }>(\n TOKEN_BY_ID_QUERY,\n { id: address }\n )\n return data.token\n }\n\n async getTokens(first = DEFAULT_FIRST, skip = DEFAULT_SKIP): Promise<Token[]> {\n const data = await this.client.query<{ tokens: Token[] }>(TOKENS_QUERY, {\n first,\n skip,\n })\n return data.tokens\n }\n\n // ─── Creation ──────────────────────────────────────────────────────────────\n\n async getTokenCreatedEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TokenRegisteredEvent[]> {\n const data = await this.client.query<{\n tokenRegisteredEvents: TokenRegisteredEvent[]\n }>(TOKEN_REGISTERED_EVENTS_QUERY, { first, skip })\n return data.tokenRegisteredEvents\n }\n\n // ─── Mint / Burn ──────────────────────────────────────────────────────────\n\n async getMintHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MintEvent[]> {\n const data = await this.client.query<{ mintEvents: MintEvent[] }>(\n MINT_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.mintEvents\n }\n\n async getBurnHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<BurnEvent[]> {\n const data = await this.client.query<{ burnEvents: BurnEvent[] }>(\n BURN_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.burnEvents\n }\n\n // ─── Transfer ─────────────────────────────────────────────────────────────\n\n async getTransferHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TransferEvent[]> {\n const data = await this.client.query<{ transferEvents: TransferEvent[] }>(\n TRANSFER_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.transferEvents\n }\n\n // ─── Pause ────────────────────────────────────────────────────────────────\n\n async getPauseHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PauseEvent[]> {\n const data = await this.client.query<{ pauseEvents: PauseEvent[] }>(\n PAUSE_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.pauseEvents\n }\n\n async getPausedByOwnerHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PausedByOwnerEvent[]> {\n const data = await this.client.query<{\n pausedByOwnerEvents: PausedByOwnerEvent[]\n }>(PAUSED_BY_OWNER_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.pausedByOwnerEvents\n }\n\n async getUnpausedByOwnerHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<UnpausedByOwnerEvent[]> {\n const data = await this.client.query<{\n unpausedByOwnerEvents: UnpausedByOwnerEvent[]\n }>(UNPAUSED_BY_OWNER_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.unpausedByOwnerEvents\n }\n\n // ─── Blacklist ────────────────────────────────────────────────────────────\n\n async getBlacklistHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<BlacklistEvent[]> {\n const data = await this.client.query<{ blacklistEvents: BlacklistEvent[] }>(\n BLACKLIST_EVENTS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.blacklistEvents\n }\n\n // ─── Holders ──────────────────────────────────────────────────────────────\n\n async getHolders(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<TokenHolder[]> {\n const data = await this.client.query<{ tokenHolders: TokenHolder[] }>(\n TOKEN_HOLDERS_QUERY,\n { token: tokenAddress, first, skip }\n )\n return data.tokenHolders\n }\n\n // ─── 24h Snapshot ────────────────────────────────────────────────────────\n\n async get24hSnapshot(\n tokenAddress: string\n ): Promise<Token24hSnapshot | null> {\n const data = await this.client.query<{\n token24hSnapshot: Token24hSnapshot | null\n }>(TOKEN_24H_SNAPSHOT_QUERY, { token: tokenAddress })\n return data.token24hSnapshot\n }\n\n // ─── Minters ───────────────────────────────────────────────────────────────\n\n async getMinterAddedHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MinterAddedEvent[]> {\n const data = await this.client.query<{\n minterAddedEvents: MinterAddedEvent[]\n }>(MINTER_ADDED_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.minterAddedEvents\n }\n\n async getMinterRemovedHistory(\n tokenAddress: string,\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<MinterRemovedEvent[]> {\n const data = await this.client.query<{\n minterRemovedEvents: MinterRemovedEvent[]\n }>(MINTER_REMOVED_EVENTS_QUERY, { token: tokenAddress, first, skip })\n return data.minterRemovedEvents\n }\n}\n","import type { GraphClient } from './client.js'\nimport type {\n PlatformAdmin,\n ApprovedIssuer,\n AccessUser,\n FactoryInitializedEvent,\n FactorySetEvent,\n} from './types.js'\nimport {\n PLATFORM_ADMINS_QUERY,\n APPROVED_ISSUERS_QUERY,\n ACCESS_USERS_QUERY,\n FACTORY_INITIALIZED_EVENTS_QUERY,\n FACTORY_SET_EVENTS_QUERY,\n} from './queries.js'\n\n// ─── Default pagination ───────────────────────────────────────────────────────\n\nconst DEFAULT_FIRST = 100\nconst DEFAULT_SKIP = 0\n\n// ─── PlatformHistoryService ───────────────────────────────────────────────────\n\nexport class PlatformHistoryService {\n constructor(private client: GraphClient) {}\n\n // ─── Platform Admins ──────────────────────────────────────────────────────\n\n async getPlatformAdmins(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<PlatformAdmin[]> {\n const data = await this.client.query<{ platformAdmins: PlatformAdmin[] }>(\n PLATFORM_ADMINS_QUERY,\n { first, skip }\n )\n return data.platformAdmins\n }\n\n async getActivePlatformAdins(): Promise<PlatformAdmin[]> {\n const all = await this.getPlatformAdmins(1000, 0)\n return all.filter((a) => a.isActive)\n }\n\n // ─── Approved Issuers ────────────────────────────────────────────────────\n\n async getApprovedIssuers(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<ApprovedIssuer[]> {\n const data = await this.client.query<{ approvedIssuers: ApprovedIssuer[] }>(\n APPROVED_ISSUERS_QUERY,\n { first, skip }\n )\n return data.approvedIssuers\n }\n\n async getActiveApprovedIssuers(): Promise<ApprovedIssuer[]> {\n const all = await this.getApprovedIssuers(1000, 0)\n return all.filter((i) => i.isActive)\n }\n\n // ─── Access Users ────────────────────────────────────────────────────────\n\n async getAccessUsers(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<AccessUser[]> {\n const data = await this.client.query<{ accessUsers: AccessUser[] }>(\n ACCESS_USERS_QUERY,\n { first, skip }\n )\n return data.accessUsers\n }\n\n async getActiveAccessUsers(): Promise<AccessUser[]> {\n const all = await this.getAccessUsers(1000, 0)\n return all.filter((u) => u.isActive)\n }\n\n // ─── Factory Events ─────────────────────────────────────────────────────\n\n async getFactoryInitializedEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<FactoryInitializedEvent[]> {\n const data = await this.client.query<{\n factoryInitializedEvents: FactoryInitializedEvent[]\n }>(FACTORY_INITIALIZED_EVENTS_QUERY, { first, skip })\n return data.factoryInitializedEvents\n }\n\n async getFactorySetEvents(\n first = DEFAULT_FIRST,\n skip = DEFAULT_SKIP\n ): Promise<FactorySetEvent[]> {\n const data = await this.client.query<{\n factorySetEvents: FactorySetEvent[]\n }>(FACTORY_SET_EVENTS_QUERY, { first, skip })\n return data.factorySetEvents\n }\n}\n","import { TokenHistoryService } from './tokenHistory.js'\nimport { PlatformHistoryService } from './platformHistory.js'\nimport { GraphClient } from './client.js'\nimport type {\n MintEvent,\n BurnEvent,\n} from './types.js'\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/** Convert subgraph BigInt decimal string to bigint */\nexport function parseBigInt(value: string): bigint {\n return BigInt(value)\n}\n\n/** Convert subgraph BigInt to number (may lose precision for huge values) */\nexport function parseBigIntToNumber(value: string): number {\n return Number(BigInt(value))\n}\n\n// ─── AnalyticsService ─────────────────────────────────────────────────────────\n\nexport class AnalyticsService {\n readonly token: TokenHistoryService\n readonly platform: PlatformHistoryService\n\n constructor(graph: GraphClient) {\n this.token = new TokenHistoryService(graph)\n this.platform = new PlatformHistoryService(graph)\n }\n\n // ─── Token analytics ──────────────────────────────────────────────────────\n\n /**\n * Get a quick supply summary for a token.\n * Combines live token stats (from GQL) with 24h snapshot.\n */\n async getTokenSupplySummary(tokenAddress: string) {\n const [token, snapshot] = await Promise.all([\n this.token.getToken(tokenAddress),\n this.token.get24hSnapshot(tokenAddress),\n ])\n\n if (!token) return null\n\n return {\n tokenAddress,\n name: token.name,\n symbol: token.symbol,\n status: token.status,\n totalMintAmount: parseBigInt(token.totalMintAmount),\n totalBurnAmount: parseBigInt(token.totalBurnAmount),\n netSupply:\n parseBigInt(token.totalMintAmount) -\n parseBigInt(token.totalBurnAmount),\n activeHolderCount: parseBigIntToNumber(token.activeHolderCount),\n snapshot: snapshot\n ? {\n mintAmount24h: parseBigInt(snapshot.mintAmount24h),\n burnAmount24h: parseBigInt(snapshot.burnAmount24h),\n mintCount24h: parseBigIntToNumber(snapshot.mintCount24h),\n burnCount24h: parseBigIntToNumber(snapshot.burnCount24h),\n }\n : null,\n }\n }\n\n /**\n * Get top N holders for a token.\n * Returns address + balance sorted by balance descending.\n */\n async getTopHolders(tokenAddress: string, limit = 10) {\n const holders = await this.token.getHolders(tokenAddress, limit, 0)\n const mapped = holders.map((h) => ({\n address: h.address,\n balance: parseBigInt(h.balance),\n }))\n return mapped.sort((a, b) => (a.balance > b.balance ? -1 : 1))\n }\n\n /**\n * Get recent activity (mint + burn events) for a token.\n * Useful for a quick activity feed.\n */\n async getRecentActivity(tokenAddress: string, limit = 20) {\n const [mints, burns] = await Promise.all([\n this.token.getMintHistory(tokenAddress, limit, 0),\n this.token.getBurnHistory(tokenAddress, limit, 0),\n ])\n\n type ActivityItem = {\n type: 'mint' | 'burn'\n txHash: string\n blockNumber: bigint\n timestamp: bigint\n amount: bigint\n actor: string\n }\n\n const events: ActivityItem[] = [\n ...mints.map((e: MintEvent): ActivityItem => ({\n type: 'mint',\n txHash: e.transactionHash,\n blockNumber: parseBigInt(e.blockNumber),\n timestamp: parseBigInt(e.timestamp),\n amount: parseBigInt(e.amount),\n actor: e.operator,\n })),\n ...burns.map((e: BurnEvent): ActivityItem => ({\n type: 'burn',\n txHash: e.transactionHash,\n blockNumber: parseBigInt(e.blockNumber),\n timestamp: parseBigInt(e.timestamp),\n amount: parseBigInt(e.amount),\n actor: e.operator,\n })),\n ]\n\n // Sort by block desc\n events.sort((a, b) =>\n a.blockNumber > b.blockNumber ? -1 : 1\n )\n\n return events.slice(0, limit)\n }\n\n /**\n * Get a holder balance across all their holdings.\n * Useful for an address summary view.\n */\n async getAccountPortfolio(ethAddress: string): Promise<\n Array<{\n token: string\n balance: bigint\n }>\n > {\n // NOTE: subgraph doesn't expose a direct \"account\" entity,\n // so we scan all token holders and filter client-side.\n // For large scale, add a dedicated `account(address: Bytes)` query to the subgraph.\n const tokens = await this.token.getTokens(100, 0)\n const results = await Promise.all(\n tokens.map(async (t) => {\n const holders = await this.token.getHolders(t.address, 1000, 0)\n const found = holders.find(\n (h: { address: string }) => h.address.toLowerCase() === ethAddress.toLowerCase()\n )\n return found\n ? { token: t.address, balance: parseBigInt(found.balance) }\n : null\n })\n )\n return results.filter(Boolean) as Array<{ token: string; balance: bigint }>\n }\n}\n","// ─── Graph Client ─────────────────────────────────────────────────────────────\n\nexport { GraphClient, GraphError } from './client.js'\nexport type { GraphClientConfig } from './client.js'\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport type {\n Token,\n TokenHolder,\n Token24hSnapshot,\n TokenStatus,\n MintEvent,\n BurnEvent,\n TransferEvent,\n PauseEvent,\n PausedByOwnerEvent,\n UnpausedByOwnerEvent,\n BlacklistEvent,\n TokenBlacklist,\n PlatformAdmin,\n ApprovedIssuer,\n AccessUser,\n FactoryInitializedEvent,\n FactorySetEvent,\n MinterAddedEvent,\n MinterRemovedEvent,\n TokenRegisteredEvent,\n Bytes,\n BigInt,\n PaginatedResult,\n PageInfo,\n} from './types.js'\n\n// ─── Services ─────────────────────────────────────────────────────────────────\n\nexport { TokenHistoryService } from './tokenHistory.js'\nexport { PlatformHistoryService } from './platformHistory.js'\nexport { AnalyticsService, parseBigInt, parseBigIntToNumber } from './analytics.js'\n\n// ─── Convenience factory ──────────────────────────────────────────────────────\n\nimport { GraphClient } from './client.js'\nimport { TokenHistoryService } from './tokenHistory.js'\nimport { PlatformHistoryService } from './platformHistory.js'\nimport { AnalyticsService } from './analytics.js'\n\nexport interface IsometryGraphConfig {\n endpoint: string\n headers?: Record<string, string>\n}\n\n/**\n * Create all graph services from a single config.\n * Convenience wrapper — individual services are also importable directly.\n */\nexport function createGraphClient(config: IsometryGraphConfig) {\n const client = new GraphClient(config)\n return {\n client,\n token: new TokenHistoryService(client),\n platform: new PlatformHistoryService(client),\n analytics: new AnalyticsService(client),\n }\n}\n","/**\n * IsometryClient — RPC + Graph 双通道聚合\n */\n\nimport { createWallet, type IWallet } from './rpc/wallet.js'\nimport { PlatformRpcService, FactoryRpcService, StableCoinRpcService } from './rpc/index.js'\nimport { createGraphClient } from './graph/index.js'\nimport { TokenHistoryService } from './graph/tokenHistory.js'\nimport { PlatformHistoryService } from './graph/platformHistory.js'\nimport { AnalyticsService } from './graph/analytics.js'\nimport type { ContractAddresses } from './rpc/contracts.js'\nimport type { IsometryGraphConfig } from './graph/index.js'\n\n// ─── Config ───────────────────────────────────────────────────────────────────\n\nexport interface IsometryConfig {\n chainId?: number\n rpcUrl?: string\n graphUrl?: string\n addresses?: ContractAddresses\n privateKey?: string\n}\n\nconst DEFAULT_ADDRESSES: ContractAddresses = {\n platform: '0x062B11C5Ed0F2b1f9B7dFaa7B95737dD221863F7',\n factory: '0x73D6BC64f4f54F9dF05851216F70F42135d56864',\n beacon: '0x99d6512B5483DFA003F73F737f87e7DAE9482F89',\n}\n\nfunction resolveAddresses(env: typeof process.env): ContractAddresses {\n return {\n platform: env.ISOMETRY_PLATFORM_ADDRESS ?? DEFAULT_ADDRESSES.platform,\n factory: env.ISOMETRY_FACTORY_ADDRESS ?? DEFAULT_ADDRESSES.factory,\n beacon: env.ISOMETRY_BEACON_ADDRESS ?? DEFAULT_ADDRESSES.beacon,\n }\n}\n\n// ─── SDK version ─────────────────────────────────────────────────────────────\n\nexport const SDK_VERSION = '0.4.3'\n\n// ─── IsometryClient ────────────────────────────────────────────────────────────\n\nexport class IsometryClient {\n readonly rpc: {\n platform: PlatformRpcService\n factory: FactoryRpcService\n token: StableCoinRpcService\n }\n\n readonly graph: ReturnType<typeof createGraphClient>\n\n readonly config: {\n chainId: number\n rpcUrl: string\n graphUrl: string\n addresses: ContractAddresses\n privateKey: string | undefined\n walletMode: string\n }\n\n private _wallet: IWallet\n private _addresses: ContractAddresses\n private _chainId: number\n\n constructor(config: IsometryConfig = {}) {\n const rpcUrl = config.rpcUrl ?? process.env.ISOMETRY_RPC_URL ?? 'https://ethereum-sepolia.publicnode.com'\n const graphUrl =\n config.graphUrl ?? process.env.ISOMETRY_GRAPH_URL ??\n 'https://console.isometry.network/graph/subgraphs/name/isometry'\n const privateKey = config.privateKey ?? process.env.ISOMETRY_PRIVATE_KEY\n this._chainId = config.chainId ?? parseInt(process.env.ISOMETRY_CHAIN_ID ?? '11155111')\n\n this._wallet = createWallet(rpcUrl, privateKey)\n this._addresses = config.addresses ?? resolveAddresses(process.env)\n\n this.config = {\n chainId: this._chainId,\n rpcUrl,\n graphUrl,\n addresses: this._addresses,\n privateKey,\n walletMode: this._wallet.mode as string,\n }\n\n // Read runner — always use provider\n const runner = this._wallet.provider as unknown as import('ethers').ContractRunner\n\n this.rpc = {\n platform: new PlatformRpcService(this._addresses, runner),\n factory: new FactoryRpcService(this._addresses, runner),\n token: new StableCoinRpcService(this._addresses, runner),\n }\n\n const graphConfig: IsometryGraphConfig = { endpoint: graphUrl }\n const graphResult = createGraphClient(graphConfig)\n this.graph = graphResult\n\n // Pass the actual GraphClient (not the wrapper) to services\n this.graph.token = new TokenHistoryService(graphResult.client)\n this.graph.platform = new PlatformHistoryService(graphResult.client)\n this.graph.analytics = new AnalyticsService(graphResult.client)\n }\n\n /** Validate chain ID matches configured value */\n async validateChain(): Promise<void> {\n const network = await this._wallet.provider.getNetwork()\n if (Number(network.chainId) !== this._chainId) {\n throw new Error(\n `Chain ID mismatch: expected ${this._chainId}, got ${network.chainId}`\n )\n }\n }\n\n /** Get connected address (null if read-only) */\n async getAddress(): Promise<string | null> {\n return this._wallet.getAddress()\n }\n\n async destroy(): Promise<void> {\n // No-op for now\n }\n}\n\n// ─── Factory ──────────────────────────────────────────────────────────────────\n\nexport function createClient(config?: IsometryConfig): IsometryClient {\n return new IsometryClient(config)\n}\n","// ─── Client ───────────────────────────────────────────────────────────────────\n\nexport { IsometryClient, createClient, SDK_VERSION } from './client.js'\nexport type { IsometryConfig } from './client.js'\n\n// ─── RPC ─────────────────────────────────────────────────────────────────────\n\nexport { PlatformRpcService, FactoryRpcService, StableCoinRpcService } from './rpc/index.js'\nexport type {\n PlatformInfo,\n PlatformRoles,\n TokenInfo,\n TokenStats,\n TokenRoles,\n} from './rpc/index.js'\nexport { getContracts, getStableCoin } from './rpc/contracts.js'\nexport type { ContractAddresses } from './rpc/contracts.js'\nexport { createWallet, ReadOnlyWallet, PrivateKeyWallet } from './rpc/wallet.js'\nexport type { IWallet, WalletMode } from './rpc/wallet.js'\n\n// ─── Graph ──────────────────────────────────────────────────────────────────\n\nexport { createGraphClient, GraphClient, GraphError } from './graph/index.js'\nexport type { IsometryGraphConfig } from './graph/index.js'\nexport { TokenHistoryService, PlatformHistoryService, AnalyticsService } from './graph/index.js'\n","import { Command } from 'commander'\nimport { loadEnv } from \"../../env.js\"\n\n/** JSON replacer that converts BigInt to string */\nfunction jsonReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value\n}\n\n\nloadEnv()\n\n// ─── system version ───────────────────────────────────────────────────────────\n\nasync function version(json: boolean): Promise<void> {\n const data = {\n cli: SDK_VERSION,\n sdk: SDK_VERSION,\n graphUrl:\n process.env.ISOMETRY_GRAPH_URL ??\n 'https://console.isometry.network/graph/subgraphs/name/isometry',\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`isometry CLI v${SDK_VERSION}`)\n console.log(`SDK v${SDK_VERSION}`)\n console.log(`Graph URL ${data.graphUrl}`)\n }\n}\n\n// ─── system status ────────────────────────────────────────────────────────────\n\nasync function status(json: boolean): Promise<void> {\n const { GraphClient } = await import('../../sdk/index.js')\n\n const graphUrl =\n process.env.ISOMETRY_GRAPH_URL ??\n 'https://console.isometry.network/graph/subgraphs/name/isometry'\n\n const graph = new GraphClient({ endpoint: graphUrl })\n\n let meta = null\n let metaError = null\n\n try {\n meta = await graph.ping()\n } catch (err) {\n metaError = err instanceof Error ? err.message : String(err)\n }\n\n const data = { subgraph: meta ? 'connected' : 'unreachable', meta, metaError }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n if (meta) {\n console.log(`Subgraph ✅ connected`)\n console.log(`Block ${meta.number}`)\n console.log(`Deployment ${meta.deployment}`)\n } else {\n console.log(`Subgraph ❌ unreachable — ${metaError}`)\n }\n }\n}\n\n// ─── Register ─────────────────────────────────────────────────────────────────\n\nexport function registerSystem(parent: Command): void {\n const system = parent.command('system').description('System & diagnostics')\n\n system\n .command('version')\n .description('Show CLI and SDK version')\n .option('--json', 'Output as JSON')\n .action((opts) => version(opts.json ?? false))\n\n system\n .command('status')\n .description('Check subgraph connectivity')\n .option('--json', 'Output as JSON')\n .action((opts) => status(opts.json ?? false))\n}\n","import { Command } from 'commander'\nimport { loadEnv } from \"../../env.js\"\n\n/** JSON replacer that converts BigInt to string */\nfunction jsonReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value\n}\n\n\n\n\nloadEnv()\n\n// ─── platform info ────────────────────────────────────────────────────────────\n\nasync function info(json: boolean): Promise<void> {\n const client = createClient()\n\n const [platformInfo, graphAdmins, graphIssuers, graphAccessUsers] = await Promise.all([\n client.rpc.platform.getPlatformInfo(),\n client.graph.platform.getActivePlatformAdins(),\n client.graph.platform.getActiveApprovedIssuers(),\n client.graph.platform.getActiveAccessUsers(),\n ])\n\n const data = {\n // RPC state\n paused: platformInfo.paused,\n tokenCount: platformInfo.tokenCount.toString(),\n platformAdminCount: platformInfo.platformAdminCount.toString(),\n approvedIssuerCount: platformInfo.approvedIssuerCount.toString(),\n accessUserCount: platformInfo.accessUserCount.toString(),\n // Graph historical\n activeAdmins: (graphAdmins as PlatformAdmin[]).map((a) => ({\n address: a.account,\n addedAt: a.addedAt,\n })),\n activeIssuers: (graphIssuers as ApprovedIssuer[]).map((i) => ({\n address: i.account,\n addedAt: i.addedAt,\n })),\n activeAccessUsers: (graphAccessUsers as AccessUser[]).map((u) => ({\n address: u.account,\n addedAt: u.addedAt,\n })),\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`Platform Paused ${data.paused ? 'YES ❌' : 'No ✅'}`)\n console.log(`Token Count ${data.tokenCount}`)\n console.log(`Platform Admins ${data.platformAdminCount}`)\n console.log(`Approved Issuers ${data.approvedIssuerCount}`)\n console.log(`Access Users ${data.accessUserCount}`)\n if (data.activeAdmins.length > 0) {\n console.log('')\n data.activeAdmins.forEach((a) => console.log(` Admin ${a.address}`))\n }\n }\n}\n\n// ─── platform tokens ────────────────────────────────────────────────────────\n\nasync function tokens(json: boolean): Promise<void> {\n const client = createClient()\n const tokenAddrs = await client.rpc.platform.getAllTokens()\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data: { tokens: tokenAddrs } }, jsonReplacer, 2))\n } else {\n console.log(`Registered tokens: ${tokenAddrs.length}`)\n tokenAddrs.forEach((a) => console.log(` ${a}`))\n }\n}\n\n// ─── Register ─────────────────────────────────────────────────────────────────\n\nexport function registerPlatform(parent: Command): void {\n const platform = parent.command('platform').description('Platform read operations')\n\n platform\n .command('info')\n .description('Get platform state (paused, counts, roles from Graph)')\n .option('--json', 'Output as JSON')\n .action((opts) => info(opts.json ?? false))\n\n platform\n .command('tokens')\n .description('List all registered token addresses (RPC)')\n .option('--json', 'Output as JSON')\n .action((opts) => tokens(opts.json ?? false))\n\n // Write commands (admin, issuer, access management)\n registerPlatformWrite(platform)\n}\n","/**\nimport { loadEnv } from \"../../env.js\"\n * Token write commands: mint, burn, pause, unpause, blacklist\n *\n * Architecture:\n * - Each command uses WriteExecutor for a consistent interface\n * - --simulate → dry-run (estimateGas only)\n * - --json → structured output\n * - No privateKey → clear error with code NO_SIGNER\n */\n\nimport { Command } from 'commander'\n\n/** JSON replacer that converts BigInt to string */\nfunction jsonReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value\n}\n\n\n\n\nloadEnv()\n\n// ─── Shared executor factory ───────────────────────────────────────────────────\n\nasync function getTokenExecutor(\n tokenAddress: string\n): Promise<{ executor: WriteExecutor } | { error: string; code: string }> {\n if (!tokenAddress) {\n return { error: 'Token address is required', code: 'INVALID_ARGUMENT' }\n }\n\n const client = createClient()\n\n if (!client.config.privateKey) {\n return {\n error: 'ISOMETRY_PRIVATE_KEY is not set — cannot sign transactions',\n code: 'NO_SIGNER',\n }\n }\n\n // Validate private key format before creating wallet to avoid ethers throwing\n const pk = client.config.privateKey\n if (!/^0x[0-9a-fA-F]{64}$/.test(pk)) {\n return { error: 'ISOMETRY_PRIVATE_KEY format invalid — must be 0x-prefixed 64-char hex', code: 'INVALID_KEY' }\n }\n\n const wallet = createWallet(client.config.rpcUrl, pk)\n if (!wallet.signer) {\n return { error: 'Wallet has no signer', code: 'NO_SIGNER' }\n }\n\n const { getStableCoin } = await import('../../sdk/rpc/contracts.js')\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const tokenContract = getStableCoin(tokenAddress, wallet.signer as any)\n\n const executor = new WriteExecutor({ wallet, contract: tokenContract })\n return { executor }\n}\n\n// ─── Shared output helper ─────────────────────────────────────────────────────\n\nfunction outputError(code: string, message: string, json: boolean): void {\n if (json) {\n console.log(JSON.stringify({ ok: false, code, message }, jsonReplacer, 2))\n } else {\n console.log(`❌ [${code}] ${message}`)\n }\n}\n\n// ─── token mint ─────────────────────────────────────────────────────────────\n\ninterface MintOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function tokenMint(\n tokenAddress: string,\n to: string,\n amount: string,\n opts: MintOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Mint via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'mint', args: [to, BigInt(amount), memo] })\n : await executor.execute({ method: 'mint', args: [to, BigInt(amount), memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── token burn ─────────────────────────────────────────────────────────────\n\ninterface BurnOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function tokenBurn(\n tokenAddress: string,\n amount: string,\n opts: BurnOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Burn via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'burn', args: [BigInt(amount), memo] })\n : await executor.execute({ method: 'burn', args: [BigInt(amount), memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── token pause / unpause ──────────────────────────────────────────────────\n\ninterface PauseOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function tokenPause(tokenAddress: string, opts: PauseOpts): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Pause via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'pause', args: [memo] })\n : await executor.execute({ method: 'pause', args: [memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\nasync function tokenUnpause(tokenAddress: string, opts: PauseOpts): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Unpause via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'unpause', args: [memo] })\n : await executor.execute({ method: 'unpause', args: [memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── token blacklist ───────────────────────────────────────────────────────\n\ninterface BlacklistOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function blacklistAdd(\n tokenAddress: string,\n user: string,\n opts: BlacklistOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Blacklist add via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'blacklist', args: [user, memo] })\n : await executor.execute({ method: 'blacklist', args: [user, memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\nasync function blacklistRemove(\n tokenAddress: string,\n user: string,\n opts: BlacklistOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Blacklist remove via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'unBlacklist', args: [user, memo] })\n : await executor.execute({ method: 'unBlacklist', args: [user, memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── token blacklist manager ────────────────────────────────────────────────\n\nasync function addBlacklistManager(\n tokenAddress: string,\n account: string,\n opts: BlacklistOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Add blacklist manager via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'addBlacklistManager', args: [account, memo] })\n : await executor.execute({ method: 'addBlacklistManager', args: [account, memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\nasync function removeBlacklistManager(\n tokenAddress: string,\n account: string,\n opts: BlacklistOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Remove blacklist manager via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'removeBlacklistManager', args: [account, memo] })\n : await executor.execute({ method: 'removeBlacklistManager', args: [account, memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── token minter management ──────────────────────────────────────────────────\n\ninterface MinterOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function addMinter(\n tokenAddress: string,\n minter: string,\n allowance: string,\n opts: MinterOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Add minter via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'addMinter', args: [minter, BigInt(allowance), memo] })\n : await executor.execute({ method: 'addMinter', args: [minter, BigInt(allowance), memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\nasync function removeMinter(\n tokenAddress: string,\n minter: string,\n opts: MinterOpts\n): Promise<void> {\n const result = await getTokenExecutor(tokenAddress)\n if ('executor' in result) {\n const executor = result.executor\n const memo = opts.memo || `Remove minter via isometry CLI at ${new Date().toISOString()}`\n const writeResult: WriteResult = opts.simulate\n ? await executor.simulate({ method: 'removeMinter', args: [minter, memo] })\n : await executor.execute({ method: 'removeMinter', args: [minter, memo] })\n console.log(formatWriteResult(writeResult, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n } else {\n outputError(result.code, result.error, opts.json)\n }\n}\n\n// ─── Register ─────────────────────────────────────────────────────────────────\n\nexport function registerTokenWrite(token: Command): void {\n // Write commands are registered on the existing 'token' command\n\n // ─── mint ────────────────────────────────────────────────────────────────\n\n token\n .command('mint <token-address> <to> <amount>')\n .description('Mint new tokens (requires MASTER_MINTER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, to, amount, opts) =>\n tokenMint(tokenAddress, to, amount, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── burn ───────────────────────────────────────────────────────────────\n\n token\n .command('burn <token-address> <amount>')\n .description('Burn tokens from caller balance')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, amount, opts) =>\n tokenBurn(tokenAddress, amount, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── pause ───────────────────────────────────────────────────────────────\n\n token\n .command('pause <token-address>')\n .description('Pause all transfers (requires PAUSER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, opts) =>\n tokenPause(tokenAddress, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── unpause ────────────────────────────────────────────────────────────\n\n token\n .command('unpause <token-address>')\n .description('Unpause all transfers (requires PAUSER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, opts) =>\n tokenUnpause(tokenAddress, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── blacklist ─────────────────────────────────────────────────────────\n\n const blacklist = token.command('blacklist').description('Blacklist management')\n\n blacklist\n .command('add <token-address> <user>')\n .description('Add user to token blacklist')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, user, opts) =>\n blacklistAdd(tokenAddress, user, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n blacklist\n .command('remove <token-address> <user>')\n .description('Remove user from token blacklist')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, user, opts) =>\n blacklistRemove(tokenAddress, user, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── Minter management ─────────────────────────────────────────────────────\n\n const minter = token.command('minter').description('Minter management')\n\n minter\n .command('add <token-address> <minter> <allowance>')\n .description('Add minter with allowance (requires MASTER_MINTER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, minterAddr, allowance, opts) =>\n addMinter(tokenAddress, minterAddr, allowance, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n minter\n .command('remove <token-address> <minter>')\n .description('Remove minter (requires MASTER_MINTER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, minterAddr, opts) =>\n removeMinter(tokenAddress, minterAddr, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n // ─── Blacklist manager management ───────────────────────────────────────────\n\n const blMgr = token.command('bl-manager').description('Blacklist manager management')\n\n blMgr\n .command('add <token-address> <account>')\n .description('Add blacklist manager (requires TOKEN_OWNER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, account, opts) =>\n addBlacklistManager(tokenAddress, account, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n\n blMgr\n .command('remove <token-address> <account>')\n .description('Remove blacklist manager (requires TOKEN_OWNER_ROLE)')\n .option('--simulate', 'Simulate without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Transaction memo', '')\n .action((tokenAddress, account, opts) =>\n removeBlacklistManager(tokenAddress, account, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n}\n","import { Command } from 'commander'\nimport { loadEnv } from '../../env.js'\nimport { createClient } from '../../sdk/index.js'\nimport { parseBigIntToNumber } from '../../sdk/graph/analytics.js'\nimport { registerTokenWrite } from './tokenWrite.js'\n\n// Load env before any SDK code runs\nloadEnv()\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\nfunction formatBigInt(v: bigint): string {\n return v.toString()\n}\n\n/** JSON replacer that converts BigInt to string — use as 3rd arg to JSON.stringify */\nfunction jsonReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value\n}\n\n// ─── token info ─────────────────────────────────────────────────────────────\n\nasync function tokenInfo(addr: string, json: boolean): Promise<void> {\n const client = createClient()\n\n const [info, stats] = await Promise.all([\n client.rpc.token.getTokenInfo(addr),\n client.rpc.token.getTokenStats(addr),\n ])\n\n const data = {\n address: info.address,\n name: info.name,\n symbol: info.symbol,\n decimals: info.decimals,\n totalSupply: formatBigInt(info.totalSupply),\n paused: info.paused,\n holdersTotal: parseBigIntToNumber(stats.holdersTotal.toString()),\n totalMinted: formatBigInt(stats.totalMinted),\n totalBurned: formatBigInt(stats.totalBurned),\n totalAllowance: formatBigInt(stats.totalAllowance),\n mintersCount: parseBigIntToNumber(stats.mintersCount.toString()),\n blacklistCount: parseBigIntToNumber(stats.blacklistCount.toString()),\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`Address ${data.address}`)\n console.log(`Name ${data.name}`)\n console.log(`Symbol ${data.symbol}`)\n console.log(`Decimals ${data.decimals}`)\n console.log(`Total Supply ${data.totalSupply}`)\n console.log(`Paused ${data.paused ? 'YES ❌' : 'No ✅'}`)\n console.log(`Holders ${data.holdersTotal}`)\n console.log(`Total Minted ${data.totalMinted}`)\n console.log(`Total Burned ${data.totalBurned}`)\n console.log(`Minters ${data.mintersCount}`)\n console.log(`Blacklist Count ${data.blacklistCount}`)\n }\n}\n\n// ─── token stats ─────────────────────────────────────────────────────────────\n\nasync function tokenStats(addr: string, json: boolean): Promise<void> {\n const client = createClient()\n const stats = await client.rpc.token.getTokenStats(addr)\n\n const net = BigInt(stats.totalMinted) - BigInt(stats.totalBurned)\n\n const data = {\n address: stats.address,\n holdersTotal: parseBigIntToNumber(stats.holdersTotal.toString()),\n totalMinted: formatBigInt(stats.totalMinted),\n totalBurned: formatBigInt(stats.totalBurned),\n netSupply: formatBigInt(net),\n totalAllowance: formatBigInt(stats.totalAllowance),\n mintersCount: parseBigIntToNumber(stats.mintersCount.toString()),\n blacklistCount: parseBigIntToNumber(stats.blacklistCount.toString()),\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`Address ${data.address}`)\n console.log(`Holders ${data.holdersTotal}`)\n console.log(`Total Minted ${data.totalMinted}`)\n console.log(`Total Burned ${data.totalBurned}`)\n console.log(`Net Supply ${data.netSupply}`)\n console.log(`Total Allowance ${data.totalAllowance}`)\n console.log(`Minters ${data.mintersCount}`)\n console.log(`Blacklist ${data.blacklistCount}`)\n }\n}\n\n// ─── token roles ─────────────────────────────────────────────────────────────\n\nasync function tokenRoles(addr: string, account: string, json: boolean): Promise<void> {\n const client = createClient()\n const roles = await client.rpc.token.getUserRoles(addr, account)\n\n const data = {\n token: roles.address,\n account: roles.account,\n isTokenOwner: roles.isTokenOwner,\n isMasterMinter: roles.isMasterMinter,\n isMinter: roles.isMinter,\n isBlacklistManager: roles.isBlacklistManager,\n isMasterStatus: roles.isMasterStatus,\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`Token ${data.token}`)\n console.log(`Account ${data.account}`)\n console.log(`Token Owner ${data.isTokenOwner ? '✅' : '❌'}`)\n console.log(`Master Minter ${data.isMasterMinter ? '✅' : '❌'}`)\n console.log(`Minter ${data.isMinter ? '✅' : '❌'}`)\n console.log(`Blacklist Manager ${data.isBlacklistManager ? '✅' : '❌'}`)\n console.log(`Master Status ${data.isMasterStatus ? '✅' : '❌'}`)\n }\n}\n\n// ─── token history (combined mint + burn) ──────────────────────────────────\n\nasync function tokenHistory(addr: string, first: number, json: boolean): Promise<void> {\n const client = createClient()\n\n const [mints, burns] = await Promise.all([\n client.graph.token.getMintHistory(addr, first, 0),\n client.graph.token.getBurnHistory(addr, first, 0),\n ])\n\n type HistoryItem = {\n type: 'mint' | 'burn'\n amount: string\n actor: string\n block: string\n txHash: string\n }\n\n const events: HistoryItem[] = [\n ...mints.map((e) => ({\n type: 'mint' as const,\n amount: e.amount,\n actor: e.operator,\n block: e.blockNumber,\n txHash: e.transactionHash,\n })),\n ...burns.map((e) => ({\n type: 'burn' as const,\n amount: e.amount,\n actor: e.operator,\n block: e.blockNumber,\n txHash: e.transactionHash,\n })),\n ]\n\n events.sort((a, b) => (BigInt(a.block) > BigInt(b.block) ? -1 : 1))\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data: { events } }, jsonReplacer, 2))\n } else {\n console.log(`Token ${addr}`)\n console.log(`Mint events ${mints.length} Burn events ${burns.length}`)\n events.slice(0, 10).forEach((e) => {\n console.log(` [${e.type.padEnd(4)}] ${e.amount} block ${e.block}`)\n })\n }\n}\n\n// ─── token mint-history ────────────────────────────────────────────────────\n\nasync function tokenMintHistory(addr: string, first: number, json: boolean): Promise<void> {\n const client = createClient()\n const events = await client.graph.token.getMintHistory(addr, first, 0)\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data: { events } }, jsonReplacer, 2))\n } else {\n console.log(`Token ${addr} — Mint History (${events.length} events)`)\n events.slice(0, 10).forEach((e) => {\n console.log(` [mint] to:${e.to} amount:${e.amount} op:${e.operator} block:${e.blockNumber}`)\n })\n }\n}\n\n// ─── token burn-history ────────────────────────────────────────────────────\n\nasync function tokenBurnHistory(addr: string, first: number, json: boolean): Promise<void> {\n const client = createClient()\n const events = await client.graph.token.getBurnHistory(addr, first, 0)\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data: { events } }, jsonReplacer, 2))\n } else {\n console.log(`Token ${addr} — Burn History (${events.length} events)`)\n events.slice(0, 10).forEach((e) => {\n console.log(` [burn] from:${e.from} amount:${e.amount} op:${e.operator} block:${e.blockNumber}`)\n })\n }\n}\n\n// ─── token pause-history ───────────────────────────────────────────────────\n\nasync function tokenPauseHistory(addr: string, first: number, json: boolean): Promise<void> {\n const client = createClient()\n\n const [pauseEvts, pausedEvts, unpausedEvts] = await Promise.all([\n client.graph.token.getPauseHistory(addr, first, 0),\n client.graph.token.getPausedByOwnerHistory(addr, first, 0),\n client.graph.token.getUnpausedByOwnerHistory(addr, first, 0),\n ])\n\n if (json) {\n console.log(JSON.stringify({\n ok: true,\n data: { pauseEvents: pauseEvts, pausedByOwnerEvents: pausedEvts, unpausedByOwnerEvents: unpausedEvts }\n }, null, 2))\n } else {\n console.log(`Token ${addr} — Pause History`)\n console.log(`Pause events ${pauseEvts.length}`)\n console.log(`PausedByOwner ${pausedEvts.length}`)\n console.log(`UnpausedByOwner ${unpausedEvts.length}`)\n }\n}\n\n// ─── Register ─────────────────────────────────────────────────────────────────\n//\n// Commander v12 action signature: action(options, ...positionalArgs)\n// positional args come AFTER the options object\n//\n\nexport function registerToken(parent: Command): void {\n const token = parent.command('token').description('Token read operations')\n\n // Phase A — RPC\n token\n .command('info <address>')\n .description('Get token info and stats (RPC)')\n .option('--json', 'Output as JSON')\n .action((addr, opts) => tokenInfo(addr, opts.json ?? false))\n\n token\n .command('stats <address>')\n .description('Get token supply stats (RPC)')\n .option('--json', 'Output as JSON')\n .action((addr, opts) => tokenStats(addr, opts.json ?? false))\n\n token\n .command('roles <address> <account>')\n .description('Get account roles on a token (RPC)')\n .option('--json', 'Output as JSON')\n .action((addr, account, opts) => tokenRoles(addr, account, opts.json ?? false))\n\n // Phase B — Graph\n token\n .command('history <address>')\n .description('Get combined mint+burn history (GraphQL)')\n .option('--first <number>', 'Number of events', '100')\n .option('--json', 'Output as JSON')\n .action((addr, opts) =>\n tokenHistory(addr, parseInt(opts.first ?? '100', 10), opts.json ?? false)\n )\n\n token\n .command('mint-history <address>')\n .description('Get mint history (GraphQL)')\n .option('--first <number>', 'Number of events', '100')\n .option('--json', 'Output as JSON')\n .action((addr, opts) =>\n tokenMintHistory(addr, parseInt(opts.first ?? '100', 10), opts.json ?? false)\n )\n\n token\n .command('burn-history <address>')\n .description('Get burn history (GraphQL)')\n .option('--first <number>', 'Number of events', '100')\n .option('--json', 'Output as JSON')\n .action((addr, opts) =>\n tokenBurnHistory(addr, parseInt(opts.first ?? '100', 10), opts.json ?? false)\n )\n\n token\n .command('pause-history <address>')\n .description('Get pause/unpause history (GraphQL)')\n .option('--first <number>', 'Number of events', '100')\n .option('--json', 'Output as JSON')\n .action((addr, opts) =>\n tokenPauseHistory(addr, parseInt(opts.first ?? '100', 10), opts.json ?? false)\n )\n\n // Write commands (mint, burn, pause, unpause, blacklist)\n registerTokenWrite(token)\n}\n","import { Command } from 'commander'\nimport { loadEnv } from \"../../env.js\"\n\n/** JSON replacer that converts BigInt to string */\nfunction jsonReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value\n}\n\n\n\nloadEnv()\n\n// ─── factory info ─────────────────────────────────────────────────────────────\n\nasync function factoryInfo(json: boolean): Promise<void> {\n const client = createClient()\n\n const [beacon, platformAddr] = await Promise.all([\n client.rpc.factory.getBeaconAddress(),\n client.rpc.factory.getPlatformAddress(),\n ])\n\n const data = {\n beacon,\n platform: platformAddr,\n addresses: client.config.addresses,\n chainId: client.config.chainId,\n }\n\n if (json) {\n console.log(JSON.stringify({ ok: true, data }, jsonReplacer, 2))\n } else {\n console.log(`Beacon ${data.beacon}`)\n console.log(`Platform ${data.platform}`)\n console.log(`Chain ID ${data.chainId}`)\n console.log(`Config Factory ${data.addresses.factory ?? '(not set)'}`)\n console.log(`Config Beacon ${data.addresses.beacon ?? '(not set)'}`)\n }\n}\n\n// ─── factory create ──────────────────────────────────────────────────────────\n\ninterface CreateOpts {\n simulate: boolean\n json: boolean\n memo: string\n}\n\nasync function factoryCreate(name: string, symbol: string, opts: CreateOpts): Promise<void> {\n const client = createClient()\n\n if (!client.config.addresses.factory) {\n const msg = 'ISOMETRY_FACTORY_ADDRESS is not configured'\n console.log(opts.json\n ? JSON.stringify({ ok: false, code: 'NOT_CONFIGURED', message: msg }, jsonReplacer, 2)\n : `❌ ${msg}`)\n return\n }\n\n if (!client.config.privateKey) {\n const msg = 'ISOMETRY_PRIVATE_KEY is not set — cannot sign transactions'\n console.log(opts.json\n ? JSON.stringify({ ok: false, code: 'NO_SIGNER', message: msg }, jsonReplacer, 2)\n : `❌ ${msg}`)\n return\n }\n\n // Create a wallet with signer for write operations\n const wallet = createWallet(client.config.rpcUrl, client.config.privateKey)\n\n if (!wallet.signer) {\n const msg = 'Wallet has no signer — check ISOMETRY_PRIVATE_KEY'\n console.log(opts.json\n ? JSON.stringify({ ok: false, code: 'NO_SIGNER', message: msg }, jsonReplacer, 2)\n : `❌ ${msg}`)\n return\n }\n\n // Get factory contract with signer\n const contracts = getContracts(client.config.addresses, wallet.signer)\n\n const memo = opts.memo || `Created via isometry CLI at ${new Date().toISOString()}`\n\n const executor = new WriteExecutor({\n wallet,\n contract: contracts.factory,\n })\n\n const call = {\n method: 'createStableCoin',\n args: [name, symbol, memo],\n }\n\n const result: WriteResult = opts.simulate\n ? await executor.simulate(call)\n : await executor.execute(call)\n\n console.log(formatWriteResult(result, { simulate: opts.simulate, json: opts.json }, makeWriteMeta()))\n}\n\n// ─── Register ─────────────────────────────────────────────────────────────────\n\nexport function registerFactory(parent: Command): void {\n const factory = parent.command('factory').description('Factory operations')\n\n factory\n .command('info')\n .description('Get factory addresses (RPC)')\n .option('--json', 'Output as JSON')\n .action((opts) => factoryInfo(opts.json ?? false))\n\n factory\n .command('create <name> <symbol>')\n .description('Create a new stablecoin via factory')\n .option('--simulate', 'Simulate the transaction without signing')\n .option('--json', 'Output as JSON')\n .option('--memo <text>', 'Memo for the transaction', '')\n .action((name, symbol, opts) =>\n factoryCreate(name, symbol, {\n simulate: opts.simulate ?? false,\n json: opts.json ?? false,\n memo: opts.memo ?? '',\n })\n )\n}\n","#!/usr/bin/env node\n\nimport { Command } from 'commander'\nimport { readFileSync } from 'fs'\nimport { resolve } from 'path'\nimport { fileURLToPath } from 'url'\n\nconst __dirname = fileURLToPath(new URL('.', import.meta.url))\n\n// Load package.json for version\nconst pkg = JSON.parse(\n readFileSync(resolve(__dirname, '../package.json'), 'utf-8')\n)\n\nconst program = new Command()\n\nprogram.name('isometry').description('Agent-friendly CLI for Isometry').version(pkg.version)\n\n// Register command groups\nconst { registerSystem } = await import('./commands/system.js')\nconst { registerPlatform } = await import('./commands/platform.js')\nconst { registerToken } = await import('./commands/token.js')\nconst { registerFactory } = await import('./commands/factory.js')\n\nregisterSystem(program)\nregisterPlatform(program)\nregisterToken(program)\nregisterFactory(program)\n\nprogram.parse(process.argv)\n"],"mappings":"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","names":["loadEnv","createWallet","getContracts","getContracts","getContracts","config","DEFAULT_FIRST","DEFAULT_SKIP","tokens","config","createClient","config","SDK_VERSION","init_client","createWallet","SDK_VERSION","createClient","createWallet","getContracts","init_client","GraphClient","loadEnv","jsonReplacer","init_platform","loadEnv","jsonReplacer","getStableCoin","jsonReplacer","createClient","info","loadEnv","jsonReplacer","init_factory","loadEnv","resolve","fileURLToPath","__dirname","registerSystem","registerPlatform","registerToken","registerFactory"]}
|