{
  "_format": "hh-sol-artifact-1",
  "contractName": "ClusterArea",
  "sourceName": "contracts/V3/ClusterArea.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "caller",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint8",
          "name": "regType",
          "type": "uint8"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "ruleSlotIndex1",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "ruleSlotIndex2",
          "type": "uint8"
        }
      ],
      "name": "EventCluster",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "channel",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Receive",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "channel",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "erc",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256[]",
                          "name": "valueList",
                          "type": "uint256[]"
                        }
                      ],
                      "internalType": "struct Token.TokenTemplate",
                      "name": "tokenTemplate",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint8",
                      "name": "rule",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address[]",
                      "name": "ioAddressList",
                      "type": "address[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "valueList",
                      "type": "uint256[]"
                    }
                  ],
                  "internalType": "struct Rule.TokenSlot[]",
                  "name": "tokenSlotList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint8",
                  "name": "branch",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "poolToken",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "argsList",
                  "type": "bytes[]"
                }
              ],
              "internalType": "struct Rule.GroupSlot[]",
              "name": "groupSlotList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "ruleSlotBound",
              "type": "uint8[]"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexInput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexOutput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "totalCount",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "durationType",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "delayTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "delayBlockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "handlerCount",
                  "type": "uint64"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "handlerArgsList",
                  "type": "bytes[]"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                }
              ],
              "internalType": "struct Rule.Rule[]",
              "name": "ruleList",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                },
                {
                  "internalType": "uint8",
                  "name": "level",
                  "type": "uint8"
                }
              ],
              "internalType": "struct Attribute.Attribute[]",
              "name": "attrList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "attrStateList",
              "type": "uint8[]"
            },
            {
              "internalType": "address[]",
              "name": "deployerList",
              "type": "address[]"
            },
            {
              "internalType": "address[]",
              "name": "adminList",
              "type": "address[]"
            },
            {
              "internalType": "uint32",
              "name": "delayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayBlockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct Cluster.Cluster",
          "name": "cluster",
          "type": "tuple"
        }
      ],
      "name": "addRule",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clusterAttributeArea",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clusterAttributeAreaToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "clusterDescription",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clusterMountingArea",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "clusterRegBlockNumber",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "clusterRegTimestamp",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clusterRuleArea",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "clusterRuleAreaHandler",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "clusterRuleDelayBlockNumber",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "clusterRuleDelayTimestamp",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "clusterState",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "cname",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "engine",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        }
      ],
      "name": "getAdminList",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClusterAttributeArea",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClusterAttributeAreaToken",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClusterMountingArea",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint8",
          "name": "role",
          "type": "uint8"
        }
      ],
      "name": "getClusterRoleHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClusterRuleArea",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getClusterRuleAreaHandler",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        }
      ],
      "name": "getClusterState",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getCurrentClusterId",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        }
      ],
      "name": "getDelayBlockNumber",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        }
      ],
      "name": "getDelayTimestamp",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        }
      ],
      "name": "getDeployerList",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        }
      ],
      "name": "getDescription",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getEngine",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        }
      ],
      "name": "getPostGroupSlotForEngine",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address[]",
              "name": "postHandlerList",
              "type": "address[]"
            }
          ],
          "internalType": "struct IClusterArea.PostForEngine",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        }
      ],
      "name": "getPreGroupSlotForEngine",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bool",
              "name": "foundGroupSlot",
              "type": "bool"
            },
            {
              "components": [
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "erc",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256[]",
                          "name": "valueList",
                          "type": "uint256[]"
                        }
                      ],
                      "internalType": "struct Token.TokenTemplate",
                      "name": "tokenTemplate",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint8",
                      "name": "rule",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address[]",
                      "name": "ioAddressList",
                      "type": "address[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "valueList",
                      "type": "uint256[]"
                    }
                  ],
                  "internalType": "struct Rule.TokenSlot[]",
                  "name": "tokenSlotList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint8",
                  "name": "branch",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "poolToken",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "argsList",
                  "type": "bytes[]"
                }
              ],
              "internalType": "struct Rule.GroupSlot",
              "name": "groupSlot",
              "type": "tuple"
            },
            {
              "internalType": "address",
              "name": "snippet",
              "type": "address"
            },
            {
              "internalType": "address[]",
              "name": "preHandlerList",
              "type": "address[]"
            },
            {
              "internalType": "uint8",
              "name": "ruleDurationType",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "ruleDelayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "ruleDelayBlockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayBlockNumber",
              "type": "uint32"
            }
          ],
          "internalType": "struct IClusterArea.PreForEngine",
          "name": "preForEngine",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexInput",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndexOutput",
          "type": "uint16"
        }
      ],
      "name": "getProcessGroupSlotForEngine",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address[]",
              "name": "processHandlerList",
              "type": "address[]"
            }
          ],
          "internalType": "struct IClusterArea.ProcessForEngine",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getRoleMember",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleMemberCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint8",
          "name": "role",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint8",
          "name": "role",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "haveRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolContract_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "engine_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "poolFee_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterRuleArea_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterRuleAreaHandler_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterAttributeArea_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterAttributeAreaToken_",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "clusterMountingArea_",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "channel",
          "type": "uint8"
        },
        {
          "internalType": "bool",
          "name": "_paused",
          "type": "bool"
        }
      ],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "channel",
          "type": "uint8"
        }
      ],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolContract",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "poolFee",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "erc",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256[]",
                          "name": "valueList",
                          "type": "uint256[]"
                        }
                      ],
                      "internalType": "struct Token.TokenTemplate",
                      "name": "tokenTemplate",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint8",
                      "name": "rule",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address[]",
                      "name": "ioAddressList",
                      "type": "address[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "valueList",
                      "type": "uint256[]"
                    }
                  ],
                  "internalType": "struct Rule.TokenSlot[]",
                  "name": "tokenSlotList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint8",
                  "name": "branch",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "poolToken",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "argsList",
                  "type": "bytes[]"
                }
              ],
              "internalType": "struct Rule.GroupSlot[]",
              "name": "groupSlotList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "ruleSlotBound",
              "type": "uint8[]"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexInput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexOutput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "totalCount",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "durationType",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "delayTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "delayBlockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "handlerCount",
                  "type": "uint64"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "handlerArgsList",
                  "type": "bytes[]"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                }
              ],
              "internalType": "struct Rule.Rule[]",
              "name": "ruleList",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                },
                {
                  "internalType": "uint8",
                  "name": "level",
                  "type": "uint8"
                }
              ],
              "internalType": "struct Attribute.Attribute[]",
              "name": "attrList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "attrStateList",
              "type": "uint8[]"
            },
            {
              "internalType": "address[]",
              "name": "deployerList",
              "type": "address[]"
            },
            {
              "internalType": "address[]",
              "name": "adminList",
              "type": "address[]"
            },
            {
              "internalType": "uint32",
              "name": "delayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayBlockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct Cluster.Cluster",
          "name": "cluster",
          "type": "tuple"
        }
      ],
      "name": "regCluster",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "components": [
                {
                  "components": [
                    {
                      "components": [
                        {
                          "internalType": "uint8",
                          "name": "erc",
                          "type": "uint8"
                        },
                        {
                          "internalType": "address",
                          "name": "token",
                          "type": "address"
                        },
                        {
                          "internalType": "uint256[]",
                          "name": "valueList",
                          "type": "uint256[]"
                        }
                      ],
                      "internalType": "struct Token.TokenTemplate",
                      "name": "tokenTemplate",
                      "type": "tuple"
                    },
                    {
                      "internalType": "uint8",
                      "name": "rule",
                      "type": "uint8"
                    },
                    {
                      "internalType": "address[]",
                      "name": "ioAddressList",
                      "type": "address[]"
                    },
                    {
                      "internalType": "uint256[]",
                      "name": "valueList",
                      "type": "uint256[]"
                    }
                  ],
                  "internalType": "struct Rule.TokenSlot[]",
                  "name": "tokenSlotList",
                  "type": "tuple[]"
                },
                {
                  "internalType": "uint8",
                  "name": "branch",
                  "type": "uint8"
                },
                {
                  "internalType": "address",
                  "name": "poolToken",
                  "type": "address"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "argsList",
                  "type": "bytes[]"
                }
              ],
              "internalType": "struct Rule.GroupSlot[]",
              "name": "groupSlotList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "ruleSlotBound",
              "type": "uint8[]"
            },
            {
              "components": [
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexInput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint16",
                  "name": "ruleSlotIndexOutput",
                  "type": "uint16"
                },
                {
                  "internalType": "uint8",
                  "name": "state",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "totalCount",
                  "type": "uint32"
                },
                {
                  "internalType": "uint8",
                  "name": "durationType",
                  "type": "uint8"
                },
                {
                  "internalType": "uint32",
                  "name": "delayTimestamp",
                  "type": "uint32"
                },
                {
                  "internalType": "uint32",
                  "name": "delayBlockNumber",
                  "type": "uint32"
                },
                {
                  "internalType": "uint64",
                  "name": "handlerCount",
                  "type": "uint64"
                },
                {
                  "internalType": "address[]",
                  "name": "handlerList",
                  "type": "address[]"
                },
                {
                  "internalType": "bytes[]",
                  "name": "handlerArgsList",
                  "type": "bytes[]"
                },
                {
                  "internalType": "address",
                  "name": "snippet",
                  "type": "address"
                }
              ],
              "internalType": "struct Rule.Rule[]",
              "name": "ruleList",
              "type": "tuple[]"
            },
            {
              "components": [
                {
                  "internalType": "uint32",
                  "name": "attrId",
                  "type": "uint32"
                },
                {
                  "internalType": "string",
                  "name": "name",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "symbol",
                  "type": "string"
                },
                {
                  "internalType": "string",
                  "name": "uri",
                  "type": "string"
                },
                {
                  "internalType": "uint8",
                  "name": "level",
                  "type": "uint8"
                }
              ],
              "internalType": "struct Attribute.Attribute[]",
              "name": "attrList",
              "type": "tuple[]"
            },
            {
              "internalType": "uint8[]",
              "name": "attrStateList",
              "type": "uint8[]"
            },
            {
              "internalType": "address[]",
              "name": "deployerList",
              "type": "address[]"
            },
            {
              "internalType": "address[]",
              "name": "adminList",
              "type": "address[]"
            },
            {
              "internalType": "uint32",
              "name": "delayTimestamp",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "delayBlockNumber",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "state",
              "type": "uint8"
            },
            {
              "internalType": "string",
              "name": "description",
              "type": "string"
            }
          ],
          "internalType": "struct Cluster.Cluster",
          "name": "cluster",
          "type": "tuple"
        }
      ],
      "name": "regRule",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint8",
          "name": "role",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint8",
          "name": "role",
          "type": "uint8"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "clusterAttributeArea_",
          "type": "address"
        }
      ],
      "name": "setClusterAttributeArea",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "clusterRuleArea_",
          "type": "address"
        }
      ],
      "name": "setClusterRuleArea",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "clusterRuleAreaHandler_",
          "type": "address"
        }
      ],
      "name": "setClusterRuleAreaHandler",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint8",
          "name": "state",
          "type": "uint8"
        }
      ],
      "name": "setClusterState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "engine_",
          "type": "address"
        }
      ],
      "name": "setEngine",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolContract_",
          "type": "address"
        }
      ],
      "name": "setPoolContract",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "poolFee_",
          "type": "address"
        }
      ],
      "name": "setPoolFee",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "clusterId",
          "type": "uint32"
        },
        {
          "internalType": "uint16",
          "name": "ruleSlotIndex",
          "type": "uint16"
        },
        {
          "internalType": "uint8",
          "name": "branch",
          "type": "uint8"
        },
        {
          "internalType": "uint8",
          "name": "tokenSlotIndex",
          "type": "uint8"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "idIndex",
              "type": "uint256"
            }
          ],
          "internalType": "struct Token.TokenHandler",
          "name": "tokenHandler",
          "type": "tuple"
        }
      ],
      "name": "updateGroupSlotTokenHandler",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b5061513f806100206000396000f3fe60806040526004361061032c5760003560e01c80637339ad99116101b2578063c7d6bff1116100ed578063ee625d7c11610090578063ee625d7c14610b43578063ef65d9f214610b77578063f1a12e6614610b96578063f2881d1314610bb6578063f2fde38b14610bd6578063f598d06914610bf6578063fe3ee16914610c17578063fe8c4aa314610c3757600080fd5b8063c7d6bff114610a21578063c983351214610a4e578063c9d4623f14610a6e578063ca15c87314610a8f578063cbe5515914610aaf578063d3b7b3b714610acf578063d547741f14610b03578063dceacb0e14610b2357600080fd5b80639010d07c116101555780639010d07c1461094457806391d148541461096457806393b441dc14610984578063a217fddf146109a3578063a3f5a033146109b8578063b18c9b33146109d8578063ba141579146109ed578063c3e9022714610a0057600080fd5b80637339ad991461081d57806384fedbc11461083d57806386b9f1d81461086e57806387ad2d501461088e57806388d52ef7146108ae5780638a29e2de146108cf5780638da5cb5b146108ef5780638e9ddacb1461090d57600080fd5b806336568abe1161028257806355b51b9e1161022557806355b51b9e1461072857806357f5ff281461073b57806359c3f3e01461075b5780635ac86ab71461077b5780635e2ad7cf1461079b5780635ec0fd9c146107c85780635fc1bed0146107e8578063715018a61461080857600080fd5b806336568abe146106005780633ae08c65146106205780633c9e6a15146106695780633ce0364014610689578063496752b5146106a95780634f62bd0d146106bc57806353eb7e1b146106f357806354fd4d501461071457600080fd5b806301ffc9a71461037057806305957706146103a5578063061d30d3146103d8578063089fe6aa146103f95780630e830e491461041a5780631424e30c1461043c57806320dcce021461045b578063223f8f06146104a4578063248a9ca3146104c5578063280d7451146105035780632f2ff15d1461052257806331a158b31461054257806334c76b251461057657806335083f4d146105b35780633546933a146105e057600080fd5b3661036b57604080513381523460208201527fd6717f327e0cb88b4a97a7f67a453e9258252c34937ccbdd86de7cb840e7def3910160405180910390a1005b600080fd5b34801561037c57600080fd5b5061039061038b36600461321e565b610c56565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b50610130546001600160a01b03165b6040516001600160a01b03909116815260200161039c565b3480156103e457600080fd5b50610136546103c0906001600160a01b031681565b34801561040557600080fd5b50610131546103c0906001600160a01b031681565b34801561042657600080fd5b5061043a61043536600461326d565b610c81565b005b34801561044857600080fd5b50610132546001600160a01b03166103c0565b34801561046757600080fd5b5061048f6104763660046132a7565b61013a6020526000908152604090205463ffffffff1681565b60405163ffffffff909116815260200161039c565b3480156104b057600080fd5b50610134546103c0906001600160a01b031681565b3480156104d157600080fd5b506104f56104e03660046132c4565b600090815260c9602052604090206001015490565b60405190815260200161039c565b34801561050f57600080fd5b50610134546001600160a01b03166103c0565b34801561052e57600080fd5b5061043a61053d3660046132dd565b610cac565b34801561054e57600080fd5b5061048f61055d3660046132a7565b61013c6020526000908152604090205463ffffffff1681565b34801561058257600080fd5b5060408051808201909152600b81526a436c75737465724172656160a81b60208201525b60405161039c9190613365565b3480156105bf57600080fd5b506105d36105ce3660046132a7565b610cd6565b60405161039c9190613378565b3480156105ec57600080fd5b5061043a6105fb36600461326d565b610d92565b34801561060c57600080fd5b5061043a61061b3660046132dd565b610dbd565b34801561062c57600080fd5b5061065761063b3660046132a7565b63ffffffff166000908152610137602052604090205460ff1690565b60405160ff909116815260200161039c565b34801561067557600080fd5b5061043a6106843660046133df565b610e40565b34801561069557600080fd5b506105a66106a43660046132a7565b610ec9565b61043a6106b7366004613e5d565b610f64565b3480156106c857600080fd5b5061048f6106d73660046132a7565b63ffffffff908116600090815261013b60205260409020541690565b3480156106ff57600080fd5b50610132546103c0906001600160a01b031681565b34801561072057600080fd5b5060016104f5565b61043a610736366004613eac565b611208565b34801561074757600080fd5b5061043a61075636600461326d565b6115cc565b34801561076757600080fd5b5061043a61077636600461326d565b6115f7565b34801561078757600080fd5b50610390610796366004613ee0565b611622565b3480156107a757600080fd5b506107bb6107b6366004613efd565b61163a565b60405161039c919061414b565b3480156107d457600080fd5b5061043a6107e33660046133df565b611b6a565b3480156107f457600080fd5b5061043a61080336600461326d565b611ba7565b34801561081457600080fd5b5061043a611bd2565b34801561082957600080fd5b50610390610838366004614217565b611be6565b34801561084957600080fd5b506106576108583660046132a7565b6101376020526000908152604090205460ff1681565b34801561087a57600080fd5b506105a66108893660046132a7565b611d37565b34801561089a57600080fd5b5061043a6108a93660046133df565b611de1565b3480156108ba57600080fd5b5061012f546103c0906001600160a01b031681565b3480156108db57600080fd5b5061043a6108ea3660046142ce565b611e17565b3480156108fb57600080fd5b506033546001600160a01b03166103c0565b34801561091957600080fd5b5061048f6109283660046132a7565b63ffffffff908116600090815261013c60205260409020541690565b34801561095057600080fd5b506103c061095f366004614377565b611fc1565b34801561097057600080fd5b5061039061097f3660046132dd565b611fe0565b34801561099057600080fd5b50610135546001600160a01b03166103c0565b3480156109af57600080fd5b506104f5600081565b3480156109c457600080fd5b506105d36109d33660046132a7565b61200b565b3480156109e457600080fd5b506104f56120be565b61043a6109fb366004613eac565b6120cf565b348015610a0c57600080fd5b50610133546103c0906001600160a01b031681565b348015610a2d57600080fd5b50610a41610a3c366004614399565b6122d8565b60405161039c91906143de565b348015610a5a57600080fd5b506104f5610a693660046143f9565b612443565b348015610a7a57600080fd5b50610130546103c0906001600160a01b031681565b348015610a9b57600080fd5b506104f5610aaa3660046132c4565b61247b565b348015610abb57600080fd5b5061043a610aca36600461326d565b612492565b348015610adb57600080fd5b5061048f610aea3660046132a7565b6101396020526000908152604090205463ffffffff1681565b348015610b0f57600080fd5b5061043a610b1e3660046132dd565b6124bd565b348015610b2f57600080fd5b50610a41610b3e366004614399565b6124e2565b348015610b4f57600080fd5b5061048f610b5e3660046132a7565b61013b6020526000908152604090205463ffffffff1681565b348015610b8357600080fd5b50610136546001600160a01b03166103c0565b348015610ba257600080fd5b50610390610bb13660046133df565b612602565b348015610bc257600080fd5b5061043a610bd13660046143f9565b61261b565b348015610be257600080fd5b5061043a610bf136600461326d565b6126ac565b348015610c0257600080fd5b50610135546103c0906001600160a01b031681565b348015610c2357600080fd5b5061043a610c32366004614435565b612725565b348015610c4357600080fd5b50610133546001600160a01b03166103c0565b60006001600160e01b03198216635a05180f60e01b1480610c7b5750610c7b82612745565b92915050565b610c8961277a565b61013080546001600160a01b0319166001600160a01b0392909216919091179055565b600082815260c96020526040902060010154610cc7816127d4565b610cd183836127de565b505050565b60606000610ce5836001612443565b90506000610cf28261247b565b90506000816001600160401b03811115610d0e57610d0e61342a565b604051908082528060200260200182016040528015610d37578160200160208202803683370190505b50905060005b82811015610d8957610d4f8482611fc1565b828281518110610d6157610d61614463565b6001600160a01b0390921660209283029190910190910152610d828161448f565b9050610d3d565b50949350505050565b610d9a61277a565b61013480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381163314610e325760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610e3c8282612800565b5050565b6001600160a01b0381163314610eab5760405162461bcd60e51b815260206004820152602a60248201527f436c7573746572203a2063616e206f6e6c792072656e6f756e636520726f6c6560448201526939903337b91039b2b63360b11b6064820152608401610e29565b6000610eb78484612443565b9050610ec38183612800565b50505050565b6101386020526000908152604090208054610ee3906144aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0f906144aa565b8015610f5c5780601f10610f3157610100808354040283529160200191610f5c565b820191906000526020600020905b815481529060010190602001808311610f3f57829003601f168201915b505050505081565b6003610f6f81611622565b15610f8c5760405162461bcd60e51b8152600401610e29906144e5565b60005a9050610fa5610f9f856002612443565b33611fe0565b6110045760405162461bcd60e51b815260206004820152602a60248201527f61646452756c65205f6d736753656e6465722829206d75737420636c7573746560448201526939103232b83637bcb2b960b11b6064820152608401610e29565b610134546001600160a01b0316634abbcd0b33606086015160808701516040516001600160e01b031960e086901b16815261104793928a926000926004016145f2565b600060405180830381600087803b15801561106157600080fd5b505af1158015611075573d6000803e3d6000fd5b5050610132546040516306237ce160e11b81526001600160a01b039091169250630c46f9c291506110ae9033908890889060040161489e565b600060405180830381600087803b1580156110c857600080fd5b505af11580156110dc573d6000803e3d6000fd5b50506101335460405163c13ae5bb60e01b81526001600160a01b03909116925063c13ae5bb915061111390879087906004016148ce565b600060405180830381600087803b15801561112d57600080fd5b505af1158015611141573d6000803e3d6000fd5b50506040805160008082526020820152815163ffffffff89169450600493503392600080516020615006833981519152928290030190a460005a61118590836148ed565b6101315460405163163ce46160e01b815291925073__$37d1e3923919c704bdb48c10208c7fa215$__9163163ce461916111d1916001600160a01b039091169085906004908101614904565b60006040518083038186803b1580156111e957600080fd5b505af41580156111fd573d6000803e3d6000fd5b505050505050505050565b600261121381611622565b156112305760405162461bcd60e51b8152600401610e29906144e5565b60005a905061124461012e80546001019055565b600061125061012e5490565b9050600284602001515110156112a85760405162461bcd60e51b815260206004820181905260248201527f636c75737465722072756c65536c6f74426f756e642e6c656e677468203e3d326044820152606401610e29565b61012084015163ffffffff8216600090815261013760205260408120805460ff191660ff909316929092179091555b8460c0015151811015611325576113156112f2836001612443565b8660c00151838151811061130857611308614463565b60200260200101516127de565b61131e8161448f565b90506112d7565b5061133a611334826002612443565b336127de565b61014084015163ffffffff8216600090815261013860209081526040909120825161136a939192909101906130ee565b5060e084015163ffffffff808316600090815261013b60209081526040808320805495851663ffffffff1996871617905561010089015161013c835281842080549186169187169190911790556101399091529020805442909216919092161790556113d4612822565b63ffffffff828116600090815261013a60205260409020805463ffffffff191692909116919091179055610134546001600160a01b0316634abbcd0b33606087015160808801516040516001600160e01b031960e086901b168152611441939287926000926004016145f2565b600060405180830381600087803b15801561145b57600080fd5b505af115801561146f573d6000803e3d6000fd5b5050610132546040516306237ce160e11b81526001600160a01b039091169250630c46f9c291506114a89033908590899060040161489e565b600060405180830381600087803b1580156114c257600080fd5b505af11580156114d6573d6000803e3d6000fd5b50506101335460405163c13ae5bb60e01b81526001600160a01b03909116925063c13ae5bb915061150d90849088906004016148ce565b600060405180830381600087803b15801561152757600080fd5b505af115801561153b573d6000803e3d6000fd5b50506040805160008082526020820152815163ffffffff86169450600393503392600080516020615006833981519152928290030190a460005a61157f90846148ed565b6101315460405163163ce46160e01b815291925073__$37d1e3923919c704bdb48c10208c7fa215$__9163163ce461916111d1916001600160a01b03909116908590600390600401614904565b6115d461277a565b61013180546001600160a01b0319166001600160a01b0392909216919091179055565b6115ff61277a565b61012f80546001600160a01b0319166001600160a01b0392909216919091179055565b60ff9081166000908152606560205260409020541690565b611642613172565b61164a6128ae565b63ffffffff85166000908152610137602052604090205460ff1661166e61012e5490565b8663ffffffff161180611682575060ff8116155b156116985761168f613172565b9150611b629050565b6116b7604051806060016040528060308152602001614fd66030913950565b6101325460405163161a012f60e11b815263ffffffff8816600482015261ffff8716602482015260ff8516604482015260009182916001600160a01b0390911690632c34025e9060640160006040518083038186803b15801561171957600080fd5b505afa15801561172d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117559190810190614c22565b91509150611778604051806060016040528060308152602001614fa66030913950565b600088888860405160200161178f93929190614d0e565b60405160208183030381529060405280519060200120905060006040518061012001604052808515158152602001848152602001856117cf576000611854565b6101335460405163206460d160e11b81526001600160a01b03909116906340c8c1a290611804908f908f908f90600401614d0e565b60206040518083038186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190614d30565b6001600160a01b031681526020018561187b57604080516000815260208101909152611904565b61013354604051630a79f57160e41b81526001600160a01b039091169063a79f5710906118b0908f908f908f90600401614d0e565b60006040518083038186803b1580156118c857600080fd5b505afa1580156118dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119049190810190614d4d565b81526020018561191557600061199a565b61013254604051631f1d398160e01b81526001600160a01b0390911690631f1d39819061194a908f908f908f90600401614d0e565b60206040518083038186803b15801561196257600080fd5b505afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a9190614d81565b60ff168152602001856119ae576000611a33565b61013254604051630622b57760e21b81526001600160a01b039091169063188ad5dc906119e3908f908f908f90600401614d0e565b60206040518083038186803b1580156119fb57600080fd5b505afa158015611a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a339190614d9e565b63ffffffff16815260200185611a4a576000611acf565b610132546040516376fe12d760e11b81526001600160a01b039091169063edfc25ae90611a7f908f908f908f90600401614d0e565b60206040518083038186803b158015611a9757600080fd5b505afa158015611aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acf9190614d9e565b63ffffffff16815260200185611ae6576000611b00565b63ffffffff808d16600090815261013b6020526040902054165b63ffffffff16815260200185611b17576000611b31565b63ffffffff808d16600090815261013c6020526040902054165b63ffffffff168152509050611b5b6040518060600160405280603081526020016150266030913950565b9450505050505b949350505050565b6000611b77846001612443565b9050611b838133611fe0565b15610ec3576000611b948585612443565b9050611ba081846127de565b5050505050565b611baf61277a565b61013380546001600160a01b0319166001600160a01b0392909216919091179055565b611bda61277a565b611be460006128c7565b565b610130546000906001600160a01b03163314611c73576000611c5360405180608001604052806054815260200161505660549139611c298963ffffffff16612919565b611c368961ffff16612919565b611c428960ff16612919565b611c4e8960ff16612919565b612924565b90611c715760405162461bcd60e51b8152600401610e299190613365565b505b6101325460408051637339ad9960e01b815263ffffffff8916600482015261ffff8816602482015260ff80881660448301528616606482015284516084820152602085015160a48201529084015160c48201526001600160a01b0390911690637339ad999060e401602060405180830381600087803b158015611cf557600080fd5b505af1158015611d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2d9190614dbb565b9695505050505050565b63ffffffff8116600090815261013860205260409020805460609190611d5c906144aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611d88906144aa565b8015611dd55780601f10611daa57610100808354040283529160200191611dd5565b820191906000526020600020905b815481529060010190602001808311611db857829003601f168201915b50505050509050919050565b6000611dee846001612443565b9050611dfa8133611fe0565b15610ec3576000611e0b8585612443565b9050611ba08184612800565b600054610100900460ff1615808015611e375750600054600160ff909116105b80611e515750303b158015611e51575060005460ff166001145b611eb45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610e29565b6000805460ff191660011790558015611ed7576000805461ff0019166101001790555b611edf612959565b611ee7612980565b611eef612959565b61012f80546001600160a01b03199081166001600160a01b038c811691909117909255610130805482168b8416179055610131805482168a841617905561013280548216898416179055610133805482168884161790556101348054821687841617905561013580548216868416179055610136805490911691841691909117905580156111fd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050565b600082815260fb60205260408120611fd990836129b0565b9392505050565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600061201a836002612443565b905060006120278261247b565b90506000816001600160401b038111156120435761204361342a565b60405190808252806020026020018201604052801561206c578160200160208202803683370190505b50905060005b82811015610d89576120848482611fc1565b82828151811061209657612096614463565b6001600160a01b03909216602092830291909101909101526120b78161448f565b9050612072565b60006120ca61012e5490565b905090565b60016120da81611622565b156120f75760405162461bcd60e51b8152600401610e29906144e5565b60005a905061210b61012e80546001019055565b600061211761012e5490565b61012085015163ffffffff8216600090815261013760205260408120805460ff191660ff909316929092179091559091505b8460c0015151811015612174576121646112f2836001612443565b61216d8161448f565b9050612149565b50612183611334826002612443565b61014084015163ffffffff821660009081526101386020908152604090912082516121b3939192909101906130ee565b5060e084015163ffffffff808316600090815261013b60209081526040808320805495851663ffffffff1996871617905561010089015161013c8352818420805491861691871691909117905561013990915290208054429092169190921617905561221d612822565b63ffffffff828116600081815261013a60205260409020805463ffffffff19169390921692909217905560013360408051600080825260208201526001600160a01b039290921691600080516020615006833981519152910160405180910390a460005a61228b90846148ed565b6101315460405163163ce46160e01b815291925073__$37d1e3923919c704bdb48c10208c7fa215$__9163163ce461916111d1916001600160a01b03909116908590600290600401614904565b6040805160208101909152606081526122ef6128ae565b61012e548463ffffffff16118061231d575063ffffffff84166000908152610137602052604090205460ff16155b15612339576040805160208101909152606081525b9050611fd9565b6123586040518060600160405280603081526020016150aa6030913950565b600084848460405160200161236f93929190614d0e565b60408051601f1981840301815282825280516020918201209083019182905261013354632485217560e21b90925292506000919081906001600160a01b031663921485d46123c28a8a8a60248701614d0e565b60006040518083038186803b1580156123da57600080fd5b505afa1580156123ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124169190810190614d4d565b815250905061243a6040518060600160405280603081526020016150da6030913950565b95945050505050565b6040805163ffffffff9390931660208085019190915260ff929092168382015280518084038201815260609093019052815191012090565b600081815260fb60205260408120610c7b906129bc565b61249a61277a565b61013280546001600160a01b0319166001600160a01b0392909216919091179055565b600082815260c960205260409020600101546124d8816127d4565b610cd18383612800565b60408051602081019091526060815261012e548463ffffffff16118061251f575063ffffffff84166000908152610137602052604090205460ff16155b1561253857604080516020810190915260608152612332565b600084848460405160200161254f93929190614d0e565b60408051601f1981840301815282825280516020918201209083019182905261013354633f5a6e8760e11b90925292506000919081906001600160a01b0316637eb4dd0e6125a28a8a8a60248701614d0e565b60006040518083038186803b1580156125ba57600080fd5b505afa1580156125ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125f69190810190614d4d565b90529695505050505050565b60008061260f8585612443565b905061243a8184611fe0565b61262782600133612602565b6126815760405162461bcd60e51b815260206004820152602560248201527f736574436c757374657253746174653a206d73672e73656e646572206e6f742060448201526430b236b4b760d91b6064820152608401610e29565b63ffffffff91909116600090815261013760205260409020805460ff191660ff909216919091179055565b6126b461277a565b6001600160a01b0381166127195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e29565b612722816128c7565b50565b61272d61277a565b801561273c57610e3c826129c6565b610e3c82612a5b565b60006001600160e01b03198216637965db0b60e01b1480610c7b57506301ffc9a760e01b6001600160e01b0319831614610c7b565b6033546001600160a01b03163314611be45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e29565b6127228133612af3565b6127e88282612b4c565b600082815260fb60205260409020610cd19082612bd2565b61280a8282612be7565b600082815260fb60205260409020610cd19082612c4e565b60004661a4b18114156128a75760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561286957600080fd5b505afa15801561287d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a19190614dd8565b91505090565b4391505090565b61012d546128c0576301312d0061012d555b5a61012d55565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060610c7b82612c63565b6060858585858560405160200161293f959493929190614df1565b604051602081830303815290604052905095945050505050565b600054610100900460ff16611be45760405162461bcd60e51b8152600401610e2990614e87565b600054610100900460ff166129a75760405162461bcd60e51b8152600401610e2990614e87565b611be4336128c7565b6000611fd98383612cff565b6000610c7b825490565b806129d081611622565b156129ed5760405162461bcd60e51b8152600401610e29906144e5565b60ff82166000908152606560205260409020805460ff191660011790557f0116a706473db0e0938996f608b9894b96b1583d307f8c605ec7fccb6d7a8cdb82612a333390565b6040805160ff90931683526001600160a01b0390911660208301520160405180910390a15050565b80612a6581611622565b612ab15760405162461bcd60e51b815260206004820152601c60248201527f5061757361626c653a206e6f7420706175736564206368616e6e656c000000006044820152606401610e29565b60ff82166000908152606560205260409020805460ff191690557fe33b1e8c9a3225cc5a849e3f9c6d9c272be7915b24983c2a048dfe7c79390f418233612a33565b612afd8282611fe0565b610e3c57612b0a81612d29565b612b15836020612d3b565b604051602001612b26929190614ed2565b60408051601f198184030181529082905262461bcd60e51b8252610e2991600401613365565b612b568282611fe0565b610e3c57600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612b8e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611fd9836001600160a01b038416612ed6565b612bf18282611fe0565b15610e3c57600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611fd9836001600160a01b038416612f25565b60606000612c7083613018565b60010190506000816001600160401b03811115612c8f57612c8f61342a565b6040519080825280601f01601f191660200182016040528015612cb9576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612cf257612cf7565b612cc3565b509392505050565b6000826000018281548110612d1657612d16614463565b9060005260206000200154905092915050565b6060610c7b6001600160a01b03831660145b60606000612d4a836002614f41565b612d55906002614f60565b6001600160401b03811115612d6c57612d6c61342a565b6040519080825280601f01601f191660200182016040528015612d96576020820181803683370190505b509050600360fc1b81600081518110612db157612db1614463565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612de057612de0614463565b60200101906001600160f81b031916908160001a9053506000612e04846002614f41565b612e0f906001614f60565b90505b6001811115612e87576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612e4357612e43614463565b1a60f81b828281518110612e5957612e59614463565b60200101906001600160f81b031916908160001a90535060049490941c93612e8081614f78565b9050612e12565b508315611fd95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e29565b6000818152600183016020526040812054612f1d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c7b565b506000610c7b565b6000818152600183016020526040812054801561300e576000612f496001836148ed565b8554909150600090612f5d906001906148ed565b9050818114612fc2576000866000018281548110612f7d57612f7d614463565b9060005260206000200154905080876000018481548110612fa057612fa0614463565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612fd357612fd3614f8f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610c7b565b6000915050610c7b565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106130575772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310613081576904ee2d6d415b85acef8160201b830492506020015b662386f26fc10000831061309f57662386f26fc10000830492506010015b6305f5e10083106130b7576305f5e100830492506008015b61271083106130cb57612710830492506004015b606483106130dd576064830492506002015b600a8310610c7b5760010192915050565b8280546130fa906144aa565b90600052602060002090601f01602090048101928261311c5760008555613162565b82601f1061313557805160ff1916838001178555613162565b82800160010185558215613162579182015b82811115613162578251825591602001919060010190613147565b5061316e9291506131fc565b5090565b6040518061012001604052806000151581526020016131c56040518060a0016040528060608152602001600060ff16815260200160006001600160a01b0316815260200160608152602001606081525090565b815260006020820181905260606040830181905282018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561316e57600081556001016131fd565b6001600160a01b03169052565b60006020828403121561323057600080fd5b81356001600160e01b031981168114611fd957600080fd5b6001600160a01b038116811461272257600080fd5b803561326881613248565b919050565b60006020828403121561327f57600080fd5b8135611fd981613248565b63ffffffff8116811461272257600080fd5b80356132688161328a565b6000602082840312156132b957600080fd5b8135611fd98161328a565b6000602082840312156132d657600080fd5b5035919050565b600080604083850312156132f057600080fd5b82359150602083013561330281613248565b809150509250929050565b60005b83811015613328578181015183820152602001613310565b83811115610ec35750506000910152565b6000815180845261335181602086016020860161330d565b601f01601f19169290920160200192915050565b602081526000611fd96020830184613339565b6020808252825182820181905260009190848201906040850190845b818110156133b95783516001600160a01b031683529284019291840191600101613394565b50909695505050505050565b60ff8116811461272257600080fd5b8035613268816133c5565b6000806000606084860312156133f457600080fd5b83356133ff8161328a565b9250602084013561340f816133c5565b9150604084013561341f81613248565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156134625761346261342a565b60405290565b604051606081016001600160401b03811182821017156134625761346261342a565b60405160a081016001600160401b03811182821017156134625761346261342a565b60405161016081016001600160401b03811182821017156134625761346261342a565b604051601f8201601f191681016001600160401b03811182821017156134f7576134f761342a565b604052919050565b60006001600160401b038211156135185761351861342a565b5060051b60200190565b600082601f83011261353357600080fd5b81356020613548613543836134ff565b6134cf565b82815260059290921b8401810191818101908684111561356757600080fd5b8286015b84811015613582578035835291830191830161356b565b509695505050505050565b600082601f83011261359e57600080fd5b813560206135ae613543836134ff565b82815260059290921b840181019181810190868411156135cd57600080fd5b8286015b848110156135825780356135e481613248565b83529183019183016135d1565b600082601f83011261360257600080fd5b81356020613612613543836134ff565b82815260059290921b8401810191818101908684111561363157600080fd5b8286015b848110156135825780356001600160401b038082111561365457600080fd5b90880190601f196080838c038201121561366d57600080fd5b613675613440565b878401358381111561368657600080fd5b84016060818e038401121561369a57600080fd5b6136a2613468565b9250888101356136b1816133c5565b83526040818101356136c281613248565b848b01526060820135858111156136d857600080fd5b6136e68f8c83860101613522565b82860152508383526136f98187016133d4565b8a840152606086013593508484111561371157600080fd5b61371f8e8b8689010161358d565b9083015250608084013591508282111561373857600080fd5b6137468c8984870101613522565b60608201528652505050918301918301613635565b60006001600160401b038211156137745761377461342a565b50601f01601f191660200190565b60006137906135438461375b565b90508281528383830111156137a457600080fd5b828260208301376000602084830101529392505050565b600082601f8301126137cc57600080fd5b813560206137dc613543836134ff565b82815260059290921b840181019181810190868411156137fb57600080fd5b8286015b848110156135825780356001600160401b0381111561381e5760008081fd5b8701603f810189136138305760008081fd5b613841898683013560408401613782565b8452509183019183016137ff565b600082601f83011261386057600080fd5b81356020613870613543836134ff565b82815260059290921b8401810191818101908684111561388f57600080fd5b8286015b848110156135825780356001600160401b03808211156138b35760008081fd5b9088019060a0828b03601f19018113156138cd5760008081fd5b6138d561348a565b87840135838111156138e75760008081fd5b6138f58d8a838801016135f1565b82525060406139058186016133d4565b89830152606061391681870161325d565b828401526080915081860135858111156139305760008081fd5b61393e8f8c838a010161358d565b828501525050828501359250838311156139585760008081fd5b6139668d8a858801016137bb565b908201528652505050918301918301613893565b600082601f83011261398b57600080fd5b8135602061399b613543836134ff565b82815260059290921b840181019181810190868411156139ba57600080fd5b8286015b848110156135825780356139d1816133c5565b83529183019183016139be565b803561ffff8116811461326857600080fd5b80356001600160401b038116811461326857600080fd5b600082601f830112613a1857600080fd5b81356020613a28613543836134ff565b82815260059290921b84018101918181019086841115613a4757600080fd5b8286015b848110156135825780356001600160401b0380821115613a6b5760008081fd5b90880190610160828b03601f1901811315613a865760008081fd5b613a8e6134ac565b613a998885016139de565b81526040613aa88186016139de565b898301526060613ab98187016133d4565b8284015260809150613acc82870161329c565b9083015260a0613add8682016133d4565b8284015260c09150613af082870161329c565b9083015260e0613b0186820161329c565b828401526101009150613b158287016139f0565b908301526101208581013585811115613b2e5760008081fd5b613b3c8f8c838a010161358d565b838501525061014091508186013585811115613b585760008081fd5b613b668f8c838a01016137bb565b828501525050613b7783860161325d565b908201528652505050918301918301613a4b565b600082601f830112613b9c57600080fd5b611fd983833560208501613782565b600082601f830112613bbc57600080fd5b81356020613bcc613543836134ff565b82815260059290921b84018101918181019086841115613beb57600080fd5b8286015b848110156135825780356001600160401b0380821115613c0f5760008081fd5b9088019060a0828b03601f1901811315613c295760008081fd5b613c3161348a565b613c3c88850161329c565b815260408085013584811115613c525760008081fd5b613c608e8b83890101613b8b565b8a8401525060608086013585811115613c795760008081fd5b613c878f8c838a0101613b8b565b8385015250608091508186013585811115613ca25760008081fd5b613cb08f8c838a0101613b8b565b828501525050613cc18386016133d4565b908201528652505050918301918301613bef565b60006101608284031215613ce857600080fd5b613cf06134ac565b905081356001600160401b0380821115613d0957600080fd5b613d158583860161384f565b83526020840135915080821115613d2b57600080fd5b613d378583860161397a565b60208401526040840135915080821115613d5057600080fd5b613d5c85838601613a07565b60408401526060840135915080821115613d7557600080fd5b613d8185838601613bab565b60608401526080840135915080821115613d9a57600080fd5b613da68583860161397a565b608084015260a0840135915080821115613dbf57600080fd5b613dcb8583860161358d565b60a084015260c0840135915080821115613de457600080fd5b613df08583860161358d565b60c0840152613e0160e0850161329c565b60e08401526101009150613e1682850161329c565b828401526101209150613e2a8285016133d4565b8284015261014091508184013581811115613e4457600080fd5b613e5086828701613b8b565b8385015250505092915050565b60008060408385031215613e7057600080fd5b8235613e7b8161328a565b915060208301356001600160401b03811115613e9657600080fd5b613ea285828601613cd5565b9150509250929050565b600060208284031215613ebe57600080fd5b81356001600160401b03811115613ed457600080fd5b611b6284828501613cd5565b600060208284031215613ef257600080fd5b8135611fd9816133c5565b60008060008060808587031215613f1357600080fd5b8435613f1e8161328a565b9350613f2c602086016139de565b9250613f3a604086016139de565b91506060850135613f4a816133c5565b939692955090935050565b600081518084526020808501945080840160005b83811015613f8557815187529582019590820190600101613f69565b509495945050505050565b600081518084526020808501945080840160005b83811015613f855781516001600160a01b031687529582019590820190600101613fa4565b600081518084526020808501808196508360051b8101915082860160005b85811015614011578284038952613fff848351613339565b98850198935090840190600101613fe7565b5091979650505050505050565b600060a0808401835182865281815180845260c093508388019150838160051b8901016020808501945060005b838110156140f4578a830360bf19018552855180516080808652815160ff1690860152838101516001600160a01b03168a86015260409081015160608a870181905261409a60e0880183613f55565b9150858401516140ae8789018260ff169052565b5082840151878303848901526140c48382613f90565b9350508084015193508683038188015250506140e08183613f55565b97840197968401969450505060010161404b565b508089015160ff16908a01526040808901519650614114908a0187613211565b6060880151955088810360608a015261412d8187613f90565b955050505050506080830151848203608086015261243a8282613fc9565b6020815261415e60208201835115159052565b6000602083015161012080604085015261417c61014085018361401e565b915060408501516141906060860182613211565b506060850151848303601f190160808601526141ac8382613f90565b92505060808501516141c360a086018260ff169052565b5060a085015163ffffffff811660c08601525060c085015163ffffffff811660e08601525060e08501516101006142018187018363ffffffff169052565b9095015163ffffffff1693019290925250919050565b600080600080600085870360e081121561423057600080fd5b863561423b8161328a565b9550614249602088016139de565b94506040870135614259816133c5565b93506060870135614269816133c5565b92506060607f198201121561427d57600080fd5b50604051606081018181106001600160401b03821117156142a0576142a061342a565b80604052506080870135815260a0870135602082015260c08701356040820152809150509295509295909350565b600080600080600080600080610100898b0312156142eb57600080fd5b88356142f681613248565b9750602089013561430681613248565b9650604089013561431681613248565b9550606089013561432681613248565b9450608089013561433681613248565b935060a089013561434681613248565b925060c089013561435681613248565b915060e089013561436681613248565b809150509295985092959890939650565b6000806040838503121561438a57600080fd5b50508035926020909101359150565b6000806000606084860312156143ae57600080fd5b83356143b98161328a565b92506143c7602085016139de565b91506143d5604085016139de565b90509250925092565b6020815260008251602080840152611b626040840182613f90565b6000806040838503121561440c57600080fd5b82356144178161328a565b91506020830135613302816133c5565b801515811461272257600080fd5b6000806040838503121561444857600080fd5b8235614453816133c5565b9150602083013561330281614427565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156144a3576144a3614479565b5060010190565b600181811c908216806144be57607f821691505b602082108114156144df57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526018908201527714185d5cd8589b194e881c185d5cd9590818da185b9b995b60421b604082015260600190565b600081518084526020808501808196508360051b8101915082860160005b85811015614011578284038952815160a063ffffffff825116865286820151818888015261456582880182613339565b9150506040808301518783038289015261457f8382613339565b925050506060808301518783038289015261459a8382613339565b60809485015160ff169890940197909752505098850198935090840190600101614535565b600081518084526020808501945080840160005b83811015613f8557815160ff16875295820195908201906001016145d3565b6001600160a01b03868116825263ffffffff861660208301528416604082015260a06060820181905260009061462a90830185614517565b828103608084015261463c81856145bf565b98975050505050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561401157828403895261467e84835161401e565b98850198935090840190600101614666565b600081518084526020808501808196508360051b8101915082860160005b858110156140115782840389528151805161ffff908116865286820151168686015260408082015160ff9081169187019190915260608083015163ffffffff908116918801919091526080808401519092169187019190915260a08083015182169087015260c0808301519091169086015260e0808201516001600160401b03169086015261010080820151610160828801819052919061475183890182613f90565b92505050610120808301518783038289015261476d8382613fc9565b9250505061014080830151925061478681880184613211565b5099860199945050908401906001016146ae565b600061016082518185526147b082860182614648565b915050602083015184820360208601526147ca82826145bf565b915050604083015184820360408601526147e48282614690565b915050606083015184820360608601526147fe8282614517565b9150506080830151848203608086015261481882826145bf565b91505060a083015184820360a08601526148328282613f90565b91505060c083015184820360c086015261484c8282613f90565b91505060e083015161486660e086018263ffffffff169052565b506101008381015163ffffffff16908501526101208084015160ff16908501526101408084015185830382870152611d2d8382613339565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009061243a9083018461479a565b63ffffffff83168152604060208201526000611b62604083018461479a565b6000828210156148ff576148ff614479565b500390565b6001600160a01b03939093168352602083019190915260ff16604082015260600190565b8051613268816133c5565b805161326881613248565b600082601f83011261494f57600080fd5b8151602061495f613543836134ff565b82815260059290921b8401810191818101908684111561497e57600080fd5b8286015b848110156135825780518352918301918301614982565b600082601f8301126149aa57600080fd5b815160206149ba613543836134ff565b82815260059290921b840181019181810190868411156149d957600080fd5b8286015b848110156135825780516149f081613248565b83529183019183016149dd565b600082601f830112614a0e57600080fd5b81516020614a1e613543836134ff565b82815260059290921b84018101918181019086841115614a3d57600080fd5b8286015b848110156135825780516001600160401b0380821115614a6057600080fd5b90880190601f196080838c0382011215614a7957600080fd5b614a81613440565b8784015183811115614a9257600080fd5b84016060818e0384011215614aa657600080fd5b614aae613468565b925088810151614abd816133c5565b8352604081810151614ace81613248565b848b0152606082015185811115614ae457600080fd5b614af28f8c8386010161493e565b8286015250838352614b05818701614928565b8a8401526060860151935084841115614b1d57600080fd5b614b2b8e8b86890101614999565b90830152506080840151915082821115614b4457600080fd5b614b528c898487010161493e565b60608201528652505050918301918301614a41565b600082601f830112614b7857600080fd5b81516020614b88613543836134ff565b82815260059290921b84018101918181019086841115614ba757600080fd5b8286015b848110156135825780516001600160401b03811115614bca5760008081fd5b8701603f81018913614bdc5760008081fd5b848101516040614bee6135438361375b565b8281528b82848601011115614c035760008081fd5b614c128389830184870161330d565b8652505050918301918301614bab565b60008060408385031215614c3557600080fd5b8251614c4081614427565b60208401519092506001600160401b0380821115614c5d57600080fd5b9084019060a08287031215614c7157600080fd5b614c7961348a565b825182811115614c8857600080fd5b614c94888286016149fd565b825250614ca360208401614928565b6020820152614cb460408401614933565b6040820152606083015182811115614ccb57600080fd5b614cd788828601614999565b606083015250608083015182811115614cef57600080fd5b614cfb88828601614b67565b6080830152508093505050509250929050565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b600060208284031215614d4257600080fd5b8151611fd981613248565b600060208284031215614d5f57600080fd5b81516001600160401b03811115614d7557600080fd5b611b6284828501614999565b600060208284031215614d9357600080fd5b8151611fd9816133c5565b600060208284031215614db057600080fd5b8151611fd98161328a565b600060208284031215614dcd57600080fd5b8151611fd981614427565b600060208284031215614dea57600080fd5b5051919050565b60008651614e03818460208b0161330d565b8083019050600b60fa1b8082528751614e23816001850160208c0161330d565b600192019182018190528651614e40816002850160208b0161330d565b600292019182018190528551614e5d816003850160208a0161330d565b60039201918201528351614e7881600484016020880161330d565b01600401979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614f0481601785016020880161330d565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614f3581602884016020880161330d565b01602801949350505050565b6000816000190483118215151615614f5b57614f5b614479565b500290565b60008219821115614f7357614f73614479565b500190565b600081614f8757614f87614479565b506000190190565b634e487b7160e01b600052603160045260246000fdfe2d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20636c757374657241726561202d2d2d2d2d20322d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20636c757374657241726561202d2d2d2d2d203191dcfee75f5a7067382c571405bede409bf393dd1c62158a1acdd6a776f6b8b22d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20636c757374657241726561202d2d2d2d2d20336e6f206175746820746f2075706461746547726f7570536c6f74546f6b656e48616e646c657220636c757374657249642c72756c65536c6f74496e6465782c6272616e63682c746f6b656e536c6f74496e6465782d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20636c757374657241726561202d2d2d2d2d20342d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20636c757374657241726561202d2d2d2d2d2036a26469706673582212204cdca172ba89163c552fb42d9183238469be02194b854e94c4354d6940aa739464736f6c63430008080033",
  "deployedBytecode": "0x60806040526004361061032c5760003560e01c80637339ad99116101b2578063c7d6bff1116100ed578063ee625d7c11610090578063ee625d7c14610b43578063ef65d9f214610b77578063f1a12e6614610b96578063f2881d1314610bb6578063f2fde38b14610bd6578063f598d06914610bf6578063fe3ee16914610c17578063fe8c4aa314610c3757600080fd5b8063c7d6bff114610a21578063c983351214610a4e578063c9d4623f14610a6e578063ca15c87314610a8f578063cbe5515914610aaf578063d3b7b3b714610acf578063d547741f14610b03578063dceacb0e14610b2357600080fd5b80639010d07c116101555780639010d07c1461094457806391d148541461096457806393b441dc14610984578063a217fddf146109a3578063a3f5a033146109b8578063b18c9b33146109d8578063ba141579146109ed578063c3e9022714610a0057600080fd5b80637339ad991461081d57806384fedbc11461083d57806386b9f1d81461086e57806387ad2d501461088e57806388d52ef7146108ae5780638a29e2de146108cf5780638da5cb5b146108ef5780638e9ddacb1461090d57600080fd5b806336568abe1161028257806355b51b9e1161022557806355b51b9e1461072857806357f5ff281461073b57806359c3f3e01461075b5780635ac86ab71461077b5780635e2ad7cf1461079b5780635ec0fd9c146107c85780635fc1bed0146107e8578063715018a61461080857600080fd5b806336568abe146106005780633ae08c65146106205780633c9e6a15146106695780633ce0364014610689578063496752b5146106a95780634f62bd0d146106bc57806353eb7e1b146106f357806354fd4d501461071457600080fd5b806301ffc9a71461037057806305957706146103a5578063061d30d3146103d8578063089fe6aa146103f95780630e830e491461041a5780631424e30c1461043c57806320dcce021461045b578063223f8f06146104a4578063248a9ca3146104c5578063280d7451146105035780632f2ff15d1461052257806331a158b31461054257806334c76b251461057657806335083f4d146105b35780633546933a146105e057600080fd5b3661036b57604080513381523460208201527fd6717f327e0cb88b4a97a7f67a453e9258252c34937ccbdd86de7cb840e7def3910160405180910390a1005b600080fd5b34801561037c57600080fd5b5061039061038b36600461321e565b610c56565b60405190151581526020015b60405180910390f35b3480156103b157600080fd5b50610130546001600160a01b03165b6040516001600160a01b03909116815260200161039c565b3480156103e457600080fd5b50610136546103c0906001600160a01b031681565b34801561040557600080fd5b50610131546103c0906001600160a01b031681565b34801561042657600080fd5b5061043a61043536600461326d565b610c81565b005b34801561044857600080fd5b50610132546001600160a01b03166103c0565b34801561046757600080fd5b5061048f6104763660046132a7565b61013a6020526000908152604090205463ffffffff1681565b60405163ffffffff909116815260200161039c565b3480156104b057600080fd5b50610134546103c0906001600160a01b031681565b3480156104d157600080fd5b506104f56104e03660046132c4565b600090815260c9602052604090206001015490565b60405190815260200161039c565b34801561050f57600080fd5b50610134546001600160a01b03166103c0565b34801561052e57600080fd5b5061043a61053d3660046132dd565b610cac565b34801561054e57600080fd5b5061048f61055d3660046132a7565b61013c6020526000908152604090205463ffffffff1681565b34801561058257600080fd5b5060408051808201909152600b81526a436c75737465724172656160a81b60208201525b60405161039c9190613365565b3480156105bf57600080fd5b506105d36105ce3660046132a7565b610cd6565b60405161039c9190613378565b3480156105ec57600080fd5b5061043a6105fb36600461326d565b610d92565b34801561060c57600080fd5b5061043a61061b3660046132dd565b610dbd565b34801561062c57600080fd5b5061065761063b3660046132a7565b63ffffffff166000908152610137602052604090205460ff1690565b60405160ff909116815260200161039c565b34801561067557600080fd5b5061043a6106843660046133df565b610e40565b34801561069557600080fd5b506105a66106a43660046132a7565b610ec9565b61043a6106b7366004613e5d565b610f64565b3480156106c857600080fd5b5061048f6106d73660046132a7565b63ffffffff908116600090815261013b60205260409020541690565b3480156106ff57600080fd5b50610132546103c0906001600160a01b031681565b34801561072057600080fd5b5060016104f5565b61043a610736366004613eac565b611208565b34801561074757600080fd5b5061043a61075636600461326d565b6115cc565b34801561076757600080fd5b5061043a61077636600461326d565b6115f7565b34801561078757600080fd5b50610390610796366004613ee0565b611622565b3480156107a757600080fd5b506107bb6107b6366004613efd565b61163a565b60405161039c919061414b565b3480156107d457600080fd5b5061043a6107e33660046133df565b611b6a565b3480156107f457600080fd5b5061043a61080336600461326d565b611ba7565b34801561081457600080fd5b5061043a611bd2565b34801561082957600080fd5b50610390610838366004614217565b611be6565b34801561084957600080fd5b506106576108583660046132a7565b6101376020526000908152604090205460ff1681565b34801561087a57600080fd5b506105a66108893660046132a7565b611d37565b34801561089a57600080fd5b5061043a6108a93660046133df565b611de1565b3480156108ba57600080fd5b5061012f546103c0906001600160a01b031681565b3480156108db57600080fd5b5061043a6108ea3660046142ce565b611e17565b3480156108fb57600080fd5b506033546001600160a01b03166103c0565b34801561091957600080fd5b5061048f6109283660046132a7565b63ffffffff908116600090815261013c60205260409020541690565b34801561095057600080fd5b506103c061095f366004614377565b611fc1565b34801561097057600080fd5b5061039061097f3660046132dd565b611fe0565b34801561099057600080fd5b50610135546001600160a01b03166103c0565b3480156109af57600080fd5b506104f5600081565b3480156109c457600080fd5b506105d36109d33660046132a7565b61200b565b3480156109e457600080fd5b506104f56120be565b61043a6109fb366004613eac565b6120cf565b348015610a0c57600080fd5b50610133546103c0906001600160a01b031681565b348015610a2d57600080fd5b50610a41610a3c366004614399565b6122d8565b60405161039c91906143de565b348015610a5a57600080fd5b506104f5610a693660046143f9565b612443565b348015610a7a57600080fd5b50610130546103c0906001600160a01b031681565b348015610a9b57600080fd5b506104f5610aaa3660046132c4565b61247b565b348015610abb57600080fd5b5061043a610aca36600461326d565b612492565b348015610adb57600080fd5b5061048f610aea3660046132a7565b6101396020526000908152604090205463ffffffff1681565b348015610b0f57600080fd5b5061043a610b1e3660046132dd565b6124bd565b348015610b2f57600080fd5b50610a41610b3e366004614399565b6124e2565b348015610b4f57600080fd5b5061048f610b5e3660046132a7565b61013b6020526000908152604090205463ffffffff1681565b348015610b8357600080fd5b50610136546001600160a01b03166103c0565b348015610ba257600080fd5b50610390610bb13660046133df565b612602565b348015610bc257600080fd5b5061043a610bd13660046143f9565b61261b565b348015610be257600080fd5b5061043a610bf136600461326d565b6126ac565b348015610c0257600080fd5b50610135546103c0906001600160a01b031681565b348015610c2357600080fd5b5061043a610c32366004614435565b612725565b348015610c4357600080fd5b50610133546001600160a01b03166103c0565b60006001600160e01b03198216635a05180f60e01b1480610c7b5750610c7b82612745565b92915050565b610c8961277a565b61013080546001600160a01b0319166001600160a01b0392909216919091179055565b600082815260c96020526040902060010154610cc7816127d4565b610cd183836127de565b505050565b60606000610ce5836001612443565b90506000610cf28261247b565b90506000816001600160401b03811115610d0e57610d0e61342a565b604051908082528060200260200182016040528015610d37578160200160208202803683370190505b50905060005b82811015610d8957610d4f8482611fc1565b828281518110610d6157610d61614463565b6001600160a01b0390921660209283029190910190910152610d828161448f565b9050610d3d565b50949350505050565b610d9a61277a565b61013480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0381163314610e325760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610e3c8282612800565b5050565b6001600160a01b0381163314610eab5760405162461bcd60e51b815260206004820152602a60248201527f436c7573746572203a2063616e206f6e6c792072656e6f756e636520726f6c6560448201526939903337b91039b2b63360b11b6064820152608401610e29565b6000610eb78484612443565b9050610ec38183612800565b50505050565b6101386020526000908152604090208054610ee3906144aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0f906144aa565b8015610f5c5780601f10610f3157610100808354040283529160200191610f5c565b820191906000526020600020905b815481529060010190602001808311610f3f57829003601f168201915b505050505081565b6003610f6f81611622565b15610f8c5760405162461bcd60e51b8152600401610e29906144e5565b60005a9050610fa5610f9f856002612443565b33611fe0565b6110045760405162461bcd60e51b815260206004820152602a60248201527f61646452756c65205f6d736753656e6465722829206d75737420636c7573746560448201526939103232b83637bcb2b960b11b6064820152608401610e29565b610134546001600160a01b0316634abbcd0b33606086015160808701516040516001600160e01b031960e086901b16815261104793928a926000926004016145f2565b600060405180830381600087803b15801561106157600080fd5b505af1158015611075573d6000803e3d6000fd5b5050610132546040516306237ce160e11b81526001600160a01b039091169250630c46f9c291506110ae9033908890889060040161489e565b600060405180830381600087803b1580156110c857600080fd5b505af11580156110dc573d6000803e3d6000fd5b50506101335460405163c13ae5bb60e01b81526001600160a01b03909116925063c13ae5bb915061111390879087906004016148ce565b600060405180830381600087803b15801561112d57600080fd5b505af1158015611141573d6000803e3d6000fd5b50506040805160008082526020820152815163ffffffff89169450600493503392600080516020615006833981519152928290030190a460005a61118590836148ed565b6101315460405163163ce46160e01b815291925073__$37d1e3923919c704bdb48c10208c7fa215$__9163163ce461916111d1916001600160a01b039091169085906004908101614904565b60006040518083038186803b1580156111e957600080fd5b505af41580156111fd573d6000803e3d6000fd5b505050505050505050565b600261121381611622565b156112305760405162461bcd60e51b8152600401610e29906144e5565b60005a905061124461012e80546001019055565b600061125061012e5490565b9050600284602001515110156112a85760405162461bcd60e51b815260206004820181905260248201527f636c75737465722072756c65536c6f74426f756e642e6c656e677468203e3d326044820152606401610e29565b61012084015163ffffffff8216600090815261013760205260408120805460ff191660ff909316929092179091555b8460c0015151811015611325576113156112f2836001612443565b8660c00151838151811061130857611308614463565b60200260200101516127de565b61131e8161448f565b90506112d7565b5061133a611334826002612443565b336127de565b61014084015163ffffffff8216600090815261013860209081526040909120825161136a939192909101906130ee565b5060e084015163ffffffff808316600090815261013b60209081526040808320805495851663ffffffff1996871617905561010089015161013c835281842080549186169187169190911790556101399091529020805442909216919092161790556113d4612822565b63ffffffff828116600090815261013a60205260409020805463ffffffff191692909116919091179055610134546001600160a01b0316634abbcd0b33606087015160808801516040516001600160e01b031960e086901b168152611441939287926000926004016145f2565b600060405180830381600087803b15801561145b57600080fd5b505af115801561146f573d6000803e3d6000fd5b5050610132546040516306237ce160e11b81526001600160a01b039091169250630c46f9c291506114a89033908590899060040161489e565b600060405180830381600087803b1580156114c257600080fd5b505af11580156114d6573d6000803e3d6000fd5b50506101335460405163c13ae5bb60e01b81526001600160a01b03909116925063c13ae5bb915061150d90849088906004016148ce565b600060405180830381600087803b15801561152757600080fd5b505af115801561153b573d6000803e3d6000fd5b50506040805160008082526020820152815163ffffffff86169450600393503392600080516020615006833981519152928290030190a460005a61157f90846148ed565b6101315460405163163ce46160e01b815291925073__$37d1e3923919c704bdb48c10208c7fa215$__9163163ce461916111d1916001600160a01b03909116908590600390600401614904565b6115d461277a565b61013180546001600160a01b0319166001600160a01b0392909216919091179055565b6115ff61277a565b61012f80546001600160a01b0319166001600160a01b0392909216919091179055565b60ff9081166000908152606560205260409020541690565b611642613172565b61164a6128ae565b63ffffffff85166000908152610137602052604090205460ff1661166e61012e5490565b8663ffffffff161180611682575060ff8116155b156116985761168f613172565b9150611b629050565b6116b7604051806060016040528060308152602001614fd66030913950565b6101325460405163161a012f60e11b815263ffffffff8816600482015261ffff8716602482015260ff8516604482015260009182916001600160a01b0390911690632c34025e9060640160006040518083038186803b15801561171957600080fd5b505afa15801561172d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117559190810190614c22565b91509150611778604051806060016040528060308152602001614fa66030913950565b600088888860405160200161178f93929190614d0e565b60405160208183030381529060405280519060200120905060006040518061012001604052808515158152602001848152602001856117cf576000611854565b6101335460405163206460d160e11b81526001600160a01b03909116906340c8c1a290611804908f908f908f90600401614d0e565b60206040518083038186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190614d30565b6001600160a01b031681526020018561187b57604080516000815260208101909152611904565b61013354604051630a79f57160e41b81526001600160a01b039091169063a79f5710906118b0908f908f908f90600401614d0e565b60006040518083038186803b1580156118c857600080fd5b505afa1580156118dc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119049190810190614d4d565b81526020018561191557600061199a565b61013254604051631f1d398160e01b81526001600160a01b0390911690631f1d39819061194a908f908f908f90600401614d0e565b60206040518083038186803b15801561196257600080fd5b505afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a9190614d81565b60ff168152602001856119ae576000611a33565b61013254604051630622b57760e21b81526001600160a01b039091169063188ad5dc906119e3908f908f908f90600401614d0e565b60206040518083038186803b1580156119fb57600080fd5b505afa158015611a0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a339190614d9e565b63ffffffff16815260200185611a4a576000611acf565b610132546040516376fe12d760e11b81526001600160a01b039091169063edfc25ae90611a7f908f908f908f90600401614d0e565b60206040518083038186803b158015611a9757600080fd5b505afa158015611aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acf9190614d9e565b63ffffffff16815260200185611ae6576000611b00565b63ffffffff808d16600090815261013b6020526040902054165b63ffffffff16815260200185611b17576000611b31565b63ffffffff808d16600090815261013c6020526040902054165b63ffffffff168152509050611b5b6040518060600160405280603081526020016150266030913950565b9450505050505b949350505050565b6000611b77846001612443565b9050611b838133611fe0565b15610ec3576000611b948585612443565b9050611ba081846127de565b5050505050565b611baf61277a565b61013380546001600160a01b0319166001600160a01b0392909216919091179055565b611bda61277a565b611be460006128c7565b565b610130546000906001600160a01b03163314611c73576000611c5360405180608001604052806054815260200161505660549139611c298963ffffffff16612919565b611c368961ffff16612919565b611c428960ff16612919565b611c4e8960ff16612919565b612924565b90611c715760405162461bcd60e51b8152600401610e299190613365565b505b6101325460408051637339ad9960e01b815263ffffffff8916600482015261ffff8816602482015260ff80881660448301528616606482015284516084820152602085015160a48201529084015160c48201526001600160a01b0390911690637339ad999060e401602060405180830381600087803b158015611cf557600080fd5b505af1158015611d09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2d9190614dbb565b9695505050505050565b63ffffffff8116600090815261013860205260409020805460609190611d5c906144aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611d88906144aa565b8015611dd55780601f10611daa57610100808354040283529160200191611dd5565b820191906000526020600020905b815481529060010190602001808311611db857829003601f168201915b50505050509050919050565b6000611dee846001612443565b9050611dfa8133611fe0565b15610ec3576000611e0b8585612443565b9050611ba08184612800565b600054610100900460ff1615808015611e375750600054600160ff909116105b80611e515750303b158015611e51575060005460ff166001145b611eb45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610e29565b6000805460ff191660011790558015611ed7576000805461ff0019166101001790555b611edf612959565b611ee7612980565b611eef612959565b61012f80546001600160a01b03199081166001600160a01b038c811691909117909255610130805482168b8416179055610131805482168a841617905561013280548216898416179055610133805482168884161790556101348054821687841617905561013580548216868416179055610136805490911691841691909117905580156111fd576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050565b600082815260fb60205260408120611fd990836129b0565b9392505050565b600091825260c9602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6060600061201a836002612443565b905060006120278261247b565b90506000816001600160401b038111156120435761204361342a565b60405190808252806020026020018201604052801561206c578160200160208202803683370190505b50905060005b82811015610d89576120848482611fc1565b82828151811061209657612096614463565b6001600160a01b03909216602092830291909101909101526120b78161448f565b9050612072565b60006120ca61012e5490565b905090565b60016120da81611622565b156120f75760405162461bcd60e51b8152600401610e29906144e5565b60005a905061210b61012e80546001019055565b600061211761012e5490565b61012085015163ffffffff8216600090815261013760205260408120805460ff191660ff909316929092179091559091505b8460c0015151811015612174576121646112f2836001612443565b61216d8161448f565b9050612149565b50612183611334826002612443565b61014084015163ffffffff821660009081526101386020908152604090912082516121b3939192909101906130ee565b5060e084015163ffffffff808316600090815261013b60209081526040808320805495851663ffffffff1996871617905561010089015161013c8352818420805491861691871691909117905561013990915290208054429092169190921617905561221d612822565b63ffffffff828116600081815261013a60205260409020805463ffffffff19169390921692909217905560013360408051600080825260208201526001600160a01b039290921691600080516020615006833981519152910160405180910390a460005a61228b90846148ed565b6101315460405163163ce46160e01b815291925073__$37d1e3923919c704bdb48c10208c7fa215$__9163163ce461916111d1916001600160a01b03909116908590600290600401614904565b6040805160208101909152606081526122ef6128ae565b61012e548463ffffffff16118061231d575063ffffffff84166000908152610137602052604090205460ff16155b15612339576040805160208101909152606081525b9050611fd9565b6123586040518060600160405280603081526020016150aa6030913950565b600084848460405160200161236f93929190614d0e565b60408051601f1981840301815282825280516020918201209083019182905261013354632485217560e21b90925292506000919081906001600160a01b031663921485d46123c28a8a8a60248701614d0e565b60006040518083038186803b1580156123da57600080fd5b505afa1580156123ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526124169190810190614d4d565b815250905061243a6040518060600160405280603081526020016150da6030913950565b95945050505050565b6040805163ffffffff9390931660208085019190915260ff929092168382015280518084038201815260609093019052815191012090565b600081815260fb60205260408120610c7b906129bc565b61249a61277a565b61013280546001600160a01b0319166001600160a01b0392909216919091179055565b600082815260c960205260409020600101546124d8816127d4565b610cd18383612800565b60408051602081019091526060815261012e548463ffffffff16118061251f575063ffffffff84166000908152610137602052604090205460ff16155b1561253857604080516020810190915260608152612332565b600084848460405160200161254f93929190614d0e565b60408051601f1981840301815282825280516020918201209083019182905261013354633f5a6e8760e11b90925292506000919081906001600160a01b0316637eb4dd0e6125a28a8a8a60248701614d0e565b60006040518083038186803b1580156125ba57600080fd5b505afa1580156125ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526125f69190810190614d4d565b90529695505050505050565b60008061260f8585612443565b905061243a8184611fe0565b61262782600133612602565b6126815760405162461bcd60e51b815260206004820152602560248201527f736574436c757374657253746174653a206d73672e73656e646572206e6f742060448201526430b236b4b760d91b6064820152608401610e29565b63ffffffff91909116600090815261013760205260409020805460ff191660ff909216919091179055565b6126b461277a565b6001600160a01b0381166127195760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e29565b612722816128c7565b50565b61272d61277a565b801561273c57610e3c826129c6565b610e3c82612a5b565b60006001600160e01b03198216637965db0b60e01b1480610c7b57506301ffc9a760e01b6001600160e01b0319831614610c7b565b6033546001600160a01b03163314611be45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e29565b6127228133612af3565b6127e88282612b4c565b600082815260fb60205260409020610cd19082612bd2565b61280a8282612be7565b600082815260fb60205260409020610cd19082612c4e565b60004661a4b18114156128a75760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561286957600080fd5b505afa15801561287d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128a19190614dd8565b91505090565b4391505090565b61012d546128c0576301312d0061012d555b5a61012d55565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6060610c7b82612c63565b6060858585858560405160200161293f959493929190614df1565b604051602081830303815290604052905095945050505050565b600054610100900460ff16611be45760405162461bcd60e51b8152600401610e2990614e87565b600054610100900460ff166129a75760405162461bcd60e51b8152600401610e2990614e87565b611be4336128c7565b6000611fd98383612cff565b6000610c7b825490565b806129d081611622565b156129ed5760405162461bcd60e51b8152600401610e29906144e5565b60ff82166000908152606560205260409020805460ff191660011790557f0116a706473db0e0938996f608b9894b96b1583d307f8c605ec7fccb6d7a8cdb82612a333390565b6040805160ff90931683526001600160a01b0390911660208301520160405180910390a15050565b80612a6581611622565b612ab15760405162461bcd60e51b815260206004820152601c60248201527f5061757361626c653a206e6f7420706175736564206368616e6e656c000000006044820152606401610e29565b60ff82166000908152606560205260409020805460ff191690557fe33b1e8c9a3225cc5a849e3f9c6d9c272be7915b24983c2a048dfe7c79390f418233612a33565b612afd8282611fe0565b610e3c57612b0a81612d29565b612b15836020612d3b565b604051602001612b26929190614ed2565b60408051601f198184030181529082905262461bcd60e51b8252610e2991600401613365565b612b568282611fe0565b610e3c57600082815260c9602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612b8e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000611fd9836001600160a01b038416612ed6565b612bf18282611fe0565b15610e3c57600082815260c9602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611fd9836001600160a01b038416612f25565b60606000612c7083613018565b60010190506000816001600160401b03811115612c8f57612c8f61342a565b6040519080825280601f01601f191660200182016040528015612cb9576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084612cf257612cf7565b612cc3565b509392505050565b6000826000018281548110612d1657612d16614463565b9060005260206000200154905092915050565b6060610c7b6001600160a01b03831660145b60606000612d4a836002614f41565b612d55906002614f60565b6001600160401b03811115612d6c57612d6c61342a565b6040519080825280601f01601f191660200182016040528015612d96576020820181803683370190505b509050600360fc1b81600081518110612db157612db1614463565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612de057612de0614463565b60200101906001600160f81b031916908160001a9053506000612e04846002614f41565b612e0f906001614f60565b90505b6001811115612e87576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612e4357612e43614463565b1a60f81b828281518110612e5957612e59614463565b60200101906001600160f81b031916908160001a90535060049490941c93612e8081614f78565b9050612e12565b508315611fd95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610e29565b6000818152600183016020526040812054612f1d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610c7b565b506000610c7b565b6000818152600183016020526040812054801561300e576000612f496001836148ed565b8554909150600090612f5d906001906148ed565b9050818114612fc2576000866000018281548110612f7d57612f7d614463565b9060005260206000200154905080876000018481548110612fa057612fa0614463565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612fd357612fd3614f8f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610c7b565b6000915050610c7b565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106130575772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310613081576904ee2d6d415b85acef8160201b830492506020015b662386f26fc10000831061309f57662386f26fc10000830492506010015b6305f5e10083106130b7576305f5e100830492506008015b61271083106130cb57612710830492506004015b606483106130dd576064830492506002015b600a8310610c7b5760010192915050565b8280546130fa906144aa565b90600052602060002090601f01602090048101928261311c5760008555613162565b82601f1061313557805160ff1916838001178555613162565b82800160010185558215613162579182015b82811115613162578251825591602001919060010190613147565b5061316e9291506131fc565b5090565b6040518061012001604052806000151581526020016131c56040518060a0016040528060608152602001600060ff16815260200160006001600160a01b0316815260200160608152602001606081525090565b815260006020820181905260606040830181905282018190526080820181905260a0820181905260c0820181905260e09091015290565b5b8082111561316e57600081556001016131fd565b6001600160a01b03169052565b60006020828403121561323057600080fd5b81356001600160e01b031981168114611fd957600080fd5b6001600160a01b038116811461272257600080fd5b803561326881613248565b919050565b60006020828403121561327f57600080fd5b8135611fd981613248565b63ffffffff8116811461272257600080fd5b80356132688161328a565b6000602082840312156132b957600080fd5b8135611fd98161328a565b6000602082840312156132d657600080fd5b5035919050565b600080604083850312156132f057600080fd5b82359150602083013561330281613248565b809150509250929050565b60005b83811015613328578181015183820152602001613310565b83811115610ec35750506000910152565b6000815180845261335181602086016020860161330d565b601f01601f19169290920160200192915050565b602081526000611fd96020830184613339565b6020808252825182820181905260009190848201906040850190845b818110156133b95783516001600160a01b031683529284019291840191600101613394565b50909695505050505050565b60ff8116811461272257600080fd5b8035613268816133c5565b6000806000606084860312156133f457600080fd5b83356133ff8161328a565b9250602084013561340f816133c5565b9150604084013561341f81613248565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156134625761346261342a565b60405290565b604051606081016001600160401b03811182821017156134625761346261342a565b60405160a081016001600160401b03811182821017156134625761346261342a565b60405161016081016001600160401b03811182821017156134625761346261342a565b604051601f8201601f191681016001600160401b03811182821017156134f7576134f761342a565b604052919050565b60006001600160401b038211156135185761351861342a565b5060051b60200190565b600082601f83011261353357600080fd5b81356020613548613543836134ff565b6134cf565b82815260059290921b8401810191818101908684111561356757600080fd5b8286015b84811015613582578035835291830191830161356b565b509695505050505050565b600082601f83011261359e57600080fd5b813560206135ae613543836134ff565b82815260059290921b840181019181810190868411156135cd57600080fd5b8286015b848110156135825780356135e481613248565b83529183019183016135d1565b600082601f83011261360257600080fd5b81356020613612613543836134ff565b82815260059290921b8401810191818101908684111561363157600080fd5b8286015b848110156135825780356001600160401b038082111561365457600080fd5b90880190601f196080838c038201121561366d57600080fd5b613675613440565b878401358381111561368657600080fd5b84016060818e038401121561369a57600080fd5b6136a2613468565b9250888101356136b1816133c5565b83526040818101356136c281613248565b848b01526060820135858111156136d857600080fd5b6136e68f8c83860101613522565b82860152508383526136f98187016133d4565b8a840152606086013593508484111561371157600080fd5b61371f8e8b8689010161358d565b9083015250608084013591508282111561373857600080fd5b6137468c8984870101613522565b60608201528652505050918301918301613635565b60006001600160401b038211156137745761377461342a565b50601f01601f191660200190565b60006137906135438461375b565b90508281528383830111156137a457600080fd5b828260208301376000602084830101529392505050565b600082601f8301126137cc57600080fd5b813560206137dc613543836134ff565b82815260059290921b840181019181810190868411156137fb57600080fd5b8286015b848110156135825780356001600160401b0381111561381e5760008081fd5b8701603f810189136138305760008081fd5b613841898683013560408401613782565b8452509183019183016137ff565b600082601f83011261386057600080fd5b81356020613870613543836134ff565b82815260059290921b8401810191818101908684111561388f57600080fd5b8286015b848110156135825780356001600160401b03808211156138b35760008081fd5b9088019060a0828b03601f19018113156138cd5760008081fd5b6138d561348a565b87840135838111156138e75760008081fd5b6138f58d8a838801016135f1565b82525060406139058186016133d4565b89830152606061391681870161325d565b828401526080915081860135858111156139305760008081fd5b61393e8f8c838a010161358d565b828501525050828501359250838311156139585760008081fd5b6139668d8a858801016137bb565b908201528652505050918301918301613893565b600082601f83011261398b57600080fd5b8135602061399b613543836134ff565b82815260059290921b840181019181810190868411156139ba57600080fd5b8286015b848110156135825780356139d1816133c5565b83529183019183016139be565b803561ffff8116811461326857600080fd5b80356001600160401b038116811461326857600080fd5b600082601f830112613a1857600080fd5b81356020613a28613543836134ff565b82815260059290921b84018101918181019086841115613a4757600080fd5b8286015b848110156135825780356001600160401b0380821115613a6b5760008081fd5b90880190610160828b03601f1901811315613a865760008081fd5b613a8e6134ac565b613a998885016139de565b81526040613aa88186016139de565b898301526060613ab98187016133d4565b8284015260809150613acc82870161329c565b9083015260a0613add8682016133d4565b8284015260c09150613af082870161329c565b9083015260e0613b0186820161329c565b828401526101009150613b158287016139f0565b908301526101208581013585811115613b2e5760008081fd5b613b3c8f8c838a010161358d565b838501525061014091508186013585811115613b585760008081fd5b613b668f8c838a01016137bb565b828501525050613b7783860161325d565b908201528652505050918301918301613a4b565b600082601f830112613b9c57600080fd5b611fd983833560208501613782565b600082601f830112613bbc57600080fd5b81356020613bcc613543836134ff565b82815260059290921b84018101918181019086841115613beb57600080fd5b8286015b848110156135825780356001600160401b0380821115613c0f5760008081fd5b9088019060a0828b03601f1901811315613c295760008081fd5b613c3161348a565b613c3c88850161329c565b815260408085013584811115613c525760008081fd5b613c608e8b83890101613b8b565b8a8401525060608086013585811115613c795760008081fd5b613c878f8c838a0101613b8b565b8385015250608091508186013585811115613ca25760008081fd5b613cb08f8c838a0101613b8b565b828501525050613cc18386016133d4565b908201528652505050918301918301613bef565b60006101608284031215613ce857600080fd5b613cf06134ac565b905081356001600160401b0380821115613d0957600080fd5b613d158583860161384f565b83526020840135915080821115613d2b57600080fd5b613d378583860161397a565b60208401526040840135915080821115613d5057600080fd5b613d5c85838601613a07565b60408401526060840135915080821115613d7557600080fd5b613d8185838601613bab565b60608401526080840135915080821115613d9a57600080fd5b613da68583860161397a565b608084015260a0840135915080821115613dbf57600080fd5b613dcb8583860161358d565b60a084015260c0840135915080821115613de457600080fd5b613df08583860161358d565b60c0840152613e0160e0850161329c565b60e08401526101009150613e1682850161329c565b828401526101209150613e2a8285016133d4565b8284015261014091508184013581811115613e4457600080fd5b613e5086828701613b8b565b8385015250505092915050565b60008060408385031215613e7057600080fd5b8235613e7b8161328a565b915060208301356001600160401b03811115613e9657600080fd5b613ea285828601613cd5565b9150509250929050565b600060208284031215613ebe57600080fd5b81356001600160401b03811115613ed457600080fd5b611b6284828501613cd5565b600060208284031215613ef257600080fd5b8135611fd9816133c5565b60008060008060808587031215613f1357600080fd5b8435613f1e8161328a565b9350613f2c602086016139de565b9250613f3a604086016139de565b91506060850135613f4a816133c5565b939692955090935050565b600081518084526020808501945080840160005b83811015613f8557815187529582019590820190600101613f69565b509495945050505050565b600081518084526020808501945080840160005b83811015613f855781516001600160a01b031687529582019590820190600101613fa4565b600081518084526020808501808196508360051b8101915082860160005b85811015614011578284038952613fff848351613339565b98850198935090840190600101613fe7565b5091979650505050505050565b600060a0808401835182865281815180845260c093508388019150838160051b8901016020808501945060005b838110156140f4578a830360bf19018552855180516080808652815160ff1690860152838101516001600160a01b03168a86015260409081015160608a870181905261409a60e0880183613f55565b9150858401516140ae8789018260ff169052565b5082840151878303848901526140c48382613f90565b9350508084015193508683038188015250506140e08183613f55565b97840197968401969450505060010161404b565b508089015160ff16908a01526040808901519650614114908a0187613211565b6060880151955088810360608a015261412d8187613f90565b955050505050506080830151848203608086015261243a8282613fc9565b6020815261415e60208201835115159052565b6000602083015161012080604085015261417c61014085018361401e565b915060408501516141906060860182613211565b506060850151848303601f190160808601526141ac8382613f90565b92505060808501516141c360a086018260ff169052565b5060a085015163ffffffff811660c08601525060c085015163ffffffff811660e08601525060e08501516101006142018187018363ffffffff169052565b9095015163ffffffff1693019290925250919050565b600080600080600085870360e081121561423057600080fd5b863561423b8161328a565b9550614249602088016139de565b94506040870135614259816133c5565b93506060870135614269816133c5565b92506060607f198201121561427d57600080fd5b50604051606081018181106001600160401b03821117156142a0576142a061342a565b80604052506080870135815260a0870135602082015260c08701356040820152809150509295509295909350565b600080600080600080600080610100898b0312156142eb57600080fd5b88356142f681613248565b9750602089013561430681613248565b9650604089013561431681613248565b9550606089013561432681613248565b9450608089013561433681613248565b935060a089013561434681613248565b925060c089013561435681613248565b915060e089013561436681613248565b809150509295985092959890939650565b6000806040838503121561438a57600080fd5b50508035926020909101359150565b6000806000606084860312156143ae57600080fd5b83356143b98161328a565b92506143c7602085016139de565b91506143d5604085016139de565b90509250925092565b6020815260008251602080840152611b626040840182613f90565b6000806040838503121561440c57600080fd5b82356144178161328a565b91506020830135613302816133c5565b801515811461272257600080fd5b6000806040838503121561444857600080fd5b8235614453816133c5565b9150602083013561330281614427565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156144a3576144a3614479565b5060010190565b600181811c908216806144be57607f821691505b602082108114156144df57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526018908201527714185d5cd8589b194e881c185d5cd9590818da185b9b995b60421b604082015260600190565b600081518084526020808501808196508360051b8101915082860160005b85811015614011578284038952815160a063ffffffff825116865286820151818888015261456582880182613339565b9150506040808301518783038289015261457f8382613339565b925050506060808301518783038289015261459a8382613339565b60809485015160ff169890940197909752505098850198935090840190600101614535565b600081518084526020808501945080840160005b83811015613f8557815160ff16875295820195908201906001016145d3565b6001600160a01b03868116825263ffffffff861660208301528416604082015260a06060820181905260009061462a90830185614517565b828103608084015261463c81856145bf565b98975050505050505050565b600081518084526020808501808196508360051b8101915082860160005b8581101561401157828403895261467e84835161401e565b98850198935090840190600101614666565b600081518084526020808501808196508360051b8101915082860160005b858110156140115782840389528151805161ffff908116865286820151168686015260408082015160ff9081169187019190915260608083015163ffffffff908116918801919091526080808401519092169187019190915260a08083015182169087015260c0808301519091169086015260e0808201516001600160401b03169086015261010080820151610160828801819052919061475183890182613f90565b92505050610120808301518783038289015261476d8382613fc9565b9250505061014080830151925061478681880184613211565b5099860199945050908401906001016146ae565b600061016082518185526147b082860182614648565b915050602083015184820360208601526147ca82826145bf565b915050604083015184820360408601526147e48282614690565b915050606083015184820360608601526147fe8282614517565b9150506080830151848203608086015261481882826145bf565b91505060a083015184820360a08601526148328282613f90565b91505060c083015184820360c086015261484c8282613f90565b91505060e083015161486660e086018263ffffffff169052565b506101008381015163ffffffff16908501526101208084015160ff16908501526101408084015185830382870152611d2d8382613339565b6001600160a01b038416815263ffffffff8316602082015260606040820181905260009061243a9083018461479a565b63ffffffff83168152604060208201526000611b62604083018461479a565b6000828210156148ff576148ff614479565b500390565b6001600160a01b03939093168352602083019190915260ff16604082015260600190565b8051613268816133c5565b805161326881613248565b600082601f83011261494f57600080fd5b8151602061495f613543836134ff565b82815260059290921b8401810191818101908684111561497e57600080fd5b8286015b848110156135825780518352918301918301614982565b600082601f8301126149aa57600080fd5b815160206149ba613543836134ff565b82815260059290921b840181019181810190868411156149d957600080fd5b8286015b848110156135825780516149f081613248565b83529183019183016149dd565b600082601f830112614a0e57600080fd5b81516020614a1e613543836134ff565b82815260059290921b84018101918181019086841115614a3d57600080fd5b8286015b848110156135825780516001600160401b0380821115614a6057600080fd5b90880190601f196080838c0382011215614a7957600080fd5b614a81613440565b8784015183811115614a9257600080fd5b84016060818e0384011215614aa657600080fd5b614aae613468565b925088810151614abd816133c5565b8352604081810151614ace81613248565b848b0152606082015185811115614ae457600080fd5b614af28f8c8386010161493e565b8286015250838352614b05818701614928565b8a8401526060860151935084841115614b1d57600080fd5b614b2b8e8b86890101614999565b90830152506080840151915082821115614b4457600080fd5b614b528c898487010161493e565b60608201528652505050918301918301614a41565b600082601f830112614b7857600080fd5b81516020614b88613543836134ff565b82815260059290921b84018101918181019086841115614ba757600080fd5b8286015b848110156135825780516001600160401b03811115614bca5760008081fd5b8701603f81018913614bdc5760008081fd5b848101516040614bee6135438361375b565b8281528b82848601011115614c035760008081fd5b614c128389830184870161330d565b8652505050918301918301614bab565b60008060408385031215614c3557600080fd5b8251614c4081614427565b60208401519092506001600160401b0380821115614c5d57600080fd5b9084019060a08287031215614c7157600080fd5b614c7961348a565b825182811115614c8857600080fd5b614c94888286016149fd565b825250614ca360208401614928565b6020820152614cb460408401614933565b6040820152606083015182811115614ccb57600080fd5b614cd788828601614999565b606083015250608083015182811115614cef57600080fd5b614cfb88828601614b67565b6080830152508093505050509250929050565b63ffffffff93909316835261ffff918216602084015216604082015260600190565b600060208284031215614d4257600080fd5b8151611fd981613248565b600060208284031215614d5f57600080fd5b81516001600160401b03811115614d7557600080fd5b611b6284828501614999565b600060208284031215614d9357600080fd5b8151611fd9816133c5565b600060208284031215614db057600080fd5b8151611fd98161328a565b600060208284031215614dcd57600080fd5b8151611fd981614427565b600060208284031215614dea57600080fd5b5051919050565b60008651614e03818460208b0161330d565b8083019050600b60fa1b8082528751614e23816001850160208c0161330d565b600192019182018190528651614e40816002850160208b0161330d565b600292019182018190528551614e5d816003850160208a0161330d565b60039201918201528351614e7881600484016020880161330d565b01600401979650505050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b815260008351614f0481601785016020880161330d565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351614f3581602884016020880161330d565b01602801949350505050565b6000816000190483118215151615614f5b57614f5b614479565b500290565b60008219821115614f7357614f73614479565b500190565b600081614f8757614f87614479565b506000190190565b634e487b7160e01b600052603160045260246000fdfe2d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20636c757374657241726561202d2d2d2d2d20322d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20636c757374657241726561202d2d2d2d2d203191dcfee75f5a7067382c571405bede409bf393dd1c62158a1acdd6a776f6b8b22d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20636c757374657241726561202d2d2d2d2d20336e6f206175746820746f2075706461746547726f7570536c6f74546f6b656e48616e646c657220636c757374657249642c72756c65536c6f74496e6465782c6272616e63682c746f6b656e536c6f74496e6465782d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20636c757374657241726561202d2d2d2d2d20342d2d2d2d2d2d3d3d3d3d3d3d2d2d2d2d2d2d20676173202d2d2d2d2d20636c757374657241726561202d2d2d2d2d2036a26469706673582212204cdca172ba89163c552fb42d9183238469be02194b854e94c4354d6940aa739464736f6c63430008080033",
  "linkReferences": {
    "contracts/V3/ClusterRuleAreaProcess.sol": {
      "ClusterRuleAreaProcess": [
        {
          "length": 20,
          "start": 4539
        },
        {
          "length": 20,
          "start": 5557
        },
        {
          "length": 20,
          "start": 8897
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/V3/ClusterRuleAreaProcess.sol": {
      "ClusterRuleAreaProcess": [
        {
          "length": 20,
          "start": 4507
        },
        {
          "length": 20,
          "start": 5525
        },
        {
          "length": 20,
          "start": 8865
        }
      ]
    }
  }
}
